diff --git a/README.md b/README.md index 6b3673d..54c8c0a 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,9 @@ This is just the WebUI for deemix, it should be used with deemix-pyweb or someth - Use Vue as much as possible - First step: rewrite the app in Single File Components way ✅ - - Second step: Implement routing for the whole app using Vue Router - - Third step: Remove jQuery + - Second step: Implement custom contextmenu + - Third step: Implement routing for the whole app using Vue Router + - Fourth step: Remove jQuery - Make i18n async (https://kazupon.github.io/vue-i18n/guide/lazy-loading.html) - Use ES2020 async imports, if possible - Make the UI look coherent diff --git a/public/js/bundle.js b/public/js/bundle.js index 81db07f..30aa082 100644 --- a/public/js/bundle.js +++ b/public/js/bundle.js @@ -3,7 +3,7 @@ * (c) 2014-2019 Evan You * Released under the MIT License. */ -var t=Object.freeze({});function e(t){return null==t}function n(t){return null!=t}function a(t){return!0===t}function i(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t||"boolean"==typeof t}function r(t){return null!==t&&"object"==typeof t}var s=Object.prototype.toString;function o(t){return"[object Object]"===s.call(t)}function l(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function c(t){return n(t)&&"function"==typeof t.then&&"function"==typeof t.catch}function d(t){return null==t?"":Array.isArray(t)||o(t)&&t.toString===s?JSON.stringify(t,null,2):String(t)}function u(t){var e=parseFloat(t);return isNaN(e)?t:e}function p(t,e){for(var n=Object.create(null),a=t.split(","),i=0;i-1)return t.splice(n,1)}}var v=Object.prototype.hasOwnProperty;function g(t,e){return v.call(t,e)}function b(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var _=/-(\w)/g,y=b((function(t){return t.replace(_,(function(t,e){return e?e.toUpperCase():""}))})),k=b((function(t){return t.charAt(0).toUpperCase()+t.slice(1)})),w=/\B([A-Z])/g,A=b((function(t){return t.replace(w,"-$1").toLowerCase()}));var C=Function.prototype.bind?function(t,e){return t.bind(e)}:function(t,e){function n(n){var a=arguments.length;return a?a>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n};function x(t,e){e=e||0;for(var n=t.length-e,a=new Array(n);n--;)a[n]=t[n+e];return a}function T(t,e){for(var n in e)t[n]=e[n];return t}function S(t){for(var e={},n=0;n0,K=W&&W.indexOf("edge/")>0,Y=(W&&W.indexOf("android"),W&&/iphone|ipad|ipod|ios/.test(W)||"ios"===H),J=(W&&/chrome\/\d+/.test(W),W&&/phantomjs/.test(W),W&&W.match(/firefox\/(\d+)/)),X={}.watch,Z=!1;if(U)try{var tt={};Object.defineProperty(tt,"passive",{get:function(){Z=!0}}),window.addEventListener("test-passive",null,tt)}catch(t){}var et=function(){return void 0===B&&(B=!U&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},nt=U&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function at(t){return"function"==typeof t&&/native code/.test(t.toString())}var it,rt="undefined"!=typeof Symbol&&at(Symbol)&&"undefined"!=typeof Reflect&&at(Reflect.ownKeys);it="undefined"!=typeof Set&&at(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var st=M,ot=0,lt=function(){this.id=ot++,this.subs=[]};lt.prototype.addSub=function(t){this.subs.push(t)},lt.prototype.removeSub=function(t){m(this.subs,t)},lt.prototype.depend=function(){lt.target&<.target.addDep(this)},lt.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e-1)if(r&&!g(i,"default"))s=!1;else if(""===s||s===A(t)){var l=jt(String,i.type);(l<0||o0&&(le((l=t(l,(s||"")+"_"+o))[0])&&le(d)&&(u[c]=mt(d.text+l[0].text),l.shift()),u.push.apply(u,l)):i(l)?le(d)?u[c]=mt(d.text+l):""!==l&&u.push(mt(l)):le(l)&&le(d)?u[c]=mt(d.text+l.text):(a(r._isVList)&&n(l.tag)&&e(l.key)&&n(s)&&(l.key="__vlist"+s+"_"+o+"__"),u.push(l)));return u}(t):void 0}function le(t){return n(t)&&n(t.text)&&!1===t.isComment}function ce(t,e){if(t){for(var n=Object.create(null),a=rt?Reflect.ownKeys(t):Object.keys(t),i=0;i0,s=e?!!e.$stable:!r,o=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(s&&a&&a!==t&&o===a.$key&&!r&&!a.$hasNormal)return a;for(var l in i={},e)e[l]&&"$"!==l[0]&&(i[l]=he(n,l,e[l]))}else i={};for(var c in n)c in i||(i[c]=fe(n,c));return e&&Object.isExtensible(e)&&(e._normalized=i),j(i,"$stable",s),j(i,"$key",o),j(i,"$hasNormal",r),i}function he(t,e,n){var a=function(){var t=arguments.length?n.apply(null,arguments):n({});return(t=t&&"object"==typeof t&&!Array.isArray(t)?[t]:oe(t))&&(0===t.length||1===t.length&&t[0].isComment)?void 0:t};return n.proxy&&Object.defineProperty(t,e,{get:a,enumerable:!0,configurable:!0}),a}function fe(t,e){return function(){return t[e]}}function me(t,e){var a,i,s,o,l;if(Array.isArray(t)||"string"==typeof t)for(a=new Array(t.length),i=0,s=t.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return on.now()})}function ln(){var t,e;for(rn=sn(),nn=!0,Xe.sort((function(t,e){return t.id-e.id})),an=0;anan&&Xe[n].id>t.id;)n--;Xe.splice(n+1,0,t)}else Xe.push(t);en||(en=!0,Zt(ln))}}(this)},dn.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||r(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){Ot(t,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,t,e)}}},dn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dn.prototype.depend=function(){for(var t=this.deps.length;t--;)this.deps[t].depend()},dn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||m(this.vm._watchers,this);for(var t=this.deps.length;t--;)this.deps[t].removeSub(this);this.active=!1}};var un={enumerable:!0,configurable:!0,get:M,set:M};function pn(t,e,n){un.get=function(){return this[e][n]},un.set=function(t){this[e][n]=t},Object.defineProperty(t,n,un)}function hn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){var n=t.$options.propsData||{},a=t._props={},i=t.$options._propKeys=[];t.$parent&&kt(!1);var r=function(r){i.push(r);var s=It(r,e,n,t);Ct(a,r,s),r in t||pn(t,"_props",r)};for(var s in e)r(s);kt(!0)}(t,e.props),e.methods&&function(t,e){t.$options.props;for(var n in e)t[n]="function"!=typeof e[n]?M:C(e[n],t)}(t,e.methods),e.data?function(t){var e=t.$options.data;o(e=t._data="function"==typeof e?function(t,e){dt();try{return t.call(e,e)}catch(t){return Ot(t,e,"data()"),{}}finally{ut()}}(e,t):e||{})||(e={});var n=Object.keys(e),a=t.$options.props,i=(t.$options.methods,n.length);for(;i--;){var r=n[i];a&&g(a,r)||R(r)||pn(t,"_data",r)}At(e,!0)}(t):At(t._data={},!0),e.computed&&function(t,e){var n=t._computedWatchers=Object.create(null),a=et();for(var i in e){var r=e[i],s="function"==typeof r?r:r.get;a||(n[i]=new dn(t,s||M,M,fn)),i in t||mn(t,i,r)}}(t,e.computed),e.watch&&e.watch!==X&&function(t,e){for(var n in e){var a=e[n];if(Array.isArray(a))for(var i=0;i-1:"string"==typeof t?t.split(",").indexOf(e)>-1:(n=t,"[object RegExp]"===s.call(n)&&t.test(e));var n}function xn(t,e){var n=t.cache,a=t.keys,i=t._vnode;for(var r in n){var s=n[r];if(s){var o=An(s.componentOptions);o&&!e(o)&&Tn(n,r,a,i)}}}function Tn(t,e,n,a){var i=t[e];!i||a&&i.tag===a.tag||i.componentInstance.$destroy(),t[e]=null,m(n,e)}!function(e){e.prototype._init=function(e){var n=this;n._uid=_n++,n._isVue=!0,e&&e._isComponent?function(t,e){var n=t.$options=Object.create(t.constructor.options),a=e._parentVnode;n.parent=e.parent,n._parentVnode=a;var i=a.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}(n,e):n.$options=Pt(yn(n.constructor),e||{},n),n._renderProxy=n,n._self=n,function(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}(n),function(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&We(t,e)}(n),function(e){e._vnode=null,e._staticTrees=null;var n=e.$options,a=e.$vnode=n._parentVnode,i=a&&a.context;e.$slots=de(n._renderChildren,i),e.$scopedSlots=t,e._c=function(t,n,a,i){return Fe(e,t,n,a,i,!1)},e.$createElement=function(t,n,a,i){return Fe(e,t,n,a,i,!0)};var r=a&&a.data;Ct(e,"$attrs",r&&r.attrs||t,null,!0),Ct(e,"$listeners",n._parentListeners||t,null,!0)}(n),Je(n,"beforeCreate"),function(t){var e=ce(t.$options.inject,t);e&&(kt(!1),Object.keys(e).forEach((function(n){Ct(t,n,e[n])})),kt(!0))}(n),hn(n),function(t){var e=t.$options.provide;e&&(t._provided="function"==typeof e?e.call(t):e)}(n),Je(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(kn),function(t){var e={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",n),t.prototype.$set=xt,t.prototype.$delete=Tt,t.prototype.$watch=function(t,e,n){if(o(e))return bn(this,t,e,n);(n=n||{}).user=!0;var a=new dn(this,t,e,n);if(n.immediate)try{e.call(this,a.value)}catch(t){Ot(t,this,'callback for immediate watcher "'+a.expression+'"')}return function(){a.teardown()}}}(kn),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var a=this;if(Array.isArray(t))for(var i=0,r=t.length;i1?x(n):n;for(var a=x(arguments,1),i='event handler for "'+t+'"',r=0,s=n.length;rparseInt(this.max)&&Tn(s,o[0],o,this._vnode)),e.data.keepAlive=!0}return e||t&&t[0]}}};!function(t){var e={get:function(){return I}};Object.defineProperty(t,"config",e),t.util={warn:st,extend:T,mergeOptions:Pt,defineReactive:Ct},t.set=xt,t.delete=Tt,t.nextTick=Zt,t.observable=function(t){return At(t),t},t.options=Object.create(null),P.forEach((function(e){t.options[e+"s"]=Object.create(null)})),t.options._base=t,T(t.options.components,Mn),function(t){t.use=function(t){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(t)>-1)return this;var n=x(arguments,1);return n.unshift(this),"function"==typeof t.install?t.install.apply(t,n):"function"==typeof t&&t.apply(null,n),e.push(t),this}}(t),function(t){t.mixin=function(t){return this.options=Pt(this.options,t),this}}(t),wn(t),function(t){P.forEach((function(e){t[e]=function(t,n){return n?("component"===e&&o(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),"directive"===e&&"function"==typeof n&&(n={bind:n,update:n}),this.options[e+"s"][t]=n,n):this.options[e+"s"][t]}}))}(t)}(kn),Object.defineProperty(kn.prototype,"$isServer",{get:et}),Object.defineProperty(kn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(kn,"FunctionalRenderContext",{value:De}),kn.version="2.6.11";var $n=p("style,class"),Dn=p("input,textarea,option,select,progress"),zn=function(t,e,n){return"value"===n&&Dn(t)&&"button"!==e||"selected"===n&&"option"===t||"checked"===n&&"input"===t||"muted"===n&&"video"===t},Nn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Pn=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),En="http://www.w3.org/1999/xlink",In=function(t){return":"===t.charAt(5)&&"xlink"===t.slice(0,5)},Fn=function(t){return In(t)?t.slice(6,t.length):""},Rn=function(t){return null==t||!1===t};function jn(t){for(var e=t.data,a=t,i=t;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(e=On(i.data,e));for(;n(a=a.parent);)a&&a.data&&(e=On(e,a.data));return function(t,e){if(n(t)||n(e))return Bn(t,qn(e));return""}(e.staticClass,e.class)}function On(t,e){return{staticClass:Bn(t.staticClass,e.staticClass),class:n(t.class)?[t.class,e.class]:e.class}}function Bn(t,e){return t?e?t+" "+e:t:e||""}function qn(t){return Array.isArray(t)?function(t){for(var e,a="",i=0,r=t.length;i-1?ha(t,e,n):Pn(e)?Rn(n)?t.removeAttribute(e):(n="allowfullscreen"===e&&"EMBED"===t.tagName?"true":e,t.setAttribute(e,n)):Nn(e)?t.setAttribute(e,function(t,e){return Rn(e)||"false"===e?"false":"contenteditable"===t&&Ln(e)?e:"true"}(e,n)):In(e)?Rn(n)?t.removeAttributeNS(En,Fn(e)):t.setAttributeNS(En,e,n):ha(t,e,n)}function ha(t,e,n){if(Rn(n))t.removeAttribute(e);else{if(Q&&!G&&"TEXTAREA"===t.tagName&&"placeholder"===e&&""!==n&&!t.__ieph){var a=function(e){e.stopImmediatePropagation(),t.removeEventListener("input",a)};t.addEventListener("input",a),t.__ieph=!0}t.setAttribute(e,n)}}var fa={create:ua,update:ua};function ma(t,a){var i=a.elm,r=a.data,s=t.data;if(!(e(r.staticClass)&&e(r.class)&&(e(s)||e(s.staticClass)&&e(s.class)))){var o=jn(a),l=i._transitionClasses;n(l)&&(o=Bn(o,qn(l))),o!==i._prevClass&&(i.setAttribute("class",o),i._prevClass=o)}}var va,ga,ba,_a,ya,ka,wa={create:ma,update:ma},Aa=/[\w).+\-_$\]]/;function Ca(t){var e,n,a,i,r,s=!1,o=!1,l=!1,c=!1,d=0,u=0,p=0,h=0;for(a=0;a=0&&" "===(m=t.charAt(f));f--);m&&Aa.test(m)||(c=!0)}}else void 0===i?(h=a+1,i=t.slice(0,a).trim()):v();function v(){(r||(r=[])).push(t.slice(h,a).trim()),h=a+1}if(void 0===i?i=t.slice(0,a).trim():0!==h&&v(),r)for(a=0;a-1?{exp:t.slice(0,_a),key:'"'+t.slice(_a+1)+'"'}:{exp:t,key:null};ga=t,_a=ya=ka=0;for(;!Ba();)qa(ba=Oa())?Va(ba):91===ba&&Ua(ba);return{exp:t.slice(0,ya),key:t.slice(ya+1,ka)}}(t);return null===n.key?t+"="+e:"$set("+n.exp+", "+n.key+", "+e+")"}function Oa(){return ga.charCodeAt(++_a)}function Ba(){return _a>=va}function qa(t){return 34===t||39===t}function Ua(t){var e=1;for(ya=_a;!Ba();)if(qa(t=Oa()))Va(t);else if(91===t&&e++,93===t&&e--,0===e){ka=_a;break}}function Va(t){for(var e=t;!Ba()&&(t=Oa())!==e;);}var Ha;function Wa(t,e,n){var a=Ha;return function i(){var r=e.apply(null,arguments);null!==r&&Ka(t,i,n,a)}}var Qa=Ht&&!(J&&Number(J[1])<=53);function Ga(t,e,n,a){if(Qa){var i=rn,r=e;e=r._wrapper=function(t){if(t.target===t.currentTarget||t.timeStamp>=i||t.timeStamp<=0||t.target.ownerDocument!==document)return r.apply(this,arguments)}}Ha.addEventListener(t,e,Z?{capture:n,passive:a}:n)}function Ka(t,e,n,a){(a||Ha).removeEventListener(t,e._wrapper||e,n)}function Ya(t,a){if(!e(t.data.on)||!e(a.data.on)){var i=a.data.on||{},r=t.data.on||{};Ha=a.elm,function(t){if(n(t.__r)){var e=Q?"change":"input";t[e]=[].concat(t.__r,t[e]||[]),delete t.__r}n(t.__c)&&(t.change=[].concat(t.__c,t.change||[]),delete t.__c)}(i),ie(i,r,Ga,Ka,Wa,a.context),Ha=void 0}}var Ja,Xa={create:Ya,update:Ya};function Za(t,a){if(!e(t.data.domProps)||!e(a.data.domProps)){var i,r,s=a.elm,o=t.data.domProps||{},l=a.data.domProps||{};for(i in n(l.__ob__)&&(l=a.data.domProps=T({},l)),o)i in l||(s[i]="");for(i in l){if(r=l[i],"textContent"===i||"innerHTML"===i){if(a.children&&(a.children.length=0),r===o[i])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===i&&"PROGRESS"!==s.tagName){s._value=r;var c=e(r)?"":String(r);ti(s,c)&&(s.value=c)}else if("innerHTML"===i&&Hn(s.tagName)&&e(s.innerHTML)){(Ja=Ja||document.createElement("div")).innerHTML=""+r+"";for(var d=Ja.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;d.firstChild;)s.appendChild(d.firstChild)}else if(r!==o[i])try{s[i]=r}catch(t){}}}}function ti(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e){var n=!0;try{n=document.activeElement!==t}catch(t){}return n&&t.value!==e}(t,e)||function(t,e){var a=t.value,i=t._vModifiers;if(n(i)){if(i.number)return u(a)!==u(e);if(i.trim)return a.trim()!==e.trim()}return a!==e}(t,e))}var ei={create:Za,update:Za},ni=b((function(t){var e={},n=/:(.+)/;return t.split(/;(?![^(]*\))/g).forEach((function(t){if(t){var a=t.split(n);a.length>1&&(e[a[0].trim()]=a[1].trim())}})),e}));function ai(t){var e=ii(t.style);return t.staticStyle?T(t.staticStyle,e):e}function ii(t){return Array.isArray(t)?S(t):"string"==typeof t?ni(t):t}var ri,si=/^--/,oi=/\s*!important$/,li=function(t,e,n){if(si.test(e))t.style.setProperty(e,n);else if(oi.test(n))t.style.setProperty(A(e),n.replace(oi,""),"important");else{var a=di(e);if(Array.isArray(n))for(var i=0,r=n.length;i-1?e.split(hi).forEach((function(e){return t.classList.add(e)})):t.classList.add(e);else{var n=" "+(t.getAttribute("class")||"")+" ";n.indexOf(" "+e+" ")<0&&t.setAttribute("class",(n+e).trim())}}function mi(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.split(hi).forEach((function(e){return t.classList.remove(e)})):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var n=" "+(t.getAttribute("class")||"")+" ",a=" "+e+" ";n.indexOf(a)>=0;)n=n.replace(a," ");(n=n.trim())?t.setAttribute("class",n):t.removeAttribute("class")}}function vi(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&T(e,gi(t.name||"v")),T(e,t),e}return"string"==typeof t?gi(t):void 0}}var gi=b((function(t){return{enterClass:t+"-enter",enterToClass:t+"-enter-to",enterActiveClass:t+"-enter-active",leaveClass:t+"-leave",leaveToClass:t+"-leave-to",leaveActiveClass:t+"-leave-active"}})),bi=U&&!G,_i="transition",yi="transitionend",ki="animation",wi="animationend";bi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(_i="WebkitTransition",yi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ki="WebkitAnimation",wi="webkitAnimationEnd"));var Ai=U?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function Ci(t){Ai((function(){Ai(t)}))}function xi(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n.indexOf(e)<0&&(n.push(e),fi(t,e))}function Ti(t,e){t._transitionClasses&&m(t._transitionClasses,e),mi(t,e)}function Si(t,e,n){var a=$i(t,e),i=a.type,r=a.timeout,s=a.propCount;if(!i)return n();var o="transition"===i?yi:wi,l=0,c=function(){t.removeEventListener(o,d),n()},d=function(e){e.target===t&&++l>=s&&c()};setTimeout((function(){l0&&(n="transition",d=s,u=r.length):"animation"===e?c>0&&(n="animation",d=c,u=l.length):u=(n=(d=Math.max(s,c))>0?s>c?"transition":"animation":null)?"transition"===n?r.length:l.length:0,{type:n,timeout:d,propCount:u,hasTransform:"transition"===n&&Mi.test(a[_i+"Property"])}}function Di(t,e){for(;t.length1}function Ii(t,e){!0!==e.data.show&&Ni(e)}var Fi=function(t){var r,s,o={},l=t.modules,c=t.nodeOps;for(r=0;rf?_(t,e(i[g+1])?null:i[g+1].elm,i,h,g,r):h>g&&k(a,p,f)}(p,m,g,r,d):n(g)?(n(t.text)&&c.setTextContent(p,""),_(p,null,g,0,g.length-1,r)):n(m)?k(m,0,m.length-1):n(t.text)&&c.setTextContent(p,""):t.text!==i.text&&c.setTextContent(p,i.text),n(f)&&n(h=f.hook)&&n(h=h.postpatch)&&h(t,i)}}}function x(t,e,i){if(a(i)&&n(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r-1,s.selected!==r&&(s.selected=r);else if(z(qi(s),a))return void(t.selectedIndex!==o&&(t.selectedIndex=o));i||(t.selectedIndex=-1)}}function Bi(t,e){return e.every((function(e){return!z(e,t)}))}function qi(t){return"_value"in t?t._value:t.value}function Ui(t){t.target.composing=!0}function Vi(t){t.target.composing&&(t.target.composing=!1,Hi(t.target,"input"))}function Hi(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Wi(t){return!t.componentInstance||t.data&&t.data.transition?t:Wi(t.componentInstance._vnode)}var Qi={model:Ri,show:{bind:function(t,e,n){var a=e.value,i=(n=Wi(n)).data&&n.data.transition,r=t.__vOriginalDisplay="none"===t.style.display?"":t.style.display;a&&i?(n.data.show=!0,Ni(n,(function(){t.style.display=r}))):t.style.display=a?r:"none"},update:function(t,e,n){var a=e.value;!a!=!e.oldValue&&((n=Wi(n)).data&&n.data.transition?(n.data.show=!0,a?Ni(n,(function(){t.style.display=t.__vOriginalDisplay})):Li(n,(function(){t.style.display="none"}))):t.style.display=a?t.__vOriginalDisplay:"none")},unbind:function(t,e,n,a,i){i||(t.style.display=t.__vOriginalDisplay)}}},Gi={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Ki(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?Ki(qe(e.children)):t}function Yi(t){var e={},n=t.$options;for(var a in n.propsData)e[a]=t[a];var i=n._parentListeners;for(var r in i)e[y(r)]=i[r];return e}function Ji(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}var Xi=function(t){return t.tag||Be(t)},Zi=function(t){return"show"===t.name},tr={name:"transition",props:Gi,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(Xi)).length){var a=this.mode,r=n[0];if(function(t){for(;t=t.parent;)if(t.data.transition)return!0}(this.$vnode))return r;var s=Ki(r);if(!s)return r;if(this._leaving)return Ji(t,r);var o="__transition-"+this._uid+"-";s.key=null==s.key?s.isComment?o+"comment":o+s.tag:i(s.key)?0===String(s.key).indexOf(o)?s.key:o+s.key:s.key;var l=(s.data||(s.data={})).transition=Yi(this),c=this._vnode,d=Ki(c);if(s.data.directives&&s.data.directives.some(Zi)&&(s.data.show=!0),d&&d.data&&!function(t,e){return e.key===t.key&&e.tag===t.tag}(s,d)&&!Be(d)&&(!d.componentInstance||!d.componentInstance._vnode.isComment)){var u=d.data.transition=T({},l);if("out-in"===a)return this._leaving=!0,re(u,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),Ji(t,r);if("in-out"===a){if(Be(s))return c;var p,h=function(){p()};re(l,"afterEnter",h),re(l,"enterCancelled",h),re(u,"delayLeave",(function(t){p=t}))}}return r}}},er=T({tag:String,moveClass:String},Gi);function nr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ar(t){t.data.newPos=t.elm.getBoundingClientRect()}function ir(t){var e=t.data.pos,n=t.data.newPos,a=e.left-n.left,i=e.top-n.top;if(a||i){t.data.moved=!0;var r=t.elm.style;r.transform=r.WebkitTransform="translate("+a+"px,"+i+"px)",r.transitionDuration="0s"}}delete er.mode;var rr={Transition:tr,TransitionGroup:{props:er,beforeMount:function(){var t=this,e=this._update;this._update=function(n,a){var i=Ge(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,i(),e.call(t,n,a)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),a=this.prevChildren=this.children,i=this.$slots.default||[],r=this.children=[],s=Yi(this),o=0;o-1?Gn[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Gn[t]=/HTMLUnknownElement/.test(e.toString())},T(kn.options.directives,Qi),T(kn.options.components,rr),kn.prototype.__patch__=U?Fi:M,kn.prototype.$mount=function(t,e){return function(t,e,n){var a;return t.$el=e,t.$options.render||(t.$options.render=ft),Je(t,"beforeMount"),a=function(){t._update(t._render(),n)},new dn(t,a,M,{before:function(){t._isMounted&&!t._isDestroyed&&Je(t,"beforeUpdate")}},!0),n=!1,null==t.$vnode&&(t._isMounted=!0,Je(t,"mounted")),t}(this,t=t&&U?Yn(t):void 0,e)},U&&setTimeout((function(){I.devtools&&nt&&nt.emit("init",kn)}),0);var sr=/\{\{((?:.|\r?\n)+?)\}\}/g,or=/[-.*+?^${}()|[\]\/\\]/g,lr=b((function(t){var e=t[0].replace(or,"\\$&"),n=t[1].replace(or,"\\$&");return new RegExp(e+"((?:.|\\n)+?)"+n,"g")}));var cr={staticKeys:["staticClass"],transformNode:function(t,e){e.warn;var n=Ea(t,"class");n&&(t.staticClass=JSON.stringify(n));var a=Pa(t,"class",!1);a&&(t.classBinding=a)},genData:function(t){var e="";return t.staticClass&&(e+="staticClass:"+t.staticClass+","),t.classBinding&&(e+="class:"+t.classBinding+","),e}};var dr,ur={staticKeys:["staticStyle"],transformNode:function(t,e){e.warn;var n=Ea(t,"style");n&&(t.staticStyle=JSON.stringify(ni(n)));var a=Pa(t,"style",!1);a&&(t.styleBinding=a)},genData:function(t){var e="";return t.staticStyle&&(e+="staticStyle:"+t.staticStyle+","),t.styleBinding&&(e+="style:("+t.styleBinding+"),"),e}},pr=function(t){return(dr=dr||document.createElement("div")).innerHTML=t,dr.textContent},hr=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),fr=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),mr=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),vr=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,gr=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,br="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+F.source+"]*",_r="((?:"+br+"\\:)?"+br+")",yr=new RegExp("^<"+_r),kr=/^\s*(\/?)>/,wr=new RegExp("^<\\/"+_r+"[^>]*>"),Ar=/^]+>/i,Cr=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},$r=/&(?:lt|gt|quot|amp|#39);/g,Dr=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,zr=p("pre,textarea",!0),Nr=function(t,e){return t&&zr(t)&&"\n"===e[0]};function Lr(t,e){var n=e?Dr:$r;return t.replace(n,(function(t){return Mr[t]}))}var Pr,Er,Ir,Fr,Rr,jr,Or,Br,qr=/^@|^v-on:/,Ur=/^v-|^@|^:|^#/,Vr=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Hr=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Wr=/^\(|\)$/g,Qr=/^\[.*\]$/,Gr=/:(.*)$/,Kr=/^:|^\.|^v-bind:/,Yr=/\.[^.\]]+(?=[^\]]*$)/g,Jr=/^v-slot(:|$)|^#/,Xr=/[\r\n]/,Zr=/\s+/g,ts=b(pr);function es(t,e,n){return{type:1,tag:t,attrsList:e,attrsMap:ls(e),rawAttrsMap:{},parent:n,children:[]}}function ns(t,e){Pr=e.warn||Ta,jr=e.isPreTag||$,Or=e.mustUseProp||$,Br=e.getTagNamespace||$;e.isReservedTag;Ir=Sa(e.modules,"transformNode"),Fr=Sa(e.modules,"preTransformNode"),Rr=Sa(e.modules,"postTransformNode"),Er=e.delimiters;var n,a,i=[],r=!1!==e.preserveWhitespace,s=e.whitespace,o=!1,l=!1;function c(t){if(d(t),o||t.processed||(t=as(t,e)),i.length||t===n||n.if&&(t.elseif||t.else)&&rs(n,{exp:t.elseif,block:t}),a&&!t.forbidden)if(t.elseif||t.else)s=t,(c=function(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}(a.children))&&c.if&&rs(c,{exp:s.elseif,block:s});else{if(t.slotScope){var r=t.slotTarget||'"default"';(a.scopedSlots||(a.scopedSlots={}))[r]=t}a.children.push(t),t.parent=a}var s,c;t.children=t.children.filter((function(t){return!t.slotScope})),d(t),t.pre&&(o=!1),jr(t.tag)&&(l=!1);for(var u=0;u]*>)","i")),p=t.replace(u,(function(t,n,a){return c=a.length,Tr(d)||"noscript"===d||(n=n.replace(//g,"$1").replace(//g,"$1")),Nr(d,n)&&(n=n.slice(1)),e.chars&&e.chars(n),""}));l+=t.length-p.length,t=p,T(d,l-c,l)}else{var h=t.indexOf("<");if(0===h){if(Cr.test(t)){var f=t.indexOf("--\x3e");if(f>=0){e.shouldKeepComment&&e.comment(t.substring(4,f),l,l+f+3),A(f+3);continue}}if(xr.test(t)){var m=t.indexOf("]>");if(m>=0){A(m+2);continue}}var v=t.match(Ar);if(v){A(v[0].length);continue}var g=t.match(wr);if(g){var b=l;A(g[0].length),T(g[1],b,l);continue}var _=C();if(_){x(_),Nr(_.tagName,t)&&A(1);continue}}var y=void 0,k=void 0,w=void 0;if(h>=0){for(k=t.slice(h);!(wr.test(k)||yr.test(k)||Cr.test(k)||xr.test(k)||(w=k.indexOf("<",1))<0);)h+=w,k=t.slice(h);y=t.substring(0,h)}h<0&&(y=t),y&&A(y.length),e.chars&&y&&e.chars(y,l-y.length,l)}if(t===n){e.chars&&e.chars(t);break}}function A(e){l+=e,t=t.substring(e)}function C(){var e=t.match(yr);if(e){var n,a,i={tagName:e[1],attrs:[],start:l};for(A(e[0].length);!(n=t.match(kr))&&(a=t.match(gr)||t.match(vr));)a.start=l,A(a[0].length),a.end=l,i.attrs.push(a);if(n)return i.unarySlash=n[1],A(n[0].length),i.end=l,i}}function x(t){var n=t.tagName,l=t.unarySlash;r&&("p"===a&&mr(n)&&T(a),o(n)&&a===n&&T(n));for(var c=s(n)||!!l,d=t.attrs.length,u=new Array(d),p=0;p=0&&i[s].lowerCasedTag!==o;s--);else s=0;if(s>=0){for(var c=i.length-1;c>=s;c--)e.end&&e.end(i[c].tag,n,r);i.length=s,a=s&&i[s-1].tag}else"br"===o?e.start&&e.start(t,[],!0,n,r):"p"===o&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}T()}(t,{warn:Pr,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,shouldDecodeNewlinesForHref:e.shouldDecodeNewlinesForHref,shouldKeepComment:e.comments,outputSourceRange:e.outputSourceRange,start:function(t,r,s,d,u){var p=a&&a.ns||Br(t);Q&&"svg"===p&&(r=function(t){for(var e=[],n=0;nl&&(o.push(r=t.slice(l,i)),s.push(JSON.stringify(r)));var c=Ca(a[1].trim());s.push("_s("+c+")"),o.push({"@binding":c}),l=i+a[0].length}return l-1"+("true"===r?":("+e+")":":_q("+e+","+r+")")),La(t,"change","var $$a="+e+",$$el=$event.target,$$c=$$el.checked?("+r+"):("+s+");if(Array.isArray($$a)){var $$v="+(a?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+ja(e,"$$a.concat([$$v])")+")}else{$$i>-1&&("+ja(e,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+ja(e,"$$c")+"}",null,!0)}(t,a,i);else if("input"===r&&"radio"===s)!function(t,e,n){var a=n&&n.number,i=Pa(t,"value")||"null";Ma(t,"checked","_q("+e+","+(i=a?"_n("+i+")":i)+")"),La(t,"change",ja(e,i),null,!0)}(t,a,i);else if("input"===r||"textarea"===r)!function(t,e,n){var a=t.attrsMap.type,i=n||{},r=i.lazy,s=i.number,o=i.trim,l=!r&&"range"!==a,c=r?"change":"range"===a?"__r":"input",d="$event.target.value";o&&(d="$event.target.value.trim()");s&&(d="_n("+d+")");var u=ja(e,d);l&&(u="if($event.target.composing)return;"+u);Ma(t,"value","("+e+")"),La(t,c,u,null,!0),(o||s)&&La(t,"blur","$forceUpdate()")}(t,a,i);else if(!I.isReservedTag(r))return Ra(t,a,i),!1;return!0},text:function(t,e){e.value&&Ma(t,"textContent","_s("+e.value+")",e)},html:function(t,e){e.value&&Ma(t,"innerHTML","_s("+e.value+")",e)}},isPreTag:function(t){return"pre"===t},isUnaryTag:hr,mustUseProp:zn,canBeLeftOpenTag:fr,isReservedTag:Wn,getTagNamespace:Qn,staticKeys:function(t){return t.reduce((function(t,e){return t.concat(e.staticKeys||[])}),[]).join(",")}(ps)},vs=b((function(t){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(t?","+t:""))}));function gs(t,e){t&&(hs=vs(e.staticKeys||""),fs=e.isReservedTag||$,function t(e){if(e.static=function(t){if(2===t.type)return!1;if(3===t.type)return!0;return!(!t.pre&&(t.hasBindings||t.if||t.for||h(t.tag)||!fs(t.tag)||function(t){for(;t.parent;){if("template"!==(t=t.parent).tag)return!1;if(t.for)return!0}return!1}(t)||!Object.keys(t).every(hs)))}(e),1===e.type){if(!fs(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var n=0,a=e.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,_s=/\([^)]*?\);*$/,ys=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,ks={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ws={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},As=function(t){return"if("+t+")return null;"},Cs={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:As("$event.target !== $event.currentTarget"),ctrl:As("!$event.ctrlKey"),shift:As("!$event.shiftKey"),alt:As("!$event.altKey"),meta:As("!$event.metaKey"),left:As("'button' in $event && $event.button !== 0"),middle:As("'button' in $event && $event.button !== 1"),right:As("'button' in $event && $event.button !== 2")};function xs(t,e){var n=e?"nativeOn:":"on:",a="",i="";for(var r in t){var s=Ts(t[r]);t[r]&&t[r].dynamic?i+=r+","+s+",":a+='"'+r+'":'+s+","}return a="{"+a.slice(0,-1)+"}",i?n+"_d("+a+",["+i.slice(0,-1)+"])":n+a}function Ts(t){if(!t)return"function(){}";if(Array.isArray(t))return"["+t.map((function(t){return Ts(t)})).join(",")+"]";var e=ys.test(t.value),n=bs.test(t.value),a=ys.test(t.value.replace(_s,""));if(t.modifiers){var i="",r="",s=[];for(var o in t.modifiers)if(Cs[o])r+=Cs[o],ks[o]&&s.push(o);else if("exact"===o){var l=t.modifiers;r+=As(["ctrl","shift","alt","meta"].filter((function(t){return!l[t]})).map((function(t){return"$event."+t+"Key"})).join("||"))}else s.push(o);return s.length&&(i+=function(t){return"if(!$event.type.indexOf('key')&&"+t.map(Ss).join("&&")+")return null;"}(s)),r&&(i+=r),"function($event){"+i+(e?"return "+t.value+"($event)":n?"return ("+t.value+")($event)":a?"return "+t.value:t.value)+"}"}return e||n?t.value:"function($event){"+(a?"return "+t.value:t.value)+"}"}function Ss(t){var e=parseInt(t,10);if(e)return"$event.keyCode!=="+e;var n=ks[t],a=ws[t];return"_k($event.keyCode,"+JSON.stringify(t)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(a)+")"}var Ms={on:function(t,e){t.wrapListeners=function(t){return"_g("+t+","+e.value+")"}},bind:function(t,e){t.wrapData=function(n){return"_b("+n+",'"+t.tag+"',"+e.value+","+(e.modifiers&&e.modifiers.prop?"true":"false")+(e.modifiers&&e.modifiers.sync?",true":"")+")"}},cloak:M},$s=function(t){this.options=t,this.warn=t.warn||Ta,this.transforms=Sa(t.modules,"transformCode"),this.dataGenFns=Sa(t.modules,"genData"),this.directives=T(T({},Ms),t.directives);var e=t.isReservedTag||$;this.maybeComponent=function(t){return!!t.component||!e(t.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ds(t,e){var n=new $s(e);return{render:"with(this){return "+(t?zs(t,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function zs(t,e){if(t.parent&&(t.pre=t.pre||t.parent.pre),t.staticRoot&&!t.staticProcessed)return Ns(t,e);if(t.once&&!t.onceProcessed)return Ls(t,e);if(t.for&&!t.forProcessed)return Es(t,e);if(t.if&&!t.ifProcessed)return Ps(t,e);if("template"!==t.tag||t.slotTarget||e.pre){if("slot"===t.tag)return function(t,e){var n=t.slotName||'"default"',a=js(t,e),i="_t("+n+(a?","+a:""),r=t.attrs||t.dynamicAttrs?qs((t.attrs||[]).concat(t.dynamicAttrs||[]).map((function(t){return{name:y(t.name),value:t.value,dynamic:t.dynamic}}))):null,s=t.attrsMap["v-bind"];!r&&!s||a||(i+=",null");r&&(i+=","+r);s&&(i+=(r?"":",null")+","+s);return i+")"}(t,e);var n;if(t.component)n=function(t,e,n){var a=e.inlineTemplate?null:js(e,n,!0);return"_c("+t+","+Is(e,n)+(a?","+a:"")+")"}(t.component,t,e);else{var a;(!t.plain||t.pre&&e.maybeComponent(t))&&(a=Is(t,e));var i=t.inlineTemplate?null:js(t,e,!0);n="_c('"+t.tag+"'"+(a?","+a:"")+(i?","+i:"")+")"}for(var r=0;r>>0}(s):"")+")"}(t,t.scopedSlots,e)+","),t.model&&(n+="model:{value:"+t.model.value+",callback:"+t.model.callback+",expression:"+t.model.expression+"},"),t.inlineTemplate){var r=function(t,e){var n=t.children[0];if(n&&1===n.type){var a=Ds(n,e.options);return"inlineTemplate:{render:function(){"+a.render+"},staticRenderFns:["+a.staticRenderFns.map((function(t){return"function(){"+t+"}"})).join(",")+"]}"}}(t,e);r&&(n+=r+",")}return n=n.replace(/,$/,"")+"}",t.dynamicAttrs&&(n="_b("+n+',"'+t.tag+'",'+qs(t.dynamicAttrs)+")"),t.wrapData&&(n=t.wrapData(n)),t.wrapListeners&&(n=t.wrapListeners(n)),n}function Fs(t){return 1===t.type&&("slot"===t.tag||t.children.some(Fs))}function Rs(t,e){var n=t.attrsMap["slot-scope"];if(t.if&&!t.ifProcessed&&!n)return Ps(t,e,Rs,"null");if(t.for&&!t.forProcessed)return Es(t,e,Rs);var a="_empty_"===t.slotScope?"":String(t.slotScope),i="function("+a+"){return "+("template"===t.tag?t.if&&n?"("+t.if+")?"+(js(t,e)||"undefined")+":undefined":js(t,e)||"undefined":zs(t,e))+"}",r=a?"":",proxy:true";return"{key:"+(t.slotTarget||'"default"')+",fn:"+i+r+"}"}function js(t,e,n,a,i){var r=t.children;if(r.length){var s=r[0];if(1===r.length&&s.for&&"template"!==s.tag&&"slot"!==s.tag){var o=n?e.maybeComponent(s)?",1":",0":"";return""+(a||zs)(s,e)+o}var l=n?function(t,e){for(var n=0,a=0;a':'
',Qs.innerHTML.indexOf(" ")>0}var Ys=!!U&&Ks(!1),Js=!!U&&Ks(!0),Xs=b((function(t){var e=Yn(t);return e&&e.innerHTML})),Zs=kn.prototype.$mount;kn.prototype.$mount=function(t,e){if((t=t&&Yn(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var a=n.template;if(a)if("string"==typeof a)"#"===a.charAt(0)&&(a=Xs(a));else{if(!a.nodeType)return this;a=a.innerHTML}else t&&(a=function(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement("div");return e.appendChild(t.cloneNode(!0)),e.innerHTML}(t));if(a){var i=Gs(a,{outputSourceRange:!1,shouldDecodeNewlines:Ys,shouldDecodeNewlinesForHref:Js,delimiters:n.delimiters,comments:n.comments},this),r=i.render,s=i.staticRenderFns;n.render=r,n.staticRenderFns=s}}return Zs.call(this,t,e)},kn.compile=Gs;const to=io.connect(window.location.href);to.on("connect",()=>{document.getElementById("start_app_placeholder").classList.add("loading_placeholder--hidden")});var eo=new kn;function no(t,e){const{currentTarget:{dataset:{id:n}}}=e;switch(t){case"artist":eo.$emit("artistTab:reset");break;case"album":case"playlist":case"spotifyplaylist":eo.$emit("tracklistTab:reset")}to.emit("getTracklist",{type:t,id:n}),ro(t,n)}function ao(t,e,n){window.windows_stack=[],window.currentStack={};const a=document.getElementsByClassName(e+"_tabcontent");for(let t=0;t{t.addEventListener("click",so)})}window.search_selected="",window.main_selected="",window.windows_stack=[],window.currentStack={};const lo={name:"the-sidebar",data:()=>({appOnline:null,activeTheme:"light",themes:["purple","dark","light"]}),mounted(){this.appOnline=navigator.onLine,window.addEventListener("online",()=>{this.appOnline=!0}),window.addEventListener("offline",()=>{this.appOnline=!1}),this.activeTheme=localStorage.getItem("selectedTheme")||"light"},methods:{changeTheme(t){t!==this.activeTheme&&(this.activeTheme=t,document.documentElement.setAttribute("data-theme",t),localStorage.setItem("selectedTheme",t),document.querySelectorAll("*").forEach(t=>{t.style.transition="all 200ms ease-in-out"}),document.documentElement.addEventListener("transitionend",(function t(){document.querySelectorAll("*").forEach(t=>{t.style.transition=""}),document.documentElement.removeEventListener("transitionend",t)})))},handleSidebarClick(t){const{target:e}=t;if(!(e.matches(".main_tablinks")||e.parentElement.matches(".main_tablinks")))return;let n=e.matches(".main_tablinks")?e:e.parentElement,a=null;switch(n.id){case"main_search_tablink":a="search_tab";break;case"main_home_tablink":a="home_tab";break;case"main_charts_tablink":a="charts_tab";break;case"main_favorites_tablink":a="favorites_tab";break;case"main_analyzer_tablink":a="analyzer_tab";break;case"main_settings_tablink":a="settings_tab";break;case"main_about_tablink":a="about_tab"}a&&ao(n,"main",a)}}};var co=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("aside",{attrs:{id:"sidebar",role:"navigation"},on:{click:t.handleSidebarClick}},[n("span",{staticClass:"main_tablinks",attrs:{id:"main_home_tablink",role:"link","aria-label":"home"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("home")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.home")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_search_tablink",role:"link","aria-label":"search"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("search")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.search")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_charts_tablink",role:"link","aria-label":"charts"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("bubble_chart")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.charts")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_favorites_tablink",role:"link","aria-label":"favorites"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("album")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.favorites")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_analyzer_tablink",role:"link","aria-label":"link analyzer"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("link")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.linkAnalyzer")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_settings_tablink",role:"link","aria-label":"settings"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("settings")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.settings")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"main_about_tablink",role:"link","aria-label":"info"}},[n("i",{staticClass:"material-icons side_icon"},[t._v("info")]),t._v(" "),n("span",{staticClass:"main_tablinks_text"},[t._v(t._s(t.$t("sidebar.about")))])]),t._v(" "),n("span",{staticClass:"main_tablinks",attrs:{id:"theme_selector",role:"link","aria-label":"theme selector"}},[n("i",{staticClass:"material-icons side_icon side_icon--theme"},[t._v("palette")]),t._v(" "),n("div",{attrs:{id:"theme_togglers"}},t._l(t.themes,(function(e){return n("div",{key:e,staticClass:"theme_toggler ",class:[{"theme_toggler--active":t.activeTheme===e},"theme_toggler--"+e],on:{click:function(n){return t.changeTheme(e)}}})})),0)]),t._v(" "),n("div",{class:{online:t.appOnline,offline:!t.appOnline},attrs:{id:"network-status"}},[t.appOnline?n("i",{staticClass:"material-icons"},[t._v("wifi")]):n("i",{staticClass:"material-icons"},[n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"}},[n("path",{attrs:{d:"M24 .01c0-.01 0-.01 0 0L0 0v24h24V.01zM0 0h24v24H0V0zm0 0h24v24H0V0z",fill:"none"}}),t._v(" "),n("path",{attrs:{d:"M22.99 9C19.15 5.16 13.8 3.76 8.84 4.78l2.52 2.52c3.47-.17 6.99 1.05 9.63 3.7l2-2zm-4 4c-1.29-1.29-2.84-2.13-4.49-2.56l3.53 3.53.96-.97zM2 3.05L5.07 6.1C3.6 6.82 2.22 7.78 1 9l1.99 2c1.24-1.24 2.67-2.16 4.2-2.77l2.24 2.24C7.81 10.89 6.27 11.73 5 13v.01L6.99 15c1.36-1.36 3.14-2.04 4.92-2.06L18.98 20l1.27-1.26L3.29 1.79 2 3.05zM9 17l3 3 3-3c-1.65-1.66-4.34-1.66-6 0z"}})])])])])};co._withStripped=!0;var uo=function(t,e,n,a,i,r,s,o){const l=("function"==typeof n?n.options:n)||{};l.__file="/mnt/Dati/Programmazione/DeezloaderStuff/deemix/deemix-pyweb/webui/src/components/TheSidebar.vue",l.render||(l.render=t.render,l.staticRenderFns=t.staticRenderFns,l._compiled=!0,i&&(l.functional=!0)),l._scopeId=a;{let t;if(e&&(t=function(t){e.call(this,s(t))}),void 0!==t)if(l.functional){const e=l.render;l.render=function(n,a){return t.call(a),e(n,a)}}else{const e=l.beforeCreate;l.beforeCreate=e?[].concat(e,t):[t]}}return l}({render:co,staticRenderFns:[]},(function(t){t&&t("data-v-7d8957a2_0",{source:"\n#network-status[data-v-7d8957a2] {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tposition: relative;\n\tmargin-top: auto;\n\tbottom: 0;\n}\n#network-status.online i.material-icons[data-v-7d8957a2] {\n\tcolor: hsl(151, 100%, 31%);\n}\n#network-status.offline i.material-icons svg[data-v-7d8957a2] {\n\tfill: red;\n\twidth: 1em;\n\theight: 1em;\n}\n",map:{version:3,sources:["/mnt/Dati/Programmazione/DeezloaderStuff/deemix/deemix-pyweb/webui/src/components/TheSidebar.vue"],names:[],mappings:";AA0DA;CACA,aAAA;CACA,uBAAA;CACA,mBAAA;CACA,kBAAA;CACA,gBAAA;CACA,SAAA;AACA;AAEA;CACA,0BAAA;AACA;AAEA;CACA,SAAA;CACA,UAAA;CACA,WAAA;AACA",file:"TheSidebar.vue",sourcesContent:['\n\n\n\n diff --git a/src/lang/de.js b/src/lang/de.js index 9adaf2f..38cc53f 100644 --- a/src/lang/de.js +++ b/src/lang/de.js @@ -40,28 +40,28 @@ const de = { }, subtitles: { bugReports: "Gibt es etwas, das im Deemix nicht funktioniert? Teil es uns mit!", - contributing: 'du möchtest zu diesem Projekt beitragen? Das kannst du auf verschiedene Weise tun!', - donations: 'du möchtest einen monetären Beitrag leisten? Gib uns eine Spende!' + contributing: 'Du möchtest zu diesem Projekt beitragen? Das kannst du auf verschiedene Arten tun!', + donations: 'Du möchtest deemix finanziell unterstützen? Dann mach eine Spende' }, usesLibrary: 'Diese App verwendet die deemix Bibliothek, die du verwenden kannst, um Deine eigene UI für Deemix zu erstellen.', thanks: `Danke an rtonno, uhwot und lollilol für die Hilfe bei diesem Projekt und an BasCurtiz und scarvimane für das Design der Icons.`, - upToDate: `Bleibe mit den Aktualisierungen auf dem Laufenden, indem du dem Nachrichtenkanal auf Telegram folgst.`, + upToDate: `Bleib auf dem Laufenden mit den Updates indem du dem News Channel auf Telegram folgst.`, officialWebsite: 'Offizielle Webseite', officialRepo: 'Offizielle Library Repository', officialWebuiRepo: 'Offizielle WebUI Repository', officialSubreddit: 'Offizieller Subreddit', newsChannel: 'News Kanal', - questions: `Wenn du Fragen oder Probleme mit der App hast, suche zuerst nach einer Lösung im subreddit. Wenn du dann nichts findest, kannst du einen Beitrag mit Deinem Thema auf dem subreddit verfassen.`, - beforeReporting: `Bevor du einen Fehler meldest, stelle sicher, dass du die neueste Version der App benutzt und dass das, was du melden möchtest, tatsächlich ein Fehler ist und nicht etwas, das nur auf deiner Seite falsch ist.`, - beSure: `Vergewissere dich, dass der Fehler auf einem anderen Rechner reproduzierbar ist und auch DO NOT melde einen Fehler, wenn er bereits gemeldet wurde.`, + questions: `Wenn du Fragen oder Probleme mit der App hast, suche zuerst nach einer Lösung im subreddit. Wenn du dann nichts findest, kannst du einen Beitrag mit Deinem Thema auf dem Subreddit verfassen.`, + beforeReporting: `Bevor du einen Fehler meldest, stelle sicher, dass du die neueste Version der App benutzt und dass das, was du melden möchtest, tatsächlich ein Bug ist und nicht etwas, das nur bei dir falsch ist.`, + beSure: `Vergewissere dich, dass der Bug auf einem anderen Rechner vorhanden ist und melde NICHT einen Bug, wenn er bereits gemeldet wurde.`, duplicateReports: 'Doppelte Fehlerberichte werden geschlossen, also behalte das im Auge.', - dontOpenIssues: `Erstelle KEINE Einträge, um Fragen zu stellen, dafür gibt es einen Unterpunkt.`, - newUI: `Wenn du dich mit Python auskennst, könntest du versuchen, ein neues UI für die Anwendung zu erstellen, indem du die Basisbibliothek benutzt, oder Fehler in der Bibliothek mit einer Pull-Anfrage auf der Repo behebst.`, + dontOpenIssues: `Erstelle KEINE Fehlerberichte, um Fragen zu stellen, dafür gibt es einen Subreddit.`, + newUI: `Wenn du dich mit Python auskennst, könntest du versuchen, mit hilfe der base library eine neue Benutzeroberfläche für die App zu erstellen oder Fehler in der library mit einem Pull-Request in der deemix Repo zu beheben.`, acceptFeatures: `Ich akzeptiere auch Features, aber keine komplexen Dinge, da sie direkt in der App und nicht in der Bibliothek implementiert werden können.`, otherLanguages: `Wenn du eine andere Programmiersprache fließend beherrschst, könntest du versuchen, deemix in andere Programmiersprachen zu portieren!`, - understandingCode: `Sie benötigen Hilfe beim Verständnis des Codes? Drücken Sie einfach RemixDev auf Telegram oder Reddit.`, - contributeWebUI: `Wenn du Vue.js (JavaScript), HTML oder CSS kennst, könntest du zum WebUI beitragen.`, - itsFree: `Du solltest daran denken, dass dies ist ein freies Projekt ist und Du solltest die Künstler, die du liebst, unterstützen, bevor du die Entwickler unterstützt.`, + understandingCode: `Du benötigst Hilfe beim verstehen des Codes? Frag einfach RemixDev auf Telegram oder Reddit.`, + contributeWebUI: `Wenn du Vue.js (JavaScript) oder HTML und CSS kennst, könntest du etwas zum WebUI beitragen.`, + itsFree: `Du solltest daran denken, dass dies ist ein kostenloses Projekt ist und Du solltest die Künstler, die du magst, unterstützen, bevor du die Entwickler unterstützt.`, notObligated: `Fühle dich nicht verpflichtet zu spenden, wir schätzen deinen Beitrag trotzdem!`, lincensedunder: `Diese Arbeit ist lizensiert unter einer deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', + usesLibrary: + 'Esta aplicación usa la biblioteca deemix, que puedes usar para hacer tu propia interfaz de usuario para deemix.', thanks: `Gracias a rtonno, uhwot y lollilol por ayudarme con este proyecto, a BasCurtiz y scarvimane por hacer el icono.`, upToDate: `Mantente al día con las actualizaciones siguiendo el canal de noticias en Telegram.`, officialWebsite: 'Página web oficial', @@ -78,7 +79,7 @@ const es = { invalidURL: 'No se reconoce la URL', unsupportedURL: 'La URL no está soportada aún', ISRCnotOnDeezer: 'Pista ISRC no está disponible en Deezer', - notYourPrivatePlaylist: "No puedes descargar otras listas de reproducción privadas.", + notYourPrivatePlaylist: 'No puedes descargar otras listas de reproducción privadas.', spotifyDisabled: 'Funciones de Spotify no está configurado correctamente.', trackNotOnDeezer: '¡No se encontró la pista en Deezer!', albumNotOnDeezer: '¡El álbum no se encuentra en Deezer!', @@ -86,10 +87,12 @@ const es = { notEncoded: '¡Pista aún no codificada!', notEncodedNoAlternative: '¡Pista aún no codificada y no se ha encontrado ninguna alternativa!', wrongBitrate: 'La pista no se encuentra a la velocidad de bitrate deseada.', - wrongBitrateNoAlternative: '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', + wrongBitrateNoAlternative: + '¡Pista no encontrada a la tasa de bits deseada y no se ha encontrado ninguna alternativa!', no360RA: 'La pista no está disponible en Reality Audio 360.', - notAvailable: "¡La pista no está disponible en los servidores de Deezer!", - notAvailableNoAlternative: "¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!" + notAvailable: '¡La pista no está disponible en los servidores de Deezer!', + notAvailableNoAlternative: + '¡La pista no está disponible en los servidores de Deezer y no se ha encontrado ninguna alternativa!' } }, favorites: { @@ -109,7 +112,8 @@ const es = { }, linkAnalyzer: { info: 'Puedes usar esta sección para encontrar más información sobre el enlace que estás tratando de descargar.', - useful: "Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.", + useful: + 'Esto es útil si está tratando de descargar algunas pistas que no están disponibles en su país y quiere saber dónde están disponibles, por ejemplo.', linkNotSupported: 'Este enlace aún no está soportado', linkNotSupportedYet: 'Parece que este enlace aún no está soportado, intenta analizar otro.', table: { @@ -129,7 +133,8 @@ const es = { }, search: { startSearching: '¡Comienza a buscar!', - description: 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', + description: + 'Puedes buscar un tema, un álbum entero, un artista, una lista de reproducción... ¡todo! También puedes pegar un enlace de Deezer', fans: '{0} fanáticos', noResults: 'No hay resultados', noResultsTrack: 'No se encontraron pistas', @@ -148,7 +153,7 @@ const es = { loggingIn: 'Conectando...', loggedIn: 'Conectado', alreadyLogged: 'Ya está conectado', - loginFailed: "No se puede conectar", + loginFailed: 'No se puede conectar', loggedOut: 'Desconectado', cancellingCurrentItem: 'Cancelando el elemento actual.', currentItemCancelled: 'El elemento actual se ha cancelado.', @@ -212,7 +217,7 @@ const es = { overwriteFile: { title: '¿Desea que sobreescriba los archivos?', y: 'Sí, sobrescribir el archivo', - n: "No, no sobrescribir el archivo", + n: 'No, no sobrescribir el archivo', t: 'Sobrescribir sólo las etiquetas' }, fallbackBitrate: 'La solución alternativa de bitrate', @@ -338,4 +343,4 @@ const es = { } } -export default es \ No newline at end of file +export default es diff --git a/src/lang/fr.js b/src/lang/fr.js index b44992e..4194664 100644 --- a/src/lang/fr.js +++ b/src/lang/fr.js @@ -39,11 +39,12 @@ const fr = { license: 'Licence' }, subtitles: { - bugReports: "Y a-t-il quelque chose qui ne fonctionne pas avec deemix ? Dites-le nous !", + bugReports: 'Y a-t-il quelque chose qui ne fonctionne pas avec deemix ? Dites-le nous !', contributing: 'Vous souhaitez contribuer à ce projet ? Vous pouvez le faire de différentes manières !', donations: 'Vous souhaitez contribuer financièrement ? Vous pourriez faire un don !' }, - usesLibrary: 'Cette application utilise la librairie deemix, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.', + usesLibrary: + 'Cette application utilise la librairie deemix, que vous pouvez utiliser afin de créer votre propre interface utilisateur pour deemix.', thanks: `Merci à rtonno, uhwot et lollilol pour m'avoir aidé avec ce projet et à BasCurtiz et scarvimane pour avoir réalisé l'icône.`, upToDate: `Restez informé des mises à jour en suivant le canal d'information sur Telegram.`, officialWebsite: 'Site Officiel', @@ -85,19 +86,19 @@ const fr = { albumNotOnDeezer: 'Album introuvable sur deezer !', notOnDeezer: 'Piste non disponible sur Deezer !', notEncoded: 'Piste pas encore encodée !', - notEncodedNoAlternative: "Piste pas encore encodée et aucune alternative trouvée !", + notEncodedNoAlternative: 'Piste pas encore encodée et aucune alternative trouvée !', wrongBitrate: 'Piste introuvable au débit souhaité.', wrongBitrateNoAlternative: 'Piste introuvable au débit souhaité et aucune alternative trouvée !', no360RA: "La piste n'est pas disponible avec Reality Audio 360.", - notAvailable: "Piste non disponible sur les serveurs de deezer !", - notAvailableNoAlternative: "Piste non disponible sur les serveurs de deezer et aucune alternative trouvée !" + notAvailable: 'Piste non disponible sur les serveurs de deezer !', + notAvailableNoAlternative: 'Piste non disponible sur les serveurs de deezer et aucune alternative trouvée !' } }, favorites: { title: 'Favoris', noPlaylists: 'Aucune Playlist trouvée', - noAlbums: "Aucuns Album Favori trouvé", - noArtists: "Aucun Artiste Favori trouvé", + noAlbums: 'Aucuns Album Favori trouvé', + noArtists: 'Aucun Artiste Favori trouvé', noTracks: 'Aucune Piste Favorite trouvée' }, home: { @@ -109,7 +110,8 @@ const fr = { } }, linkAnalyzer: { - info: "Vous pouvez utiliser cette section afin de trouver plus d'informations sur le lien que vous essayer de télcharger.", + info: + "Vous pouvez utiliser cette section afin de trouver plus d'informations sur le lien que vous essayer de télcharger.", useful: "C'est utile si vous essayer de télécharger des pistes qui ne sont pas disponibles dans votre pays et que vous souhaitez savoir où elles sont disponibles, par exemple.", linkNotSupported: "Ce lien n'est pas encore supporté", @@ -151,7 +153,7 @@ const fr = { loggingIn: 'Connexion', loggedIn: 'Connecté', alreadyLogged: 'Déjà connecté', - loginFailed: "Connexion impossible", + loginFailed: 'Connexion impossible', loggedOut: 'Déconnecté', cancellingCurrentItem: "Annulation de l'élément actuel.", currentItemCancelled: 'Élément actuel annulé.', @@ -262,7 +264,7 @@ const fr = { length: 'Durée de Piste', barcode: "Code-barres de l'album (UPC)", bpm: 'BPM', - replayGain: "Gain du Replay", + replayGain: 'Gain du Replay', label: "Label de l'Album", lyrics: 'Paroles non synchronisées', copyright: "Droits d'auteur (copyright)", @@ -277,7 +279,7 @@ const fr = { multiArtistSeparator: { title: 'Comment aimeriez-vous séparer vos artistes ?', nothing: "Enregistrer uniquement l'artiste principal", - default: "En utilisant la spécification standard", + default: 'En utilisant la spécification standard', andFeat: 'En utilisant & et feat.', using: 'En utilisant "{0}"' }, @@ -341,4 +343,4 @@ const fr = { } } -export default fr \ No newline at end of file +export default fr diff --git a/src/lang/pt-br.js b/src/lang/pt-br.js new file mode 100644 index 0000000..9d35fcb --- /dev/null +++ b/src/lang/pt-br.js @@ -0,0 +1,345 @@ +const ptBr = { + globals: { + welcome: 'Bem vindo ao deemix', + back: 'voltar', + loading: 'carregando', + download: 'Baixar {0}', + by: 'por {0}', + in: 'em {0}', + download_hint: 'Baixar', + play_hint: 'Reproduzir', + toggle_download_tab_hint: 'Expandir/Recolher', + clean_queue_hint: 'Limpar os terminados', + cancel_queue_hint: 'Cancelar todos', + listTabs: { + empty: '', + all: 'todos', + top_result: 'Resultado principal', + album: 'álbum | álbuns', + artist: 'artista | artistas', + single: 'single | singles', + title: 'título | títulos', + track: 'faixa | faixas', + trackN: '0 faixas | {n} faixa | {n} faixas', + releaseN: '0 lançamentos | {n} lançamento | {n} lançamentos', + playlist: 'playlist | playlists', + compile: 'compilação | compilações', + ep: 'ep | eps', + spotifyPlaylist: 'playlist do spotify | playlists do spotify', + releaseDate: 'data de lançamento', + error: 'erro' + } + }, + about: { + titles: { + usefulLinks: 'Links Úteis', + bugReports: 'Relatar Bugs', + contributing: 'Contribuições', + donations: 'Doações', + license: 'Licença' + }, + subtitles: { + bugReports: 'Tem algo não funcionando no deemix? Informe-nos!', + contributing: 'Quer contribuir com este projeto? Há várias formas!', + donations: 'Quer contribuir monetariamente? Você pode fazer uma doação!' + }, + usesLibrary: + 'Este programa usa a biblioteca deemix, no qual você pode usar para construir uma UI para o seu deemix.', + thanks: `Obrigado rtonno, uhwot e lollilol por me ajudarem com este projeto e BasCurtiz e scarvimane por fazerem o ícone.`, + upToDate: `Seja avisado quando houver novas atualizações, siga o nosso canal de notícias no Telegram.`, + officialWebsite: 'Website Oficial', + officialRepo: 'Repositório da Biblioteca Oficial', + officialWebuiRepo: 'Repositório da WebUI Oficial', + officialSubreddit: 'Subreddit Oficial', + newsChannel: 'Canal de Notícia', + questions: `Caso houver dúvidas ou problemas com o programa, procure uma solução no subreddit. Caso não encontre nada, você pode fazer um post com a sua dúvida no subreddit.`, + beforeReporting: `Antes de reportar um bug tenha certeza de que o seu deemix esteja atualizado e que o seu relato seja realmente um bug e não um problema no seu lado de usuário.`, + beSure: `Certifique-se de que o bug ocorra em outras máquinas e NÃO relate-o caso ele já tenha sido relatado.`, + duplicateReports: 'Relatos duplicados de bug serão fechados, então fique de olho.', + dontOpenIssues: `NÃO abra uma issue para fazer questões, o subreddit é para isso.`, + newUI: `Caso seja fluente em python, você pode tentar fazer uma nova UI para o app usando a biblioteca base, ou consertar os bugs da biblioteca com uma pull request na repo do projeto.`, + acceptFeatures: `Eu aceito recursos também, mas nada muito complexo e que possa ser implementado diretamente no aplicativo e não na biblioteca.`, + otherLanguages: `Caso seja fluente em outra linguagem de programação você pode tentar portar o deemix para ela!`, + understandingCode: `Precisa de ajuda para entender o código? Contate o RemixDev no Telegram ou Reddit.`, + contributeWebUI: `Caso saiba Vue.js (JavaScript), HTML ou CSS você pode contribuir para a WebUI.`, + itsFree: `Mantenha em mente que este é um projeto gratuito e que você deve apoiar os artistas que ama antes de apoiar os desenvolvedores.`, + notObligated: `Não se sinta obrigado a doar, agradecemos da mesma forma!`, + lincensedUnder: `Este trabalho é licenciado sob a + GNU General Public License 3.0.` + }, + charts: { + title: 'Charts', + changeCountry: 'Trocar o país', + download: 'Baixe a chart' + }, + errors: { + title: 'Erros para {0}', + ids: { + invalidURL: 'URL não reconhecida', + unsupportedURL: 'URL não suportada', + ISRCnotOnDeezer: 'ISRC da faixa não está no deezer', + notYourPrivatePlaylist: 'Você não pode baixar playlists privadas de outros usuários.', + spotifyDisabled: 'Recursos do Spotify não estão configurados corretamente.', + trackNotOnDeezer: 'Faixa não encontrada no deezer!', + albumNotOnDeezer: 'Álbum não encontrada no deezer!', + notOnDeezer: 'Faixa não disponível no Deezer!', + notEncoded: 'Faixa ainda não encodada!', + notEncodedNoAlternative: 'Faixa ainda não encodada e sem alternativas encontradas!', + wrongBitrate: 'Faixa não encontrada no bitrate desejado.', + wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e sem alternativas encontradas!', + no360RA: 'Faixa não disponível no Reality Audio 360.', + notAvailable: 'Faixa não disponível nos servidores do deezer!', + notAvailableNoAlternative: 'Faixa não disponível nos servidores do deezer e sem alternativas encontradas!' + } + }, + favorites: { + title: 'Favorites', + noPlaylists: 'Nenhuma playlists favorita encontrada', + noAlbums: 'Nenhum álbum favorito encontrado', + noArtists: 'Nenhum artista favorito encontrado', + noTracks: 'Nenhuma faixa favorita encontrada' + }, + home: { + needTologin: 'Você precisa logar na sua conta do Deezer antes de poder começar a baixar.', + openSettings: 'Abrir configurações', + sections: { + popularPlaylists: 'Playlists populares', + popularAlbums: 'Álbuns mais ouvidos' + } + }, + linkAnalyzer: { + info: 'Você pode usar esta seção para descobrir mais informações sobre o link que está tentando baixar.', + useful: + 'Esta função é útil caso esteja tentando baixar algumas faixas que não estão disponíveis no seu país e você quer descobrir aonde estão disponíveis, por exemplo.', + linkNotSupported: 'Este link não é suportado ainda', + linkNotSupportedYet: 'Aparentemente este link ainda não é suportado, tente analizar algum outro.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Duração', + diskNumber: 'Número do disco', + trackNumber: 'Número da faixa', + releaseDate: 'Data de lançamento', + bpm: 'BPM', + label: 'Gravadora', + recordType: 'Tipo de gravação', + genres: 'Gêneros', + tracklist: 'Lista de faixas' + } + }, + search: { + startSearching: 'Comece a procurar!', + description: + 'Você pode procurar uma faixa, um álbum inteiro, um artista, uma playlist... tudo! Você também pode colar um link do Deezer', + fans: '{0} fãs', + noResults: 'Sem resultados', + noResultsTrack: 'Nenhuma faixa encontrada', + noResultsAlbum: 'Nenhum álbum encontrado', + noResultsArtist: 'Nenhum artista encontrado', + noResultsPlaylist: 'Nenhuma playlist encontrada' + }, + searchbar: 'Pesquise tudo o que quiser (ou simplesmente cole um link)', + downloads: 'downloads', + toasts: { + addedToQueue: '{0} adicionado à lista de espera', + alreadyInQueue: '{0} já está na lista de espera!', + finishDownload: '{0} terminou de baixar.', + allDownloaded: 'Todos os downloads terminaram!', + refreshFavs: 'Atualização completa!', + loggingIn: 'Entrando na conta', + loggedIn: 'Conta logada', + alreadyLogged: 'Já está na conta', + loginFailed: 'Não pode entrar na conta', + loggedOut: 'Saindo da conta', + cancellingCurrentItem: 'Cancelando item atual.', + currentItemCancelled: 'Cancelado item atual.', + startAddingArtist: 'Adicionando {0} álbuns à lista de espera', + finishAddingArtist: '{0} álbuns adicionados à lista de espera', + startConvertingSpotifyPlaylist: 'Convertendo faixas do Spotify para faixas do Deezer', + finishConvertingSpotifyPlaylist: 'Playlist do Spotify convertida' + }, + settings: { + title: 'Configurações', + languages: 'Linguagens', + login: { + title: 'Login', + loggedIn: 'Você já está logado como {username}', + arl: { + question: 'Como eu pego a minha ARL?', + update: 'Atualizar a ARL' + }, + logout: 'Sair' + }, + appearance: { + title: 'Aparência', + slimDownloadTab: 'Guia de download slim' + }, + downloadPath: { + title: 'Diretório de download' + }, + templates: { + title: 'Templates', + tracknameTemplate: 'Template do nome da faixa avulsa', + albumTracknameTemplate: 'Template do nome da faixa no álbum', + playlistTracknameTemplate: 'Template do nome da faixa na playlist' + }, + folders: { + title: 'Pastas', + createPlaylistFolder: 'Criar pasta para playlists', + playlistNameTemplate: 'Template do nome da pasta da playlist', + createArtistFolder: 'Criar pasta para artistas', + artistNameTemplate: 'Template do nome da pasta do artista', + createAlbumFolder: 'Criar pasta para álbuns', + albumNameTemplate: 'Template do nome da pasta do álbum', + createCDFolder: 'Criar pasta para discos', + createStructurePlaylist: 'Criar estrutura de pasta para playlists', + createSingleFolder: 'Criar estrutura de pasta para singles' + }, + trackTitles: { + title: 'Títulos das faixas', + padTracks: 'Pad das faixas', + paddingSize: 'Substituir tamanho do padding', + illegalCharacterReplacer: 'Substituto de caracter ilegal' + }, + downloads: { + title: 'Downloads', + queueConcurrency: 'Downloads simultâneos', + maxBitrate: { + title: 'Bitrate preferido', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Posso substituir os arquivos?', + y: 'Sim, substitua os arquivos', + n: 'Não, não substitua os arquivos', + t: 'Substitua apenas as tags' + }, + fallbackBitrate: 'Bitrate reserva', + fallbackSearch: 'Pesquisa reserva', + logErrors: 'Criar log para erros', + logSearched: 'Criar log para faixas pesquisadas', + createM3U8File: 'Criar arquivo de playlist', + syncedLyrics: 'Criar arquivos .lyr (Letras sincronizadas)', + playlistFilenameTemplate: 'Template do nome da playlist', + saveDownloadQueue: 'Salvar lista de espera do download ao fechar o programa' + }, + covers: { + title: 'Capa dos álbuns', + saveArtwork: 'Salvar as capas', + coverImageTemplate: 'Template do nome da capa', + saveArtworkArtist: 'Salvar imagem do artista', + artistImageTemplate: 'Template da imagem do artista', + localArtworkSize: 'Tamanho da artwork local', + embeddedArtworkSize: 'Tamanho da artwork embutida', + localArtworkFormat: { + title: 'Qual formato você quer que a artwork local seja?', + jpg: 'Uma imagem jpeg', + png: 'Uma imagem png', + both: 'Ambos um jpeg e um png' + }, + jpegImageQuality: 'Qualidade do JPEG' + }, + tags: { + head: 'Quais tags salvar', + title: 'Título', + artist: 'Artista', + album: 'Álbuns', + cover: 'Capa', + trackNumber: 'Número da faixa', + trackTotal: 'Total de faixas', + discNumber: 'Número de discos', + discTotal: 'Total de discos', + albumArtist: 'Artista do álbum', + genre: 'Gênero', + year: 'Ano', + date: 'Data', + explicit: 'Letras explícitas', + isrc: 'ISRC', + length: 'Tamanho da faixa', + barcode: 'Barcode do álbum (UPC)', + bpm: 'BPM', + replayGain: 'Replay Gain', + label: 'Gravadora do álbum', + lyrics: 'Letras desincronizadas', + copyright: 'Copyright', + composer: 'Compositor', + involvedPeople: 'Pessoas involvidas' + }, + other: { + title: 'Outros', + savePlaylistAsCompilation: 'Savar playlists como uma compilação', + useNullSeparator: 'Usar separador nulo', + saveID3v1: 'Salvar ID3v1', + multiArtistSeparator: { + title: 'Como gostaria de separar seus artistas?', + nothing: 'Salvar apenas o artista principal', + default: 'Usando especificação padrão', + andFeat: 'Usando & e feat.', + using: 'Usando "{0}"' + }, + singleAlbumArtist: 'Salvar apenas o artista principal do álbum', + albumVariousArtists: 'Manter "Various Artists" em Artistas do Álbum', + removeAlbumVersion: 'Remover "Album Version" do título de faixas', + removeDuplicateArtists: 'Remover combinações de artistas', + dateFormat: { + title: 'Formato da data para arquivos FLAC', + year: 'AAAA', + month: 'MM', + day: 'DD' + }, + featuredToTitle: { + title: 'O que eu deveria fazer com os artistas feat.?', + 0: 'Nada', + 1: 'Remova-os do título da faixa', + 3: 'Remova-os do título da faixa e do álbum', + 2: 'Mova-os para o título da faixa' + }, + titleCasing: 'Formatação do título', + artistCasing: 'Formatação do artista', + casing: { + nothing: 'Manter intocado', + lower: 'minúsculo', + upper: 'MAIÚSCULO', + start: 'No Começo De Cada Palavra', + sentence: 'Como uma frase' + }, + previewVolume: 'Volume da prévia', + executeCommand: { + title: 'Comando para executar depois do download', + description: 'Deixe em branco para não executar nada' + } + }, + spotify: { + title: 'Destaques do Spotify', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'Nome de usuário do Spotify' + }, + reset: 'Resetar para Padrão', + save: 'Save', + toasts: { + init: 'Configurações carregadas!', + update: 'Configurações atualizadas!', + ARLcopied: 'ARL copiado para o clipboard' + } + }, + sidebar: { + home: 'home', + search: 'pesquisa', + charts: 'charts', + favorites: 'favoritos', + linkAnalyzer: 'analizador de links', + settings: 'configurações', + about: 'sobre' + }, + tracklist: { + downloadSelection: 'Baixar seleção' + } +} + +export default ptBr diff --git a/src/lang/pt-pt.js b/src/lang/pt-pt.js index 6c5fc24..2783985 100644 --- a/src/lang/pt-pt.js +++ b/src/lang/pt-pt.js @@ -39,7 +39,7 @@ const pt = { license: 'Licenças' }, subtitles: { - bugReports: "Existe alguma coisa que não funciona no deemix? Informa-nos!", + bugReports: 'Existe alguma coisa que não funciona no deemix? Informa-nos!', contributing: 'Queres contribuir para o projecto? Podes fazê-lo de diferentes formas!', donations: 'Desejas contribuir monetariamente? Faz uma doação!' }, @@ -63,9 +63,9 @@ const pt = { contributeWebUI: `Caso saibas Vue.js (JavaScript), HTML ou CSS podes contribuir para o WebUI.`, itsFree: `Deves ter em conta que que este projecto é gratuito e deverás apoiar os artistas que aprecias antes de apoiares os programadores.`, notObligated: `Não te sintas obrigado a doar, agradeço-te na mesma!`, - lincensedUnder: `This work is licensed under a + lincensedUnder: `Este trabalho esta licenciado sobre a GNU General Public License 3.0GNU Licença publica geral 3.0.` }, charts: { @@ -78,8 +78,8 @@ const pt = { ids: { invalidURL: 'URL não reconhecido', unsupportedURL: 'URL ainda não suportado', - ISRCnotOnDeezer: 'Track ISRC não disponível no deezer', - notYourPrivatePlaylist: "You can't download others private playlists.", + ISRCnotOnDeezer: 'Faixa ISRC não disponível no deezer', + notYourPrivatePlaylist: "Nao podes baixar listas de reprodução privado dos outros.", spotifyDisabled: 'Funcionalidades do Spotify não estão definidas corretamente.', trackNotOnDeezer: 'Faixa não encontrada no deezer!', albumNotOnDeezer: 'Álbum não encontrado no deezer!', @@ -89,8 +89,8 @@ const pt = { wrongBitrate: 'Faixa não encontrada no bitrate desejado.', wrongBitrateNoAlternative: 'Faixa não encontrada no bitrate desejado e não foi encontrada alternativa!', no360RA: 'Faixa não disponível em Reality Audio 360.', - notAvailable: "Faixa não disponível nos servidores do deezer!", - notAvailableNoAlternative: "Faixa não disponível nos servidores do deezer e não foi encontrada alternativa!" + notAvailable: 'Faixa não disponível nos servidores do deezer!', + notAvailableNoAlternative: 'Faixa não disponível nos servidores do deezer e não foi encontrada alternativa!' } }, favorites: { @@ -110,8 +110,7 @@ const pt = { }, linkAnalyzer: { info: 'Podes usar esta secção para obteres mais informação sobre o link que estás a tentar transferir.', - useful: - "Isto é útil caso estejas a tentar transferir faixas que não estão disponíveis no teu país e queres saber onde estão disponíveis, por exemplo.", + useful: 'Isto é útil caso estejas a tentar transferir faixas que não estão disponíveis no teu país e queres saber onde estão disponíveis, por exemplo.', linkNotSupported: 'Este link ainda não é suportado', linkNotSupportedYet: 'Parece que este link ainda não é suportado, tenta analisar outro.', table: { @@ -124,15 +123,14 @@ const pt = { releaseDate: 'Data de lançamento', bpm: 'BPM', label: 'Editora', - recordType: 'Record Type', + recordType: 'Tipo de Recorde', genres: 'Géneros', tracklist: 'Lista de faixas' } }, search: { startSearching: 'Começa a pesquisar!', - description: - 'Podes perquisar uma música, um álbum inteiro, um artista, uma lista de reprodução... tudo! Também podes colar um link do Deezer', + description: 'Podes perquisar uma música, um álbum inteiro, um artista, uma lista de reprodução... tudo! Também podes colar um link do Deezer', fans: '{0} fãs', noResults: 'Sem resultados', noResultsTrack: 'Faixa não encontrada', @@ -151,8 +149,8 @@ const pt = { loggingIn: 'A autenticar', loggedIn: 'Autenticado', alreadyLogged: 'Já estás autenticado', - loginFailed: "Couldn't log in", - loggedOut: 'Logged out', + loginFailed: "Nao foi possivel iniciar sessão", + loggedOut: 'Desconectado', cancellingCurrentItem: 'A cancelar item actual.', currentItemCancelled: 'Item actual cancelado.', startAddingArtist: 'A adicionar {0} álbuns à fila', @@ -164,7 +162,7 @@ const pt = { title: 'Definições', languages: 'Idioma', login: { - title: 'Login', + title: 'Inicio de Sessão', loggedIn: 'Estás autenticado como {username}', arl: { question: 'Como obter o meu ARL?', @@ -199,8 +197,8 @@ const pt = { }, trackTitles: { title: 'Título', - padTracks: 'Pad tracks', - paddingSize: 'Overwrite padding size', + padTracks: 'Bloco de Faixas', + paddingSize: 'Substituir tamanho do preenchimento', illegalCharacterReplacer: 'Substituir caractere inválidos' }, downloads: { @@ -215,31 +213,31 @@ const pt = { overwriteFile: { title: 'Ficheiros existentes. Substituir?', y: 'Sim, substituir o ficheiro', - n: "Não substituir o ficheiro", - t: 'Sobrescrever apenas as etiquetas' + n: 'Não substituir o ficheiro', + t: 'Subescrever apenas as etiquetas' }, - fallbackBitrate: 'Bitrate fallback', - fallbackSearch: 'Fallback de pesquisa', - logErrors: 'Criar logs para erros', - logSearched: 'Criar logs para faixas pesquisadas', + fallbackBitrate: 'Reserva de taxa de bits', + fallbackSearch: 'reserva de pesquisa', + logErrors: 'Criar histórico para erros', + logSearched: 'Criar histórico para faixas pesquisadas', createM3U8File: 'Criar ficheiro de lista de reprodução', syncedLyrics: 'Criar ficheiro .lyr (Letras Sincronizadas)', - playlistFilenameTemplate: 'Formato do nome de ficheiro playlists', + playlistFilenameTemplate: 'Formato do nome de ficheiro da lista de reprodução', saveDownloadQueue: 'Guardar fila de transferências ao fechar a aplicação' }, covers: { title: 'Capas do Álbum', saveArtwork: 'Guardar capas', - coverImageTemplate: 'Cover name template', - saveArtworkArtist: 'Save artist image', - artistImageTemplate: 'Artist image template', - localArtworkSize: 'Local artwork size', - embeddedArtworkSize: 'Embedded artwork size', + coverImageTemplate: 'Modelo do nome da capa', + saveArtworkArtist: 'Salvar imagem do artista', + artistImageTemplate: 'Modelo de imagem do artista', + localArtworkSize: 'Tamanho do trabalho artístico local', + embeddedArtworkSize: 'Tamanho do trabalho artístico incorporado', localArtworkFormat: { - title: 'What format do you want the local artwork to be?', - jpg: 'A jpeg image', - png: 'A png image', - both: 'Both a jpeg and a png' + title: 'Que formato você deseja que o trabalho artístico local seja?', + jpg: 'Uma imagem jpeg', + png: 'Uma imagem png', + both: 'Os dois um jpeg e um png' }, jpegImageQuality: 'Qualidade de imagem JPEG' }, @@ -262,17 +260,17 @@ const pt = { length: 'Duração da faixa', barcode: 'Código de barras do álbum (UPC)', bpm: 'BPM', - replayGain: 'Replay Gain', + replayGain: 'Ganho de Repeticao', label: 'Editora do álbum', - lyrics: 'Unsynchronized Lyrics', - copyright: 'Copyright', + lyrics: 'Letra da música não sincronizado', + copyright: 'Direito Autoral', composer: 'Compositor', involvedPeople: 'Pessoas envolvidas' }, other: { title: 'Outros', - savePlaylistAsCompilation: 'Save playlists as compilation', - useNullSeparator: 'Usar separador null', + savePlaylistAsCompilation: 'Guardar a lista de reproducao como uma compilacao', + useNullSeparator: 'Usar separador nulo', saveID3v1: 'Também guardar ID3v1', multiArtistSeparator: { title: 'Como queres separarar os artistas?', @@ -292,22 +290,22 @@ const pt = { day: 'DD' }, featuredToTitle: { - title: 'What should I do with featured artists?', + title: 'O que devo fazer com os artistas em destaque?', 0: 'Nada', 1: 'Remover do título', 3: 'Remover do título de do título do album', 2: 'Movê-lo para o título' }, - titleCasing: 'Title casing', - artistCasing: 'Artist casing', + titleCasing: 'Caixa do Título', + artistCasing: 'Caixa do Artista', casing: { nothing: 'Manter inalterado', lower: 'minusculas', upper: 'MAIÙSCULAS', start: 'Ínicio De Cada Palavra', - sentence: 'Like a sentence' + sentence: 'Como uma frase' }, - previewVolume: 'Preview Volume', + previewVolume: 'Pre visualizacao do volume', executeCommand: { title: 'Comando a executar após transferir', description: 'Deixar em branco para nenhuma acção' @@ -319,12 +317,12 @@ const pt = { clientSecret: 'Spotify Client Secret', username: 'nome de utilizador Spotify' }, - reset: 'Reset to Default', - save: 'Save', + reset: 'Restaurar para o padrao', + save: 'Guardar', toasts: { init: 'Configurações carregadas!', update: 'Configurações actualizadas', - ARLcopied: 'ARL copied to clipboard' + ARLcopied: 'ARL copiado para area de transferencia' } }, sidebar: { @@ -332,7 +330,7 @@ const pt = { search: 'pesquisa', charts: 'tabelas', favorites: 'favoritos', - linkAnalyzer: 'link analyzer', + linkAnalyzer: 'Analizador de Links', settings: 'definições', about: 'sobre' }, @@ -341,4 +339,4 @@ const pt = { } } -export default pt +export default pt \ No newline at end of file diff --git a/src/lang/ru.js b/src/lang/ru.js index 8cbb52b..c5a22aa 100644 --- a/src/lang/ru.js +++ b/src/lang/ru.js @@ -1,344 +1,344 @@ -const ru = { - globals: { - welcome: ' deemix', - back: '', - loading: '', - download: ' {0}', - by: '{0}', - in: ' {0}', - download_hint: '', - play_hint: '', - toggle_download_tab_hint: '/', - clean_queue_hint: ' ', - cancel_queue_hint: ' ', - listTabs: { - empty: '', - all: '', - top_result: ' ', - album: ' | ', - artist: ' | ', - single: ' | ', - title: ' | ', - track: ' | ', - trackN: '0 | {n} | {n} | {n} ', - releaseN: '0 | {n} | {n} | {n} ', - playlist: ' | ', - compile: ' | ', - ep: 'ep | eps', - spotifyPlaylist: ' spotify | spotify', - releaseDate: ' ', - error: '' - } - }, - about: { - titles: { - usefulLinks: ' ', - bugReports: ' ', - contributing: ' ', - donations: '', - license: '' - }, - subtitles: { - bugReports: "- ? !", - contributing: ' ? !', - donations: ' ? !' - }, - usesLibrary: ' deemix, UI deemix.', - thanks: ` rtonno, uhwot lollilol , BasCurtiz scarvimane .`, - upToDate: ` Telegram.`, - officialWebsite: ' ', - officialRepo: ' ', - officialWebuiRepo: ' WebUI', - officialSubreddit: ' ', - newsChannel: ' ', - questions: ` , . , .`, - beforeReporting: ` , , , .`, - beSure: `, . , .`, - duplicateReports: ' .', - dontOpenIssues: ` , .`, - newUI: ` python, UI pull request .`, - acceptFeatures: ` , , , .`, - otherLanguages: ` , deemix!`, - understandingCode: ` ? RemixDev up Telegram Reddit.`, - contributeWebUI: ` Vue.js (JavaScript), HTML CSS, WebUI.`, - itsFree: `, , , .`, - notObligated: ` , !`, - lincensedUnder: ` - GNU General Public License 3.0.` - }, - charts: { - title: '', - changeCountry: ' ', - download: ' ' - }, - errors: { - title: 'Errors for {0}', - ids: { - invalidURL: 'URL ', - unsupportedURL: 'URL ', - ISRCnotOnDeezer: 'ISRC deezer', - notYourPrivatePlaylist: " .", - spotifyDisabled: ' Spotify.', - trackNotOnDeezer: ' deezer!', - albumNotOnDeezer: ' deezer!', - notOnDeezer: ' Deezer!', - notEncoded: ' !', - notEncodedNoAlternative: ' , !', - wrongBitrate: ' .', - wrongBitrateNoAlternative: ' . !', - no360RA: ' Reality Audio 360.', - notAvailable: " deezer!", - notAvailableNoAlternative: " deezer. !" - } - }, - favorites: { - title: '', - noPlaylists: ' ', - noAlbums: ' ', - noArtists: ' ', - noTracks: ' ' - }, - home: { - needTologin: ' Deezer , .', - openSettings: ' ', - sections: { - popularPlaylists: ' ', - popularAlbums: ' ' - } - }, - linkAnalyzer: { - info: ' , , .', - useful: - " , , , , .", - linkNotSupported: ' ', - linkNotSupportedYet: ' , .', - table: { - id: 'ID', - isrc: 'ISRC', - upc: 'UPC', - duration: '', - diskNumber: ' ', - trackNumber: ' ', - releaseDate: ' ', - bpm: 'BPM', - label: '', - recordType: '', - genres: '', - tracklist: '' - } - }, - search: { - startSearching: ' !', - description: - ' , , , ... ! Deezer', - fans: '{0} ', - noResults: ' ', - noResultsTrack: ' ', - noResultsAlbum: ' ', - noResultsArtist: ' ', - noResultsPlaylist: ' ' - }, - searchbar: ', ( )', - downloads: '', - toasts: { - addedToQueue: '{0} ', - alreadyInQueue: '{0} !', - finishDownload: '{0} .', - allDownloaded: ' !', - refreshFavs: ' !', - loggingIn: '', - loggedIn: ' ', - alreadyLogged: ' ', - loginFailed: " ", - loggedOut: 'Logged out', - cancellingCurrentItem: ' .', - currentItemCancelled: '.', - startAddingArtist: ' {0} ', - finishAddingArtist: ' {0} ', - startConvertingSpotifyPlaylist: ' spotify deezer', - finishConvertingSpotifyPlaylist: ' Spotify playlist converted' - }, - settings: { - title: '', - languages: '', - login: { - title: '', - loggedIn: ' {username}', - arl: { - question: ' ARL?', - update: ' ARL' - }, - logout: '' - }, - appearance: { - title: ' ', - slimDownloadTab: ' ' - }, - downloadPath: { - title: ' ' - }, - templates: { - title: '', - tracknameTemplate: ' ', - albumTracknameTemplate: ' ', - playlistTracknameTemplate: ' ' - }, - folders: { - title: '', - createPlaylistFolder: ' ', - playlistNameTemplate: ' ', - createArtistFolder: ' ', - artistNameTemplate: ' ', - createAlbumFolder: ' ', - albumNameTemplate: ' ', - createCDFolder: ' CD', - createStructurePlaylist: ' ', - createSingleFolder: ' ' - }, - trackTitles: { - title: ' ', - padTracks: ' ', - paddingSize: ' ', - illegalCharacterReplacer: ' ' - }, - downloads: { - title: '', - queueConcurrency: ' ', - maxBitrate: { - title: '', - 9: 'FLAC 1411kbps', - 3: 'MP3 320kbps', - 1: 'MP3 128kbps' - }, - overwriteFile: { - title: ' ?', - y: ', ', - n: ", ", - t: ' ' - }, - fallbackBitrate: ' , ', - fallbackSearch: ' , ', - logErrors: ' ', - logSearched: ' ', - createM3U8File: ' ', - syncedLyrics: ' .lyr ( )', - playlistFilenameTemplate: ' ', - saveDownloadQueue: ' ' - }, - covers: { - title: '', - saveArtwork: ' ', - coverImageTemplate: ' ', - saveArtworkArtist: ' ', - artistImageTemplate: ' ', - localArtworkSize: ' ', - embeddedArtworkSize: ' ', - localArtworkFormat: { - title: ' ?', - jpg: 'jpeg', - png: 'png', - both: 'jpeg png' - }, - jpegImageQuality: ' JPEG' - }, - tags: { - head: ' ', - title: '', - artist: '', - album: '', - cover: '', - trackNumber: ' ', - trackTotal: '- ', - discNumber: ' ', - discTotal: '- ', - albumArtist: ' ', - genre: '', - year: '', - date: '', - explicit: ' ', - isrc: 'ISRC', - length: '', - barcode: ' (UPC)', - bpm: 'BPM', - replayGain: 'Replay Gain', - label: '', - lyrics: ' ', - copyright: '', - composer: '', - involvedPeople: ' ' - }, - other: { - title: '', - savePlaylistAsCompilation: ' ', - useNullSeparator: ' ', - saveID3v1: ' ID3v1', - multiArtistSeparator: { - title: ' ?', - nothing: ' ', - default: ' ', - andFeat: ' & feat.', - using: ' "{0}"' - }, - singleAlbumArtist: ' ', - albumVariousArtists: ' "Various Artists" ', - removeAlbumVersion: ' "Album Version" ', - removeDuplicateArtists: ' ', - dateFormat: { - title: ' FLAC ', - year: 'YYYY', - month: 'MM', - day: 'DD' - }, - featuredToTitle: { - title: ' ?', - 0: '', - 1: ' ', - 3: ' ', - 2: ' ' - }, - titleCasing: ' ', - artistCasing: ' ', - casing: { - nothing: ' ', - lower: ' ', - upper: ' ', - start: ' ', - sentence: ' ' - }, - previewVolume: ' ', - executeCommand: { - title: ' ', - description: ' , ' - } - }, - spotify: { - title: ' Spotify', - clientID: 'Spotify clientID', - clientSecret: 'Spotify Client Secret', - username: 'Spotify username' - }, - reset: ' ', - save: '', - toasts: { - init: ' !', - update: ' !', - ARLcopied: 'ARL ' - } - }, - sidebar: { - home: '', - search: '', - charts: '', - favorites: '', - linkAnalyzer: ' ', - settings: '', - about: ' ' - }, - tracklist: { - downloadSelection: ' ' - } -} - -export default ru \ No newline at end of file +const ru = { + globals: { + welcome: 'Добро пожаловать в deemix', + back: 'назад', + loading: 'загрузка', + download: 'Скачать {0}', + by: '{0}', + in: 'из {0}', + download_hint: 'Скачать', + play_hint: 'Прослушать', + toggle_download_tab_hint: 'Показать/Свернуть', + clean_queue_hint: 'Очистить завершённые', + cancel_queue_hint: 'Очистить всё', + listTabs: { + empty: '', + all: 'все', + top_result: 'лучший результат', + album: 'альбом | альбомы', + artist: 'исполнитель | исполнители', + single: 'сингл | синглы', + title: 'название | названия', + track: 'трек | треки', + trackN: '0 треков | {n} трек | {n} трека | {n} треков', + releaseN: '0 релизов | {n} релиз | {n} релиза | {n} релизов', + playlist: 'плейлист | плейлисты', + compile: 'сборник | сборники', + ep: 'ep | eps', + spotifyPlaylist: 'плейлисты spotify | плейлисты spotify', + releaseDate: 'Дата выхода', + error: 'ошибка' + } + }, + about: { + titles: { + usefulLinks: 'Полезные ссылки', + bugReports: 'Баг репорты', + contributing: 'Помощь проекту', + donations: 'Пожертвования', + license: 'Лицензия' + }, + subtitles: { + bugReports: "Что-то не работает? Скажите нам!", + contributing: 'Хотите поддержать проект? Это можно сделать разными способами!', + donations: 'Хотите поддержать материально? Можно сделать пожертвование!' + }, + usesLibrary: 'Приложение использует библиотеку deemix, с помощью которой вы можете сделать собственный UI deemix.', + thanks: `Спасибо rtonno, uhwot и lollilol за помощь с этим проектом, а также BasCurtiz и scarvimane за иконку.`, + upToDate: `Следите за последними обновлениями на канале в Telegram.`, + officialWebsite: 'Официальный сайт', + officialRepo: 'Официальный репозиторий библиотеки', + officialWebuiRepo: 'Официальный репозиторий WebUI', + officialSubreddit: 'Официальный сабреддит', + newsChannel: 'Канал новостей', + questions: `Если у вас возникли вопросы или проблемы с приложением, поищите решение на сабреддите. Если решения не нашли, можете создать новый пост и описать вашу проблему.`, + beforeReporting: `Перед тем, как сообщать об ошибках, убедитесь, что у вас стоит последняя версия приложения и что проблема не на вашей стороне.`, + beSure: `Убедитесь, что ошибка возникает и на других устройствах. Также НЕ сообщайте об ошибке, если про неё уже известно.`, + duplicateReports: 'Повторные сообщения об ошибках рассматриваться не будут.', + dontOpenIssues: `НЕ НАДО создавать задачу с простым вопросом, для этого есть сабреддит.`, + newUI: `Если вы хорошо знаете python, то можете сделать новый UI для приложения с использованием базовой библиотеки или пофиксить в ней баги и сделать pull request в репозитории.`, + acceptFeatures: `Новые фичи также приветствуются, но не слишком сложные, так как они будут добавлены в приложение, а не в саму библиотеку.`, + otherLanguages: `Если вы хорошо знаете другой язык программирования, можете портировать на нём deemix!`, + understandingCode: `Не можете понять код? Напишите RemixDev up в Telegram или на Reddit.`, + contributeWebUI: `Если вы знаете Vue.js (JavaScript), HTML или CSS, можете внести вклад в WebUI.`, + itsFree: `Помните, что это бесплатное приложение и вам следует поддерживать исполнителей, которые вам нравятся прежде, чем поддерживать разработчиков.`, + notObligated: `Вы не обязаны делать пожертвования, я всё равно вас ценю!`, + lincensedUnder: `Проект находится под лицензией + GNU General Public License 3.0.` + }, + charts: { + title: 'Чарты', + changeCountry: 'Изменить страну', + download: 'Скачать чарт' + }, + errors: { + title: 'Errors for {0}', + ids: { + invalidURL: 'URL не распознана', + unsupportedURL: 'URL не поддерживается', + ISRCnotOnDeezer: 'ISRC трека недоступен на deezer', + notYourPrivatePlaylist: "Нельзя скачивать чужие плейлисты.", + spotifyDisabled: 'Неправильно настроены параметры Spotify.', + trackNotOnDeezer: 'Трек не найден на deezer!', + albumNotOnDeezer: 'Альбом не найден deezer!', + notOnDeezer: 'Трек недоступен на Deezer!', + notEncoded: 'Трек ещё не перекодирован!', + notEncodedNoAlternative: 'Трек не перекодирован, альтернатив не найдено!', + wrongBitrate: 'Не найден трек с нужным битрейтом.', + wrongBitrateNoAlternative: 'Не найден трек с нужным битрейтом. Альтернатив не найдено!', + no360RA: 'Трек недоступен в Reality Audio 360.', + notAvailable: "Трек недоступен на серверах deezer!", + notAvailableNoAlternative: "Трек недоступен на серверах deezer. Альтернатив не найдено!" + } + }, + favorites: { + title: 'Избранное', + noPlaylists: 'Плейлисты не найдены', + noAlbums: 'Избранные альбомы не найдены', + noArtists: 'Избранные исполнители не найдены', + noTracks: 'Избранные треки не найдены' + }, + home: { + needTologin: 'Вам нужно зайти под своим Deezer аккаунтом прежде, чем скачивать.', + openSettings: 'Открыть настройки', + sections: { + popularPlaylists: 'Популярные плейлисты', + popularAlbums: 'Самые прослушиваемые альбомы' + } + }, + linkAnalyzer: { + info: 'Используйте этот раздел, чтобы узнать информацию о ссылке, по которой вы хотите скачать.', + useful: + "Этот раздел нужен, если вы хотите скачать треки, недоступные в вашей стране, а также посмотреть, где они доступны.", + linkNotSupported: 'Ссылка не поддерживается', + linkNotSupportedYet: 'Эта ссылка не поддерживается, попробуйте вставить другую.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Продолжительность', + diskNumber: 'Номер диска', + trackNumber: 'Номер трека', + releaseDate: 'Дата выхода', + bpm: 'BPM', + label: 'Издатель', + recordType: 'Тип', + genres: 'Жанр', + tracklist: 'Треклист' + } + }, + search: { + startSearching: 'Начните искать!', + description: + 'Здесь можно найти трек, альбом, исполнителя, плейлист... всё! Можно также вставить ссылку Deezer', + fans: '{0} поклонников', + noResults: 'Нет результатов', + noResultsTrack: 'Треков не найдено', + noResultsAlbum: 'Альбомов не найдено', + noResultsArtist: 'Исполнителей не найдено', + noResultsPlaylist: 'Плейлистов не найдено' + }, + searchbar: 'Ищите, что хотите (или вставьте ссылку)', + downloads: 'загрузки', + toasts: { + addedToQueue: '{0} добавлено в очередь', + alreadyInQueue: '{0} уже есть в очереди!', + finishDownload: '{0} загрузок завершено.', + allDownloaded: 'Все загрузки завершены!', + refreshFavs: 'Обновление завершено!', + loggingIn: 'Вход', + loggedIn: 'Вход выполнен', + alreadyLogged: 'Вход уже выполнен', + loginFailed: "Вход не выполнен", + loggedOut: 'Logged out', + cancellingCurrentItem: 'Отмена закачки.', + currentItemCancelled: 'Отменено.', + startAddingArtist: 'Добавление {0} альбомов в очередь', + finishAddingArtist: 'Добавлено {0} альбомов в очередь', + startConvertingSpotifyPlaylist: 'Преобразование треков из spotify в deezer', + finishConvertingSpotifyPlaylist: 'Преобразование Spotify playlist converted' + }, + settings: { + title: 'Настройки', + languages: 'Язык', + login: { + title: 'Вход', + loggedIn: 'Вы вошли как {username}', + arl: { + question: 'Как узнать свой ARL?', + update: 'Обновить ARL' + }, + logout: 'Выйти' + }, + appearance: { + title: 'Внешний вид', + slimDownloadTab: 'Обрезать вкладку с загрузками' + }, + downloadPath: { + title: 'Путь сохранения' + }, + templates: { + title: 'Шаблоны', + tracknameTemplate: 'Шаблон названия трека', + albumTracknameTemplate: 'Шаблон названия трека альбома', + playlistTracknameTemplate: 'Шаблон названия трека плейлиста' + }, + folders: { + title: 'Папки', + createPlaylistFolder: 'Создать папки для плейлистов', + playlistNameTemplate: 'Название папки плейлиста', + createArtistFolder: 'Создать папки для исполнителя', + artistNameTemplate: 'Название папки исполнителя', + createAlbumFolder: 'Создать папки для альбома', + albumNameTemplate: 'Название папки альбома', + createCDFolder: 'Создать папки для CD', + createStructurePlaylist: 'Создать структуру папок для плейлистов', + createSingleFolder: 'Создать структуру папок для синглов' + }, + trackTitles: { + title: 'Названия треков', + padTracks: 'Добавлять нули', + paddingSize: 'Количество цифр', + illegalCharacterReplacer: 'Замена для запрещённых символов' + }, + downloads: { + title: 'Загрузки', + queueConcurrency: 'Количество одновременных закачек', + maxBitrate: { + title: 'Битрейт', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Нужно ли перезаписывать файлы?', + y: 'Да, перезаписать файл', + n: "Нет, не перезаписывать", + t: 'Обновить только теги' + }, + fallbackBitrate: 'Скачивать с низким битрейтом, если текущий недоступен', + fallbackSearch: 'Искать другой трек, если нужный недоступен', + logErrors: 'Создать логи для ошибок', + logSearched: 'Создать лог поиска', + createM3U8File: 'Создать файлы плейлистов', + syncedLyrics: 'Создать .lyr файлы (Синхронизированный текст)', + playlistFilenameTemplate: 'Шаблон названия плейлиста', + saveDownloadQueue: 'Сохранять текущий список загрузок при закрытии приложения' + }, + covers: { + title: 'Обложки', + saveArtwork: 'Сохранять обложки', + coverImageTemplate: 'Шаблон названия обложки', + saveArtworkArtist: 'Сохранять изображение исполнителя', + artistImageTemplate: 'Шаблон названия изображения', + localArtworkSize: 'Размер сохраненной обложки', + embeddedArtworkSize: 'Размер встроенной', + localArtworkFormat: { + title: 'В каком формате сохранять обложки?', + jpg: 'jpeg', + png: 'png', + both: 'jpeg и png' + }, + jpegImageQuality: 'Качество JPEG' + }, + tags: { + head: 'Какие теги сохранять', + title: 'Название', + artist: 'Исполнитель', + album: 'Альбом', + cover: 'Обложка', + trackNumber: 'Номер трека', + trackTotal: 'Кол-во треков', + discNumber: 'Номер диска', + discTotal: 'Кол-во дисков', + albumArtist: 'Исполнитель альбома', + genre: 'Жанр', + year: 'Год', + date: 'Дата', + explicit: 'Нецензурная лирика', + isrc: 'ISRC', + length: 'Продолжительность', + barcode: 'Штрихкод альбома (UPC)', + bpm: 'BPM', + replayGain: 'Replay Gain', + label: 'Издатель', + lyrics: 'Несинхронизированный текст', + copyright: 'Права', + composer: 'Композитор', + involvedPeople: 'Вовлечённые люди' + }, + other: { + title: 'Разное', + savePlaylistAsCompilation: 'Сохранить плейлисты как сборники', + useNullSeparator: 'Использовать нулевой символ в качестве разделителя', + saveID3v1: 'Дополнительно сохранять ID3v1', + multiArtistSeparator: { + title: 'Как разделять несколько исполнителей?', + nothing: 'Сохранить только основного', + default: 'Используя стандартную спецификацию', + andFeat: 'Используя & и feat.', + using: 'Используя "{0}"' + }, + singleAlbumArtist: 'Сохранить только основного исполнителя альбома', + albumVariousArtists: 'Оставить "Various Artists" в Исполнителях льбома', + removeAlbumVersion: 'Удалить "Album Version" из названия трека', + removeDuplicateArtists: 'Удалить повторяющихся исполнителей', + dateFormat: { + title: 'Формат даты для FLAC файлов', + year: 'YYYY', + month: 'MM', + day: 'DD' + }, + featuredToTitle: { + title: 'Что делать с приглашёнными исполнителями?', + 0: 'Ничего', + 1: 'Удалить их из названия', + 3: 'Удалить из названия и названия альбома', + 2: 'Добавить в название' + }, + titleCasing: 'Регистр названия', + artistCasing: 'Регистр исполнителя', + casing: { + nothing: 'Не менять', + lower: 'в нижнем регистре', + upper: 'В ВЕРХНЕМ РЕГИСТРЕ', + start: 'Каждое Слово С Заглавной Буквы', + sentence: 'Как в предложении' + }, + previewVolume: 'Громкость прослушивания', + executeCommand: { + title: 'Выполнить команды по окончании загрузок', + description: 'Оставьте пустым, если ничего не требуется' + } + }, + spotify: { + title: 'Функции Spotify', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'Spotify username' + }, + reset: 'По умолчанию', + save: 'Сохранить', + toasts: { + init: 'Настройки загружены!', + update: 'Настройки обновлены!', + ARLcopied: 'ARL скопирован в буфер обмена' + } + }, + sidebar: { + home: 'домой', + search: 'поиск', + charts: 'чарты', + favorites: 'избранное', + linkAnalyzer: 'просмотр ссылок', + settings: 'настройки', + about: 'о проекте' + }, + tracklist: { + downloadSelection: 'Скачать выбранные' + } +} + +export default ru diff --git a/src/lang/tr.js b/src/lang/tr.js new file mode 100644 index 0000000..6812e67 --- /dev/null +++ b/src/lang/tr.js @@ -0,0 +1,344 @@ +const tr = { + globals: { + welcome: `Deemix'e hoş geldin.`, + back: `geri`, + loading: `yükleniyor`, + download: 'İndir {0}', + by: '{0} tarafından', + in: '{0} içinde', + download_hint: 'İndir', + play_hint: 'Oynat', + toggle_download_tab_hint: 'Genişlet/Daralt', + clean_queue_hint: 'Tamamlananları Temizle', + cancel_queue_hint: 'Hepsini ', + listTabs: { + empty: '', + all: 'Tümü', + top_result: 'top result', + album: 'albüm | albümler', + artist: 'sanatçı | sanatçılar', + single: 'single | singlelar', + title: 'başlık | başlıklar', + track: 'Parça | Parçalar', + trackN: '0 parça | {n} parça | {n} parça', + releaseN: '0 yayınlanan | {n} yayınlanan | {n} yayınlanan', + playlist: 'oynatma listesi | oynatma listeleri', + compile: 'derleme | derlemeler', + ep: 'kayıt | kayıtlar', + spotifyPlaylist: 'spotify oynatma listesi | oynatma listeleri', + releaseDate: 'yayınlanma tarihi', + error: 'hata' + } + }, + about: { + titles: { + usefulLinks: 'Yararlı Bağlantılar', + bugReports: 'Hata Raporları', + contributing: 'Katkı Sağlayanlar', + donations: 'Bağışlar', + license: 'Lisans' + }, + subtitles: { + bugReports: "Deemix'te çalışmayan bir şey mi var?, Bize bildirin!", + contributing: 'Projeye katkı sağlamak mı istiyorsun? Farklı yollardan sağlayabilirsin!', + donations: 'Bütçe yardımı mı yapmak istiyorsun? Bağış yapabilirsin!' + }, + usesLibrary: + 'deemix kendi kullanıcı arabiriminizi oluşturabileceğiniz, kendine özgü kütüphanesini kullanıyor.', + thanks: ` rtonno, uhwot ve lollilol'a bu projeye yaptığı katkılardan ve BasCurtiz ile scarvimane'e ikonlardan dolayı teşekkür ederim.`, + upToDate: `Telegramdaki haber kanalını takip ederek güncellemelerden haberdar olun.`, + officialWebsite: 'İlgili İnternet Sitemiz', + officialRepo: 'İlgili Kütüphanemiz', + officialWebuiRepo: 'İlgili Web Kullanıcı Arayüzü Kütüphanemiz.', + officialSubreddit: 'İlgili Subreddit adresimiz', + newsChannel: 'Haber Kanalı', + questions: `Eğer uygulama ile ilgili sorularınız veya bir probleminiz varsa,ilk önce subreddit adresinden sorununuzu arayın. Eğer bir şey bulamazsanız, sorununuz ile ilgili bir gönderi paylaşabilirsiniz.`, + beforeReporting: `Bir hatayı bildirmeden önce, uygulamanın son sürümünde olduğunuza veya sorunun sizden kaynaklı olmayıp bir hata olduğuna emin olduktan sonra emin olun.`, + beSure: `Hatanın başka cihazlarda da olduğunu doğrulayın ve Bildirilen bir hatayı tekrar bildirmeyin.`, + duplicateReports: 'Birbirinin aynısı olan hata bildirileri kapatılacaktır, o yüzden dikkatli olun.', + dontOpenIssues: `Soru sormak için hata bildirisi yollamayın, bunun için bir subreddit adresimiz var.`, + newUI: `Eğer Phython kullanmakta iyiysen, ana kütüphaneyi kullanan bir kullanıcı arayüzü yapmayı deneyebilir, veya kütüphanedeki hataları düzeltmek için deposuna değişiklik isteği yollayabilirsin..`, + acceptFeatures: `Yeni özellikleri de kabul ediyorum, fakat karışık şeyleri kütüphaneye değil uygulamaya eklendiği için kabul edemiyorum.`, + otherLanguages: `Eğer diğer programlama dillerinde kendine güveniyorsan, deemix'i farklı dillere port etmeye çalışabilirsin!`, + understandingCode: `Kodu anlamak için yardım mı lazım? Reddit üzerinden veya Telegramdan RemixDev'e ulaş.`, + contributeWebUI: `Eğer Vue.js (JavaScript), HTML veya CSS biliyorsan, Web Kullanıcı Arayüzüne katkıda bulanabilirsin.`, + itsFree: `Bunun ücretsiz bir proje olduğunu ve geliştiricilerden önce sevdiğiniz sanatçıları desteklemeniz gerektiğini unutmayın.`, + notObligated: `Kendinizi bağış yapmak zorunda hissetmeyin!, Sizi her halinizle seviyorum!`, + lincensedUnder: `Bu çalışma lisanslıdır: + GNU General Public License 3.0.` + }, + charts: { + title: 'Grafikler', + changeCountry: 'Ülke Değiştir', + download: 'Grafiği İndir' + }, + errors: { + title: '{0} Hatalı bulundu', + ids: { + invalidURL: 'URL geçersiz.', + unsupportedURL: 'URL şimdilik desteklenmiyor', + ISRCnotOnDeezer: 'ISRC parça deezerda bulunmuyor', + notYourPrivatePlaylist: 'Başkalarının özel oynatma listelerini indiremezsin.', + spotifyDisabled: 'Spotify Özellikleri doğru şekilde ayarlanmamış.', + trackNotOnDeezer: `Parça Deezer'da bulunamadı!`, + albumNotOnDeezer: `Albüm Deezer'da bulunamadı!`, + notOnDeezer: `Parça Deezer'da yok!`, + notEncoded: `Parça henüz dönüştürülmedi!`, + notEncodedNoAlternative: 'Parça henüz dönüştürülmedi ve alternatifi bulunamadı!', + wrongBitrate: 'Parça, istenen kalitede bulunamadı!', + wrongBitrateNoAlternative: 'Parça veya alternatifler istenen kalitede bulunamadı!', + no360RA: 'Parça 360 Derece gerçekçi ses olarak bulunamadı!', + notAvailable: 'Parça Deezer sunucularında bulunamadı!', + notAvailableNoAlternative: 'Parça veya Alternatifleri Deezer sunucularında bulunamadı.!' + } + }, + favorites: { + title: 'Favoriler', + noPlaylists: 'Oynatma listesi bulunamadı.', + noAlbums: 'Favori albümler bulunamadı.', + noArtists: 'Favori sanatçılar bulunamadı.', + noTracks: 'Favori parçalar bulunamadı.' + }, + home: { + needTologin: 'İndirmeden önce Deezer hesabına giriş yapmalısın.', + openSettings: 'Ayarları Aç', + sections: { + popularPlaylists: 'Popüler Oynatma Listeleri', + popularAlbums: 'En çok dinlenen albümler' + } + }, + linkAnalyzer: { + info: 'İndirmeye çalıştığın link hakkında daha fazla bilgi için burayı kullanabilirsin.', + useful: 'Mesela, ülkende dinlenebilir olmayan parçaların nerelerde var olduğunu bulmak için kullanabilirsin.', + linkNotSupported: 'Bu link şimdilik desteklenmemektedir.', + linkNotSupportedYet: 'Bu link şimdilik desteklenmiyor gibi duruyor, başkasını analiz etmeyi dene.', + table: { + id: 'ID', + isrc: 'ISRC', + upc: 'UPC', + duration: 'Süre', + diskNumber: 'Sıra numarası', + trackNumber: 'Parça numarası', + releaseDate: 'Yayınlanma tarihi', + bpm: 'BPM', + label: 'Etiketi', + recordType: 'Kayıt Şekli', + genres: 'Türü', + tracklist: 'Parça listesi' + } + }, + search: { + startSearching: 'Aramayı Başlat!', + description: + 'Bir parçayı, tüm albümü, bir sanatçıyı, bir oynatma listesini... kısaca her şeyi aratabilirsin! Ayrıca Deezer Linki de yapıştırabilirsin!', + fans: '{0} Hayranlar', + noResults: 'Sonuç Bulunamadı', + noResultsTrack: 'Parça bulunamadı', + noResultsAlbum: 'Albüm bulunamadı', + noResultsArtist: 'Sanatçı bulunamadı', + noResultsPlaylist: 'Oynatma Listesi bulunamadı' + }, + searchbar: 'İstediğin bir şeyi arat (ya da bir link yapıştır.)', + downloads: 'İndirilenler', + toasts: { + addedToQueue: '{0} kuyruğa eklendi', + alreadyInQueue: '{0} çoktan kuyrukta!', + finishDownload: '{0} indirmesi tamamlandı.', + allDownloaded: 'Tüm indirmeler tamamlandı!', + refreshFavs: 'Yenileme tamamlandı.!', + loggingIn: 'Giriş yapılıyor', + loggedIn: 'Giriş yapıldı', + alreadyLogged: 'Çoktan giriş yapıldı', + loginFailed: 'Giriş yapılamadı', + loggedOut: 'Oturum kapatıldı.', + cancellingCurrentItem: 'Geçerli öğe iptal ediliyor.', + currentItemCancelled: 'Geçerli öğe iptal edildi.', + startAddingArtist: '{0} albüm kuyruğa ekleniyor', + finishAddingArtist: '{0} albüm kuyruğa eklendi.', + startConvertingSpotifyPlaylist: 'Spotify parçaları deezer parçalarına dönüştürülüyor.', + finishConvertingSpotifyPlaylist: 'Spotify oynatma listesi dönüştürüldü.' + }, + settings: { + title: 'Ayarlar', + languages: 'Diller', + login: { + title: 'Giriş', + loggedIn: '{username} olarak giriş yaptın.', + arl: { + question: `Kendi ARL'mi nasıl alırım?`, + update: 'ARL güncelle.' + }, + logout: 'Çıkış' + }, + appearance: { + title: 'Görünüm', + slimDownloadTab: 'İnce indirme sekmesi' + }, + downloadPath: { + title: 'İndirilen dizin' + }, + templates: { + title: 'Şablonlar', + tracknameTemplate: 'Parça ismi şablonu', + albumTracknameTemplate: 'Albüm parçası şablonu', + playlistTracknameTemplate: 'Oynatma listesi parça şablonu' + }, + folders: { + title: 'Dosyalar', + createPlaylistFolder: 'Oynatma listesi için dosya oluştur', + playlistNameTemplate: 'Oynatma listesi dosyası şablonu', + createArtistFolder: 'Sanatçı için dosya oluştur', + artistNameTemplate: 'Sanatçı dosyası şablonu', + createAlbumFolder: 'Albüm için dosya oluştur', + albumNameTemplate: 'Albüm dosyası şablonu', + createCDFolder: 'CDler için dosya oluştur', + createStructurePlaylist: 'Oynatma listeleri için dosya kökü oluştur', + createSingleFolder: 'Singlelar için dosya kökü oluştur' + }, + trackTitles: { + title: 'Parça başlıkları', + padTracks: 'İz Numaraları', + paddingSize: 'İz Numaralarını değiştir', + illegalCharacterReplacer: 'Illegal Karakter Düzenleyici' + }, + downloads: { + title: 'İndirilenler', + queueConcurrency: 'Devam eden indirmeler', + maxBitrate: { + title: 'Tercih edilmiş Bitrateler (kaliteler)', + 9: 'FLAC 1411kbps', + 3: 'MP3 320kbps', + 1: 'MP3 128kbps' + }, + overwriteFile: { + title: 'Dosyaların üstüne yazmalı mıyım?', + y: 'Evet, üstüne yaz', + n: 'Hayır, üstüne yazma', + t: 'Sadece izleri üstüne yaz' + }, + fallbackBitrate: 'Bitrate düşürme', + fallbackSearch: 'Düşürme ara', + logErrors: 'Hatalar için günlük tut', + logSearched: 'Aranmış parçalar için günlük tut', + createM3U8File: 'Oynatma sıra listesi oluştur', + syncedLyrics: '.lyr dosyaları oluştur (Senkronize şarkı sözleri)', + playlistFilenameTemplate: 'Oynatma listesi şablonu', + saveDownloadQueue: 'Uygulamayı kapatırken indirme kuyruğunu kaydet' + }, + covers: { + title: 'Albüm kapakları', + saveArtwork: 'Kapakları kaydet', + coverImageTemplate: 'Kapak ismi şablonu', + saveArtworkArtist: 'Sanatçı fotoğrafını kaydet', + artistImageTemplate: 'Şarkıcı fotoğraf şablonu', + localArtworkSize: 'Yerel fotoğraf boyutu', + embeddedArtworkSize: 'Gömülü fotoğraf boyutu', + localArtworkFormat: { + title: 'Yerel fotoğrafın hangi formatta olmasını istersin?', + jpg: 'Jpeg dosyası', + png: 'Png dosyası', + both: 'Her ikisi' + }, + jpegImageQuality: 'JPEG görüntü kalitesi' + }, + tags: { + head: 'Hangi izler kayıt edilsin?', + title: 'Başlık', + artist: 'Sanatçı', + album: 'Albüm', + cover: 'Kapak', + trackNumber: 'Parça Numarası', + trackTotal: 'Tüm Parça', + discNumber: 'Plak Sayısı', + discTotal: 'Tüm Plak', + albumArtist: 'Sanatçı Albümü', + genre: 'Tür', + year: 'Yıl', + date: 'Tarih', + explicit: 'Cinsel içerikli şarkı sözleri', + isrc: 'ISRC', + length: 'Parça Uzunluğu', + barcode: 'Albüm Barkodu (UPC)', + bpm: 'BPM', + replayGain: 'Ses Yüksekliği Normalleştirici', + label: 'Albüm Etiketi', + lyrics: 'Senkronize edilmemiş şarkı sözleri', + copyright: 'Telif hakkı', + composer: 'Besteleyen', + involvedPeople: 'Alakalı Kişiler' + }, + other: { + title: 'Diğer', + savePlaylistAsCompilation: 'Oynatma listelerini derleme olarak kaydet', + useNullSeparator: 'Boşluk ayırıcı kullan', + saveID3v1: 'ID3v1 dosyasını da kaydet', + multiArtistSeparator: { + title: 'Sanatçılarınızı nasıl ayırmak istersiniz?', + nothing: 'Sadece ana sanatçıyı kaydet', + default: 'Genel prosedür uygulansın', + andFeat: 'Kullanılanlar & ve Feat.', + using: 'Kullanılan "{0}"' + }, + singleAlbumArtist: 'Sadece ana albüm sanatçısını kaydet', + albumVariousArtists: '"Çeşitli sanatçılar"ı sanatçı albümlerinde tut', + removeAlbumVersion: '"Albüm Sürümü"nü parça başlığından çıkart', + removeDuplicateArtists: 'Sanatçı topluluğunu çıkart', + dateFormat: { + title: 'FLAC dosyalar için zaman formatı', + year: 'YYYY', + month: 'AA', + day: 'GG' + }, + featuredToTitle: { + title: 'Öne çıkan sanatçıları ne yapmalıyım?', + 0: 'Elleme', + 1: 'Başlıktan çıkart', + 3: 'Başlıktan ve albüm başlığından çıkart', + 2: 'Başlığa taşı' + }, + titleCasing: 'Albüm harfi', + artistCasing: 'Sanatçı harfi', + casing: { + nothing: 'Değiştirmeden bırak', + lower: 'küçük harf', + upper: 'BÜYÜK HARF', + start: 'Kelimenin başı ile başla', + sentence: 'Cümle gibi yap' + }, + previewVolume: 'Ses önizlemesi', + executeCommand: { + title: 'İndirdikten sonra komut uygula', + description: 'Bir şey yapmamak için boş bırak' + } + }, + spotify: { + title: 'Spotify Özelliği', + clientID: 'Spotify clientID', + clientSecret: 'Spotify Client Secret', + username: 'Spotify Kullanıcı Adı' + }, + reset: 'Varsayılana sıfırla', + save: 'Kaydet', + toasts: { + init: 'Ayarlar yüklendi!', + update: 'Ayarlar güncellendi!', + ARLcopied: 'ARL panoya kopyalandı!' + } + }, + sidebar: { + home: 'Ana sayfa', + search: 'Ara', + charts: 'Grafikler', + favorites: 'Favoriler', + linkAnalyzer: 'Link Analizörü', + settings: 'Ayarlar', + about: 'Hakkında' + }, + tracklist: { + downloadSelection: 'İndirme bölümü' + } +} + +export default tr diff --git a/src/plugins/i18n.js b/src/plugins/i18n.js index 4be9c13..6030be0 100644 --- a/src/plugins/i18n.js +++ b/src/plugins/i18n.js @@ -9,6 +9,9 @@ import de from '@/lang/de' import fr from '@/lang/fr' import id from '@/lang/id' import pt from '@/lang/pt-pt' +import ptBr from '@/lang/pt-br' +import ru from '@/lang/ru' +import tr from '@/lang/tr' Vue.use(VueI18n) @@ -23,7 +26,10 @@ const locales = { de, fr, id, - pt + pt, + ptBr, + ru, + tr } const i18n = new VueI18n({ @@ -31,21 +37,33 @@ const i18n = new VueI18n({ fallbackLocale: DEFAULT_LANG, messages: locales, pluralizationRules: { - /** - * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` - * @param choicesLength {number} an overall amount of available choices - * @returns a final choice index to select plural word by - */ - 'ru': function(choice, choicesLength) { - if (choice === 0) { return 0 } + /** + * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)` + * @param choicesLength {number} an overall amount of available choices + * @returns a final choice index to select plural word by + */ + ru: function(choice, choicesLength) { + if (choice === 0) { + return 0 + } var n = Math.abs(choice) % 100 var n1 = n % 10 - if (n > 10 && n < 20) { return 3 } - if (n1 > 1 && n1 < 5) { return 2 } - if (n1 == 1) { return 1 } - return 3; - } - } + + if (n > 10 && n < 20) { + return 3 + } + + if (n1 > 1 && n1 < 5) { + return 2 + } + + if (n1 == 1) { + return 1 + } + + return 3 + } + } }) export default i18n diff --git a/src/utils/flags.js b/src/utils/flags.js index b04a1d8..3dad2c1 100644 --- a/src/utils/flags.js +++ b/src/utils/flags.js @@ -5,6 +5,9 @@ import de from 'svg-country-flags/svg/de.svg' import fr from 'svg-country-flags/svg/fr.svg' import id from 'svg-country-flags/svg/id.svg' import pt from 'svg-country-flags/svg/pt.svg' +import br from 'svg-country-flags/svg/br.svg' +import ru from 'svg-country-flags/svg/ru.svg' +import tr from 'svg-country-flags/svg/tr.svg' export default { it, @@ -13,5 +16,8 @@ export default { de, fr, id, - pt + pt, + ptBr: br, + ru, + tr }