├── .eslintrc.js ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── phpunit.yml ├── .gitignore ├── .l10nignore ├── .scrutinizer.yml ├── .tx └── config ├── 3rdparty └── getid3 │ ├── getid3.lib.php │ ├── getid3.php │ ├── module.audio-video.asf.php │ ├── module.audio-video.bink.php │ ├── module.audio-video.flv.php │ ├── module.audio-video.ivf.php │ ├── module.audio-video.matroska.php │ ├── module.audio-video.mpeg.php │ ├── module.audio-video.nsv.php │ ├── module.audio-video.quicktime.php │ ├── module.audio-video.real.php │ ├── module.audio-video.riff.php │ ├── module.audio-video.swf.php │ ├── module.audio-video.ts.php │ ├── module.audio-video.wtv.php │ ├── module.audio.aa.php │ ├── module.audio.aac.php │ ├── module.audio.ac3.php │ ├── module.audio.amr.php │ ├── module.audio.au.php │ ├── module.audio.avr.php │ ├── module.audio.bonk.php │ ├── module.audio.dsdiff.php │ ├── module.audio.dsf.php │ ├── module.audio.dss.php │ ├── module.audio.dts.php │ ├── module.audio.flac.php │ ├── module.audio.la.php │ ├── module.audio.lpac.php │ ├── module.audio.midi.php │ ├── module.audio.mod.php │ ├── module.audio.monkey.php │ ├── module.audio.mp3.php │ ├── module.audio.mpc.php │ ├── module.audio.ogg.php │ ├── module.audio.optimfrog.php │ ├── module.audio.rkau.php │ ├── module.audio.shorten.php │ ├── module.audio.tak.php │ ├── module.audio.tta.php │ ├── module.audio.voc.php │ ├── module.audio.vqf.php │ ├── module.audio.wavpack.php │ ├── module.tag.apetag.php │ ├── module.tag.id3v1.php │ ├── module.tag.id3v2.php │ ├── module.tag.lyrics3.php │ ├── module.tag.nikon-nctg.php │ └── module.tag.xmp.php ├── AUTHORS.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── _config.yml ├── appinfo ├── info.xml ├── register_command.php └── routes.php ├── composer.json ├── css ├── 3rdparty │ └── fontello │ │ ├── LICENSE.txt │ │ ├── css │ │ ├── animation.css │ │ ├── fontello-codes.css │ │ ├── fontello-embedded.css │ │ └── fontello.css │ │ └── font │ │ ├── fontello.eot │ │ ├── fontello.svg │ │ ├── fontello.ttf │ │ └── fontello.woff ├── bar-ui.css ├── bar-ui.scss ├── dashboard.css ├── dashboard.scss ├── style.css └── style.scss ├── img ├── albumplay.svg ├── albums.svg ├── app-dark.svg ├── app.svg ├── favicon-touch.png ├── favicon.ico ├── favicon.png ├── list2.svg ├── next.svg ├── pause.svg ├── play.svg ├── previous.svg ├── repeat-single.svg ├── repeat.svg ├── shuffle.svg ├── spinner.svg ├── toggle-filelist.svg ├── toggle-pictures.svg ├── volume-down.svg ├── volume-up.svg └── volume.svg ├── js ├── app.js ├── dashboard.js ├── player.js ├── settings │ ├── personal.js │ └── settings.js ├── sharing │ └── sharing.js ├── sidebar.js └── viewer │ ├── search.js │ └── viewer.js ├── l10n ├── .gitkeep ├── af.js ├── af.json ├── an.js ├── an.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── be.js ├── be.json ├── bg.js ├── bg.json ├── bn_BD.js ├── bn_BD.json ├── br.js ├── br.json ├── bs.js ├── bs.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── cy_GB.js ├── cy_GB.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── eo.js ├── eo.json ├── es.js ├── es.json ├── es_419.js ├── es_419.json ├── es_AR.js ├── es_AR.json ├── es_CL.js ├── es_CL.json ├── es_CO.js ├── es_CO.json ├── es_CR.js ├── es_CR.json ├── es_DO.js ├── es_DO.json ├── es_EC.js ├── es_EC.json ├── es_GT.js ├── es_GT.json ├── es_HN.js ├── es_HN.json ├── es_MX.js ├── es_MX.json ├── es_NI.js ├── es_NI.json ├── es_PA.js ├── es_PA.json ├── es_PE.js ├── es_PE.json ├── es_PR.js ├── es_PR.json ├── es_PY.js ├── es_PY.json ├── es_SV.js ├── es_SV.json ├── es_UY.js ├── es_UY.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gd.js ├── gd.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── hy.js ├── hy.json ├── ia.js ├── ia.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ka.js ├── ka.json ├── ka_GE.js ├── ka_GE.json ├── kab.js ├── kab.json ├── km.js ├── km.json ├── kn.js ├── kn.json ├── ko.js ├── ko.json ├── lb.js ├── lb.json ├── lo.js ├── lo.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── mn.js ├── mn.json ├── ms_MY.js ├── ms_MY.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── nn_NO.js ├── nn_NO.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── ps.js ├── ps.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── si.js ├── si.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sr@latin.js ├── sr@latin.json ├── sv.js ├── sv.json ├── ta.js ├── ta.json ├── th.js ├── th.json ├── tk.js ├── tk.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── ur_PK.js ├── ur_PK.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── AppInfo │ └── Application.php ├── Categories │ └── Tag.php ├── Command │ ├── Reset.php │ └── Scan.php ├── Controller │ ├── CategoryController.php │ ├── CoverController.php │ ├── DbController.php │ ├── MusicController.php │ ├── PageController.php │ ├── PlaylistController.php │ ├── ScannerController.php │ ├── SettingController.php │ ├── SidebarController.php │ └── WhatsNewController.php ├── Dashboard │ └── Widget.php ├── Event │ └── LoadAdditionalScriptsEvent.php ├── Hooks │ ├── FileHooks.php │ └── UserHooks.php ├── Http │ ├── AudioStream.php │ └── ImageResponse.php ├── Listener │ └── LoadAdditionalScripts.php ├── Migration │ ├── Version2102Date20200712193332.php │ ├── Version2102Date20200712203332.php │ ├── Version2102Date20200712213332.php │ ├── Version3002Date20210019213332.php │ └── Version3203Date20211226193332.php ├── Search │ └── Provider.php ├── Service │ └── TagManager.php ├── Settings │ ├── AdminSection.php │ ├── Personal.php │ └── PersonalSection.php └── WhatsNew │ ├── WhatsNewCheck.php │ ├── WhatsNewMapper.php │ └── WhatsNewResult.php ├── screenshots ├── audioplayer_actions.png ├── audioplayer_icon.png ├── audioplayer_lists.png ├── audioplayer_logo.png ├── audioplayer_main.png ├── audioplayer_main_small.png ├── audioplayer_screen.png └── audioplayer_share.png └── templates ├── index.php ├── part.audio.php ├── part.container.php ├── part.import.php ├── part.navigation.php ├── part.sidebar.php ├── part.sm2-bar.php ├── part.sonos-bar.php └── settings ├── part.settings.php └── personal.php /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'env': { 3 | 'browser': true, 4 | 'es6': true, 5 | 'jquery': true 6 | }, 7 | 'extends': 'eslint:recommended', 8 | 'globals': { 9 | '_': 'readonly', // from js/dist/main.js 10 | 'OC': 'readonly', 11 | 'OCA': 'readonly', 12 | 'OCdialogs': 'readonly', // from /js/core/merged-template-prepend.js 13 | 't': 'readonly', 14 | 'MediaMetadata': 'readonly', 15 | 'generateUrl': 'readonly', 16 | 'Sonos': 'readonly', 17 | 'requestToken': 'readonly', 18 | 'playSonos': 'readonly' 19 | }, 20 | 'parserOptions': { 21 | 'ecmaFeatures': 'impliedStrict', 22 | 'ecmaVersion': 6, 23 | 'sourceType': 'script' 24 | }, 25 | 'rules': { 26 | 'brace-style': [ 27 | 'error', 28 | '1tbs', 29 | { 'allowSingleLine': true } 30 | ], 31 | 'curly': [ 32 | 'error', 33 | 'all' 34 | ], 35 | 'indent': [ 36 | 'error', 37 | 4 38 | ], 39 | 'linebreak-style': [ 40 | 'error', 41 | 'unix' 42 | ], 43 | 'no-console': [ 44 | 'error', 45 | { allow: [ 'warn', 'error' ] } 46 | ], 47 | 'quotes': [ 48 | 'error', 49 | 'single' 50 | ], 51 | 'semi': [ 52 | 'error', 53 | 'always' 54 | ], 55 | } 56 | }; 57 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: Rello 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 4 | ### Actual behavior 5 | 6 | 7 | ### Steps to reproduce the behavior 8 | 1. 9 | 2. 10 | 3. 11 | 12 | ### Additional information (optional) 13 | 14 | 15 | **Nextcloud/ownCloud version:** (see `/status.php`) 16 | 17 | **Audio Player version:** (see `/settings/apps`) 18 | 19 | ### Logs 20 | #### Nextcloud/ownCloud log 21 |
22 | Nextcloud/ownCloud log (`/data/[nextcloud|owncloud].log`) 23 | 24 | ```json 25 | Insert your Nextcloud/ownCloud log here 26 | ``` 27 | 28 |
29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG] " 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Versions:** 27 | - Nextcloud: [e.g. 20.0.1] 28 | - Audioplayer [e.g. 2.1.0] 29 | 30 | **Nextcloud log** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[Feature Request]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Various 2 | .*.sw[po] 3 | *.bak 4 | *.BAK 5 | *~ 6 | *.orig 7 | *.class 8 | .cvsignore 9 | Thumbs.db 10 | .thumbs 11 | *.py[co] 12 | _darcs/* 13 | CVS/* 14 | .svn/* 15 | RCS/* 16 | *.backup* 17 | *.Lock 18 | .idea 19 | docs/* 20 | 21 | # Mac OS 22 | .DS_Store 23 | __MACOSX/* 24 | ._* 25 | .smbdelete* -------------------------------------------------------------------------------- /.l10nignore: -------------------------------------------------------------------------------- 1 | 3rdParty/ 2 | screenshots/ 3 | appinfo/ -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | build: 2 | nodes: 3 | analysis: 4 | project_setup: 5 | override: true 6 | tests: 7 | override: [php-scrutinizer-run] 8 | environment: 9 | php: 7.4.0 10 | 11 | filter: 12 | excluded_paths: 13 | - '3rdparty/*' 14 | 15 | imports: 16 | - javascript 17 | - php 18 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi 4 | 5 | [o:nextcloud:p:nextcloud:r:audioplayer] 6 | file_filter = translationfiles//audioplayer.po 7 | source_file = translationfiles/templates/audioplayer.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /3rdparty/getid3/module.audio-video.bink.php: -------------------------------------------------------------------------------- 1 | // 4 | // available at https://github.com/JamesHeinrich/getID3 // 5 | // or https://www.getid3.org // 6 | // or http://getid3.sourceforge.net // 7 | // see readme.txt for more details // 8 | ///////////////////////////////////////////////////////////////// 9 | // // 10 | // module.audio.bink.php // 11 | // module for analyzing Bink or Smacker audio-video files // 12 | // dependencies: NONE // 13 | // /// 14 | ///////////////////////////////////////////////////////////////// 15 | 16 | if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers 17 | exit; 18 | } 19 | 20 | class getid3_bink extends getid3_handler 21 | { 22 | /** 23 | * @return bool 24 | */ 25 | public function Analyze() { 26 | $info = &$this->getid3->info; 27 | 28 | $this->error('Bink / Smacker files not properly processed by this version of getID3() ['.$this->getid3->version().']'); 29 | 30 | $this->fseek($info['avdataoffset']); 31 | $fileTypeID = $this->fread(3); 32 | switch ($fileTypeID) { 33 | case 'BIK': 34 | return $this->ParseBink(); 35 | 36 | case 'SMK': 37 | return $this->ParseSmacker(); 38 | 39 | default: 40 | $this->error('Expecting "BIK" or "SMK" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($fileTypeID).'"'); 41 | return false; 42 | } 43 | } 44 | 45 | /** 46 | * @return bool 47 | */ 48 | public function ParseBink() { 49 | $info = &$this->getid3->info; 50 | $info['fileformat'] = 'bink'; 51 | $info['video']['dataformat'] = 'bink'; 52 | 53 | $fileData = 'BIK'.$this->fread(13); 54 | 55 | $info['bink']['data_size'] = getid3_lib::LittleEndian2Int(substr($fileData, 4, 4)); 56 | $info['bink']['frame_count'] = getid3_lib::LittleEndian2Int(substr($fileData, 8, 2)); 57 | 58 | if (($info['avdataend'] - $info['avdataoffset']) != ($info['bink']['data_size'] + 8)) { 59 | $this->error('Probably truncated file: expecting '.$info['bink']['data_size'].' bytes, found '.($info['avdataend'] - $info['avdataoffset'])); 60 | } 61 | 62 | return true; 63 | } 64 | 65 | /** 66 | * @return bool 67 | */ 68 | public function ParseSmacker() { 69 | $info = &$this->getid3->info; 70 | $info['fileformat'] = 'smacker'; 71 | $info['video']['dataformat'] = 'smacker'; 72 | 73 | return true; 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /3rdparty/getid3/module.audio-video.wtv.php: -------------------------------------------------------------------------------- 1 | // 4 | // available at https://github.com/JamesHeinrich/getID3 // 5 | // or https://www.getid3.org // 6 | // or http://getid3.sourceforge.net // 7 | // see readme.txt for more details // 8 | ///////////////////////////////////////////////////////////////// 9 | // // 10 | // module.audio.wtv.php // 11 | // module for analyzing WTV (Windows Recorded TV Show) // 12 | // audio-video files // 13 | // dependencies: NONE // 14 | // /// 15 | ///////////////////////////////////////////////////////////////// 16 | 17 | if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers 18 | exit; 19 | } 20 | 21 | class getid3_wtv extends getid3_handler 22 | { 23 | /** 24 | * @return bool 25 | */ 26 | public function Analyze() { 27 | $info = &$this->getid3->info; 28 | 29 | $info['fileformat'] = 'wtv'; 30 | $info['video']['dataformat'] = 'wtv'; 31 | 32 | $this->error('WTV (Windows Recorded TV Show) files not properly processed by this version of getID3() ['.$this->getid3->version().']'); 33 | 34 | return true; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /3rdparty/getid3/module.audio.aa.php: -------------------------------------------------------------------------------- 1 | // 5 | // available at https://github.com/JamesHeinrich/getID3 // 6 | // or https://www.getid3.org // 7 | // or http://getid3.sourceforge.net // 8 | // see readme.txt for more details // 9 | ///////////////////////////////////////////////////////////////// 10 | // // 11 | // module.audio.aa.php // 12 | // module for analyzing Audible Audiobook files // 13 | // dependencies: NONE // 14 | // /// 15 | ///////////////////////////////////////////////////////////////// 16 | 17 | if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers 18 | exit; 19 | } 20 | 21 | class getid3_aa extends getid3_handler 22 | { 23 | /** 24 | * @return bool 25 | */ 26 | public function Analyze() { 27 | $info = &$this->getid3->info; 28 | 29 | $this->fseek($info['avdataoffset']); 30 | $AAheader = $this->fread(8); 31 | 32 | $magic = "\x57\x90\x75\x36"; 33 | if (substr($AAheader, 4, 4) != $magic) { 34 | $this->error('Expecting "'.getid3_lib::PrintHexBytes($magic).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes(substr($AAheader, 4, 4)).'"'); 35 | return false; 36 | } 37 | 38 | // shortcut 39 | $info['aa'] = array(); 40 | $thisfile_aa = &$info['aa']; 41 | 42 | $info['fileformat'] = 'aa'; 43 | $info['audio']['dataformat'] = 'aa'; 44 | $this->error('Audible Audiobook (.aa) parsing not enabled in this version of getID3() ['.$this->getid3->version().']'); 45 | return false; 46 | $info['audio']['bitrate_mode'] = 'cbr'; // is it? 47 | $thisfile_aa['encoding'] = 'ISO-8859-1'; 48 | 49 | $thisfile_aa['filesize'] = getid3_lib::BigEndian2Int(substr($AAheader, 0, 4)); 50 | if ($thisfile_aa['filesize'] > ($info['avdataend'] - $info['avdataoffset'])) { 51 | $this->warning('Possible truncated file - expecting "'.$thisfile_aa['filesize'].'" bytes of data, only found '.($info['avdataend'] - $info['avdataoffset']).' bytes"'); 52 | } 53 | 54 | $info['audio']['bits_per_sample'] = 16; // is it? 55 | $info['audio']['sample_rate'] = $thisfile_aa['sample_rate']; 56 | $info['audio']['channels'] = $thisfile_aa['channels']; 57 | 58 | //$info['playtime_seconds'] = 0; 59 | //$info['audio']['bitrate'] = 0; 60 | 61 | return true; 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | # Authors 2 | 3 | * [Marcel Scherello](https://github.com/rello) (project leader) 4 | 5 | ## Contributors 6 | 7 | * [r4sas](https://github.com/r4sas) 8 | * [Martin Matous](https://github.com/mmatous) -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Audio Player 2 | 3 | ## JS 4 | In addition to the eslint rules any submitted code must be compatible with iOS 9.3.5 (Safari 9). 5 | Said browser has full ES5 support and limited ES6 support. Most notably: 6 | - ES6 classes are [allowed](https://caniuse.com/#feat=es6-class) 7 | - Template literals are [allowed](https://caniuse.com/#feat=template-literals) 8 | - `let` keyword is [disallowed](https://caniuse.com/#feat=let) 9 | - `const` keyword is [disallowed](https://caniuse.com/#feat=const) 10 | - ES6 modules (`import`, `export`) are [disallowed](https://caniuse.com/#feat=es6-module) 11 | - arrow functions (`(args) => {body}`) are [disallowed](https://caniuse.com/#feat=arrow-functions) 12 | - vanilla JS as far as possible; $ajax from jQuery still required due to AUTH-Header from NC -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Jekyll configuration 2 | repository: rello/audioplayer 3 | theme: jekyll-theme-cayman 4 | timezone: Europe/Berlin 5 | name: "Audio Player" 6 | title: "Audio Player" 7 | description: "Audio Player for Nextcloud and ownCloud" 8 | url: "https://rello.github.io/audioplayer" 9 | author: "Marcel Scherello" 10 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | audioplayer 4 | Audio Player 5 | play / stream / organize 6 | 19 | 3.4.1 20 | agpl 21 | Marcel Scherello 22 | audioplayer 23 | 24 | 25 | 26 | 27 | https://github.com/rello/audioplayer/wiki#user-documentation 28 | https://github.com/rello/audioplayer/wiki#admin-documentation 29 | 30 | multimedia 31 | https://rello.github.io/audioplayer 32 | https://help.nextcloud.com/c/apps/audioplayer 33 | https://github.com/rello/audioplayer/issues 34 | https://github.com/rello/audioplayer.git 35 | https://raw.githubusercontent.com/rello/audioplayer/master/screenshots/audioplayer_logo.png 36 | https://raw.githubusercontent.com/rello/audioplayer/master/screenshots/audioplayer_screen.png 37 | 38 | 39 | 40 | 41 | OCA\audioplayer\Settings\AdminSection 42 | OCA\audioplayer\Settings\Personal 43 | OCA\audioplayer\Settings\PersonalSection 44 | 45 | 46 | 47 | audioplayer 48 | Audio Player 49 | audioplayer.page.index 50 | app.svg 51 | 6 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /appinfo/register_command.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\AppInfo; 13 | 14 | $app = new Application(); 15 | $c = $app->getContainer(); 16 | $userManager = $c->getServer()->getUserManager(); 17 | 18 | $application->add(new \OCA\audioplayer\Command\Scan( 19 | $userManager, 20 | $c->query(\OCA\audioplayer\Controller\ScannerController::class) 21 | )); 22 | 23 | $application->add(new \OCA\audioplayer\Command\Reset( 24 | $userManager, 25 | $c->query(\OCA\audioplayer\Controller\DbController::class) 26 | )); 27 | 28 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | 9 | * @author Sebastian Doell 10 | * @copyright 2016-2021 Marcel Scherello 11 | * @copyright 2015 Sebastian Doell 12 | */ 13 | 14 | namespace OCA\audioplayer\AppInfo; 15 | 16 | return [ 17 | 'routes' => [ 18 | ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], 19 | ['name' => 'playlist#addTrackToPlaylist', 'url' => '/addtracktoplaylist', 'verb' => 'POST'], 20 | ['name' => 'playlist#addPlaylist', 'url' => '/addplaylist', 'verb' => 'POST'], 21 | ['name' => 'playlist#updatePlaylist', 'url' => '/updateplaylist', 'verb' => 'POST'], 22 | ['name' => 'playlist#sortPlaylist', 'url' => '/sortplaylist', 'verb' => 'POST'], 23 | ['name' => 'playlist#removePlaylist', 'url' => '/removeplaylist', 'verb' => 'POST'], 24 | ['name' => 'playlist#removeTrackFromPlaylist', 'url' => '/removetrackfromplaylist', 'verb' => 'POST'], 25 | ['name' => 'scanner#getImportTpl', 'url' => '/getimporttpl', 'verb' => 'GET'], 26 | ['name' => 'scanner#scanForAudios', 'url' => '/scanforaudiofiles', 'verb' => 'GET'], 27 | ['name' => 'scanner#checkNewTracks', 'url' => '/checknewtracks', 'verb' => 'POST'], 28 | ['name' => 'music#getAudioStream', 'url' => '/getaudiostream', 'verb' => 'GET'], 29 | ['name' => 'music#getPublicAudioStream', 'url' => '/getpublicaudiostream', 'verb' => 'GET'], 30 | ['name' => 'db#resetMediaLibrary', 'url' => '/resetmedialibrary', 'verb' => 'GET'], 31 | ['name' => 'music#getPublicAudioInfo', 'url' => '/getpublicaudioinfo', 'verb' => 'GET'], 32 | ['name' => 'cover#getCover', 'url' => '/getcover/{album}', 'verb' => 'GET'], 33 | 34 | ['name' => 'setting#setValue', 'url' => '/setvalue', 'verb' => 'GET'], 35 | ['name' => 'setting#getValue', 'url' => '/getvalue', 'verb' => 'GET'], 36 | ['name' => 'setting#userPath', 'url' => '/userpath', 'verb' => 'POST'], 37 | ['name' => 'setting#setFavorite', 'url' => '/setfavorite', 'verb' => 'GET'], 38 | ['name' => 'setting#setStatistics', 'url' => '/setstatistics', 'verb' => 'GET'], 39 | ['name' => 'setting#admin', 'url' => '/admin', 'verb' => 'POST'], 40 | 41 | ['name' => 'category#getCategoryItems', 'url' => '/getcategoryitems', 'verb' => 'GET'], 42 | ['name' => 'category#getCategoryItemCovers', 'url' => '/getcategoryitemcovers', 'verb' => 'GET'], 43 | ['name' => 'category#getTracks', 'url' => '/gettracks', 'verb' => 'GET'], 44 | ['name' => 'sidebar#getAudioInfo', 'url' => '/getaudioinfo', 'verb' => 'GET'], 45 | ['name' => 'sidebar#getPlaylists', 'url' => '/getplaylists', 'verb' => 'POST'], 46 | 47 | // whatsnew 48 | ['name' => 'whatsNew#get', 'url' => '/whatsnew', 'verb' => 'GET'], 49 | ['name' => 'whatsNew#dismiss', 'url' => '/whatsnew', 'verb' => 'POST'], 50 | ] 51 | ]; -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "php": ">=8.0.0", 4 | "ext-curl": "*", 5 | "ext-json": "*" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /css/3rdparty/fontello/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font license info 2 | 3 | 4 | ## Font Awesome 5 | 6 | Copyright (C) 2012 by Dave Gandy 7 | 8 | Author: Dave Gandy 9 | License: SIL () 10 | Homepage: http://fortawesome.github.com/Font-Awesome/ 11 | 12 | 13 | ## Iconic 14 | 15 | Copyright (C) 2012 by P.J. Onori 16 | 17 | Author: P.J. Onori 18 | License: SIL (http://scripts.sil.org/OFL) 19 | Homepage: http://somerandomdude.com/work/iconic/ 20 | 21 | 22 | ## Elusive 23 | 24 | Copyright (C) 2013 by Aristeides Stathopoulos 25 | 26 | Author: Aristeides Stathopoulos 27 | License: SIL (http://scripts.sil.org/OFL) 28 | Homepage: http://aristeides.com/ 29 | 30 | 31 | -------------------------------------------------------------------------------- /css/3rdparty/fontello/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .ioc-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /css/3rdparty/fontello/css/fontello-codes.css: -------------------------------------------------------------------------------- 1 | 2 | .icon-volume-off:before { content: '\e800'; } /* '' */ 3 | .icon-volume-up:before { content: '\e801'; } /* '' */ 4 | .icon-play:before { content: '\e802'; } /* '' */ 5 | .icon-pause:before { content: '\e803'; } /* '' */ 6 | .icon-stop:before { content: '\e804'; } /* '' */ 7 | .icon-close:before { content: '\e805'; } /* '' */ 8 | .icon-refresh:before { content: '\e806'; } /* '' */ 9 | .icon-to-end:before { content: '\e807'; } /* '' */ 10 | .icon-to-start:before { content: '\e808'; } /* '' */ 11 | .icon-spinner:before { content: '\e809'; } /* '' */ 12 | .icon-sort:before { content: '\e80a'; } /* '' */ 13 | .icon-delete:before { content: '\e80b'; } /* '' */ -------------------------------------------------------------------------------- /css/3rdparty/fontello/css/fontello.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'fontello'; 3 | src: url('../font/fontello.eot?6942954'); 4 | src: url('../font/fontello.eot?6942954#iefix') format('embedded-opentype'), 5 | url('../font/fontello.woff?6942954') format('woff'), 6 | url('../font/fontello.ttf?6942954') format('truetype'), 7 | url('../font/fontello.svg?6942954#fontello') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ 12 | /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ 13 | /* 14 | @media screen and (-webkit-min-device-pixel-ratio:0) { 15 | @font-face { 16 | font-family: 'fontello'; 17 | src: url('../font/fontello.svg?6942954#fontello') format('svg'); 18 | } 19 | } 20 | */ 21 | 22 | [class^="ioc-"]:before, [class*=" ioc-"]:before { 23 | font-family: "fontello"; 24 | font-style: normal; 25 | font-weight: normal; 26 | speak: none; 27 | 28 | display: inline-block; 29 | text-decoration: inherit; 30 | width: 1em; 31 | margin:0; 32 | text-align: center; 33 | /* opacity: .8; */ 34 | 35 | /* For safety - reset parent styles, that can break glyph codes*/ 36 | font-variant: normal; 37 | text-transform: none; 38 | 39 | /* fix buttons height, for twitter bootstrap */ 40 | line-height: 1em; 41 | 42 | /* Animation center compensation - margins should be symmetric */ 43 | /* remove if not needed */ 44 | 45 | 46 | /* you can be more comfortable with increased icons size */ 47 | /* font-size: 120%; */ 48 | 49 | /* Font smoothing. That was taken from TWBS */ 50 | -webkit-font-smoothing: antialiased; 51 | -moz-osx-font-smoothing: grayscale; 52 | 53 | /* Uncomment for 3D effect */ 54 | /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ 55 | } 56 | 57 | .ioc { 58 | display: inline-block; 59 | font-size: 14px; 60 | 61 | -webkit-font-smoothing: antialiased; 62 | -moz-osx-font-smoothing: grayscale; 63 | transform: translate(0, 0); 64 | } 65 | 66 | 67 | .ioc-volume-off:before { content: '\e800'; } /* '' */ 68 | .ioc-volume-up:before { content: '\e801'; } /* '' */ 69 | .ioc-play:before { content: '\e802'; } /* '' */ 70 | .ioc-pause:before { content: '\e803'; } /* '' */ 71 | .ioc-stop:before { content: '\e804'; } /* '' */ 72 | .ioc-close:before { content: '\e805'; } /* '' */ 73 | .ioc-refresh:before { content: '\e806'; } /* '' */ 74 | .ioc-to-end:before { content: '\e807'; } /* '' */ 75 | .ioc-to-start:before { content: '\e808'; } /* '' */ 76 | .ioc-spinner:before { content: '\e809'; } /* '' */ 77 | .ioc-sort:before { content: '\e80a'; } /* '' */ 78 | .ioc-delete:before { content: '\e80b'; } /* '' */ -------------------------------------------------------------------------------- /css/3rdparty/fontello/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/css/3rdparty/fontello/font/fontello.eot -------------------------------------------------------------------------------- /css/3rdparty/fontello/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/css/3rdparty/fontello/font/fontello.ttf -------------------------------------------------------------------------------- /css/3rdparty/fontello/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/css/3rdparty/fontello/font/fontello.woff -------------------------------------------------------------------------------- /css/dashboard.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Audio Player 3 | * 4 | * This file is licensed under the Affero General Public License version 3 or 5 | * later. See the LICENSE.md file. 6 | * 7 | * @author Marcel Scherello 8 | * @copyright 2021 Marcel Scherello 9 | */ 10 | 11 | .icon-audioplayer { 12 | background-image: url(../img/app-dark.svg); 13 | filter: var(--background-invert-if-dark); 14 | } 15 | 16 | body.dark .icon-audioplayer, 17 | body.theme--dark .icon-audioplayer { 18 | background-image: url(../img/app.svg); 19 | filter: var(--background-invert-if-dark); 20 | } 21 | 22 | .panel--content .APplayerButton { 23 | width: 40px; 24 | height: 40px; 25 | position: relative; 26 | display: inline-block; 27 | } 28 | 29 | .panel--content .APplayerBar { 30 | width: 130px; 31 | margin: auto; 32 | } 33 | 34 | .panel--content .APcategoryBar, 35 | .panel--content .APcoverBar, 36 | .panel--content .APitemBar, 37 | .panel--content .APtitleBar { 38 | margin: auto; 39 | width: 180px; 40 | margin-top: 10px; 41 | } 42 | 43 | .panel--content .APtitleBar { 44 | white-space: nowrap; 45 | text-overflow: ellipsis; 46 | overflow: hidden; 47 | } 48 | 49 | .panel--content .APcoverBar .APcover { 50 | width: 180px; 51 | height: 180px; 52 | text-align: center; 53 | font-size: 60px; 54 | line-height: 150px; 55 | } 56 | 57 | .panel--content .APbutton { 58 | background-size: 80%; 59 | background-position: center center; 60 | position: absolute; 61 | top: 0; 62 | left: 0; 63 | width: 100%; 64 | height: 100%; 65 | opacity: 0.4; 66 | } 67 | 68 | .panel--content .APbutton.APprevious { 69 | background-image: url(../img/previous.svg); 70 | filter: var(--background-invert-if-dark); 71 | } 72 | 73 | .panel--content .APbutton.APnext { 74 | background-image: url(../img/next.svg); 75 | filter: var(--background-invert-if-dark); 76 | } 77 | 78 | .panel--content .APbutton.APplay-pause { 79 | background-image: url(../img/play.svg); 80 | filter: var(--background-invert-if-dark); 81 | } 82 | 83 | .panel--content .APbutton.APplay-pause.playing { 84 | background-image: url(../img/pause.svg); 85 | filter: var(--background-invert-if-dark); 86 | } 87 | 88 | .panel--content .APbutton.APprevious, 89 | .panel--content .APbutton.APplay-pause, 90 | .panel--content .APbutton.APprevious, 91 | .panel--content .APbutton.APnext { 92 | background-size: 80%; 93 | background-position: center center; 94 | opacity: 0.5; 95 | } 96 | 97 | .panel--content .APbutton.APprevious:hover, 98 | .panel--content .APbutton.APplay-pause:hover, 99 | .panel--content .APbutton.APprevious:hover, 100 | .panel--content .APbutton.APnext:hover { 101 | opacity: 1; 102 | } -------------------------------------------------------------------------------- /css/dashboard.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Audio Player 3 | * 4 | * This file is licensed under the Affero General Public License version 3 or 5 | * later. See the LICENSE.md file. 6 | * 7 | * @author Marcel Scherello 8 | * @copyright 2021 Marcel Scherello 9 | */ 10 | 11 | .icon-audioplayer { 12 | @include icon-color('app-dark', 'audioplayer', $color-black, 1); 13 | } 14 | 15 | body.dark .icon-audioplayer, 16 | body.theme--dark .icon-audioplayer { 17 | @include icon-color('app', 'audioplayer', $color-black, 1); 18 | } 19 | 20 | .panel--content .APplayerButton { 21 | width: 40px; 22 | height: 40px; 23 | position: relative; 24 | display: inline-block; 25 | } 26 | 27 | .panel--content .APplayerBar { 28 | width: 130px; 29 | margin: auto; 30 | } 31 | 32 | .panel--content .APcategoryBar, 33 | .panel--content .APcoverBar, 34 | .panel--content .APitemBar, 35 | .panel--content .APtitleBar { 36 | margin: auto; 37 | width: 180px; 38 | margin-top: 10px; 39 | } 40 | 41 | .panel--content .APtitleBar { 42 | white-space: nowrap; 43 | text-overflow: ellipsis; 44 | overflow: hidden; 45 | } 46 | 47 | .panel--content .APcoverBar .APcover { 48 | width: 180px; 49 | height: 180px; 50 | text-align: center; 51 | font-size: 60px; 52 | line-height: 150px; 53 | } 54 | 55 | .panel--content .APbutton { 56 | background-size: 80%; 57 | background-position: center center; 58 | position: absolute; 59 | top: 0; 60 | left: 0; 61 | width: 100%; 62 | height: 100%; 63 | opacity: 0.4; 64 | } 65 | 66 | .panel--content .APbutton.APprevious { 67 | @include icon-color('previous', 'audioplayer', $color-black, 1); 68 | } 69 | 70 | .panel--content .APbutton.APnext { 71 | @include icon-color('next', 'audioplayer', $color-black, 1); 72 | } 73 | 74 | .panel--content .APbutton.APplay-pause { 75 | @include icon-color('play', 'audioplayer', $color-black, 1); 76 | } 77 | 78 | .panel--content .APbutton.APplay-pause.playing { 79 | @include icon-color('pause', 'audioplayer', $color-black, 1); 80 | } 81 | 82 | .panel--content .APbutton.APprevious, 83 | .panel--content .APbutton.APplay-pause, 84 | .panel--content .APbutton.APprevious, 85 | .panel--content .APbutton.APnext { 86 | background-size: 80%; 87 | background-position: center center; 88 | opacity: 0.5; 89 | } 90 | 91 | .panel--content .APbutton.APprevious:hover, 92 | .panel--content .APbutton.APplay-pause:hover, 93 | .panel--content .APbutton.APprevious:hover, 94 | .panel--content .APbutton.APnext:hover { 95 | opacity: 1; 96 | } 97 | 98 | 99 | -------------------------------------------------------------------------------- /img/albumplay.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /img/albums.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /img/app-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 23 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /img/app.svg: -------------------------------------------------------------------------------- 1 | 2 | image/svg+xml 23 | 26 | 29 | 30 | -------------------------------------------------------------------------------- /img/favicon-touch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/img/favicon-touch.png -------------------------------------------------------------------------------- /img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/img/favicon.ico -------------------------------------------------------------------------------- /img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/img/favicon.png -------------------------------------------------------------------------------- /img/list2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /img/next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /img/pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /img/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /img/previous.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /img/repeat-single.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /img/repeat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /img/shuffle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /img/spinner.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /img/toggle-filelist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /img/toggle-pictures.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /img/volume-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /img/volume-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /img/volume.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /js/settings/personal.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Audio Player 3 | * 4 | * This file is licensed under the Affero General Public License version 3 or 5 | * later. See the LICENSE.md file. 6 | * 7 | * @author Marcel Scherello 8 | * @copyright 2016-2021 Marcel Scherello 9 | */ 10 | 11 | 'use strict'; 12 | 13 | document.addEventListener('DOMContentLoaded', function () { 14 | $('#cyrillic_user').on('click', function () { 15 | var user_value; 16 | if ($('#cyrillic_user').prop('checked')) { 17 | user_value = 'checked'; 18 | } else { 19 | user_value = ''; 20 | } 21 | $.ajax({ 22 | type: 'GET', 23 | url: OC.generateUrl('apps/audioplayer/setvalue'), 24 | data: { 25 | 'type': 'cyrillic', 26 | 'value': user_value 27 | }, 28 | success: function () { 29 | OCP.Toast.success(t('audioplayer', 'Saved')); 30 | } 31 | }); 32 | }); 33 | 34 | /* 35 | * Collection path 36 | */ 37 | var $path = $('#audio-path'); 38 | $path.on('click', function () { 39 | OC.dialogs.filepicker( 40 | t('audioplayer', 'Select a single folder with audio files'), 41 | function (path) { 42 | if ($path.val() !== path) { 43 | $path.val(path); 44 | $.post(OC.generateUrl('apps/audioplayer/userpath'), {value: path}, function (data) { 45 | if (!data.success) { 46 | OCP.Toast.error(t('audioplayer', 'Invalid path!')); 47 | } else { 48 | OCP.Toast.success(t('audioplayer', 'Saved')); 49 | } 50 | }); 51 | } 52 | }, 53 | false, 54 | 'httpd/unix-directory', 55 | true 56 | ); 57 | }); 58 | 59 | var supported_types = ''; 60 | var nsupported_types = ''; 61 | var mimeTypes = ['audio/mpeg', 'audio/mp4', 'audio/ogg', 'audio/wav', 'audio/flac', 'audio/x-aiff', 'audio/aac']; 62 | const audio = document.createElement('audio'); 63 | 64 | mimeTypes.forEach((element) => { 65 | if (audio.canPlayType(element)) { 66 | supported_types = supported_types + element + ', '; 67 | } else { 68 | nsupported_types = nsupported_types + element + ', '; 69 | } 70 | }); 71 | 72 | $('#browser_yes').html(supported_types); 73 | $('#browser_no').html(nsupported_types); 74 | }); 75 | -------------------------------------------------------------------------------- /js/viewer/search.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | (function() { 4 | /** 5 | * Construct a new FileActions instance 6 | * @constructs Files 7 | */ 8 | var Audiplayer = function() { 9 | this.initialize(); 10 | }; 11 | /** 12 | * @memberof OCA.Search 13 | */ 14 | Audiplayer.prototype = { 15 | initialize: function() { 16 | OC.Plugins.register('OCA.Search.Core', this); 17 | }, 18 | attach: function(search) { 19 | search.setRenderer('audioplayer', this.renderResult); 20 | }, 21 | renderResult: function($row, item) { 22 | $row.find('td.icon') 23 | .css('background-image', 'url(' + OC.imagePath('audioplayer', 'app-dark') + ')') 24 | .css('opacity', '.4'); 25 | return $row; 26 | } 27 | }; 28 | OCA.Search.Audiplayer = Audiplayer; 29 | OCA.Search.audiplayer = new Audiplayer(); 30 | })(); -------------------------------------------------------------------------------- /js/viewer/viewer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Audio Player 3 | * 4 | * This file is licensed under the Affero General Public License version 3 or 5 | * later. See the LICENSE.md file. 6 | * 7 | * @author Marcel Scherello 8 | * @author Sebastian Doell 9 | * @copyright 2016-2021 Marcel Scherello 10 | * @copyright 2015 Sebastian Doell 11 | */ 12 | 'use strict'; 13 | 14 | var audioPlayer = { 15 | mime: null, 16 | file: null, 17 | location: null, 18 | player: null, 19 | dir: null 20 | }; 21 | 22 | function playFile(file, data) { 23 | file = encodeURIComponent(file); 24 | audioPlayer.file = file; 25 | audioPlayer.dir = data.dir; 26 | var token = ($('#sharingToken').val() !== undefined) ? $('#sharingToken').val() : ''; 27 | var dirLoad = data.dir.substr(1); 28 | if (dirLoad !== '') { 29 | dirLoad = dirLoad + '/'; 30 | } 31 | if (token !== '') { 32 | audioPlayer.location = OC.generateUrl('apps/audioplayer/getpublicaudiostream?token={token}&file={file}', { 33 | 'token': token, 34 | 'file': dirLoad + file 35 | }, {escape: false}); 36 | } else { 37 | audioPlayer.location = OC.generateUrl('apps/audioplayer/getaudiostream?file={file}', {'file': dirLoad + file}, {escape: true}); 38 | } 39 | audioPlayer.mime = data.$file.attr('data-mime'); 40 | data.$file.find('.thumbnail').html(''); 41 | 42 | if (audioPlayer.player === null) { 43 | audioPlayer.player = document.createElement('audio'); 44 | audioPlayer.player.setAttribute('src', audioPlayer.location); 45 | audioPlayer.player.load(); 46 | audioPlayer.player.play(); 47 | } else { 48 | audioPlayer.player.pause(); 49 | $('#filestable').find('.thumbnail i.ioc-volume-up').hide(); 50 | audioPlayer.player = null; 51 | } 52 | } 53 | 54 | function registerFileActions() { 55 | var mimeTypes = ['audio/mpeg', 'audio/mp4', 'audio/m4b', 'audio/ogg', 'audio/wav', 'audio/flac', 'audio/x-aiff', 'audio/aac']; 56 | var icon_url = OC.imagePath('core', 'actions/sound'); 57 | const audio = document.createElement('audio'); 58 | 59 | mimeTypes.forEach((element) => { 60 | if (audio.canPlayType(element)) { 61 | OCA.Files.fileActions.registerAction({ 62 | name: 'audio', 63 | displayName: 'Play', 64 | mime: element, 65 | permissions: OC.PERMISSION_READ, 66 | icon: icon_url, 67 | actionHandler: playFile 68 | }); 69 | OCA.Files.fileActions.setDefault(element, 'audio'); 70 | } 71 | }); 72 | } 73 | 74 | document.addEventListener('DOMContentLoaded', function () { 75 | if (typeof OCA !== 'undefined' && typeof OCA.Files !== 'undefined' && typeof OCA.Files.fileActions !== 'undefined' && $('#header').hasClass('share-file') === false) { 76 | registerFileActions(); 77 | } 78 | return true; 79 | }); -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Help" : "Hulp", 5 | "Folders" : "Vouers", 6 | "Tags" : "Etikette", 7 | "Saved" : "Bewaar", 8 | "Title" : "Titel", 9 | "Favorited" : "As gunsteling ", 10 | "Favorite" : "Gunsteling", 11 | "Remove" : "Verwyder", 12 | "Favorites" : "Gunstelinge", 13 | "Unknown" : "Onbekend", 14 | "URL" : "Bronadres", 15 | "Cancel" : "Kanselleer", 16 | "Close" : "Sluit", 17 | "Settings" : "Instellings" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Help" : "Hulp", 3 | "Folders" : "Vouers", 4 | "Tags" : "Etikette", 5 | "Saved" : "Bewaar", 6 | "Title" : "Titel", 7 | "Favorited" : "As gunsteling ", 8 | "Favorite" : "Gunsteling", 9 | "Remove" : "Verwyder", 10 | "Favorites" : "Gunstelinge", 11 | "Unknown" : "Onbekend", 12 | "URL" : "Bronadres", 13 | "Cancel" : "Kanselleer", 14 | "Close" : "Sluit", 15 | "Settings" : "Instellings" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/an.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Help" : "Aduya", 5 | "Tags" : "Etiquetas", 6 | "Favorited" : "Favoritos", 7 | "Favorite" : "Favorito", 8 | "Favorites" : "Favoritos", 9 | "Cancel" : "Cancelar", 10 | "Close" : "Zarrar", 11 | "Settings" : "Configuración" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/an.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Help" : "Aduya", 3 | "Tags" : "Etiquetas", 4 | "Favorited" : "Favoritos", 5 | "Favorite" : "Favorito", 6 | "Favorites" : "Favoritos", 7 | "Cancel" : "Cancelar", 8 | "Close" : "Zarrar", 9 | "Settings" : "Configuración" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Options" : "Opciones", 5 | "Audio Player" : "Reproductor d'audiu", 6 | "Help" : "Ayuda", 7 | "New in" : "Novedá en", 8 | "View changelog" : "Ver el rexistru de cambeos", 9 | "No playlist selected!" : "¡Nun se seleicionó nenguna llista de reproducción!", 10 | "Delete playlist" : "Desaniciar la llista de reproducción", 11 | "Playlist successfully deleted!" : "¡La llista de reproducción desanicióse correutamente!", 12 | "Sort playlist" : "Ordenar la llista de reproducción", 13 | "Rename playlist" : "Renomar la llista de reproducción", 14 | "Previous track" : "Pista anterior", 15 | "Play/Pause" : "Reproducir/posar", 16 | "Next track" : "Pista siguiente", 17 | "Selection" : "Seleición", 18 | "Playlists" : "Llistes de reproducción", 19 | "Albums" : "Álbumes", 20 | "Album Artists" : "Artistes del álbum", 21 | "Artists" : "Artistes", 22 | "Folders" : "Carpetes", 23 | "Genres" : "Xéneros", 24 | "Titles" : "Títulos", 25 | "Tags" : "Etiquetes", 26 | "Years" : "Años", 27 | "No data" : "Nun hai nengún datu", 28 | "Playback error" : "Error de reproducción", 29 | "Saved" : "Guardóse", 30 | "Invalid path!" : "¡El camín ye inválidu!", 31 | "Title" : "Tñitulu", 32 | "Subtitle" : "Sotítulu", 33 | "Artist" : "Artista", 34 | "Album Artist" : "Artista del álbum", 35 | "Album" : "Álbum", 36 | "Genre" : "Xéneru", 37 | "Year" : "Añu", 38 | "Disc" : "Discu", 39 | "Track" : "Pista", 40 | "Length" : "Llargura", 41 | "MIME type" : "Tipu MIME", 42 | "ISRC" : "ISRC", 43 | "Copyright" : "Copyright", 44 | "Add-ons" : "Complementos", 45 | "Metadata" : "Metadatos", 46 | "Reading data" : "Lleendo los datos", 47 | "Favorited" : "Metióse en Favoritos", 48 | "Favorite" : "Meter en Favoritos", 49 | "Remove" : "Quitar", 50 | "SONOS playback" : "Reproducción SONOS", 51 | "All Titles" : "Tolos títulos", 52 | "Favorites" : "Favoritos", 53 | "Recently Added" : "Amestóse de recién", 54 | "Recently Played" : "Reprodúxose de recién", 55 | "Most Played" : "Lo más reproducío", 56 | "50 Random Tracks" : "50 pistes aleatories", 57 | "URL" : "URL", 58 | "Scanning finished!" : "¡La busca finó!", 59 | "Albums found:" : "Álbumes atopaos:", 60 | "Errors:" : "Errores:", 61 | "Volume" : "Volume", 62 | "Cancel" : "Encaboxar", 63 | "Close" : "Zarrar", 64 | "Settings" : "Configuración", 65 | "Advanced Settings" : "Configuración avanzada", 66 | "Do you like this app?" : "¿Préstate esta aplicación?", 67 | "More information …" : "Más información…", 68 | "Cyrillic support" : "Compatibilidá con carátueres cirílicos", 69 | "Activate this setting if cyrillic characters are not recognized correctly. This makes the indexing slower!" : "Activa esta opción si nun se reconocen correutamente los caráuteres cirílicos. ¡Esta opción pue facer que la indización vaiga despacio!" 70 | }, 71 | "nplurals=2; plural=(n != 1);"); 72 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Options" : "Opciones", 3 | "Audio Player" : "Reproductor d'audiu", 4 | "Help" : "Ayuda", 5 | "New in" : "Novedá en", 6 | "View changelog" : "Ver el rexistru de cambeos", 7 | "No playlist selected!" : "¡Nun se seleicionó nenguna llista de reproducción!", 8 | "Delete playlist" : "Desaniciar la llista de reproducción", 9 | "Playlist successfully deleted!" : "¡La llista de reproducción desanicióse correutamente!", 10 | "Sort playlist" : "Ordenar la llista de reproducción", 11 | "Rename playlist" : "Renomar la llista de reproducción", 12 | "Previous track" : "Pista anterior", 13 | "Play/Pause" : "Reproducir/posar", 14 | "Next track" : "Pista siguiente", 15 | "Selection" : "Seleición", 16 | "Playlists" : "Llistes de reproducción", 17 | "Albums" : "Álbumes", 18 | "Album Artists" : "Artistes del álbum", 19 | "Artists" : "Artistes", 20 | "Folders" : "Carpetes", 21 | "Genres" : "Xéneros", 22 | "Titles" : "Títulos", 23 | "Tags" : "Etiquetes", 24 | "Years" : "Años", 25 | "No data" : "Nun hai nengún datu", 26 | "Playback error" : "Error de reproducción", 27 | "Saved" : "Guardóse", 28 | "Invalid path!" : "¡El camín ye inválidu!", 29 | "Title" : "Tñitulu", 30 | "Subtitle" : "Sotítulu", 31 | "Artist" : "Artista", 32 | "Album Artist" : "Artista del álbum", 33 | "Album" : "Álbum", 34 | "Genre" : "Xéneru", 35 | "Year" : "Añu", 36 | "Disc" : "Discu", 37 | "Track" : "Pista", 38 | "Length" : "Llargura", 39 | "MIME type" : "Tipu MIME", 40 | "ISRC" : "ISRC", 41 | "Copyright" : "Copyright", 42 | "Add-ons" : "Complementos", 43 | "Metadata" : "Metadatos", 44 | "Reading data" : "Lleendo los datos", 45 | "Favorited" : "Metióse en Favoritos", 46 | "Favorite" : "Meter en Favoritos", 47 | "Remove" : "Quitar", 48 | "SONOS playback" : "Reproducción SONOS", 49 | "All Titles" : "Tolos títulos", 50 | "Favorites" : "Favoritos", 51 | "Recently Added" : "Amestóse de recién", 52 | "Recently Played" : "Reprodúxose de recién", 53 | "Most Played" : "Lo más reproducío", 54 | "50 Random Tracks" : "50 pistes aleatories", 55 | "URL" : "URL", 56 | "Scanning finished!" : "¡La busca finó!", 57 | "Albums found:" : "Álbumes atopaos:", 58 | "Errors:" : "Errores:", 59 | "Volume" : "Volume", 60 | "Cancel" : "Encaboxar", 61 | "Close" : "Zarrar", 62 | "Settings" : "Configuración", 63 | "Advanced Settings" : "Configuración avanzada", 64 | "Do you like this app?" : "¿Préstate esta aplicación?", 65 | "More information …" : "Más información…", 66 | "Cyrillic support" : "Compatibilidá con carátueres cirílicos", 67 | "Activate this setting if cyrillic characters are not recognized correctly. This makes the indexing slower!" : "Activa esta opción si nun se reconocen correutamente los caráuteres cirílicos. ¡Esta opción pue facer que la indización vaiga despacio!" 68 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 69 | } -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Kömək", 6 | "Tags" : "Işarələr", 7 | "Saved" : "Saxlanıldı", 8 | "Title" : "Başlıq", 9 | "Favorited" : "İstəkləndi", 10 | "Favorite" : "İstəkli", 11 | "Remove" : "Sil", 12 | "Favorites" : "Sevimlilər", 13 | "URL" : "URL", 14 | "Cancel" : "Dayandır", 15 | "Close" : "Bağla", 16 | "Settings" : "Quraşdırmalar" 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Kömək", 4 | "Tags" : "Işarələr", 5 | "Saved" : "Saxlanıldı", 6 | "Title" : "Başlıq", 7 | "Favorited" : "İstəkləndi", 8 | "Favorite" : "İstəkli", 9 | "Remove" : "Sil", 10 | "Favorites" : "Sevimlilər", 11 | "URL" : "URL", 12 | "Cancel" : "Dayandır", 13 | "Close" : "Bağla", 14 | "Settings" : "Quraşdırmalar" 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/be.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Help", 6 | "Title" : "Title", 7 | "Favorites" : "Favorites", 8 | "Unknown" : "невядомы", 9 | "URL" : "Url", 10 | "Cancel" : "Cancel", 11 | "Settings" : "Налады" 12 | }, 13 | "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); 14 | -------------------------------------------------------------------------------- /l10n/be.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Help", 4 | "Title" : "Title", 5 | "Favorites" : "Favorites", 6 | "Unknown" : "невядомы", 7 | "URL" : "Url", 8 | "Cancel" : "Cancel", 9 | "Settings" : "Налады" 10 | },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" 11 | } -------------------------------------------------------------------------------- /l10n/bn_BD.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "সহায়িকা", 6 | "Tags" : "ট্যাগ", 7 | "Saved" : "সংরক্ষণ করা হলো", 8 | "Title" : "শিরোনাম", 9 | "Favorite" : "প্রিয়জন", 10 | "Remove" : "অপসারণ", 11 | "Favorites" : "প্রিয়জন", 12 | "Unknown" : "অজানা", 13 | "URL" : "URL", 14 | "Cancel" : "বাতির", 15 | "Close" : "বন্ধ", 16 | "Settings" : "সেটিংস" 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/bn_BD.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "সহায়িকা", 4 | "Tags" : "ট্যাগ", 5 | "Saved" : "সংরক্ষণ করা হলো", 6 | "Title" : "শিরোনাম", 7 | "Favorite" : "প্রিয়জন", 8 | "Remove" : "অপসারণ", 9 | "Favorites" : "প্রিয়জন", 10 | "Unknown" : "অজানা", 11 | "URL" : "URL", 12 | "Cancel" : "বাতির", 13 | "Close" : "বন্ধ", 14 | "Settings" : "সেটিংস" 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/br.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Choazet", 5 | "Help" : "Skoazell", 6 | "New in" : "Nevez e-bazh", 7 | "View changelog" : "Sellet al levr kemmoù", 8 | "Tags" : "Klavioù", 9 | "Years" : "Bloaz", 10 | "Saved" : "Enrollet", 11 | "Title" : "Titl", 12 | "Copyright" : "Copyright", 13 | "Favorited" : "Lakaet evel pennroll", 14 | "Favorite" : "Pennrollañ", 15 | "Remove" : "Lemel", 16 | "Favorites" : "Pennrolloù", 17 | "Unknown" : "Dianv", 18 | "URL" : "URL", 19 | "Cancel" : "Nullañ", 20 | "Close" : "Seriñ", 21 | "Settings" : "Arventennoù", 22 | "Advanced Settings" : "Arventennoù araokaet" 23 | }, 24 | "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); 25 | -------------------------------------------------------------------------------- /l10n/br.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Choazet", 3 | "Help" : "Skoazell", 4 | "New in" : "Nevez e-bazh", 5 | "View changelog" : "Sellet al levr kemmoù", 6 | "Tags" : "Klavioù", 7 | "Years" : "Bloaz", 8 | "Saved" : "Enrollet", 9 | "Title" : "Titl", 10 | "Copyright" : "Copyright", 11 | "Favorited" : "Lakaet evel pennroll", 12 | "Favorite" : "Pennrollañ", 13 | "Remove" : "Lemel", 14 | "Favorites" : "Pennrolloù", 15 | "Unknown" : "Dianv", 16 | "URL" : "URL", 17 | "Cancel" : "Nullañ", 18 | "Close" : "Seriñ", 19 | "Settings" : "Arventennoù", 20 | "Advanced Settings" : "Arventennoù araokaet" 21 | },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" 22 | } -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Pomoć", 6 | "Saved" : "Spremljeno", 7 | "Title" : "Naslov", 8 | "Favorited" : "Favorizovano", 9 | "Favorite" : "Favorit", 10 | "Favorites" : "Favoriti", 11 | "Unknown" : "Nepoznato", 12 | "URL" : "Url", 13 | "Cancel" : "Otkaži", 14 | "Close" : "Zatvori", 15 | "Settings" : "Podešavanje" 16 | }, 17 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 18 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Pomoć", 4 | "Saved" : "Spremljeno", 5 | "Title" : "Naslov", 6 | "Favorited" : "Favorizovano", 7 | "Favorite" : "Favorit", 8 | "Favorites" : "Favoriti", 9 | "Unknown" : "Nepoznato", 10 | "URL" : "Url", 11 | "Cancel" : "Otkaži", 12 | "Close" : "Zatvori", 13 | "Settings" : "Podešavanje" 14 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 15 | } -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Cymorth", 6 | "Tags" : "Tagiau", 7 | "Saved" : "Wedi'u cadw", 8 | "Title" : "Teitl", 9 | "Year" : "Blwyddyn", 10 | "Favorite" : "Ffefryn", 11 | "Remove" : "Gwaredu", 12 | "Favorites" : "Ffefrynnau", 13 | "Unknown" : "Anhysbys", 14 | "URL" : "URL", 15 | "Cancel" : "Diddymu", 16 | "Close" : "Cau", 17 | "Settings" : "Gosodiadau" 18 | }, 19 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 20 | -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Cymorth", 4 | "Tags" : "Tagiau", 5 | "Saved" : "Wedi'u cadw", 6 | "Title" : "Teitl", 7 | "Year" : "Blwyddyn", 8 | "Favorite" : "Ffefryn", 9 | "Remove" : "Gwaredu", 10 | "Favorites" : "Ffefrynnau", 11 | "Unknown" : "Anhysbys", 12 | "URL" : "URL", 13 | "Cancel" : "Diddymu", 14 | "Close" : "Cau", 15 | "Settings" : "Gosodiadau" 16 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 17 | } -------------------------------------------------------------------------------- /l10n/eo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Helpo", 6 | "New in" : "Nova en", 7 | "View changelog" : "Vidi ŝanĝoprotokolon", 8 | "Folders" : "Dosierujoj", 9 | "Tags" : "Etikedoj", 10 | "Saved" : "Konservita", 11 | "Title" : "Titolo", 12 | "Copyright" : "Kopirajto", 13 | "Favorited" : "Pliŝatitaj", 14 | "Favorite" : "Pliŝatati", 15 | "Remove" : "Forigi", 16 | "Favorites" : "Pliŝataĵoj", 17 | "Unknown" : "Nekonata", 18 | "URL" : "Retadreso", 19 | "Cancel" : "Nuligi", 20 | "Close" : "Malfermi", 21 | "Settings" : "Agordoj", 22 | "Advanced Settings" : "Detalaj agordoj" 23 | }, 24 | "nplurals=2; plural=(n != 1);"); 25 | -------------------------------------------------------------------------------- /l10n/eo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Helpo", 4 | "New in" : "Nova en", 5 | "View changelog" : "Vidi ŝanĝoprotokolon", 6 | "Folders" : "Dosierujoj", 7 | "Tags" : "Etikedoj", 8 | "Saved" : "Konservita", 9 | "Title" : "Titolo", 10 | "Copyright" : "Kopirajto", 11 | "Favorited" : "Pliŝatitaj", 12 | "Favorite" : "Pliŝatati", 13 | "Remove" : "Forigi", 14 | "Favorites" : "Pliŝataĵoj", 15 | "Unknown" : "Nekonata", 16 | "URL" : "Retadreso", 17 | "Cancel" : "Nuligi", 18 | "Close" : "Malfermi", 19 | "Settings" : "Agordoj", 20 | "Advanced Settings" : "Detalaj agordoj" 21 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 22 | } -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Are you sure?" : "¿Estás seguro?", 7 | "Folders" : "Carpetas", 8 | "Tags" : "Etiquetas", 9 | "Saved" : "Guardado", 10 | "Title" : "Título", 11 | "Copyright" : "Derechos de autor", 12 | "Favorited" : "Marcado como favorito", 13 | "Favorite" : "Hacer favorito", 14 | "Remove" : "Eliminar", 15 | "Favorites" : "Favoritos", 16 | "Unknown" : "Desconocido", 17 | "URL" : "URL", 18 | "Cancel" : "Cancelar", 19 | "Close" : "Cerrar", 20 | "Settings" : "Ajustes" 21 | }, 22 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 23 | -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Are you sure?" : "¿Estás seguro?", 5 | "Folders" : "Carpetas", 6 | "Tags" : "Etiquetas", 7 | "Saved" : "Guardado", 8 | "Title" : "Título", 9 | "Copyright" : "Derechos de autor", 10 | "Favorited" : "Marcado como favorito", 11 | "Favorite" : "Hacer favorito", 12 | "Remove" : "Eliminar", 13 | "Favorites" : "Favoritos", 14 | "Unknown" : "Desconocido", 15 | "URL" : "URL", 16 | "Cancel" : "Cancelar", 17 | "Close" : "Cerrar", 18 | "Settings" : "Ajustes" 19 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 20 | } -------------------------------------------------------------------------------- /l10n/es_AR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Options" : "Opciones", 6 | "Help" : "Ayuda", 7 | "New in" : "Nuevo en", 8 | "View changelog" : "Ver registro de cambios", 9 | "Are you sure?" : "Está seguro?", 10 | "Selection" : "Selección", 11 | "Folders" : "Carpetas", 12 | "Tags" : "Etiquetas", 13 | "No data" : "Sin datos", 14 | "Saved" : "Guardado", 15 | "Title" : "Título", 16 | "Year" : "Año", 17 | "Copyright" : "Derechos de autor", 18 | "Favorited" : "Marcado como favorito", 19 | "Favorite" : "Favorito", 20 | "Remove" : "Borrar", 21 | "Favorites" : "Favoritos", 22 | "Unknown" : "Desconocido", 23 | "URL" : "URL", 24 | "Cancel" : "Cancelar", 25 | "Close" : "Cerrar", 26 | "Settings" : "Ajustes", 27 | "Advanced Settings" : "Configuración avanzada", 28 | "Do you like this app?" : "¿Te gusta esta aplicación?", 29 | "More information …" : "Más información ..." 30 | }, 31 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 32 | -------------------------------------------------------------------------------- /l10n/es_AR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Options" : "Opciones", 4 | "Help" : "Ayuda", 5 | "New in" : "Nuevo en", 6 | "View changelog" : "Ver registro de cambios", 7 | "Are you sure?" : "Está seguro?", 8 | "Selection" : "Selección", 9 | "Folders" : "Carpetas", 10 | "Tags" : "Etiquetas", 11 | "No data" : "Sin datos", 12 | "Saved" : "Guardado", 13 | "Title" : "Título", 14 | "Year" : "Año", 15 | "Copyright" : "Derechos de autor", 16 | "Favorited" : "Marcado como favorito", 17 | "Favorite" : "Favorito", 18 | "Remove" : "Borrar", 19 | "Favorites" : "Favoritos", 20 | "Unknown" : "Desconocido", 21 | "URL" : "URL", 22 | "Cancel" : "Cancelar", 23 | "Close" : "Cerrar", 24 | "Settings" : "Ajustes", 25 | "Advanced Settings" : "Configuración avanzada", 26 | "Do you like this app?" : "¿Te gusta esta aplicación?", 27 | "More information …" : "Más información ..." 28 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 29 | } -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Are you sure?" : "¿Está seguro?", 7 | "Folders" : "Carpetas", 8 | "Tags" : "Etiquetas", 9 | "Saved" : "Guardado", 10 | "Title" : "Título", 11 | "Copyright" : "Derechos de autor", 12 | "Favorited" : "Marcado como favorito", 13 | "Favorite" : "Hacer favorito", 14 | "Remove" : "Eliminar", 15 | "Favorites" : "Favoritos", 16 | "Unknown" : "Desconocido", 17 | "URL" : "URL", 18 | "Cancel" : "Cancelar", 19 | "Close" : "Cerrar", 20 | "Settings" : "Configuraciones ", 21 | "Advanced Settings" : "Configuraciones avanzadas" 22 | }, 23 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 24 | -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Are you sure?" : "¿Está seguro?", 5 | "Folders" : "Carpetas", 6 | "Tags" : "Etiquetas", 7 | "Saved" : "Guardado", 8 | "Title" : "Título", 9 | "Copyright" : "Derechos de autor", 10 | "Favorited" : "Marcado como favorito", 11 | "Favorite" : "Hacer favorito", 12 | "Remove" : "Eliminar", 13 | "Favorites" : "Favoritos", 14 | "Unknown" : "Desconocido", 15 | "URL" : "URL", 16 | "Cancel" : "Cancelar", 17 | "Close" : "Cerrar", 18 | "Settings" : "Configuraciones ", 19 | "Advanced Settings" : "Configuraciones avanzadas" 20 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 21 | } -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Are you sure?" : "¿Estás seguro?", 7 | "Folders" : "Carpetas", 8 | "Tags" : "Etiquetas", 9 | "Saved" : "Guardado", 10 | "Title" : "Título", 11 | "Copyright" : "Derechos de autor", 12 | "Favorited" : "Marcado como favorito", 13 | "Favorite" : "Hacer favorito", 14 | "Remove" : "Eliminar", 15 | "Favorites" : "Favoritos", 16 | "Unknown" : "Desconocido", 17 | "URL" : "URL", 18 | "Cancel" : "Cancelar", 19 | "Close" : "Cerrar", 20 | "Settings" : "Configuraciones ", 21 | "Advanced Settings" : "Configuración avanzada" 22 | }, 23 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 24 | -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Are you sure?" : "¿Estás seguro?", 5 | "Folders" : "Carpetas", 6 | "Tags" : "Etiquetas", 7 | "Saved" : "Guardado", 8 | "Title" : "Título", 9 | "Copyright" : "Derechos de autor", 10 | "Favorited" : "Marcado como favorito", 11 | "Favorite" : "Hacer favorito", 12 | "Remove" : "Eliminar", 13 | "Favorites" : "Favoritos", 14 | "Unknown" : "Desconocido", 15 | "URL" : "URL", 16 | "Cancel" : "Cancelar", 17 | "Close" : "Cerrar", 18 | "Settings" : "Configuraciones ", 19 | "Advanced Settings" : "Configuración avanzada" 20 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 21 | } -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Are you sure?" : "Are you sure?", 7 | "Folders" : "Carpetas", 8 | "Tags" : "Etiquetas", 9 | "Saved" : "Guardado", 10 | "Title" : "Título", 11 | "Copyright" : "Derechos de autor", 12 | "Favorited" : "Marcado como favorito", 13 | "Favorite" : "Hacer favorito", 14 | "Remove" : "Eliminar", 15 | "Favorites" : "Favoritos", 16 | "Unknown" : "Desconocido", 17 | "URL" : "URL", 18 | "Cancel" : "Cancelar", 19 | "Close" : "Cerrar", 20 | "Settings" : "Configuraciones " 21 | }, 22 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 23 | -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Are you sure?" : "Are you sure?", 5 | "Folders" : "Carpetas", 6 | "Tags" : "Etiquetas", 7 | "Saved" : "Guardado", 8 | "Title" : "Título", 9 | "Copyright" : "Derechos de autor", 10 | "Favorited" : "Marcado como favorito", 11 | "Favorite" : "Hacer favorito", 12 | "Remove" : "Eliminar", 13 | "Favorites" : "Favoritos", 14 | "Unknown" : "Desconocido", 15 | "URL" : "URL", 16 | "Cancel" : "Cancelar", 17 | "Close" : "Cerrar", 18 | "Settings" : "Configuraciones " 19 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 20 | } -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Options" : "Opciones", 6 | "Album Covers" : "Portadas de álbumes", 7 | "Audio Player" : "Reproductor de audio", 8 | "Help" : "Ayuda", 9 | "New in" : "Nuevo en", 10 | "View changelog" : "Ver el registro de cambios", 11 | "Are you sure?" : "¿Estás seguro?", 12 | "Selection" : "Selección", 13 | "Playlists" : "Listas de reproducción", 14 | "Albums" : "Álbumes", 15 | "Album Artists" : "Artistas de álbum", 16 | "Artists" : "Artistas", 17 | "Folders" : "Carpetas", 18 | "Genres" : "Género", 19 | "Titles" : "Títulos", 20 | "Tags" : "Etiquetas", 21 | "Years" : "Años", 22 | "No data" : "Sin datos", 23 | "Saved" : "Guardado", 24 | "Title" : "Título", 25 | "Album Artist" : "Artista del álbum", 26 | "Album" : "Álbum", 27 | "Year" : "Año", 28 | "Copyright" : "Derechos de autor", 29 | "Favorited" : "Marcado como favorito", 30 | "Favorite" : "Marcar como favorito", 31 | "Remove" : "Eliminar", 32 | "All Titles" : "Todas las pistas", 33 | "Favorites" : "Favoritos", 34 | "Recently Added" : "Añadido recientemente", 35 | "Recently Played" : "Reproducido recientemente", 36 | "Most Played" : "Más reproducidas", 37 | "50 Random Tracks" : "50 Pistas aleatorias", 38 | "Unknown" : "Desconocido", 39 | "URL" : "URL", 40 | "Various Artists" : "Varios Artistas", 41 | "Albums found:" : "Álbumes encontrados:", 42 | "Audioplayer" : "Reproductor de Audio", 43 | "Cancel" : "Cancelar", 44 | "Close" : "Cerrar", 45 | "Settings" : "Ajustes", 46 | "Advanced Settings" : "Configuraciones Avanzadas", 47 | "Do you like this app?" : "¿Le gusta esta aplicación?", 48 | "More information …" : "Más información ...", 49 | "This setting specifies which folder is scanned for audio files. Without a selection, the whole data folder is scanned." : "Este ajuste especifica en qué carpeta se buscan los archivos de audio. Al no indicar ninguna, se buscan en todas las carpetas de datos." 50 | }, 51 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 52 | -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Options" : "Opciones", 4 | "Album Covers" : "Portadas de álbumes", 5 | "Audio Player" : "Reproductor de audio", 6 | "Help" : "Ayuda", 7 | "New in" : "Nuevo en", 8 | "View changelog" : "Ver el registro de cambios", 9 | "Are you sure?" : "¿Estás seguro?", 10 | "Selection" : "Selección", 11 | "Playlists" : "Listas de reproducción", 12 | "Albums" : "Álbumes", 13 | "Album Artists" : "Artistas de álbum", 14 | "Artists" : "Artistas", 15 | "Folders" : "Carpetas", 16 | "Genres" : "Género", 17 | "Titles" : "Títulos", 18 | "Tags" : "Etiquetas", 19 | "Years" : "Años", 20 | "No data" : "Sin datos", 21 | "Saved" : "Guardado", 22 | "Title" : "Título", 23 | "Album Artist" : "Artista del álbum", 24 | "Album" : "Álbum", 25 | "Year" : "Año", 26 | "Copyright" : "Derechos de autor", 27 | "Favorited" : "Marcado como favorito", 28 | "Favorite" : "Marcar como favorito", 29 | "Remove" : "Eliminar", 30 | "All Titles" : "Todas las pistas", 31 | "Favorites" : "Favoritos", 32 | "Recently Added" : "Añadido recientemente", 33 | "Recently Played" : "Reproducido recientemente", 34 | "Most Played" : "Más reproducidas", 35 | "50 Random Tracks" : "50 Pistas aleatorias", 36 | "Unknown" : "Desconocido", 37 | "URL" : "URL", 38 | "Various Artists" : "Varios Artistas", 39 | "Albums found:" : "Álbumes encontrados:", 40 | "Audioplayer" : "Reproductor de Audio", 41 | "Cancel" : "Cancelar", 42 | "Close" : "Cerrar", 43 | "Settings" : "Ajustes", 44 | "Advanced Settings" : "Configuraciones Avanzadas", 45 | "Do you like this app?" : "¿Le gusta esta aplicación?", 46 | "More information …" : "Más información ...", 47 | "This setting specifies which folder is scanned for audio files. Without a selection, the whole data folder is scanned." : "Este ajuste especifica en qué carpeta se buscan los archivos de audio. Al no indicar ninguna, se buscan en todas las carpetas de datos." 48 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 49 | } -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Ajustes" 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Ajustes" 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionado", 5 | "Help" : "Ayuda", 6 | "Folders" : "Carpetas", 7 | "Tags" : "Etiquetas", 8 | "Saved" : "Guardado", 9 | "Title" : "Título", 10 | "Copyright" : "Derechos de autor", 11 | "Favorited" : "Marcado como favorito", 12 | "Favorite" : "Hacer favorito", 13 | "Remove" : "Eliminar", 14 | "Favorites" : "Favoritos", 15 | "Unknown" : "Desconocido", 16 | "URL" : "URL", 17 | "Cancel" : "Cancelar", 18 | "Close" : "Cerrar", 19 | "Settings" : "Configuraciones " 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionado", 3 | "Help" : "Ayuda", 4 | "Folders" : "Carpetas", 5 | "Tags" : "Etiquetas", 6 | "Saved" : "Guardado", 7 | "Title" : "Título", 8 | "Copyright" : "Derechos de autor", 9 | "Favorited" : "Marcado como favorito", 10 | "Favorite" : "Hacer favorito", 11 | "Remove" : "Eliminar", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Desconocido", 14 | "URL" : "URL", 15 | "Cancel" : "Cancelar", 16 | "Close" : "Cerrar", 17 | "Settings" : "Configuraciones " 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/gd.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Help" : "Cobhair", 5 | "Tags" : "Tagaichean", 6 | "Favorite" : "Annsachd", 7 | "Remove" : "Thoir air falbh", 8 | "Favorites" : "Annsachdan", 9 | "Unknown" : "Chan eil fhios", 10 | "Cancel" : "Sguir dheth", 11 | "Close" : "Dùin", 12 | "Settings" : "Roghainnean" 13 | }, 14 | "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;"); 15 | -------------------------------------------------------------------------------- /l10n/gd.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Help" : "Cobhair", 3 | "Tags" : "Tagaichean", 4 | "Favorite" : "Annsachd", 5 | "Remove" : "Thoir air falbh", 6 | "Favorites" : "Annsachdan", 7 | "Unknown" : "Chan eil fhios", 8 | "Cancel" : "Sguir dheth", 9 | "Close" : "Dùin", 10 | "Settings" : "Roghainnean" 11 | },"pluralForm" :"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;" 12 | } -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Options" : "אפשרויות", 6 | "Help" : "עזרה", 7 | "New in" : "חדש ב־", 8 | "View changelog" : "הצגת יומן שינויים", 9 | "Are you sure?" : "האם הינך בטוח?", 10 | "Play/Pause" : "נגינה/השהיה", 11 | "Albums" : "אלבומים", 12 | "Folders" : "תיקייה", 13 | "Tags" : "תגיות", 14 | "Years" : "שנים", 15 | "Saved" : "נשמרה", 16 | "Title" : "תפקיד", 17 | "Subtitle" : "כתובית", 18 | "Year" : "שנה", 19 | "Length" : "אורך", 20 | "Copyright" : "זכויות יוצרים", 21 | "Metadata" : "נתוני על", 22 | "Favorited" : "סומן כמועדף", 23 | "Favorite" : "סימון כמועדף", 24 | "Remove" : "הסרה", 25 | "Favorites" : "מועדפים", 26 | "Unknown" : "לא ידוע", 27 | "URL" : "כתובת", 28 | "Cancel" : "ביטול", 29 | "Close" : "סגירה", 30 | "Settings" : "הגדרות", 31 | "Advanced Settings" : "הגדרות מתקדמות" 32 | }, 33 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 34 | -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Options" : "אפשרויות", 4 | "Help" : "עזרה", 5 | "New in" : "חדש ב־", 6 | "View changelog" : "הצגת יומן שינויים", 7 | "Are you sure?" : "האם הינך בטוח?", 8 | "Play/Pause" : "נגינה/השהיה", 9 | "Albums" : "אלבומים", 10 | "Folders" : "תיקייה", 11 | "Tags" : "תגיות", 12 | "Years" : "שנים", 13 | "Saved" : "נשמרה", 14 | "Title" : "תפקיד", 15 | "Subtitle" : "כתובית", 16 | "Year" : "שנה", 17 | "Length" : "אורך", 18 | "Copyright" : "זכויות יוצרים", 19 | "Metadata" : "נתוני על", 20 | "Favorited" : "סומן כמועדף", 21 | "Favorite" : "סימון כמועדף", 22 | "Remove" : "הסרה", 23 | "Favorites" : "מועדפים", 24 | "Unknown" : "לא ידוע", 25 | "URL" : "כתובת", 26 | "Cancel" : "ביטול", 27 | "Close" : "סגירה", 28 | "Settings" : "הגדרות", 29 | "Advanced Settings" : "הגדרות מתקדמות" 30 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 31 | } -------------------------------------------------------------------------------- /l10n/hr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Odabrano", 5 | "Options" : "Mogućnosti", 6 | "Help" : "Pomoć", 7 | "New in" : "Novo u", 8 | "View changelog" : "Prikaži zapis promjena", 9 | "Folders" : "Mape", 10 | "Tags" : "Oznake", 11 | "Years" : "Godina", 12 | "Saved" : "Spremljeno", 13 | "Title" : "Naslov", 14 | "Subtitle" : "Podnaslov", 15 | "Artist" : "Umjetnik", 16 | "Album" : "Album", 17 | "Genre" : "Žanr", 18 | "Year" : "Godina", 19 | "Length" : "Dužina", 20 | "Copyright" : "Autorsko pravo", 21 | "Metadata" : "Metapodaci", 22 | "Favorited" : "Favorit", 23 | "Favorite" : "Favorit", 24 | "Remove" : "Ukloni", 25 | "Favorites" : "Favoriti", 26 | "Unknown" : "Nepoznato", 27 | "URL" : "URL", 28 | "Cancel" : "Odustani", 29 | "Close" : "Zatvori", 30 | "Settings" : "Postavke", 31 | "Advanced Settings" : "Napredne postavke" 32 | }, 33 | "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); 34 | -------------------------------------------------------------------------------- /l10n/hr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Odabrano", 3 | "Options" : "Mogućnosti", 4 | "Help" : "Pomoć", 5 | "New in" : "Novo u", 6 | "View changelog" : "Prikaži zapis promjena", 7 | "Folders" : "Mape", 8 | "Tags" : "Oznake", 9 | "Years" : "Godina", 10 | "Saved" : "Spremljeno", 11 | "Title" : "Naslov", 12 | "Subtitle" : "Podnaslov", 13 | "Artist" : "Umjetnik", 14 | "Album" : "Album", 15 | "Genre" : "Žanr", 16 | "Year" : "Godina", 17 | "Length" : "Dužina", 18 | "Copyright" : "Autorsko pravo", 19 | "Metadata" : "Metapodaci", 20 | "Favorited" : "Favorit", 21 | "Favorite" : "Favorit", 22 | "Remove" : "Ukloni", 23 | "Favorites" : "Favoriti", 24 | "Unknown" : "Nepoznato", 25 | "URL" : "URL", 26 | "Cancel" : "Odustani", 27 | "Close" : "Zatvori", 28 | "Settings" : "Postavke", 29 | "Advanced Settings" : "Napredne postavke" 30 | },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" 31 | } -------------------------------------------------------------------------------- /l10n/hy.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Օգնություն", 6 | "Saved" : "Պահված", 7 | "Title" : "Վերնագիր", 8 | "Favorites" : "Սիրվածներ", 9 | "Unknown" : "Անհայտ", 10 | "URL" : "URL", 11 | "Cancel" : "ընդհատել", 12 | "Close" : "Փակել", 13 | "Settings" : "կարգավորումներ" 14 | }, 15 | "nplurals=2; plural=(n != 1);"); 16 | -------------------------------------------------------------------------------- /l10n/hy.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Օգնություն", 4 | "Saved" : "Պահված", 5 | "Title" : "Վերնագիր", 6 | "Favorites" : "Սիրվածներ", 7 | "Unknown" : "Անհայտ", 8 | "URL" : "URL", 9 | "Cancel" : "ընդհատել", 10 | "Close" : "Փակել", 11 | "Settings" : "կարգավորումներ" 12 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 13 | } -------------------------------------------------------------------------------- /l10n/ia.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Adjuta", 6 | "Tags" : "Etiquettas", 7 | "Saved" : "Salveguardate", 8 | "Title" : "Titulo", 9 | "Copyright" : "Copyright", 10 | "Favorited" : "Favorite", 11 | "Favorite" : "Favorite", 12 | "Favorites" : "Favoritos", 13 | "Unknown" : "Incognite", 14 | "URL" : "URL", 15 | "Cancel" : "Cancellar", 16 | "Close" : "Clauder", 17 | "Settings" : "Configurationes" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /l10n/ia.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Adjuta", 4 | "Tags" : "Etiquettas", 5 | "Saved" : "Salveguardate", 6 | "Title" : "Titulo", 7 | "Copyright" : "Copyright", 8 | "Favorited" : "Favorite", 9 | "Favorite" : "Favorite", 10 | "Favorites" : "Favoritos", 11 | "Unknown" : "Incognite", 12 | "URL" : "URL", 13 | "Cancel" : "Cancellar", 14 | "Close" : "Clauder", 15 | "Settings" : "Configurationes" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Dipilih", 5 | "Options" : "Pilihan", 6 | "Help" : "Bantuan", 7 | "New in" : "Terbaru", 8 | "View changelog" : "Lihat log pembaruan", 9 | "Are you sure?" : "Apakah Anda yakin?", 10 | "Albums" : "Album", 11 | "Folders" : "Folder", 12 | "Tags" : "Tag", 13 | "Years" : "Tahun", 14 | "Saved" : "Disimpan", 15 | "Title" : "Judul", 16 | "Year" : "Tahun", 17 | "Copyright" : "Hak cipta", 18 | "Favorited" : "Difavoritkan", 19 | "Favorite" : "Favorit", 20 | "Remove" : "Buang", 21 | "Favorites" : "Disukai", 22 | "Unknown" : "Tidak diketahui", 23 | "URL" : "URL", 24 | "Cancel" : "Membatalkan", 25 | "Close" : "Tutup", 26 | "Settings" : "Setelan", 27 | "Advanced Settings" : "Pengaturan Tambahan" 28 | }, 29 | "nplurals=1; plural=0;"); 30 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Dipilih", 3 | "Options" : "Pilihan", 4 | "Help" : "Bantuan", 5 | "New in" : "Terbaru", 6 | "View changelog" : "Lihat log pembaruan", 7 | "Are you sure?" : "Apakah Anda yakin?", 8 | "Albums" : "Album", 9 | "Folders" : "Folder", 10 | "Tags" : "Tag", 11 | "Years" : "Tahun", 12 | "Saved" : "Disimpan", 13 | "Title" : "Judul", 14 | "Year" : "Tahun", 15 | "Copyright" : "Hak cipta", 16 | "Favorited" : "Difavoritkan", 17 | "Favorite" : "Favorit", 18 | "Remove" : "Buang", 19 | "Favorites" : "Disukai", 20 | "Unknown" : "Tidak diketahui", 21 | "URL" : "URL", 22 | "Cancel" : "Membatalkan", 23 | "Close" : "Tutup", 24 | "Settings" : "Setelan", 25 | "Advanced Settings" : "Pengaturan Tambahan" 26 | },"pluralForm" :"nplurals=1; plural=0;" 27 | } -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Valið", 5 | "Options" : "Valkostir", 6 | "Help" : "Hjálp", 7 | "New in" : "Nýtt í", 8 | "View changelog" : "Skoða breytingaannál", 9 | "Are you sure?" : "Ertu viss?", 10 | "Selection" : "Val", 11 | "Albums" : "Albúm", 12 | "Folders" : "Möppur", 13 | "Tags" : "Merki", 14 | "Years" : "Ár", 15 | "Saved" : "Vistað", 16 | "Title" : "Titill", 17 | "Subtitle" : "Undirtexti", 18 | "Artist" : "Flytjandi", 19 | "Album" : "Hljómplata", 20 | "Genre" : "Stíltegund", 21 | "Year" : "Ár", 22 | "Length" : "Lengd", 23 | "Copyright" : "Höfundarréttur", 24 | "Metadata" : "Lýsigögn", 25 | "Favorited" : "Sett í eftirlæti", 26 | "Favorite" : "Eftirlæti", 27 | "Remove" : "Fjarlægja", 28 | "Favorites" : "Eftirlæti", 29 | "Unknown" : "Óþekkt", 30 | "URL" : "Slóð", 31 | "Cancel" : "Hætta við", 32 | "Close" : "Loka", 33 | "Settings" : "Stillingar", 34 | "Advanced Settings" : "Ítarlegar stillingar" 35 | }, 36 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 37 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Valið", 3 | "Options" : "Valkostir", 4 | "Help" : "Hjálp", 5 | "New in" : "Nýtt í", 6 | "View changelog" : "Skoða breytingaannál", 7 | "Are you sure?" : "Ertu viss?", 8 | "Selection" : "Val", 9 | "Albums" : "Albúm", 10 | "Folders" : "Möppur", 11 | "Tags" : "Merki", 12 | "Years" : "Ár", 13 | "Saved" : "Vistað", 14 | "Title" : "Titill", 15 | "Subtitle" : "Undirtexti", 16 | "Artist" : "Flytjandi", 17 | "Album" : "Hljómplata", 18 | "Genre" : "Stíltegund", 19 | "Year" : "Ár", 20 | "Length" : "Lengd", 21 | "Copyright" : "Höfundarréttur", 22 | "Metadata" : "Lýsigögn", 23 | "Favorited" : "Sett í eftirlæti", 24 | "Favorite" : "Eftirlæti", 25 | "Remove" : "Fjarlægja", 26 | "Favorites" : "Eftirlæti", 27 | "Unknown" : "Óþekkt", 28 | "URL" : "Slóð", 29 | "Cancel" : "Hætta við", 30 | "Close" : "Loka", 31 | "Settings" : "Stillingar", 32 | "Advanced Settings" : "Ítarlegar stillingar" 33 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 34 | } -------------------------------------------------------------------------------- /l10n/ka.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Help", 6 | "New in" : "New in", 7 | "View changelog" : "View changelog", 8 | "Are you sure?" : "დარწმუნებული ხართ?", 9 | "Tags" : "Tags", 10 | "Saved" : "Saved", 11 | "Year" : "Year", 12 | "Metadata" : "Metadata", 13 | "Favorited" : "Favorited", 14 | "Favorite" : "Favorite", 15 | "Remove" : "Remove", 16 | "Favorites" : "Favorites", 17 | "Unknown" : "Unknown", 18 | "URL" : "URL", 19 | "Cancel" : "Cancel", 20 | "Close" : "Close", 21 | "Settings" : "Settings", 22 | "Advanced Settings" : "Advanced Settings", 23 | "Do you like this app?" : "მოგწონთ ეს აპლიკაცია?", 24 | "More information …" : "მეტი ინფორმაცია ..." 25 | }, 26 | "nplurals=2; plural=(n!=1);"); 27 | -------------------------------------------------------------------------------- /l10n/ka.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Help", 4 | "New in" : "New in", 5 | "View changelog" : "View changelog", 6 | "Are you sure?" : "დარწმუნებული ხართ?", 7 | "Tags" : "Tags", 8 | "Saved" : "Saved", 9 | "Year" : "Year", 10 | "Metadata" : "Metadata", 11 | "Favorited" : "Favorited", 12 | "Favorite" : "Favorite", 13 | "Remove" : "Remove", 14 | "Favorites" : "Favorites", 15 | "Unknown" : "Unknown", 16 | "URL" : "URL", 17 | "Cancel" : "Cancel", 18 | "Close" : "Close", 19 | "Settings" : "Settings", 20 | "Advanced Settings" : "Advanced Settings", 21 | "Do you like this app?" : "მოგწონთ ეს აპლიკაცია?", 22 | "More information …" : "მეტი ინფორმაცია ..." 23 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 24 | } -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "არჩეულია", 5 | "Help" : "დახმარება", 6 | "Folders" : "დირექტორიები", 7 | "Tags" : "ტეგები", 8 | "Saved" : "შენახულია", 9 | "Title" : "სათაური", 10 | "Copyright" : "საავტორო უფლებები", 11 | "Favorited" : "დამატებულია რჩეულებში", 12 | "Favorite" : "რჩეული", 13 | "Remove" : "წაშლა", 14 | "Favorites" : "რჩეულები", 15 | "Unknown" : "ამოუცნობი", 16 | "URL" : "მისამართი", 17 | "Cancel" : "უარყოფა", 18 | "Close" : "დახურვა", 19 | "Settings" : "პარამეტრები" 20 | }, 21 | "nplurals=2; plural=(n!=1);"); 22 | -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "არჩეულია", 3 | "Help" : "დახმარება", 4 | "Folders" : "დირექტორიები", 5 | "Tags" : "ტეგები", 6 | "Saved" : "შენახულია", 7 | "Title" : "სათაური", 8 | "Copyright" : "საავტორო უფლებები", 9 | "Favorited" : "დამატებულია რჩეულებში", 10 | "Favorite" : "რჩეული", 11 | "Remove" : "წაშლა", 12 | "Favorites" : "რჩეულები", 13 | "Unknown" : "ამოუცნობი", 14 | "URL" : "მისამართი", 15 | "Cancel" : "უარყოფა", 16 | "Close" : "დახურვა", 17 | "Settings" : "პარამეტრები" 18 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 19 | } -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Yettwafren", 5 | "Options" : "Iɣewwaṛen", 6 | "Help" : "Tallalt", 7 | "Tags" : "Tibzimin", 8 | "Title" : "Azwel", 9 | "Favorite" : "Menyif", 10 | "Remove" : "Kkes", 11 | "Favorites" : "Imenyafen", 12 | "Unknown" : "Arussin", 13 | "Cancel" : "Sefsex", 14 | "Close" : "Mdel", 15 | "Settings" : "Iɣewwaṛen", 16 | "Advanced Settings" : "Iɣewwaren leqqayen" 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Yettwafren", 3 | "Options" : "Iɣewwaṛen", 4 | "Help" : "Tallalt", 5 | "Tags" : "Tibzimin", 6 | "Title" : "Azwel", 7 | "Favorite" : "Menyif", 8 | "Remove" : "Kkes", 9 | "Favorites" : "Imenyafen", 10 | "Unknown" : "Arussin", 11 | "Cancel" : "Sefsex", 12 | "Close" : "Mdel", 13 | "Settings" : "Iɣewwaṛen", 14 | "Advanced Settings" : "Iɣewwaren leqqayen" 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/km.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Options" : "ជម្រើស", 6 | "Welcome to" : "សូមស្វាគមន៍មកកាន់", 7 | "Help" : "ជំនួយ", 8 | "Are you sure?" : "តើអ្នកប្រាកដឬទេ?", 9 | "Tags" : "ស្លាក", 10 | "Years" : "ឆ្នាំ", 11 | "No data" : "មិនមានទិន្នន័យ", 12 | "Saved" : "បាន​រក្សាទុក", 13 | "Title" : "ចំណងជើង", 14 | "Year" : "ឆ្នាំ", 15 | "Length" : "រយៈពេល", 16 | "Copyright" : "រក្សាសិទ្ធិ", 17 | "Remove" : "ដកចេញ", 18 | "Favorites" : "Favorites", 19 | "URL" : "URL", 20 | "Cancel" : "បោះបង់", 21 | "Close" : "បិទ", 22 | "Volume up" : "បន្ថែមសម្លេង", 23 | "Volume down" : "បន្ថយសម្លេង", 24 | "Settings" : "ការកំណត់", 25 | "Do you like this app?" : "តើអ្នកចូលចិត្តកម្មវិធីនេះឬទេ?", 26 | "More information …" : "ព័ត៌មានបន្ថែម …" 27 | }, 28 | "nplurals=1; plural=0;"); 29 | -------------------------------------------------------------------------------- /l10n/km.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Options" : "ជម្រើស", 4 | "Welcome to" : "សូមស្វាគមន៍មកកាន់", 5 | "Help" : "ជំនួយ", 6 | "Are you sure?" : "តើអ្នកប្រាកដឬទេ?", 7 | "Tags" : "ស្លាក", 8 | "Years" : "ឆ្នាំ", 9 | "No data" : "មិនមានទិន្នន័យ", 10 | "Saved" : "បាន​រក្សាទុក", 11 | "Title" : "ចំណងជើង", 12 | "Year" : "ឆ្នាំ", 13 | "Length" : "រយៈពេល", 14 | "Copyright" : "រក្សាសិទ្ធិ", 15 | "Remove" : "ដកចេញ", 16 | "Favorites" : "Favorites", 17 | "URL" : "URL", 18 | "Cancel" : "បោះបង់", 19 | "Close" : "បិទ", 20 | "Volume up" : "បន្ថែមសម្លេង", 21 | "Volume down" : "បន្ថយសម្លេង", 22 | "Settings" : "ការកំណត់", 23 | "Do you like this app?" : "តើអ្នកចូលចិត្តកម្មវិធីនេះឬទេ?", 24 | "More information …" : "ព័ត៌មានបន្ថែម …" 25 | },"pluralForm" :"nplurals=1; plural=0;" 26 | } -------------------------------------------------------------------------------- /l10n/kn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "ಸಹಾಯ", 6 | "Saved" : "ಉಳಿಸಿದ", 7 | "Title" : "ಶೀರ್ಷಿಕೆ", 8 | "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು", 9 | "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", 10 | "Remove" : "ತೆಗೆದುಹಾಕಿ", 11 | "Favorites" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", 12 | "URL" : "ಜಾಲದ ಕೊಂಡಿ", 13 | "Cancel" : "ರದ್ದು", 14 | "Close" : "ಮುಚ್ಚು", 15 | "Settings" : "ಆಯ್ಕೆ" 16 | }, 17 | "nplurals=2; plural=(n > 1);"); 18 | -------------------------------------------------------------------------------- /l10n/kn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "ಸಹಾಯ", 4 | "Saved" : "ಉಳಿಸಿದ", 5 | "Title" : "ಶೀರ್ಷಿಕೆ", 6 | "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು", 7 | "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", 8 | "Remove" : "ತೆಗೆದುಹಾಕಿ", 9 | "Favorites" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", 10 | "URL" : "ಜಾಲದ ಕೊಂಡಿ", 11 | "Cancel" : "ರದ್ದು", 12 | "Close" : "ಮುಚ್ಚು", 13 | "Settings" : "ಆಯ್ಕೆ" 14 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 15 | } -------------------------------------------------------------------------------- /l10n/lb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Hëllef", 6 | "Tags" : "Tags", 7 | "Saved" : "Gespäichert", 8 | "Title" : "Titel", 9 | "Favorited" : "Favoriséiert", 10 | "Favorite" : "Favorit", 11 | "Remove" : "Läschen", 12 | "Favorites" : "Favoriten", 13 | "Unknown" : "Onbekannt", 14 | "URL" : "URL", 15 | "Cancel" : "Ofbriechen", 16 | "Close" : "Zoumaachen", 17 | "Settings" : "Astellungen", 18 | "Advanced Settings" : "Fortgeschratt astellungen" 19 | }, 20 | "nplurals=2; plural=(n != 1);"); 21 | -------------------------------------------------------------------------------- /l10n/lb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Hëllef", 4 | "Tags" : "Tags", 5 | "Saved" : "Gespäichert", 6 | "Title" : "Titel", 7 | "Favorited" : "Favoriséiert", 8 | "Favorite" : "Favorit", 9 | "Remove" : "Läschen", 10 | "Favorites" : "Favoriten", 11 | "Unknown" : "Onbekannt", 12 | "URL" : "URL", 13 | "Cancel" : "Ofbriechen", 14 | "Close" : "Zoumaachen", 15 | "Settings" : "Astellungen", 16 | "Advanced Settings" : "Fortgeschratt astellungen" 17 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 18 | } -------------------------------------------------------------------------------- /l10n/lo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "ເລືອກ", 5 | "Help" : "ການຊ່ວຍເຫຼືອ", 6 | "New in" : "ໃຫມ່", 7 | "View changelog" : "ເບິ່ງການປ່ຽນແປງ", 8 | "Tags" : "ປ້າຍກຳກັບ", 9 | "Favorite" : "ລາຍການທີ່ມັກ", 10 | "Remove" : "ຍ້າຍອອກ", 11 | "Favorites" : "ລາຍການທີ່ມັກ", 12 | "Unknown" : "ບໍ່ຮູ້", 13 | "URL" : "URL", 14 | "Cancel" : "ຍົກເລີກ", 15 | "Close" : "ປິດ", 16 | "Settings" : "ການຕັ້ງຄ່າ", 17 | "Advanced Settings" : "ຕັ້ງ​ຄ່າ​ຂັ້ນ​ສູງ" 18 | }, 19 | "nplurals=1; plural=0;"); 20 | -------------------------------------------------------------------------------- /l10n/lo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "ເລືອກ", 3 | "Help" : "ການຊ່ວຍເຫຼືອ", 4 | "New in" : "ໃຫມ່", 5 | "View changelog" : "ເບິ່ງການປ່ຽນແປງ", 6 | "Tags" : "ປ້າຍກຳກັບ", 7 | "Favorite" : "ລາຍການທີ່ມັກ", 8 | "Remove" : "ຍ້າຍອອກ", 9 | "Favorites" : "ລາຍການທີ່ມັກ", 10 | "Unknown" : "ບໍ່ຮູ້", 11 | "URL" : "URL", 12 | "Cancel" : "ຍົກເລີກ", 13 | "Close" : "ປິດ", 14 | "Settings" : "ການຕັ້ງຄ່າ", 15 | "Advanced Settings" : "ຕັ້ງ​ຄ່າ​ຂັ້ນ​ສູງ" 16 | },"pluralForm" :"nplurals=1; plural=0;" 17 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Atlasītās", 5 | "Help" : "Palīdzība", 6 | "New in" : "Jauns", 7 | "View changelog" : "Skatīt izmaiņu sarakstu", 8 | "Are you sure?" : "Vai tiešām?", 9 | "Albums" : "Albumi", 10 | "Folders" : "Mapes", 11 | "Tags" : "Birkas", 12 | "Years" : "Gadi", 13 | "Saved" : "Saglabāts", 14 | "Title" : "Amats", 15 | "Subtitle" : "Apakšvirsraksts", 16 | "Year" : "Gads", 17 | "Copyright" : "Autortiesības", 18 | "Metadata" : "Metadati", 19 | "Favorited" : "Izlasē", 20 | "Favorite" : "Izlasē", 21 | "Remove" : "Noņemt", 22 | "Favorites" : "Izlases vienumi", 23 | "Unknown" : "Nezināms", 24 | "URL" : "URL", 25 | "Cancel" : "Atcelt", 26 | "Close" : "Aizvērt", 27 | "Settings" : "Iestatījumi", 28 | "Advanced Settings" : "Paplašināti iestatījumi", 29 | "Search for audio files in" : "Meklēt skaņu datnes" 30 | }, 31 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 32 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Atlasītās", 3 | "Help" : "Palīdzība", 4 | "New in" : "Jauns", 5 | "View changelog" : "Skatīt izmaiņu sarakstu", 6 | "Are you sure?" : "Vai tiešām?", 7 | "Albums" : "Albumi", 8 | "Folders" : "Mapes", 9 | "Tags" : "Birkas", 10 | "Years" : "Gadi", 11 | "Saved" : "Saglabāts", 12 | "Title" : "Amats", 13 | "Subtitle" : "Apakšvirsraksts", 14 | "Year" : "Gads", 15 | "Copyright" : "Autortiesības", 16 | "Metadata" : "Metadati", 17 | "Favorited" : "Izlasē", 18 | "Favorite" : "Izlasē", 19 | "Remove" : "Noņemt", 20 | "Favorites" : "Izlases vienumi", 21 | "Unknown" : "Nezināms", 22 | "URL" : "URL", 23 | "Cancel" : "Atcelt", 24 | "Close" : "Aizvērt", 25 | "Settings" : "Iestatījumi", 26 | "Advanced Settings" : "Paplašināti iestatījumi", 27 | "Search for audio files in" : "Meklēt skaņu datnes" 28 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 29 | } -------------------------------------------------------------------------------- /l10n/mk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Options" : "Опции", 6 | "Help" : "Помош", 7 | "New in" : "Ново во", 8 | "View changelog" : "Видете ги проммените", 9 | "Albums" : "Албуми", 10 | "Folders" : "Папки", 11 | "Tags" : "Ознаки", 12 | "Saved" : "Зачувано", 13 | "Title" : "Наслов", 14 | "Artist" : "Изведувач", 15 | "Album" : "Албум", 16 | "Genre" : "Жанр", 17 | "Year" : "Година", 18 | "Track" : "Патека", 19 | "Length" : "Должина", 20 | "Copyright" : "Авторско право", 21 | "Metadata" : "Метаподатоци", 22 | "Favorited" : "Омилени", 23 | "Favorite" : "Омилени", 24 | "Remove" : "Отстрани ", 25 | "Favorites" : "Омилени", 26 | "Unknown" : "Непознат", 27 | "URL" : "Адреса", 28 | "Cancel" : "Откажи", 29 | "Close" : "Затвори", 30 | "Settings" : "Параметри", 31 | "Advanced Settings" : "Напредни параметри" 32 | }, 33 | "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); 34 | -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Options" : "Опции", 4 | "Help" : "Помош", 5 | "New in" : "Ново во", 6 | "View changelog" : "Видете ги проммените", 7 | "Albums" : "Албуми", 8 | "Folders" : "Папки", 9 | "Tags" : "Ознаки", 10 | "Saved" : "Зачувано", 11 | "Title" : "Наслов", 12 | "Artist" : "Изведувач", 13 | "Album" : "Албум", 14 | "Genre" : "Жанр", 15 | "Year" : "Година", 16 | "Track" : "Патека", 17 | "Length" : "Должина", 18 | "Copyright" : "Авторско право", 19 | "Metadata" : "Метаподатоци", 20 | "Favorited" : "Омилени", 21 | "Favorite" : "Омилени", 22 | "Remove" : "Отстрани ", 23 | "Favorites" : "Омилени", 24 | "Unknown" : "Непознат", 25 | "URL" : "Адреса", 26 | "Cancel" : "Откажи", 27 | "Close" : "Затвори", 28 | "Settings" : "Параметри", 29 | "Advanced Settings" : "Напредни параметри" 30 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 31 | } -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Туслах", 6 | "Folders" : "Хавтсууд", 7 | "Tags" : "Tag-үүд", 8 | "Saved" : "Хадгалах", 9 | "Title" : "Цол/Албан тушаал", 10 | "Copyright" : "Зохиогчийн эрх", 11 | "Favorited" : "Онцолсон", 12 | "Favorite" : "Дуртай", 13 | "Remove" : "Устгах", 14 | "Favorites" : "Онцолсон", 15 | "Unknown" : "Үл танигдах зүйл", 16 | "URL" : "URL", 17 | "Cancel" : "болиулах", 18 | "Close" : "Хаах", 19 | "Settings" : "Тохиргоо" 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Туслах", 4 | "Folders" : "Хавтсууд", 5 | "Tags" : "Tag-үүд", 6 | "Saved" : "Хадгалах", 7 | "Title" : "Цол/Албан тушаал", 8 | "Copyright" : "Зохиогчийн эрх", 9 | "Favorited" : "Онцолсон", 10 | "Favorite" : "Дуртай", 11 | "Remove" : "Устгах", 12 | "Favorites" : "Онцолсон", 13 | "Unknown" : "Үл танигдах зүйл", 14 | "URL" : "URL", 15 | "Cancel" : "болиулах", 16 | "Close" : "Хаах", 17 | "Settings" : "Тохиргоо" 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/ms_MY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Bantuan", 6 | "Are you sure?" : "Anda pasti?", 7 | "Saved" : "Disimpan", 8 | "Title" : "Judul", 9 | "Remove" : "Buang", 10 | "Favorites" : "Favorites", 11 | "URL" : "URL", 12 | "Cancel" : "Batal", 13 | "Close" : "Tutup", 14 | "Settings" : "Tetapan" 15 | }, 16 | "nplurals=1; plural=0;"); 17 | -------------------------------------------------------------------------------- /l10n/ms_MY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Bantuan", 4 | "Are you sure?" : "Anda pasti?", 5 | "Saved" : "Disimpan", 6 | "Title" : "Judul", 7 | "Remove" : "Buang", 8 | "Favorites" : "Favorites", 9 | "URL" : "URL", 10 | "Cancel" : "Batal", 11 | "Close" : "Tutup", 12 | "Settings" : "Tetapan" 13 | },"pluralForm" :"nplurals=1; plural=0;" 14 | } -------------------------------------------------------------------------------- /l10n/nn_NO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Hjelp", 6 | "Tags" : "Emneord", 7 | "Saved" : "Lagra", 8 | "Title" : "Tittel", 9 | "Year" : "År", 10 | "Favorited" : "Lagt til som favoritt", 11 | "Favorite" : "Favoritt", 12 | "Remove" : "Fjern", 13 | "Favorites" : "Favorittar", 14 | "Unknown" : "Ukjend", 15 | "URL" : "URL", 16 | "Cancel" : "Avbryt", 17 | "Close" : "Lukk", 18 | "Settings" : "Innstillingar", 19 | "More information …" : "Meir informasjon…" 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/nn_NO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Hjelp", 4 | "Tags" : "Emneord", 5 | "Saved" : "Lagra", 6 | "Title" : "Tittel", 7 | "Year" : "År", 8 | "Favorited" : "Lagt til som favoritt", 9 | "Favorite" : "Favoritt", 10 | "Remove" : "Fjern", 11 | "Favorites" : "Favorittar", 12 | "Unknown" : "Ukjend", 13 | "URL" : "URL", 14 | "Cancel" : "Avbryt", 15 | "Close" : "Lukk", 16 | "Settings" : "Innstillingar", 17 | "More information …" : "Meir informasjon…" 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Seleccionat", 5 | "Options" : "Opcions", 6 | "Audio Player" : "Lector àudio", 7 | "Help" : "Ajuda", 8 | "New in" : "Nòu dins", 9 | "View changelog" : "Veire jornal de modificacions", 10 | "Are you sure?" : "O volètz vertadièrament ?", 11 | "Rename playlist" : "Renomenar la lista de lectura", 12 | "Selection" : "Seleccion", 13 | "Albums" : "Albums", 14 | "Artists" : "Artistas", 15 | "Folders" : "Repertòris", 16 | "Genres" : "Genres", 17 | "Titles" : "Títols", 18 | "Tags" : "Etiquetas", 19 | "Years" : "Annadas", 20 | "No data" : "Cap de donadas", 21 | "Saved" : "Enregistrat", 22 | "Title" : "Títol", 23 | "Subtitle" : "Sostítol", 24 | "Artist" : "Artista", 25 | "Composer" : "Compositor", 26 | "Album" : "Album", 27 | "Genre" : "Genre", 28 | "Year" : "Annada", 29 | "Disc" : "Disc", 30 | "Track" : "Pista", 31 | "Length" : "Longor", 32 | "MIME type" : "Tipe MIME", 33 | "Copyright" : "Drech d'autor", 34 | "Metadata" : "Metadonadas", 35 | "Favorited" : "Favorit", 36 | "Favorite" : "Favorit", 37 | "Remove" : "Suprimir", 38 | "Favorites" : "Favorits", 39 | "Unknown" : "Desconegut", 40 | "URL" : "URL", 41 | "Cancel" : "Anullar", 42 | "Close" : "Tampar", 43 | "Settings" : "Paramètres", 44 | "Advanced Settings" : "Paramètres avançats", 45 | "Scanner Settings" : "Paramètres del numerizador" 46 | }, 47 | "nplurals=2; plural=(n > 1);"); 48 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Seleccionat", 3 | "Options" : "Opcions", 4 | "Audio Player" : "Lector àudio", 5 | "Help" : "Ajuda", 6 | "New in" : "Nòu dins", 7 | "View changelog" : "Veire jornal de modificacions", 8 | "Are you sure?" : "O volètz vertadièrament ?", 9 | "Rename playlist" : "Renomenar la lista de lectura", 10 | "Selection" : "Seleccion", 11 | "Albums" : "Albums", 12 | "Artists" : "Artistas", 13 | "Folders" : "Repertòris", 14 | "Genres" : "Genres", 15 | "Titles" : "Títols", 16 | "Tags" : "Etiquetas", 17 | "Years" : "Annadas", 18 | "No data" : "Cap de donadas", 19 | "Saved" : "Enregistrat", 20 | "Title" : "Títol", 21 | "Subtitle" : "Sostítol", 22 | "Artist" : "Artista", 23 | "Composer" : "Compositor", 24 | "Album" : "Album", 25 | "Genre" : "Genre", 26 | "Year" : "Annada", 27 | "Disc" : "Disc", 28 | "Track" : "Pista", 29 | "Length" : "Longor", 30 | "MIME type" : "Tipe MIME", 31 | "Copyright" : "Drech d'autor", 32 | "Metadata" : "Metadonadas", 33 | "Favorited" : "Favorit", 34 | "Favorite" : "Favorit", 35 | "Remove" : "Suprimir", 36 | "Favorites" : "Favorits", 37 | "Unknown" : "Desconegut", 38 | "URL" : "URL", 39 | "Cancel" : "Anullar", 40 | "Close" : "Tampar", 41 | "Settings" : "Paramètres", 42 | "Advanced Settings" : "Paramètres avançats", 43 | "Scanner Settings" : "Paramètres del numerizador" 44 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 45 | } -------------------------------------------------------------------------------- /l10n/ps.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Help" : "مرسته", 5 | "Tags" : "نښکې", 6 | "Favorited" : "په نښه شو", 7 | "Favorite" : "په نښه شوی", 8 | "Favorites" : "په نښه شوي", 9 | "Cancel" : "پرېښول", 10 | "Close" : "بندول", 11 | "Settings" : "سمونې" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/ps.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Help" : "مرسته", 3 | "Tags" : "نښکې", 4 | "Favorited" : "په نښه شو", 5 | "Favorite" : "په نښه شوی", 6 | "Favorites" : "په نښه شوي", 7 | "Cancel" : "پرېښول", 8 | "Close" : "بندول", 9 | "Settings" : "سمونې" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selecionado", 5 | "Options" : "Opções", 6 | "Help" : "Ajuda", 7 | "New in" : "Novo em", 8 | "View changelog" : "Ver registo de alterações", 9 | "Are you sure?" : "Tem a certeza?", 10 | "Albums" : "Álbuns", 11 | "Folders" : "Pastas", 12 | "Tags" : "Etiquetas", 13 | "Saved" : "Guardado", 14 | "Title" : "Título", 15 | "Subtitle" : "Subtítulo ", 16 | "Year" : "Year", 17 | "Length" : "Comprimento", 18 | "Copyright" : "Direitos de Autor", 19 | "Metadata" : "Metadados", 20 | "Favorited" : "Nos Favoritos", 21 | "Favorite" : "Favorito", 22 | "Remove" : "Remover", 23 | "Favorites" : "Favoritos", 24 | "Unknown" : "Desconhecido", 25 | "URL" : "URL", 26 | "Cancel" : "Cancelar", 27 | "Close" : "Fechar", 28 | "Settings" : "Configurações", 29 | "Advanced Settings" : "Configurações avançadas " 30 | }, 31 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 32 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selecionado", 3 | "Options" : "Opções", 4 | "Help" : "Ajuda", 5 | "New in" : "Novo em", 6 | "View changelog" : "Ver registo de alterações", 7 | "Are you sure?" : "Tem a certeza?", 8 | "Albums" : "Álbuns", 9 | "Folders" : "Pastas", 10 | "Tags" : "Etiquetas", 11 | "Saved" : "Guardado", 12 | "Title" : "Título", 13 | "Subtitle" : "Subtítulo ", 14 | "Year" : "Year", 15 | "Length" : "Comprimento", 16 | "Copyright" : "Direitos de Autor", 17 | "Metadata" : "Metadados", 18 | "Favorited" : "Nos Favoritos", 19 | "Favorite" : "Favorito", 20 | "Remove" : "Remover", 21 | "Favorites" : "Favoritos", 22 | "Unknown" : "Desconhecido", 23 | "URL" : "URL", 24 | "Cancel" : "Cancelar", 25 | "Close" : "Fechar", 26 | "Settings" : "Configurações", 27 | "Advanced Settings" : "Configurações avançadas " 28 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 29 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Options" : "Opțiuni", 6 | "Album Covers" : "Coperte albume", 7 | "Welcome to" : "Bine ați venit la", 8 | "Audio Player" : "Player audio", 9 | "Help" : "Ajutor", 10 | "New in" : "Nou în", 11 | "View changelog" : "Vezi changelog", 12 | "Folders" : "Director", 13 | "Tags" : "Etichete", 14 | "Saved" : "Salvat", 15 | "Title" : "Titlu", 16 | "Year" : "An", 17 | "Favorited" : "Adăugate la favorite", 18 | "Favorite" : "Favorite", 19 | "Remove" : "Elimină", 20 | "Favorites" : "Favorite", 21 | "Unknown" : "Necunoscut", 22 | "URL" : "URL", 23 | "Cancel" : "Anulare", 24 | "Close" : "Închide", 25 | "Settings" : "Setări", 26 | "Advanced Settings" : "Setări avansate" 27 | }, 28 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 29 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Options" : "Opțiuni", 4 | "Album Covers" : "Coperte albume", 5 | "Welcome to" : "Bine ați venit la", 6 | "Audio Player" : "Player audio", 7 | "Help" : "Ajutor", 8 | "New in" : "Nou în", 9 | "View changelog" : "Vezi changelog", 10 | "Folders" : "Director", 11 | "Tags" : "Etichete", 12 | "Saved" : "Salvat", 13 | "Title" : "Titlu", 14 | "Year" : "An", 15 | "Favorited" : "Adăugate la favorite", 16 | "Favorite" : "Favorite", 17 | "Remove" : "Elimină", 18 | "Favorites" : "Favorite", 19 | "Unknown" : "Necunoscut", 20 | "URL" : "URL", 21 | "Cancel" : "Anulare", 22 | "Close" : "Închide", 23 | "Settings" : "Setări", 24 | "Advanced Settings" : "Setări avansate" 25 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 26 | } -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "තෝරා ඇත", 5 | "Help" : "උපකාර", 6 | "Years" : "වර්ෂ", 7 | "Year" : "වර්ෂය", 8 | "Length" : "දිග", 9 | "Copyright" : "ප්‍රකාශන හිමිකම", 10 | "Favorite" : "ප්‍රියතම", 11 | "Remove" : "ඉවත් කරන්න", 12 | "Favorites" : "ප්‍රියතම", 13 | "Unknown" : "නොදන්නා", 14 | "Cancel" : "අවලංගු කරන්න", 15 | "Close" : "වසන්න", 16 | "Settings" : "සැකසුම්" 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "තෝරා ඇත", 3 | "Help" : "උපකාර", 4 | "Years" : "වර්ෂ", 5 | "Year" : "වර්ෂය", 6 | "Length" : "දිග", 7 | "Copyright" : "ප්‍රකාශන හිමිකම", 8 | "Favorite" : "ප්‍රියතම", 9 | "Remove" : "ඉවත් කරන්න", 10 | "Favorites" : "ප්‍රියතම", 11 | "Unknown" : "නොදන්නා", 12 | "Cancel" : "අවලංගු කරන්න", 13 | "Close" : "වසන්න", 14 | "Settings" : "සැකසුම්" 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Ndihmë", 6 | "New in" : "I ri në ", 7 | "Folders" : "Dosjet", 8 | "Tags" : "Etiketat", 9 | "Saved" : "Ruajtur", 10 | "Title" : "Titulli", 11 | "Subtitle" : "Nëntitull", 12 | "Copyright" : "Të drejta kopjimi", 13 | "Favorited" : "U kalua e parapëlqyer", 14 | "Favorite" : "I/E Preferuar", 15 | "Remove" : "Hiq", 16 | "Favorites" : "Favorites", 17 | "Unknown" : "I/E panjohur", 18 | "URL" : "Url", 19 | "Cancel" : "Anullo", 20 | "Close" : "Mbylleni", 21 | "Settings" : "Rregullimet", 22 | "Advanced Settings" : "Cilësime të Avancuara" 23 | }, 24 | "nplurals=2; plural=(n != 1);"); 25 | -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Ndihmë", 4 | "New in" : "I ri në ", 5 | "Folders" : "Dosjet", 6 | "Tags" : "Etiketat", 7 | "Saved" : "Ruajtur", 8 | "Title" : "Titulli", 9 | "Subtitle" : "Nëntitull", 10 | "Copyright" : "Të drejta kopjimi", 11 | "Favorited" : "U kalua e parapëlqyer", 12 | "Favorite" : "I/E Preferuar", 13 | "Remove" : "Hiq", 14 | "Favorites" : "Favorites", 15 | "Unknown" : "I/E panjohur", 16 | "URL" : "Url", 17 | "Cancel" : "Anullo", 18 | "Close" : "Mbylleni", 19 | "Settings" : "Rregullimet", 20 | "Advanced Settings" : "Cilësime të Avancuara" 21 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 22 | } -------------------------------------------------------------------------------- /l10n/sr@latin.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Pomoć", 6 | "Tags" : "Oznake", 7 | "Title" : "Naslov", 8 | "Favorite" : "Omiljene", 9 | "Remove" : "Ukloni", 10 | "Favorites" : "Omiljene", 11 | "Unknown" : "Nepoznato", 12 | "URL" : "Url", 13 | "Cancel" : "Otkaži", 14 | "Close" : "Zatvori", 15 | "Settings" : "Поставке", 16 | "Advanced Settings" : "Napredna podešavanja" 17 | }, 18 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 19 | -------------------------------------------------------------------------------- /l10n/sr@latin.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Pomoć", 4 | "Tags" : "Oznake", 5 | "Title" : "Naslov", 6 | "Favorite" : "Omiljene", 7 | "Remove" : "Ukloni", 8 | "Favorites" : "Omiljene", 9 | "Unknown" : "Nepoznato", 10 | "URL" : "Url", 11 | "Cancel" : "Otkaži", 12 | "Close" : "Zatvori", 13 | "Settings" : "Поставке", 14 | "Advanced Settings" : "Napredna podešavanja" 15 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 16 | } -------------------------------------------------------------------------------- /l10n/sv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Vald", 5 | "Options" : "Alternativ", 6 | "Welcome to" : "Välkommen till", 7 | "Help" : "Hjälp", 8 | "New in" : "Ny i", 9 | "View changelog" : "Visa ändringslogg", 10 | "Are you sure?" : "Är du säker?", 11 | "Delete playlist" : "Radera spellista", 12 | "Play/Pause" : "Spela/paus", 13 | "Selection" : "Markerade", 14 | "Albums" : "Album", 15 | "Folders" : "Mappar", 16 | "Tags" : "Taggar", 17 | "Years" : "År", 18 | "No data" : "Inga data", 19 | "Saved" : "Sparat", 20 | "Title" : "Titel", 21 | "Subtitle" : "Underrubrik", 22 | "Artist" : "Artist", 23 | "Album" : "Album", 24 | "Genre" : "Genre", 25 | "Year" : "År", 26 | "Length" : "Längd", 27 | "Copyright" : "Copyright", 28 | "Metadata" : "Metadata", 29 | "Favorited" : "Favorit", 30 | "Favorite" : "Favorit", 31 | "Remove" : "Ta bort", 32 | "Favorites" : "Favoriter", 33 | "Unknown" : "Okänd", 34 | "URL" : "Webbadress", 35 | "Cancel" : "Avbryt", 36 | "Close" : "Stäng", 37 | "Settings" : "Inställningar", 38 | "Advanced Settings" : "Avancerade inställningar", 39 | "Do you like this app?" : "Gillar du den här appen?", 40 | "More information …" : "Mer information …", 41 | "Search for audio files in" : "Sök efter ljudfiler i" 42 | }, 43 | "nplurals=2; plural=(n != 1);"); 44 | -------------------------------------------------------------------------------- /l10n/sv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Vald", 3 | "Options" : "Alternativ", 4 | "Welcome to" : "Välkommen till", 5 | "Help" : "Hjälp", 6 | "New in" : "Ny i", 7 | "View changelog" : "Visa ändringslogg", 8 | "Are you sure?" : "Är du säker?", 9 | "Delete playlist" : "Radera spellista", 10 | "Play/Pause" : "Spela/paus", 11 | "Selection" : "Markerade", 12 | "Albums" : "Album", 13 | "Folders" : "Mappar", 14 | "Tags" : "Taggar", 15 | "Years" : "År", 16 | "No data" : "Inga data", 17 | "Saved" : "Sparat", 18 | "Title" : "Titel", 19 | "Subtitle" : "Underrubrik", 20 | "Artist" : "Artist", 21 | "Album" : "Album", 22 | "Genre" : "Genre", 23 | "Year" : "År", 24 | "Length" : "Längd", 25 | "Copyright" : "Copyright", 26 | "Metadata" : "Metadata", 27 | "Favorited" : "Favorit", 28 | "Favorite" : "Favorit", 29 | "Remove" : "Ta bort", 30 | "Favorites" : "Favoriter", 31 | "Unknown" : "Okänd", 32 | "URL" : "Webbadress", 33 | "Cancel" : "Avbryt", 34 | "Close" : "Stäng", 35 | "Settings" : "Inställningar", 36 | "Advanced Settings" : "Avancerade inställningar", 37 | "Do you like this app?" : "Gillar du den här appen?", 38 | "More information …" : "Mer information …", 39 | "Search for audio files in" : "Sök efter ljudfiler i" 40 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 41 | } -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "உதவி", 6 | "Tags" : "சீட்டுகள்", 7 | "Title" : "தலைப்பு", 8 | "Favorite" : "விருப்பமான", 9 | "Remove" : "அகற்றுக", 10 | "Favorites" : "விருப்பங்கள்", 11 | "Unknown" : "தெரியாத", 12 | "URL" : "URL", 13 | "Cancel" : "இரத்து செய்க", 14 | "Close" : "மூடுக", 15 | "Settings" : "அமைப்புகள்" 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "உதவி", 4 | "Tags" : "சீட்டுகள்", 5 | "Title" : "தலைப்பு", 6 | "Favorite" : "விருப்பமான", 7 | "Remove" : "அகற்றுக", 8 | "Favorites" : "விருப்பங்கள்", 9 | "Unknown" : "தெரியாத", 10 | "URL" : "URL", 11 | "Cancel" : "இரத்து செய்க", 12 | "Close" : "மூடுக", 13 | "Settings" : "அமைப்புகள்" 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "เลือกแล้ว", 5 | "Options" : "ตัวเลือก", 6 | "Album Covers" : "ภาพอัลบั้ม", 7 | "List View" : "มุมมองแบบลิสต์", 8 | "Welcome to" : "ยินดีต้อนรับสู่", 9 | "Audio Player" : "เครื่องเล่นเพลง", 10 | "Scan for new audio files" : "แสกนสำหรับไฟล์เสียงใหม่", 11 | "Add new tracks to library" : "เพิ่มไฟล์เสียงใหม่ไปยังไลบราลี่", 12 | "Help" : "ช่วยเหลือ", 13 | "New in" : "ใหม่ใน", 14 | "View changelog" : "ดูบันทึกการเปลี่ยนแปลง", 15 | "New or updated audio files available" : "มีไฟล์เสียงอันใหม่หรืออัพเดทใหม่", 16 | "No playlist selected!" : "ไม่ได้เลือกเพลลิสต์!", 17 | "Are you sure?" : "คุณแน่ใจหรือไม่?", 18 | "Delete playlist" : "ลบเพลลิสต์", 19 | "Albums" : "อัลบั้ม", 20 | "Folders" : "โฟลเดอร์", 21 | "Titles" : "ชื่อเพลง", 22 | "Tags" : "แท็ก", 23 | "Playback error" : "การเล่นผิดพลาด", 24 | "Saved" : "บันทึกแล้ว", 25 | "Title" : "ชื่อเรื่อง", 26 | "Subtitle" : "คำบรรยายภาพ", 27 | "Year" : "ปี", 28 | "Disc" : "แผ่นที่", 29 | "Track" : "เพลงที่", 30 | "Length" : "ความยาวเพลง", 31 | "Bitrate" : "บิตเรท", 32 | "MIME type" : "ชนิดของ MIME", 33 | "Copyright" : "ลิขสิทธิ์", 34 | "Favorited" : "เพิ่มในรายการโปรดแล้ว", 35 | "Favorite" : "รายการโปรด", 36 | "Remove" : "ลบออก", 37 | "SONOS playback" : "เล่นจาก SONOS", 38 | "Favorites" : "รายการโปรด", 39 | "Recently Played" : "เพลงที่พิ่งเล่นไป", 40 | "Most Played" : "เพลงที่เล่นมากที่สุด", 41 | "50 Random Tracks" : "สุ่ม 50 แทร็ค", 42 | "Unknown" : "ไม่ทราบ", 43 | "URL" : "URL", 44 | "Various Artists" : "มีศิลปินหลายคน", 45 | "Scanning finished!" : "แสกนเสร็จเรียบร้อย!", 46 | "Audios found:" : "ไฟล์เสียงที่พบ : ", 47 | "Errors:" : "ข้อผิดพลาด : ", 48 | "Duplicates found:" : "ไฟล์ซ้ำ : ", 49 | "Volume" : "ระดับเสียง", 50 | "Repeat title/list" : "เล่นเพลง/ลิสต์ซ้ำ", 51 | "Shuffle playlist" : "สุ่มเพลลิสต์", 52 | "Scan for audio files" : "ค้นหาไฟล์เสียง", 53 | "Start scanning …" : "เริ่มต้นแสกน ...", 54 | "Cancel" : "ยกเลิก", 55 | "Close" : "ปิด", 56 | "Create new playlist" : "สร้างเพลลิสต์ใหม่", 57 | "Repeat playlist" : "วนซ้ำทั้งเพลลิสต์", 58 | "Volume up" : "เพิ่มเสียง", 59 | "Volume down" : "ลดเสียง", 60 | "Settings" : "การตั้งค่า", 61 | "SONOS Playback" : "เล่นจาก SONOS", 62 | "Advanced Settings" : "การตั้งค่าขั้นสูง", 63 | "Do you like this app?" : "คุณชอบแอปนี้หรือไม่?", 64 | "More information …" : "ข้อมูลเพิ่มเติม ...", 65 | "Scanner Settings" : "ตั้งค่าการแสกนไฟล์", 66 | "Search for audio files in" : "ค้นหาไฟล์เสียงใน", 67 | "Formats supported by the browser" : "ชนิดไฟล์เสียงที่รองรับโดยบราวเซอร์", 68 | "Formats not supported by the browser" : "ชนิดไฟล์เสียงที่ไม่รองรับโดยบราวเซอร์" 69 | }, 70 | "nplurals=1; plural=0;"); 71 | -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "เลือกแล้ว", 3 | "Options" : "ตัวเลือก", 4 | "Album Covers" : "ภาพอัลบั้ม", 5 | "List View" : "มุมมองแบบลิสต์", 6 | "Welcome to" : "ยินดีต้อนรับสู่", 7 | "Audio Player" : "เครื่องเล่นเพลง", 8 | "Scan for new audio files" : "แสกนสำหรับไฟล์เสียงใหม่", 9 | "Add new tracks to library" : "เพิ่มไฟล์เสียงใหม่ไปยังไลบราลี่", 10 | "Help" : "ช่วยเหลือ", 11 | "New in" : "ใหม่ใน", 12 | "View changelog" : "ดูบันทึกการเปลี่ยนแปลง", 13 | "New or updated audio files available" : "มีไฟล์เสียงอันใหม่หรืออัพเดทใหม่", 14 | "No playlist selected!" : "ไม่ได้เลือกเพลลิสต์!", 15 | "Are you sure?" : "คุณแน่ใจหรือไม่?", 16 | "Delete playlist" : "ลบเพลลิสต์", 17 | "Albums" : "อัลบั้ม", 18 | "Folders" : "โฟลเดอร์", 19 | "Titles" : "ชื่อเพลง", 20 | "Tags" : "แท็ก", 21 | "Playback error" : "การเล่นผิดพลาด", 22 | "Saved" : "บันทึกแล้ว", 23 | "Title" : "ชื่อเรื่อง", 24 | "Subtitle" : "คำบรรยายภาพ", 25 | "Year" : "ปี", 26 | "Disc" : "แผ่นที่", 27 | "Track" : "เพลงที่", 28 | "Length" : "ความยาวเพลง", 29 | "Bitrate" : "บิตเรท", 30 | "MIME type" : "ชนิดของ MIME", 31 | "Copyright" : "ลิขสิทธิ์", 32 | "Favorited" : "เพิ่มในรายการโปรดแล้ว", 33 | "Favorite" : "รายการโปรด", 34 | "Remove" : "ลบออก", 35 | "SONOS playback" : "เล่นจาก SONOS", 36 | "Favorites" : "รายการโปรด", 37 | "Recently Played" : "เพลงที่พิ่งเล่นไป", 38 | "Most Played" : "เพลงที่เล่นมากที่สุด", 39 | "50 Random Tracks" : "สุ่ม 50 แทร็ค", 40 | "Unknown" : "ไม่ทราบ", 41 | "URL" : "URL", 42 | "Various Artists" : "มีศิลปินหลายคน", 43 | "Scanning finished!" : "แสกนเสร็จเรียบร้อย!", 44 | "Audios found:" : "ไฟล์เสียงที่พบ : ", 45 | "Errors:" : "ข้อผิดพลาด : ", 46 | "Duplicates found:" : "ไฟล์ซ้ำ : ", 47 | "Volume" : "ระดับเสียง", 48 | "Repeat title/list" : "เล่นเพลง/ลิสต์ซ้ำ", 49 | "Shuffle playlist" : "สุ่มเพลลิสต์", 50 | "Scan for audio files" : "ค้นหาไฟล์เสียง", 51 | "Start scanning …" : "เริ่มต้นแสกน ...", 52 | "Cancel" : "ยกเลิก", 53 | "Close" : "ปิด", 54 | "Create new playlist" : "สร้างเพลลิสต์ใหม่", 55 | "Repeat playlist" : "วนซ้ำทั้งเพลลิสต์", 56 | "Volume up" : "เพิ่มเสียง", 57 | "Volume down" : "ลดเสียง", 58 | "Settings" : "การตั้งค่า", 59 | "SONOS Playback" : "เล่นจาก SONOS", 60 | "Advanced Settings" : "การตั้งค่าขั้นสูง", 61 | "Do you like this app?" : "คุณชอบแอปนี้หรือไม่?", 62 | "More information …" : "ข้อมูลเพิ่มเติม ...", 63 | "Scanner Settings" : "ตั้งค่าการแสกนไฟล์", 64 | "Search for audio files in" : "ค้นหาไฟล์เสียงใน", 65 | "Formats supported by the browser" : "ชนิดไฟล์เสียงที่รองรับโดยบราวเซอร์", 66 | "Formats not supported by the browser" : "ชนิดไฟล์เสียงที่ไม่รองรับโดยบราวเซอร์" 67 | },"pluralForm" :"nplurals=1; plural=0;" 68 | } -------------------------------------------------------------------------------- /l10n/tk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Help" : "Kömek", 5 | "Tags" : "Bellikler", 6 | "Favorite" : "Halaýan", 7 | "Remove" : "Aýyrmak", 8 | "Favorites" : "Halanýanlar", 9 | "Unknown" : "Näbelli", 10 | "Cancel" : "ýatyrmak", 11 | "Close" : "Ýap", 12 | "Settings" : "Sazlamalar" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/tk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Help" : "Kömek", 3 | "Tags" : "Bellikler", 4 | "Favorite" : "Halaýan", 5 | "Remove" : "Aýyrmak", 6 | "Favorites" : "Halanýanlar", 7 | "Unknown" : "Näbelli", 8 | "Cancel" : "ýatyrmak", 9 | "Close" : "Ýap", 10 | "Settings" : "Sazlamalar" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/uk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Options" : "Параметри", 6 | "Album Covers" : "Обкладинки альбомів ", 7 | "List View" : "Перегляд списку ", 8 | "Welcome to" : "Ласкаво просимо до ", 9 | "Audio Player" : "Аудіоплеєр ", 10 | "Add new tracks to playlist by drag and drop" : "Додавання нових треків до плейлиста перетягуванням", 11 | "Scan for new audio files" : "Сканування на наявність нових аудіофайлів ", 12 | "Add new tracks to library" : "Додати нові треки до бібліотеки", 13 | "Help" : "Допомога", 14 | "New in" : "Нові можливості", 15 | "View changelog" : "Переглянути журнал змін", 16 | "New or updated audio files available" : "Доступні нові або оновлені аудіофайли ", 17 | "No playlist selected!" : "Не вибрано жодного плейлиста!", 18 | "Sort modus active" : "Режим впорядкування активний", 19 | "Are you sure?" : "Ви впевнені?", 20 | "Delete playlist" : "Вилучити список програвання", 21 | "Playlist successfully deleted!" : "Список програвання було успішно вилучено! ", 22 | "Sort playlist" : "Впорядкування плейлиста ", 23 | "Rename playlist" : "Перейменувати плейлист ", 24 | "Previous track" : "Попередній трек ", 25 | "Play/Pause" : "Відтворення/Пауза ", 26 | "Next track" : "Наступний трек ", 27 | "Selection" : "Вибір", 28 | "Playlists" : "Плейлисти ", 29 | "Albums" : "Альбоми", 30 | "Folders" : "Каталог", 31 | "Genres" : "Жанри ", 32 | "Tags" : "Мітки", 33 | "Years" : "Роки ", 34 | "No data" : "Немає даних", 35 | "Playback error" : "Помилка відтворення ", 36 | "Saved" : "Збережено", 37 | "Select a single folder with audio files" : "Виберіть один каталог з аудіофайлами ", 38 | "Invalid path!" : "Помилковий шлях!", 39 | "Title" : "Назва", 40 | "Subtitle" : "Субтитри ", 41 | "Year" : "рік", 42 | "Track" : "Шлях", 43 | "Copyright" : "Права на копіюівння", 44 | "Metadata" : "Метадані", 45 | "Favorited" : "Із зірочкою", 46 | "Favorite" : "Із зірочкою", 47 | "Remove" : "Вилучити", 48 | "Favorites" : "Із зірочкою", 49 | "Unknown" : "Невідомо", 50 | "URL" : "URL-адреса", 51 | "If rescan does not solve this problem the files are broken" : "Якщо повторне сканування не вирішить цю проблему, то це означає, що файли пошкоджено", 52 | "Cancel" : "Скасувати", 53 | "Close" : "закрити", 54 | "Settings" : "Налаштування", 55 | "Advanced Settings" : "Розширені", 56 | "Do you like this app?" : "Чи вам до вподоби цей застосунок?", 57 | "More information …" : "Більше інформації …" 58 | }, 59 | "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); 60 | -------------------------------------------------------------------------------- /l10n/uk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Options" : "Параметри", 4 | "Album Covers" : "Обкладинки альбомів ", 5 | "List View" : "Перегляд списку ", 6 | "Welcome to" : "Ласкаво просимо до ", 7 | "Audio Player" : "Аудіоплеєр ", 8 | "Add new tracks to playlist by drag and drop" : "Додавання нових треків до плейлиста перетягуванням", 9 | "Scan for new audio files" : "Сканування на наявність нових аудіофайлів ", 10 | "Add new tracks to library" : "Додати нові треки до бібліотеки", 11 | "Help" : "Допомога", 12 | "New in" : "Нові можливості", 13 | "View changelog" : "Переглянути журнал змін", 14 | "New or updated audio files available" : "Доступні нові або оновлені аудіофайли ", 15 | "No playlist selected!" : "Не вибрано жодного плейлиста!", 16 | "Sort modus active" : "Режим впорядкування активний", 17 | "Are you sure?" : "Ви впевнені?", 18 | "Delete playlist" : "Вилучити список програвання", 19 | "Playlist successfully deleted!" : "Список програвання було успішно вилучено! ", 20 | "Sort playlist" : "Впорядкування плейлиста ", 21 | "Rename playlist" : "Перейменувати плейлист ", 22 | "Previous track" : "Попередній трек ", 23 | "Play/Pause" : "Відтворення/Пауза ", 24 | "Next track" : "Наступний трек ", 25 | "Selection" : "Вибір", 26 | "Playlists" : "Плейлисти ", 27 | "Albums" : "Альбоми", 28 | "Folders" : "Каталог", 29 | "Genres" : "Жанри ", 30 | "Tags" : "Мітки", 31 | "Years" : "Роки ", 32 | "No data" : "Немає даних", 33 | "Playback error" : "Помилка відтворення ", 34 | "Saved" : "Збережено", 35 | "Select a single folder with audio files" : "Виберіть один каталог з аудіофайлами ", 36 | "Invalid path!" : "Помилковий шлях!", 37 | "Title" : "Назва", 38 | "Subtitle" : "Субтитри ", 39 | "Year" : "рік", 40 | "Track" : "Шлях", 41 | "Copyright" : "Права на копіюівння", 42 | "Metadata" : "Метадані", 43 | "Favorited" : "Із зірочкою", 44 | "Favorite" : "Із зірочкою", 45 | "Remove" : "Вилучити", 46 | "Favorites" : "Із зірочкою", 47 | "Unknown" : "Невідомо", 48 | "URL" : "URL-адреса", 49 | "If rescan does not solve this problem the files are broken" : "Якщо повторне сканування не вирішить цю проблему, то це означає, що файли пошкоджено", 50 | "Cancel" : "Скасувати", 51 | "Close" : "закрити", 52 | "Settings" : "Налаштування", 53 | "Advanced Settings" : "Розширені", 54 | "Do you like this app?" : "Чи вам до вподоби цей застосунок?", 55 | "More information …" : "Більше інформації …" 56 | },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" 57 | } -------------------------------------------------------------------------------- /l10n/ur_PK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "مدد", 6 | "Title" : "عنوان", 7 | "Favorites" : "Favorites", 8 | "URL" : "یو ار ایل", 9 | "Cancel" : "منسوخ کریں", 10 | "Close" : "بند ", 11 | "Settings" : "سیٹینگز" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/ur_PK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "مدد", 4 | "Title" : "عنوان", 5 | "Favorites" : "Favorites", 6 | "URL" : "یو ار ایل", 7 | "Cancel" : "منسوخ کریں", 8 | "Close" : "بند ", 9 | "Settings" : "سیٹینگز" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Options" : "Variantlar", 5 | "Help" : "Help", 6 | "New in" : "Yangi kiritish", 7 | "View changelog" : "O'zgarishlar jurnalini ko'rish", 8 | "Are you sure?" : "Ishonchingiz komilmi?", 9 | "Selection" : "Tanlash", 10 | "Tags" : "Tags", 11 | "No data" : "Maʼlumot yoʻq", 12 | "Saved" : "Saved", 13 | "Title" : "Sarlavha", 14 | "Year" : "Yil", 15 | "Favorited" : "Favorited", 16 | "Favorite" : "Favorite", 17 | "Remove" : "Remove", 18 | "Favorites" : "Favorites", 19 | "Unknown" : "Unknown", 20 | "Cancel" : "Cancel", 21 | "Close" : "Close", 22 | "Settings" : "Settings", 23 | "Advanced Settings" : "Kengaytirilgan sozlamalar", 24 | "Do you like this app?" : "Bu ilova sizga yoqdimi?", 25 | "More information …" : "Batafsil ma'lumot…" 26 | }, 27 | "nplurals=1; plural=0;"); 28 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Options" : "Variantlar", 3 | "Help" : "Help", 4 | "New in" : "Yangi kiritish", 5 | "View changelog" : "O'zgarishlar jurnalini ko'rish", 6 | "Are you sure?" : "Ishonchingiz komilmi?", 7 | "Selection" : "Tanlash", 8 | "Tags" : "Tags", 9 | "No data" : "Maʼlumot yoʻq", 10 | "Saved" : "Saved", 11 | "Title" : "Sarlavha", 12 | "Year" : "Yil", 13 | "Favorited" : "Favorited", 14 | "Favorite" : "Favorite", 15 | "Remove" : "Remove", 16 | "Favorites" : "Favorites", 17 | "Unknown" : "Unknown", 18 | "Cancel" : "Cancel", 19 | "Close" : "Close", 20 | "Settings" : "Settings", 21 | "Advanced Settings" : "Kengaytirilgan sozlamalar", 22 | "Do you like this app?" : "Bu ilova sizga yoqdimi?", 23 | "More information …" : "Batafsil ma'lumot…" 24 | },"pluralForm" :"nplurals=1; plural=0;" 25 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "audioplayer", 3 | { 4 | "Selected" : "Selected", 5 | "Help" : "Trợ giúp", 6 | "New in" : "Mới trong", 7 | "View changelog" : "Xem nhật ký thay đổi", 8 | "Are you sure?" : "Bạn chắc chắn?", 9 | "Selection" : "Lựa chọn", 10 | "Folders" : "Thư mục", 11 | "Tags" : "Nhãn", 12 | "Years" : "Năm", 13 | "Saved" : "Đã lưu", 14 | "Title" : "Tiêu đề", 15 | "Year" : "Năm", 16 | "Copyright" : "Bản quyền", 17 | "Favorited" : "Được ưa thích", 18 | "Favorite" : "Ưa thích", 19 | "Remove" : "Xoá", 20 | "Favorites" : "Ưa thích", 21 | "Unknown" : "Không xác định", 22 | "URL" : "URL", 23 | "Cancel" : "Hủy", 24 | "Close" : "Đóng", 25 | "Settings" : "Cài đặt", 26 | "Advanced Settings" : "Cài đặt nâng cao" 27 | }, 28 | "nplurals=1; plural=0;"); 29 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Selected" : "Selected", 3 | "Help" : "Trợ giúp", 4 | "New in" : "Mới trong", 5 | "View changelog" : "Xem nhật ký thay đổi", 6 | "Are you sure?" : "Bạn chắc chắn?", 7 | "Selection" : "Lựa chọn", 8 | "Folders" : "Thư mục", 9 | "Tags" : "Nhãn", 10 | "Years" : "Năm", 11 | "Saved" : "Đã lưu", 12 | "Title" : "Tiêu đề", 13 | "Year" : "Năm", 14 | "Copyright" : "Bản quyền", 15 | "Favorited" : "Được ưa thích", 16 | "Favorite" : "Ưa thích", 17 | "Remove" : "Xoá", 18 | "Favorites" : "Ưa thích", 19 | "Unknown" : "Không xác định", 20 | "URL" : "URL", 21 | "Cancel" : "Hủy", 22 | "Close" : "Đóng", 23 | "Settings" : "Cài đặt", 24 | "Advanced Settings" : "Cài đặt nâng cao" 25 | },"pluralForm" :"nplurals=1; plural=0;" 26 | } -------------------------------------------------------------------------------- /lib/AppInfo/Application.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2020 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\AppInfo; 13 | 14 | use OCA\audioplayer\Dashboard\Widget; 15 | use OCA\audioplayer\Listener\LoadAdditionalScripts; 16 | use OCA\audioplayer\Search\Provider; 17 | use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent; 18 | use OCP\AppFramework\App; 19 | use OCP\AppFramework\Bootstrap\IBootContext; 20 | use OCP\AppFramework\Bootstrap\IBootstrap; 21 | use OCP\AppFramework\Bootstrap\IRegistrationContext; 22 | use OCP\Util; 23 | 24 | class Application extends App implements IBootstrap 25 | { 26 | public const APP_ID = 'audioplayer'; 27 | 28 | public function __construct(array $urlParams = []) 29 | { 30 | parent::__construct(self::APP_ID, $urlParams); 31 | } 32 | 33 | public function register(IRegistrationContext $context): void 34 | { 35 | $context->registerDashboardWidget(Widget::class); 36 | $context->registerEventListener(BeforeTemplateRenderedEvent::class, LoadAdditionalScripts::class); 37 | $context->registerSearchProvider(Provider::class); 38 | $this->registerFileHooks(); 39 | $this->registerUserHooks(); 40 | } 41 | 42 | protected function registerFileHooks() 43 | { 44 | Util::connectHook( 45 | 'OC_Filesystem', 'delete', '\OCA\audioplayer\Hooks\FileHooks', 'deleteTrack' 46 | ); 47 | } 48 | 49 | protected function registerUserHooks() 50 | { 51 | Util::connectHook( 52 | 'OC_User', 'post_deleteUser', '\OCA\audioplayer\Hooks\UserHooks', 'deleteUser' 53 | ); 54 | } 55 | 56 | public function boot(IBootContext $context): void 57 | { 58 | } 59 | 60 | } -------------------------------------------------------------------------------- /lib/Command/Reset.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Command; 13 | use Symfony\Component\Console\Command\Command; 14 | use Symfony\Component\Console\Input\InputArgument; 15 | use Symfony\Component\Console\Input\InputInterface; 16 | use Symfony\Component\Console\Input\InputOption; 17 | use Symfony\Component\Console\Output\OutputInterface; 18 | use OCA\audioplayer\Controller\DbController; 19 | 20 | class Reset extends Command { 21 | private $userManager; 22 | private $DBController; 23 | 24 | public function __construct(\OCP\IUserManager $userManager, DbController $DBController) 25 | { 26 | $this->userManager = $userManager; 27 | $this->DBController = $DBController; 28 | parent::__construct(); 29 | } 30 | 31 | protected function configure() { 32 | $this 33 | ->setName('audioplayer:reset') 34 | ->setDescription('reset audio player library') 35 | ->addArgument( 36 | 'user_id', 37 | InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 38 | 'reset the whole library of the given user(s)' 39 | ) 40 | ->addOption( 41 | 'all', 42 | null, 43 | InputOption::VALUE_NONE, 44 | 'reset the whole library of all known users' 45 | ) 46 | ; 47 | } 48 | 49 | protected function execute(InputInterface $input, OutputInterface $output) { 50 | if ($input->getOption('all')) { 51 | $users = $this->userManager->search(''); 52 | } else { 53 | $users = $input->getArgument('user_id'); 54 | } 55 | 56 | if (count($users) === 0) { 57 | $output->writeln("Please specify a valid user id to reset, \"--all\" to scan for all users"); 58 | return 1; 59 | } 60 | 61 | foreach ($users as $userId) { 62 | if (is_object($userId)) $user = $userId; 63 | else $user = $this->userManager->get($userId); 64 | 65 | if ($user === null) { 66 | $output->writeln("User $userId does not exist"); 67 | } else { 68 | $userId = $user->getUID(); 69 | $output->writeln("Reset library for $userId"); 70 | $this->DBController->resetMediaLibrary($userId, $output); 71 | } 72 | } 73 | return 0; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /lib/Command/Scan.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Command; 13 | use Symfony\Component\Console\Command\Command; 14 | use Symfony\Component\Console\Input\InputArgument; 15 | use Symfony\Component\Console\Input\InputInterface; 16 | use Symfony\Component\Console\Input\InputOption; 17 | use Symfony\Component\Console\Output\OutputInterface; 18 | 19 | class Scan extends Command { 20 | private $userManager; 21 | private $scanner; 22 | public function __construct( 23 | \OCP\IUserManager $userManager, 24 | $scanner 25 | ) { 26 | $this->userManager = $userManager; 27 | $this->scanner = $scanner; 28 | parent::__construct(); 29 | } 30 | 31 | protected function configure() { 32 | $this 33 | ->setName('audioplayer:scan') 34 | ->setDescription('scan for new audio files; use -v for debugging') 35 | ->addArgument( 36 | 'user_id', 37 | InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 38 | 'scan all audio files of the given user(s)' 39 | ) 40 | ->addOption( 41 | 'all', 42 | null, 43 | InputOption::VALUE_NONE, 44 | 'scan all audio files of all known users' 45 | ) 46 | ; 47 | } 48 | 49 | protected function execute(InputInterface $input, OutputInterface $output) { 50 | # restrict the verbosity level to VERBOSITY_VERY_VERBOSE 51 | if ($output->getVerbosity() > OutputInterface::VERBOSITY_VERY_VERBOSE) { 52 | $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE); 53 | } 54 | 55 | if ($input->getOption('all')) { 56 | $users = $this->userManager->search(''); 57 | } else { 58 | $users = $input->getArgument('user_id'); 59 | } 60 | 61 | if (count($users) === 0) { 62 | $output->writeln("Please specify a valid user id to scan, \"--all\" to scan for all users"); 63 | return 1; 64 | } 65 | 66 | foreach ($users as $userId) { 67 | if (is_object($userId)) $user = $userId; 68 | else $user = $this->userManager->get($userId); 69 | 70 | if ($user === null) { 71 | $output->writeln("User $userId does not exist"); 72 | } else { 73 | $userId = $user->getUID(); 74 | $output->writeln("Start scan for $userId"); 75 | $this->scanner->scanForAudios($userId, $output); 76 | } 77 | } 78 | return 0; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /lib/Controller/PageController.php: -------------------------------------------------------------------------------- 1 | 9 | * @author Sebastian Doell 10 | * @copyright 2016-2021 Marcel Scherello 11 | * @copyright 2015 Sebastian Doell 12 | */ 13 | 14 | namespace OCA\audioplayer\Controller; 15 | 16 | use OCA\audioplayer\Event\LoadAdditionalScriptsEvent; 17 | use OCP\AppFramework\Controller; 18 | use OCP\AppFramework\Http\TemplateResponse; 19 | use OCP\IRequest; 20 | use OCP\IConfig; 21 | use OCP\IL10N; 22 | use OCP\AppFramework\Http\ContentSecurityPolicy; 23 | use OCP\EventDispatcher\IEventDispatcher; 24 | 25 | /** 26 | * Controller class for main page. 27 | */ 28 | class PageController extends Controller 29 | { 30 | 31 | private $userId; 32 | private $l10n; 33 | private $configManager; 34 | /** @var IEventDispatcher */ 35 | protected $eventDispatcher; 36 | 37 | 38 | public function __construct( 39 | $appName, 40 | IRequest $request, 41 | $userId, 42 | IConfig $configManager, 43 | IEventDispatcher $eventDispatcher, 44 | IL10N $l10n 45 | ) 46 | { 47 | parent::__construct($appName, $request); 48 | $this->appName = $appName; 49 | $this->userId = $userId; 50 | $this->configManager = $configManager; 51 | $this->l10n = $l10n; 52 | $this->eventDispatcher = $eventDispatcher; 53 | } 54 | 55 | /** 56 | * @NoAdminRequired 57 | * @NoCSRFRequired 58 | * @throws \OCP\PreConditionNotMetException 59 | */ 60 | public function index() 61 | { 62 | 63 | if ($this->configManager->getAppValue('audioplayer_sonos', 'enabled') === "yes" AND $this->configManager->getAppValue('audioplayer_sonos', 'sonos') === "checked") { 64 | $audioplayer_sonos = $this->configManager->getUserValue($this->userId, 'audioplayer_sonos', 'sonos') ?: false; 65 | } else { 66 | $audioplayer_sonos = false; 67 | } 68 | 69 | $event = new LoadAdditionalScriptsEvent(); 70 | $this->eventDispatcher->dispatchTyped($event); 71 | 72 | $response = new TemplateResponse('audioplayer', 'index'); 73 | $csp = new ContentSecurityPolicy(); 74 | $csp->addAllowedMediaDomain('*'); //required for external m3u playlists 75 | $response->setContentSecurityPolicy($csp); 76 | $response->setParams([ 77 | 'audioplayer_navigationShown' => $this->configManager->getUserValue($this->userId, $this->appName, 'navigation'), 78 | 'audioplayer_view' => $this->configManager->getUserValue($this->userId, $this->appName, 'view') ?: 'pictures', 79 | 'audioplayer_volume' => $this->configManager->getUserValue($this->userId, $this->appName, 'volume') ?: '1', 80 | 'audioplayer_repeat' => $this->configManager->getUserValue($this->userId, $this->appName, 'repeat') ?: 'none', 81 | 'audioplayer_sonos' => $audioplayer_sonos, 82 | ]); 83 | return $response; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /lib/Dashboard/Widget.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Dashboard; 13 | 14 | use OCP\Dashboard\IWidget; 15 | use OCP\IL10N; 16 | use OCP\IURLGenerator; 17 | use OCP\Util; 18 | 19 | class Widget implements IWidget 20 | { 21 | 22 | /** @var IURLGenerator */ 23 | private $url; 24 | /** @var IL10N */ 25 | private $l10n; 26 | 27 | public function __construct( 28 | IURLGenerator $url, 29 | IL10N $l10n 30 | ) 31 | { 32 | $this->url = $url; 33 | $this->l10n = $l10n; 34 | } 35 | 36 | /** 37 | * @inheritDoc 38 | */ 39 | public function getId(): string 40 | { 41 | return 'audioplayer'; 42 | } 43 | 44 | /** 45 | * @inheritDoc 46 | */ 47 | public function getTitle(): string 48 | { 49 | return $this->l10n->t('Audio Player'); 50 | } 51 | 52 | /** 53 | * @inheritDoc 54 | */ 55 | public function getOrder(): int 56 | { 57 | return 10; 58 | } 59 | 60 | /** 61 | * @inheritDoc 62 | */ 63 | public function getIconClass(): string 64 | { 65 | return 'icon-audioplayer'; 66 | } 67 | 68 | /** 69 | * @inheritDoc 70 | */ 71 | public function getUrl(): ?string 72 | { 73 | return null; 74 | } 75 | 76 | /** 77 | * @inheritDoc 78 | */ 79 | public function load(): void 80 | { 81 | Util::addScript('audioplayer', 'dashboard'); 82 | Util::addStyle('audioplayer', 'dashboard'); 83 | } 84 | } -------------------------------------------------------------------------------- /lib/Event/LoadAdditionalScriptsEvent.php: -------------------------------------------------------------------------------- 1 | 12 | * @author Sebastian Doell 13 | * @copyright 2016-2021 Marcel Scherello 14 | * @copyright 2015 Sebastian Doell 15 | */ 16 | namespace OCA\audioplayer\Event; 17 | 18 | use OCP\EventDispatcher\Event; 19 | 20 | class LoadAdditionalScriptsEvent extends Event { 21 | private $hiddenFields = []; 22 | 23 | public function addHiddenField(string $name, string $value): void { 24 | $this->hiddenFields[$name] = $value; 25 | } 26 | 27 | public function getHiddenFields(): array { 28 | return $this->hiddenFields; 29 | } 30 | } -------------------------------------------------------------------------------- /lib/Hooks/FileHooks.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Hooks; 13 | use OCA\audioplayer\Controller; 14 | use \OCP\Files\FileInfo; 15 | use Psr\Log\LoggerInterface; 16 | 17 | class FileHooks { 18 | 19 | private $logger; 20 | 21 | public function __construct(LoggerInterface $logger) { 22 | $this->logger = $logger; 23 | } 24 | 25 | /** 26 | * delete track from library after file deletion 27 | * @param array $params 28 | * @throws \OCP\AppFramework\QueryException 29 | */ 30 | public static function deleteTrack($params) { 31 | 32 | $view = \OC\Files\Filesystem::getView(); 33 | $node = $view->getFileInfo($params['path']); 34 | 35 | #$this->logger->debug('Hook delete id: '.$node->getId(), array('app' => 'audioplayer')); 36 | if ($node->getType() === FileInfo::TYPE_FILE) { 37 | $app = new \OCA\audioplayer\AppInfo\Application(); 38 | $container = $app->getContainer(); 39 | $container->query(\OCA\audioplayer\Controller\DbController::class)->deleteFromDB($node->getId()); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Hooks/UserHooks.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Hooks; 13 | use OCA\audioplayer\Controller; 14 | 15 | class UserHooks { 16 | public static function deleteUser($params) { 17 | $userId = $params['uid']; 18 | $app = new \OCA\audioplayer\AppInfo\Application(); 19 | $container = $app->getContainer(); 20 | $container->query(\OCA\audioplayer\Controller\DbController::class)->resetMediaLibrary($userId, null, true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/Http/ImageResponse.php: -------------------------------------------------------------------------------- 1 | 9 | * @author Olivier Paroz 10 | * @copyright 2016-2021 Marcel Scherello 11 | */ 12 | 13 | namespace OCA\audioplayer\Http; 14 | 15 | use OCP\AppFramework\Http\Response; 16 | use OCP\AppFramework\Http; 17 | 18 | /** 19 | * A renderer for cover arts 20 | */ 21 | class ImageResponse extends Response 22 | { 23 | 24 | private $preview; 25 | 26 | /** 27 | * @param array $image image meta data 28 | * @param int $statusCode the Http status code, defaults to 200 29 | */ 30 | public function __construct(array $image, $statusCode = Http::STATUS_OK) 31 | { 32 | $this->preview = $image['content']; 33 | $this->setStatus($statusCode); 34 | $this->addHeader('Content-type', $image['mimetype'] . '; charset=utf-8'); 35 | $this->cacheFor(365 * 24 * 60 * 60); 36 | $etag = md5($image['content']); 37 | $this->setETag($etag); 38 | } 39 | 40 | /** 41 | * Returns the rendered image 42 | * 43 | * @return string the file 44 | */ 45 | public function render() 46 | { 47 | if ($this->preview instanceof \OC_Image) { 48 | return $this->preview->data(); 49 | } else { 50 | return $this->preview; 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/Listener/LoadAdditionalScripts.php: -------------------------------------------------------------------------------- 1 | 12 | * @copyright 2020 Marcel Scherello 13 | */ 14 | 15 | namespace OCA\audioplayer\Listener; 16 | 17 | use OCA\Files\Event\LoadAdditionalScriptsEvent; 18 | use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent; 19 | use OCP\EventDispatcher\Event; 20 | use OCP\EventDispatcher\IEventListener; 21 | use OCP\Util; 22 | 23 | class LoadAdditionalScripts implements IEventListener 24 | { 25 | public function handle(Event $event): void 26 | { 27 | if ($event instanceof BeforeTemplateRenderedEvent) { 28 | Util::addScript('audioplayer', 'viewer/viewer'); 29 | Util::addScript('audioplayer', 'sharing/sharing'); 30 | Util::addStyle('audioplayer', '3rdparty/fontello/css/fontello'); 31 | } else { 32 | return; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /lib/Migration/Version2102Date20200712203332.php: -------------------------------------------------------------------------------- 1 | hasTable('audioplayer_whats_new')) { 36 | $table = $schema->createTable('audioplayer_whats_new'); 37 | $table->addColumn('id', 'integer', [ 38 | 'autoincrement' => true, 39 | 'notnull' => true, 40 | 'length' => 4, 41 | 'unsigned' => true, 42 | ]); 43 | $table->addColumn('version', 'string', [ 44 | 'notnull' => true, 45 | 'length' => 64, 46 | 'default' => '11', 47 | ]); 48 | $table->addColumn('etag', 'string', [ 49 | 'notnull' => true, 50 | 'length' => 64, 51 | 'default' => '', 52 | ]); 53 | $table->addColumn('last_check', 'integer', [ 54 | 'notnull' => true, 55 | 'length' => 4, 56 | 'unsigned' => true, 57 | 'default' => 0, 58 | ]); 59 | $table->addColumn('data', 'text', [ 60 | 'notnull' => true, 61 | 'default' => '', 62 | ]); 63 | $table->setPrimaryKey(['id']); 64 | $table->addUniqueIndex(['version'], 'audioplayer_whats_new_v_idx'); 65 | $table->addIndex(['version', 'etag'], 'audioplayer_whats_new_v_e_idx'); 66 | } 67 | return $schema; 68 | } 69 | 70 | /** 71 | * @param IOutput $output 72 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 73 | * @param array $options 74 | */ 75 | public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) { 76 | } 77 | } -------------------------------------------------------------------------------- /lib/Migration/Version2102Date20200712213332.php: -------------------------------------------------------------------------------- 1 | connection = $connection; 25 | } 26 | 27 | /** 28 | * @param IOutput $output 29 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 30 | * @param array $options 31 | */ 32 | public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options) 33 | { 34 | } 35 | 36 | /** 37 | * @param IOutput $output 38 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 39 | * @param array $options 40 | * @return null|ISchemaWrapper 41 | */ 42 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) 43 | { 44 | /** @var ISchemaWrapper $schema */ 45 | $schema = $schemaClosure(); 46 | 47 | return $schema; 48 | } 49 | 50 | /** 51 | * @param IOutput $output 52 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 53 | * @param array $options 54 | */ 55 | public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) 56 | { 57 | $query = $this->connection->getQueryBuilder(); 58 | $query->insert('audioplayer_whats_new') 59 | ->values([ 60 | 'version' => $query->createNamedParameter('2.11.0'), 61 | 'data' => $query->createNamedParameter('{"changelogURL":"https:\/\/github.com\/rello\/audioplayer\/blob\/master\/CHANGELOG.md","whatsNew":{ 62 | "en":{"regular":["Hardware media buttons","Better repeat/shuffle","AIF mime type","Remember playback position"],"admin":["New Features apply to users"]}, 63 | "de":{"regular":["Hardware Medien Tasten","Besserer Repeat/Shuffle","AIF mime type","Titelposition werden gespeichert"],"admin":["Nur User Features"]} 64 | }}'), 65 | ]) 66 | ->execute(); 67 | } 68 | } -------------------------------------------------------------------------------- /lib/Migration/Version3002Date20210019213332.php: -------------------------------------------------------------------------------- 1 | connection = $connection; 25 | } 26 | 27 | /** 28 | * @param IOutput $output 29 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 30 | * @param array $options 31 | */ 32 | public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options) 33 | { 34 | } 35 | 36 | /** 37 | * @param IOutput $output 38 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 39 | * @param array $options 40 | * @return null|ISchemaWrapper 41 | */ 42 | public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) 43 | { 44 | /** @var ISchemaWrapper $schema */ 45 | $schema = $schemaClosure(); 46 | 47 | return $schema; 48 | } 49 | 50 | /** 51 | * @param IOutput $output 52 | * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` 53 | * @param array $options 54 | */ 55 | public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options) 56 | { 57 | $query = $this->connection->getQueryBuilder(); 58 | $query->insert('audioplayer_whats_new') 59 | ->values([ 60 | 'version' => $query->createNamedParameter('3.2.1'), 61 | 'data' => $query->createNamedParameter('{"changelogURL":"https:\/\/github.com\/rello\/audioplayer\/blob\/master\/CHANGELOG.md","whatsNew":{ 62 | "en":{"regular":["Collaborative tags support","Dashboard widget"],"admin":["New Features apply to users"]}, 63 | "de":{"regular":["Collaborative tags support","Dashboard widget"],"admin":["Nur User Features"]} 64 | }}'), 65 | ]) 66 | ->execute(); 67 | } 68 | } -------------------------------------------------------------------------------- /lib/Search/Provider.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2020 Marcel Scherello 10 | */ 11 | 12 | declare(strict_types=1); 13 | 14 | namespace OCA\audioplayer\Search; 15 | 16 | use OCA\audioplayer\Controller\DbController; 17 | use OCP\IL10N; 18 | use OCP\IURLGenerator; 19 | use OCP\IUser; 20 | use OCP\Search\IProvider; 21 | use OCP\Search\ISearchQuery; 22 | use OCP\Search\SearchResult; 23 | use OCP\Search\SearchResultEntry; 24 | 25 | class Provider implements IProvider 26 | { 27 | 28 | /** @var IL10N */ 29 | private $l10n; 30 | 31 | /** @var IURLGenerator */ 32 | private $urlGenerator; 33 | 34 | private $DBController; 35 | 36 | public function __construct(IL10N $l10n, 37 | IURLGenerator $urlGenerator, 38 | DBController $DBController) 39 | { 40 | $this->l10n = $l10n; 41 | $this->urlGenerator = $urlGenerator; 42 | $this->DBController = $DBController; 43 | } 44 | 45 | public function getId(): string 46 | { 47 | return 'audioplayer'; 48 | } 49 | 50 | public function search(IUser $user, ISearchQuery $query): SearchResult 51 | { 52 | $datasets = $this->DBController->search($query->getTerm()); 53 | $result = []; 54 | 55 | foreach ($datasets as $dataset) { 56 | $result[] = new SearchResultEntry( 57 | '', 58 | $this->l10n->t('Audio Player') . ' - ' . $dataset['name'], 59 | '', 60 | $this->urlGenerator->linkToRoute('audioplayer.page.index') . '#' . $dataset['id'], 61 | $this->urlGenerator->imagePath('audioplayer', 'app-dark.svg') 62 | ); 63 | } 64 | 65 | return SearchResult::complete( 66 | $this->l10n->t('Audioplayer'), 67 | $result 68 | ); 69 | } 70 | 71 | public function getName(): string 72 | { 73 | return $this->l10n->t('Audioplayer'); 74 | } 75 | 76 | public function getOrder(string $route, array $routeParameters): int 77 | { 78 | return 10; 79 | } 80 | } -------------------------------------------------------------------------------- /lib/Service/TagManager.php: -------------------------------------------------------------------------------- 1 | tagManager = $systemTagManager; 24 | $this->objectMapper = $objectMapper; 25 | } 26 | 27 | public function getAllTags() : array 28 | { 29 | return $this->tagManager->getAllTags(true); 30 | } 31 | 32 | public function getObjectIdsForTags($tags): array 33 | { 34 | return $this->objectMapper->getObjectIdsForTags($tags, 'files'); 35 | } 36 | } -------------------------------------------------------------------------------- /lib/Settings/AdminSection.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Settings; 13 | 14 | use OCP\IL10N; 15 | use OCP\IURLGenerator; 16 | use OCP\Settings\IIconSection; 17 | 18 | class AdminSection implements IIconSection 19 | { 20 | /** @var IURLGenerator */ 21 | private $urlGenerator; 22 | /** @var IL10N */ 23 | private $l; 24 | 25 | public function __construct(IURLGenerator $urlGenerator, IL10N $l) 26 | { 27 | $this->urlGenerator = $urlGenerator; 28 | $this->l = $l; 29 | } 30 | 31 | /** 32 | * returns the relative path to an 16*16 icon describing the section. 33 | * 34 | * @returns string 35 | */ 36 | public function getIcon() 37 | { 38 | return $this->urlGenerator->imagePath('audioplayer', 'app-dark.svg'); 39 | } 40 | 41 | /** 42 | * returns the ID of the section. It is supposed to be a lower case string, 43 | * 44 | * @returns string 45 | */ 46 | public function getID() 47 | { 48 | return 'audioplayer'; 49 | } 50 | 51 | /** 52 | * returns the translated name as it should be displayed 53 | * 54 | * @return string 55 | */ 56 | public function getName() 57 | { 58 | return $this->l->t('Audio Player'); 59 | } 60 | 61 | /** 62 | * returns priority for positioning 63 | * 64 | * @return int 65 | */ 66 | public function getPriority() 67 | { 68 | return 10; 69 | } 70 | } -------------------------------------------------------------------------------- /lib/Settings/Personal.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Settings; 13 | 14 | use OCP\AppFramework\Http\TemplateResponse; 15 | use OCP\Settings\ISettings; 16 | use OCP\IConfig; 17 | 18 | class Personal implements ISettings 19 | { 20 | 21 | private $userId; 22 | private $configManager; 23 | 24 | public function __construct( 25 | $userId, 26 | IConfig $configManager 27 | ) 28 | { 29 | $this->userId = $userId; 30 | $this->configManager = $configManager; 31 | } 32 | 33 | /** 34 | * @return TemplateResponse returns the instance with all parameters set, ready to be rendered 35 | * @since 9.1 36 | */ 37 | public function getForm() 38 | { 39 | 40 | $parameters = [ 41 | 'audioplayer_cyrillic' => $this->configManager->getUserValue($this->userId, 'audioplayer', 'cyrillic'), 42 | 'audioplayer_path' => $this->configManager->getUserValue($this->userId, 'audioplayer', 'path'), 43 | ]; 44 | return new TemplateResponse('audioplayer', 'settings/personal', $parameters, ''); 45 | } 46 | 47 | /** 48 | * Print config section (ownCloud 10) 49 | * 50 | * @return TemplateResponse 51 | */ 52 | public function getPanel() 53 | { 54 | return $this->getForm(); 55 | } 56 | 57 | /** 58 | * @return string the section ID, e.g. 'sharing' 59 | * @since 9.1 60 | */ 61 | public function getSection() 62 | { 63 | return 'audioplayer'; 64 | } 65 | 66 | /** 67 | * Get section ID (ownCloud 10) 68 | * 69 | * @return string 70 | */ 71 | public function getSectionID() 72 | { 73 | return 'audioplayer'; 74 | } 75 | 76 | /** 77 | * @return int whether the form should be rather on the top or bottom of 78 | * the admin section. The forms are arranged in ascending order of the 79 | * priority values. It is required to return a value between 0 and 100. 80 | * 81 | * E.g.: 70 82 | * @since 9.1 83 | */ 84 | public function getPriority() 85 | { 86 | return 10; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /lib/Settings/PersonalSection.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | namespace OCA\audioplayer\Settings; 13 | 14 | use OCP\IL10N; 15 | use OCP\IURLGenerator; 16 | use OCP\Settings\IIconSection; 17 | 18 | class PersonalSection implements IIconSection 19 | { 20 | /** @var IURLGenerator */ 21 | private $urlGenerator; 22 | /** @var IL10N */ 23 | private $l; 24 | 25 | public function __construct(IURLGenerator $urlGenerator, IL10N $l) 26 | { 27 | $this->urlGenerator = $urlGenerator; 28 | $this->l = $l; 29 | } 30 | 31 | /** 32 | * returns the relative path to an 16*16 icon describing the section. 33 | * 34 | * @returns string 35 | */ 36 | public function getIcon() 37 | { 38 | return $this->urlGenerator->imagePath('audioplayer', 'app-dark.svg'); 39 | } 40 | 41 | /** 42 | * returns the ID of the section. It is supposed to be a lower case string, 43 | * 44 | * @returns string 45 | */ 46 | public function getID() 47 | { 48 | return 'audioplayer'; 49 | } 50 | 51 | /** 52 | * returns the translated name as it should be displayed 53 | * 54 | * @return string 55 | */ 56 | public function getName() 57 | { 58 | return $this->l->t('Audio Player'); 59 | } 60 | 61 | /** 62 | * returns priority for positioning 63 | * 64 | * @return int 65 | */ 66 | public function getPriority() 67 | { 68 | return 10; 69 | } 70 | } -------------------------------------------------------------------------------- /lib/WhatsNew/WhatsNewMapper.php: -------------------------------------------------------------------------------- 1 | 10 | * @author Arthur Schiwon 11 | * @author Christoph Wurst 12 | * @copyright 2020 Marcel Scherello 13 | */ 14 | 15 | namespace OCA\audioplayer\WhatsNew; 16 | 17 | use OCP\AppFramework\Db\DoesNotExistException; 18 | use OCP\AppFramework\Db\QBMapper; 19 | use OCP\DB\QueryBuilder\IQueryBuilder; 20 | use OCP\IDBConnection; 21 | use Psr\Log\LoggerInterface; 22 | 23 | class WhatsNewMapper extends QBMapper 24 | { 25 | public const TABLE_NAME = 'audioplayer_whats_new'; 26 | private $logger; 27 | 28 | public function __construct( 29 | LoggerInterface $logger, 30 | IDBConnection $db 31 | ) 32 | { 33 | parent::__construct($db, self::TABLE_NAME); 34 | $this->logger = $logger; 35 | } 36 | 37 | /** 38 | * @throws DoesNotExistException 39 | */ 40 | public function getChanges(string $version): WhatsNewResult 41 | { 42 | /* @var $qb IQueryBuilder */ 43 | $qb = $this->db->getQueryBuilder(); 44 | $result = $qb->select('*') 45 | ->from(self::TABLE_NAME) 46 | ->where($qb->expr()->eq('version', $qb->createNamedParameter($version))) 47 | ->execute(); 48 | 49 | $data = $result->fetch(); 50 | $result->closeCursor(); 51 | if ($data === false) { 52 | throw new DoesNotExistException('Changes info is not present'); 53 | } 54 | return WhatsNewResult::fromRow($data); 55 | } 56 | } -------------------------------------------------------------------------------- /lib/WhatsNew/WhatsNewResult.php: -------------------------------------------------------------------------------- 1 | 10 | * @author Arthur Schiwon 11 | * @copyright 2020 Marcel Scherello 12 | */ 13 | 14 | namespace OCA\audioplayer\WhatsNew; 15 | 16 | use OCP\AppFramework\Db\Entity; 17 | 18 | /** 19 | * Class ChangesResult 20 | * 21 | * @package OC\Updater 22 | * @method string getVersion()= 1 23 | * @method void setVersion(string $version) 24 | * @method string getEtag() 25 | * @method void setEtag(string $etag) 26 | * @method int getLastCheck() 27 | * @method void setLastCheck(int $lastCheck) 28 | * @method string getData() 29 | * @method void setData(string $data) 30 | */ 31 | class WhatsNewResult extends Entity 32 | { 33 | /** @var string */ 34 | protected $version = ''; 35 | 36 | /** @var string */ 37 | protected $etag = ''; 38 | 39 | /** @var int */ 40 | protected $lastCheck = 0; 41 | 42 | /** @var string */ 43 | protected $data = ''; 44 | 45 | public function __construct() 46 | { 47 | $this->addType('version', 'string'); 48 | $this->addType('etag', 'string'); 49 | $this->addType('lastCheck', 'int'); 50 | $this->addType('data', 'string'); 51 | } 52 | } -------------------------------------------------------------------------------- /screenshots/audioplayer_actions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_actions.png -------------------------------------------------------------------------------- /screenshots/audioplayer_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_icon.png -------------------------------------------------------------------------------- /screenshots/audioplayer_lists.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_lists.png -------------------------------------------------------------------------------- /screenshots/audioplayer_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_logo.png -------------------------------------------------------------------------------- /screenshots/audioplayer_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_main.png -------------------------------------------------------------------------------- /screenshots/audioplayer_main_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_main_small.png -------------------------------------------------------------------------------- /screenshots/audioplayer_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_screen.png -------------------------------------------------------------------------------- /screenshots/audioplayer_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/audioplayer/247cd1e0dc83ad90e9cb215be510566601733c1c/screenshots/audioplayer_share.png -------------------------------------------------------------------------------- /templates/index.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | use OCP\Util; 13 | 14 | Util::addStyle('audioplayer', 'bar-ui'); 15 | Util::addStyle('audioplayer', 'style'); 16 | Util::addStyle('files', 'detailsView'); 17 | Util::addStyle('audioplayer', '3rdparty/fontello/css/fontello'); 18 | Util::addScript('audioplayer', 'app'); 19 | Util::addScript('audioplayer', 'sidebar'); 20 | Util::addScript('audioplayer', 'settings/settings'); 21 | if ($_['audioplayer_sonos'] !== 'checked') { 22 | Util::addScript('audioplayer', 'player'); 23 | } 24 | 25 | ?> 26 | 27 | 28 | 29 | 30 | 31 |
> 32 | 33 | inc('part.navigation')); ?> 34 | 35 | inc('settings/part.settings')); ?> 36 | 37 |
38 | 39 |
40 |
41 | 42 |
43 | 44 | inc('part.audio')); ?> 45 | inc('part.sonos-bar')); ?> 46 | 47 | 48 | 49 | inc('part.container')); ?> 50 | 51 |
52 | 53 |
54 | inc('part.sidebar')); ?> 55 |
-------------------------------------------------------------------------------- /templates/part.container.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | ?> 12 |
13 | 14 | 15 | 16 | 17 | t('Title')); ?> 18 | t('Artist')); ?> 19 | t('Album')); ?> 20 | t('Length')); ?> 21 |   22 | 23 | 24 |
25 |
    26 |
    27 | 28 |
    29 |
    30 | -------------------------------------------------------------------------------- /templates/part.import.php: -------------------------------------------------------------------------------- 1 |
    "> 2 |
    3 |
    4 |

    5 | 6 | 7 |
    8 |
    9 |
    10 |
    11 |
    12 |
    13 |
    14 | 15 |
    16 |
    17 |
    18 |
    19 | 20 |
    21 | 22 |
    23 | -------------------------------------------------------------------------------- /templates/part.navigation.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | ?> 12 |
    13 | t('Album Covers')) : p($l->t('List View')); ?> 14 |
    15 |
    16 | 28 | 29 |
    30 |
      31 |
    32 | 33 |
  • 34 |
    35 | 36 | 37 | 38 |
    39 |
  • 40 | 41 |
    42 |
    43 | 44 | 45 | 46 |
    47 |
    48 | -------------------------------------------------------------------------------- /templates/part.sidebar.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | ?> 12 | 13 |
    14 |
    15 |
    16 | 17 |
    18 |
    19 |
    20 |
    21 |

    22 |
    23 |
    24 | 25 | 26 | 27 | 28 |
    29 |
    30 |
    31 |
    32 |
      33 |
    34 |
    35 |
    36 | -------------------------------------------------------------------------------- /templates/settings/part.settings.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | ?> 12 | 13 |
    14 |
    15 | 20 |
    21 | 22 |
    23 | 54 |
    55 |
    56 | -------------------------------------------------------------------------------- /templates/settings/personal.php: -------------------------------------------------------------------------------- 1 | 9 | * @copyright 2016-2021 Marcel Scherello 10 | */ 11 | 12 | script('audioplayer', 'settings/personal'); 13 | ?> 14 | 15 |
    16 |

    t('Scanner Settings')); ?>

    17 |
    18 | 19 | 20 |

    21 | t('This setting specifies which folder is scanned for audio files. Without a selection, the whole data folder is scanned.')); ?> 22 |

    23 |

    24 | t('To exclude a folder, you have to create a .noaudio file inside that folder. This is also necessary in subfolders.')); ?> 25 |

    26 |
    27 |
    28 |
    29 | /> 30 | 31 |

    32 | t('Activate this setting if cyrillic characters are not recognized correctly. This makes the indexing slower!')); ?> 33 |

    34 |

    t('More information …')); ?>

    36 |
    37 |
    38 |
    39 | 40 |   41 |
    42 | 43 |   44 |

    t('More information …')); ?>

    46 |
    47 |
    48 | --------------------------------------------------------------------------------