From 3826e16e5074dae969aa84c2d872548f66794152 Mon Sep 17 00:00:00 2001 From: laszloh Date: Tue, 7 Feb 2023 08:42:43 +0100 Subject: [PATCH] Add support for i18next localisation library (#194) * Rename html/*_EN.html to be the default web page * Add needed packages locally * Injext i18next into html WIP... untested until now * Add local node.js server Add the express server and make it provide the html and other necessary files. * Add node_modules folder to gitignore * rename language folder and word on the html * Translate the general and tool tabs * Translate forum tab * Add language selector and change the language Use LocalStorage to save the value modified by the user * Add german language file currently it's a copy of the englisch one * Add missed json values * Add i18n tags to template includes * Add german translation and remove "DE" files * add original and minified/gzip files * modify python and c++ to deal with new files * register routes in normal and access point mode * fix rename issue of loc_i18next.min.js * Add whitespace space between icons and text * Bug: Cache holding on to old files Fix bug where the browser cache prevented the fetching of new files. * Layout fix and adding missing translations Add whitespaces between buttons, which dissapeared when minifying the html files. Add translations to the context menu of the file browser. * Fix translation file loading * Add Text to prevent flicker due to async text loading * Add missing translations and fix layout errors * disable cache until etag header works --- .gitignore | 1 + dist/accesspoint.html | 1 + dist/js/i18next.min.js.gz | Bin 0 -> 14906 bytes dist/js/i18nextHttpBackend.min.js.gz | Bin 0 -> 3334 bytes dist/js/loc_i18next.min.js.gz | Bin 0 -> 1192 bytes dist/locales/de.json.gz | Bin 0 -> 2392 bytes dist/locales/en.json.gz | Bin 0 -> 1988 bytes dist/management.html | 1 + gitVersion.py | 1 + html/accesspoint.html | 81 ++ html/accesspoint_DE.html | 62 - html/accesspoint_EN.html | 62 - html/js/i18next.min.js | 1 + html/js/i18nextHttpBackend.min.js | 1 + html/js/loc-i18next.min.js | 1 + html/locales/de.json | 230 +++ html/locales/en.json | 229 +++ html/{management_EN.html => management.html} | 371 ++--- html/management_DE.html | 1334 ------------------ processHtml.py | 74 +- src/Web.cpp | 73 +- test/webpage/package-lock.json | 1019 +++++++++++++ test/webpage/package.json | 15 + test/webpage/server.js | 15 + 24 files changed, 1920 insertions(+), 1652 deletions(-) create mode 100644 dist/accesspoint.html create mode 100644 dist/js/i18next.min.js.gz create mode 100644 dist/js/i18nextHttpBackend.min.js.gz create mode 100644 dist/js/loc_i18next.min.js.gz create mode 100644 dist/locales/de.json.gz create mode 100644 dist/locales/en.json.gz create mode 100644 dist/management.html create mode 100644 html/accesspoint.html delete mode 100644 html/accesspoint_DE.html delete mode 100644 html/accesspoint_EN.html create mode 100644 html/js/i18next.min.js create mode 100644 html/js/i18nextHttpBackend.min.js create mode 100644 html/js/loc-i18next.min.js create mode 100644 html/locales/de.json create mode 100644 html/locales/en.json rename html/{management_EN.html => management.html} (74%) delete mode 100644 html/management_DE.html create mode 100644 test/webpage/package-lock.json create mode 100644 test/webpage/package.json create mode 100644 test/webpage/server.js diff --git a/.gitignore b/.gitignore index 8add9a2e..6b252fef 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ cmake-build-debug/ platformio-override.ini src/settings-override.h src/settings-custom-override.h +node_modules/ \ No newline at end of file diff --git a/dist/accesspoint.html b/dist/accesspoint.html new file mode 100644 index 00000000..11cbe73f --- /dev/null +++ b/dist/accesspoint.html @@ -0,0 +1 @@ +

WiFi-configuration








Ready to go?

\ No newline at end of file diff --git a/dist/js/i18next.min.js.gz b/dist/js/i18next.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..af1abbf0017325c2104b3a13377db4f87b978ab8 GIT binary patch literal 14906 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 G3jhE}ZcQNo literal 0 HcmV?d00001 diff --git a/dist/locales/de.json.gz b/dist/locales/de.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..35a4a43bec6d6b53bd55e885706a6ff10f85b5d2 GIT binary patch literal 2392 zcmV-e38(fSiwFoe6yRe50Ayt@YIARH0F_u-Z`(!?{wo{z#Rg)jPS7GPdZ4c2#;D__ zmD8YSuo8#jR^*c1!%A%UpA_gzenXz}ra#tiW=T_5jy~Ab?##}8?OyNsIH^q7`+V=4 zi6@(p-MhQz$Or9s^PHmmOq;}8KjF*kU_wb)KO8@a#@2`5*ETn^=yWhO6Y)h1S-r4K zI(k1XbQy$tS-T zE7dBaj1MZ>0HCX<1=&05*n~i8Oa}igMOA9pYOr^6chBle$jo$ut4q)w2a4pPg@U3< zs{>XGlN+p_oqcnTRrPmZF&_VTae-AH8Z1sOp5XV4EID1WK4m$hii{QW)Ftb9Azz%R zU99+wd~Z7P*PUyG&*4L3eW0?0JS2YcCfhB1*>q5KSy#JQ6>z780${Zj zl}WKjEylKTS%OOq$AuA0DpAQ#N+Yk>M-XeHW+irhFK zSW0}zu~3dKvHrPs1vxV#mjr#;Ab7=c_^pPp1eVG33+*ya(B-RX(Gn@O5Iv)Cl{PNx zGFHS}ItCw>uiTu{HYcW_8h?w~w1~1Xjn0t`DWf97hn%`Fh$Gf6HzoO1-9|c)X_H%L z#?CmdjLX!FQl1Rj%nS5F65P__L|l++42b{WGJC6bDo2f>vaLrsY+ba%z#ZO@6G#S( zAQ~=Tqr|k>R*Tk8s|mq@R(4rq7LKKDf4)Z*1oo7DWGtx~qN<7t2fj*B_Q@Wo0>wcT zWKx-NC|I?7xk@gnwNA~p$||p`piV7UMztSprgT{X`jiV#Ehw8jVv}^}89bGpo4QDoRpWF9k}YlXW_Jr#}PR^e4#JR&}YAk2!n#cJrgI&H>lcZc8{u&o#d{?$ib{^qR*FnE6Omm2>3L5Mm-8+;TXJ(w?RrF@c zg%#g9uj>qjaoXkfV_DAAGDSdiKwsSY z+`x9^K9In_K{2ek-7UmpP>#dxib~rh@Ai(`e`quGL-q!loDQ~8#Pfd58v9oW{2g0eW=bCHtpt>Iq z<B#bVrTPo+_K>f0Ue1-w@1`IiF*&$ z!E$63HZrI^>g?eNzB~u%An6E*%%GRtp@tc0{!OZ#_>Rj+nBqdAq$4+I7zL!&-2sae z{bKFF_jQvO$fb9o_nei?kzH3*zea8+Y4%_}hut924IF)e=qHN4WVp3unlJkGxN+$C zgiv(|AQxZ{#4OFlg$FALZuw?9-+_XNy}3!_a38d3F5a46$?C~1RIMpLEe+Xlnr+ee zwgv32%a{~*O@Lf`y`=0Gy|HX>QOgH3P)DEL8ytQ5U~q5n;ImyMqu)XBn2;e?(!u13Y+ef1A#Y+;3LtAV4>qyKNlc ztl8$B2H7@%oPYnF1LtH~+B})utOT|?5OzrxWN2E!oER^oQFm#UO7$JN<*VSiD^6kv zwcSk}7V2+(*X`uqNwht}_cwGdJz!KRHfDdx_6;fnxySkiaPZ$$8r5sH>Tnnoq_d`| zEp6cS#pXb6xKuah1+C3U=j|RYS2B3b$%KOsk<6Nz)Ji6DTB*KtiX%#*wJ;fBt;W17 zuLV=hwhu4)tWDV;VBS>Q_l@nEjfg$bA<+6bek@ytdT)+{4$-USn+d#etCY5A)U)=c@fkPTa#2+azwOsFETyr=TWe zHYu`eV5W5c7j)m@+qd9XqIf*h|)%FL`Z@QMN!mLmk|EM&$CaGanf@gkRzjf6G}59Yf21p@gCru&A=p zLCO-iz1bi+TS8rsDTU>+p3Y;F#!KbF39^xa45aww&a0W31O-lCXjM4Mzx;i#2%+(x z4~OzbHE3U11{n>*5Tp+$LNRacd)63|8dj+9&W!COy+H7%v1i8LoVLgPHF8Z}Nk6(dn#I9|kwxc)WzyR)N;FIq zs~Iv4iK@(k2+z%e#!}A>O^)fqP)0a{{x!05 zSstOsA}D%vd^GW50l$7R{kUAOp$tqcGuF}+1v*EP_X;nKh8peM*a}NXta+oD*D;uYb$ z?!bS=*e5L$vS}_CjTP(_$HmEVPe_XjVLY21ADt(WT8RReMwMtufT=`W2_?$_!dcZG zE%4HF4p@NI*TT8h*e&$eiME3}Fb*U8C3ff?Dr;C$me^F%uv=gx8J*~4_8mc2v*clo z0s;|w73;pvUt3evv9?8d%7w8ocZolwd$4B6`&?S*IXnDiTP&{FZ~92nxMJ*9SJ3o*&5~d=g0Tn{|HL(Gl93h* zZ|vzNz)?rs1L?(~m3|3AsR#u^^SP3Dd>PT3u&RgdaR%HOR~YnEhlp-B(mURcRpVsA=N*4}Zb~|_q9aV+oW`^^R_!MC!bT2^h4*it!}wbW z|5*?g^*PU3F)fxL9284o-TqN9&oF~&RbQFjYf5QyV@{@@#EGyneZCXm_eWNuE?q`) zqjfA|G8wndw?rcik@a~ri=j`{8SNT{afj_pVXTa)&+k&r9K?o?V@sx(>U>7KDfyM3 zf>Ve!@4nvt&GCSIPpJs&_HdoCo`a<7W%hT`WWs;oT>v)VpHTlS8u`4d{$lk<%&j1| zY4}_^593(!b4x2{M_dzWfdRCz4Nm{qr#)$JO6 zhNsHJ#BxGFRuz^~cvPo7P0aazxpWmOsT+@OhjHcN9~hTlX&Spjyc~$TqNqy>Sq$D` z7T2z#_#EcWAB1~5AV!kq2i@I%sR(+)~Tx=V5t6vRPKj^+3yEW4~JmiWnR~N{AV{grCx0Ll^OtApVFFI zgTA`l1`itTrGgSyvOtgyVuzYuJbB~2(FY(o4#SJ$SJyrcMht!A@U*)Z4v20}hSw-g z(7q5qiAld1L>L$+4ySjCqO6xj;{mar=gx;G6PjB7#I5`NWun12w|uyeED8V3s{Ra$ z?;z;stRh^JTYVkPA)J5Vk;%vSO8V0tS9eD-NG*!UWT0GlkJ~Nc{X`lXxut2@S1%Sg zA@h9WU?l}~K7}T_{V1%a((B~gIE5S)&HPe2`XTSQbmD>sR(e?o72d`z`Q7QbK$60P zWLry;@Uby48u@tUTu>-DwSN^CO0l@(n+}C*EFNo5MH3WuLo&~|h#HbeX!>9*Q@BDx z*Xey4o&hU|R=DkF8WZ5SDJ*-z-f z{Kf;ti5M(msPkiX&|GHlip9yqg7pd=BnPeFO=zc`s4%GEP}uOk!=KW5cLAgidKuHK z(6*Eak2<3(&M#xC=8X>j6>t>eGR`G;%bWfsl)t9CTg6v^L%N|8Jj6aWBa3em9u literal 0 HcmV?d00001 diff --git a/dist/management.html b/dist/management.html new file mode 100644 index 00000000..6b92ab21 --- /dev/null +++ b/dist/management.html @@ -0,0 +1 @@ +ESPuino-Settings

\ No newline at end of file diff --git a/gitVersion.py b/gitVersion.py index 76af4c3c..68382e7c 100644 --- a/gitVersion.py +++ b/gitVersion.py @@ -22,6 +22,7 @@ #ifndef __GIT_REVISION_H__ #define __GIT_REVISION_H__ constexpr const char gitRevision[] PROGMEM = "Git-revision: {git_revision}"; + constexpr const char gitRevShort[] PROGMEM = "\\"{git_revision}\\""; #endif """ diff --git a/html/accesspoint.html b/html/accesspoint.html new file mode 100644 index 00000000..b324166b --- /dev/null +++ b/html/accesspoint.html @@ -0,0 +1,81 @@ + + + + + + + + + + + +
+

WiFi-configuration

+
+
+
+
+
+

+ +
+
+

Ready to go?

+ +
+ + + + \ No newline at end of file diff --git a/html/accesspoint_DE.html b/html/accesspoint_DE.html deleted file mode 100644 index 26d2ba3e..00000000 --- a/html/accesspoint_DE.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - WLAN-Einrichtung - - - - -
-

WLAN-Einrichtung

-
-
-
-
-
-

- -
-
-

Fertig?

- -
- - \ No newline at end of file diff --git a/html/accesspoint_EN.html b/html/accesspoint_EN.html deleted file mode 100644 index c031253b..00000000 --- a/html/accesspoint_EN.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - WiFi-configuration - - - - -
-

WiFi-configuration

-
-
-
-
-
-

- -
-
-

Ready to go?

- -
- - \ No newline at end of file diff --git a/html/js/i18next.min.js b/html/js/i18next.min.js new file mode 100644 index 00000000..2ee9cfd7 --- /dev/null +++ b/html/js/i18next.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).i18next=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t){var n=function(t,n){if("object"!==e(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var o=r.call(t,n||"default");if("object"!==e(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(t)}(t,"string");return"symbol"===e(n)?n:String(n)}function r(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{};t(this,e),this.init(n,r)}return o(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.prefix=t.prefix||"i18next:",this.logger=e||g,this.options=t,this.debug=t.debug}},{key:"setDebug",value:function(e){this.debug=e}},{key:"log",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n1?t-1:0),r=1;r-1?e.replace(/###/g,"."):e}function o(){return!e||"string"==typeof e}for(var i="string"!=typeof t?[].concat(t):t.split(".");i.length>1;){if(o())return{};var a=r(i.shift());!e[a]&&n&&(e[a]=new n),e=Object.prototype.hasOwnProperty.call(e,a)?e[a]:{}}return o()?{}:{obj:e,k:r(i.shift())}}function O(e,t,n){var r=b(e,t,Object);r.obj[r.k]=n}function k(e,t){var n=b(e,t),r=n.obj,o=n.k;if(r)return r[o]}function w(e,t,n){var r=k(e,n);return void 0!==r?r:k(t,n)}function x(e,t,n){for(var r in t)"__proto__"!==r&&"constructor"!==r&&(r in e?"string"==typeof e[r]||e[r]instanceof String||"string"==typeof t[r]||t[r]instanceof String?n&&(e[r]=t[r]):x(e[r],t[r],n):e[r]=t[r]);return e}function S(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}var j={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};function P(e){return"string"==typeof e?e.replace(/[&<>"'\/]/g,(function(e){return j[e]})):e}var L="undefined"!=typeof window&&window.navigator&&void 0===window.navigator.userAgentData&&window.navigator.userAgent&&window.navigator.userAgent.indexOf("MSIE")>-1,R=[" ",",","?","!",";"];function N(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function C(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:".";if(e){if(e[t])return e[t];for(var r=t.split(n),o=e,i=0;ii+a;)a++,u=o[s=r.slice(i,i+a).join(n)];if(void 0===u)return;if(null===u)return null;if(t.endsWith(s)){if("string"==typeof u)return u;if(s&&"string"==typeof u[s])return u[s]}var c=r.slice(i+a).join(n);return c?D(u,c,n):void 0}o=o[r[i]]}return o}}var F=function(e){s(r,e);var n=E(r);function r(e){var o,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{ns:["translation"],defaultNS:"translation"};return t(this,r),o=n.call(this),L&&d.call(i(o)),o.data=e||{},o.options=a,void 0===o.options.keySeparator&&(o.options.keySeparator="."),void 0===o.options.ignoreJSONStructure&&(o.options.ignoreJSONStructure=!0),o}return o(r,[{key:"addNamespaces",value:function(e){this.options.ns.indexOf(e)<0&&this.options.ns.push(e)}},{key:"removeNamespaces",value:function(e){var t=this.options.ns.indexOf(e);t>-1&&this.options.ns.splice(t,1)}},{key:"getResource",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=void 0!==r.keySeparator?r.keySeparator:this.options.keySeparator,i=void 0!==r.ignoreJSONStructure?r.ignoreJSONStructure:this.options.ignoreJSONStructure,a=[e,t];n&&"string"!=typeof n&&(a=a.concat(n)),n&&"string"==typeof n&&(a=a.concat(o?n.split(o):n)),e.indexOf(".")>-1&&(a=e.split("."));var s=k(this.data,a);return s||!i||"string"!=typeof n?s:D(this.data&&this.data[e]&&this.data[e][t],n,o)}},{key:"addResource",value:function(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{silent:!1},i=this.options.keySeparator;void 0===i&&(i=".");var a=[e,t];n&&(a=a.concat(i?n.split(i):n)),e.indexOf(".")>-1&&(r=t,t=(a=e.split("."))[1]),this.addNamespaces(t),O(this.data,a,r),o.silent||this.emit("added",e,t,n,r)}},{key:"addResources",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{silent:!1};for(var o in n)"string"!=typeof n[o]&&"[object Array]"!==Object.prototype.toString.apply(n[o])||this.addResource(e,t,o,n[o],{silent:!0});r.silent||this.emit("added",e,t,n)}},{key:"addResourceBundle",value:function(e,t,n,r,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{silent:!1},a=[e,t];e.indexOf(".")>-1&&(r=n,n=t,t=(a=e.split("."))[1]),this.addNamespaces(t);var s=k(this.data,a)||{};r?x(s,n,o):s=C(C({},s),n),O(this.data,a,s),i.silent||this.emit("added",e,t,n)}},{key:"removeResourceBundle",value:function(e,t){this.hasResourceBundle(e,t)&&delete this.data[e][t],this.removeNamespaces(t),this.emit("removed",e,t)}},{key:"hasResourceBundle",value:function(e,t){return void 0!==this.getResource(e,t)}},{key:"getResourceBundle",value:function(e,t){return t||(t=this.options.defaultNS),"v1"===this.options.compatibilityAPI?C(C({},{}),this.getResource(e,t)):this.getResource(e,t)}},{key:"getDataByLanguage",value:function(e){return this.data[e]}},{key:"hasLanguageSomeTranslations",value:function(e){var t=this.getDataByLanguage(e);return!!(t&&Object.keys(t)||[]).find((function(e){return t[e]&&Object.keys(t[e]).length>0}))}},{key:"toJSON",value:function(){return this.data}}]),r}(d),I={processors:{},addPostProcessor:function(e){this.processors[e.name]=e},handle:function(e,t,n,r,o){var i=this;return e.forEach((function(e){i.processors[e]&&(t=i.processors[e].process(t,n,r,o))})),t}};function A(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function T(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{};return t(this,a),n=r.call(this),L&&d.call(i(n)),m(["resourceStore","languageUtils","pluralResolver","interpolator","backendConnector","i18nFormat","utils"],e,i(n)),n.options=o,void 0===n.options.keySeparator&&(n.options.keySeparator="."),n.logger=h.create("translator"),n}return o(a,[{key:"changeLanguage",value:function(e){e&&(this.language=e)}},{key:"exists",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}};if(null==e)return!1;var n=this.resolve(e,t);return n&&void 0!==n.res}},{key:"extractFromKey",value:function(e,t){var n=void 0!==t.nsSeparator?t.nsSeparator:this.options.nsSeparator;void 0===n&&(n=":");var r=void 0!==t.keySeparator?t.keySeparator:this.options.keySeparator,o=t.ns||this.options.defaultNS||[],i=n&&e.indexOf(n)>-1,a=!(this.options.userDefinedKeySeparator||t.keySeparator||this.options.userDefinedNsSeparator||t.nsSeparator||function(e,t,n){t=t||"",n=n||"";var r=R.filter((function(e){return t.indexOf(e)<0&&n.indexOf(e)<0}));if(0===r.length)return!0;var o=new RegExp("(".concat(r.map((function(e){return"?"===e?"\\?":e})).join("|"),")")),i=!o.test(e);if(!i){var a=e.indexOf(n);a>0&&!o.test(e.substring(0,a))&&(i=!0)}return i}(e,n,r));if(i&&!a){var s=e.match(this.interpolator.nestingRegexp);if(s&&s.length>0)return{key:e,namespaces:o};var u=e.split(n);(n!==r||n===r&&this.options.ns.indexOf(u[0])>-1)&&(o=u.shift()),e=u.join(r)}return"string"==typeof o&&(o=[o]),{key:e,namespaces:o}}},{key:"translate",value:function(t,n,r){var o=this;if("object"!==e(n)&&this.options.overloadTranslationOptionHandler&&(n=this.options.overloadTranslationOptionHandler(arguments)),n||(n={}),null==t)return"";Array.isArray(t)||(t=[String(t)]);var i=void 0!==n.returnDetails?n.returnDetails:this.options.returnDetails,s=void 0!==n.keySeparator?n.keySeparator:this.options.keySeparator,u=this.extractFromKey(t[t.length-1],n),c=u.key,l=u.namespaces,f=l[l.length-1],p=n.lng||this.language,g=n.appendNamespaceToCIMode||this.options.appendNamespaceToCIMode;if(p&&"cimode"===p.toLowerCase()){if(g){var h=n.nsSeparator||this.options.nsSeparator;return i?(d.res="".concat(f).concat(h).concat(c),d):"".concat(f).concat(h).concat(c)}return i?(d.res=c,d):c}var d=this.resolve(t,n),v=d&&d.res,y=d&&d.usedKey||c,m=d&&d.exactUsedKey||c,b=Object.prototype.toString.apply(v),O=["[object Number]","[object Function]","[object RegExp]"],k=void 0!==n.joinArrays?n.joinArrays:this.options.joinArrays,w=!this.i18nFormat||this.i18nFormat.handleAsObject,x="string"!=typeof v&&"boolean"!=typeof v&&"number"!=typeof v;if(w&&v&&x&&O.indexOf(b)<0&&("string"!=typeof k||"[object Array]"!==b)){if(!n.returnObjects&&!this.options.returnObjects){this.options.returnedObjectHandler||this.logger.warn("accessing an object - but returnObjects options is not enabled!");var S=this.options.returnedObjectHandler?this.options.returnedObjectHandler(y,v,T(T({},n),{},{ns:l})):"key '".concat(c," (").concat(this.language,")' returned an object instead of string.");return i?(d.res=S,d):S}if(s){var j="[object Array]"===b,P=j?[]:{},L=j?m:y;for(var R in v)if(Object.prototype.hasOwnProperty.call(v,R)){var N="".concat(L).concat(s).concat(R);P[R]=this.translate(N,T(T({},n),{joinArrays:!1,ns:l})),P[R]===N&&(P[R]=v[R])}v=P}}else if(w&&"string"==typeof k&&"[object Array]"===b)(v=v.join(k))&&(v=this.extendTranslation(v,t,n,r));else{var C=!1,E=!1,D=void 0!==n.count&&"string"!=typeof n.count,F=a.hasDefaultValue(n),I=D?this.pluralResolver.getSuffix(p,n.count,n):"",A=n["defaultValue".concat(I)]||n.defaultValue;!this.isValidLookup(v)&&F&&(C=!0,v=A),this.isValidLookup(v)||(E=!0,v=c);var V=n.missingKeyNoValueFallbackToKey||this.options.missingKeyNoValueFallbackToKey,U=V&&E?void 0:v,K=F&&A!==v&&this.options.updateMissing;if(E||C||K){if(this.logger.log(K?"updateKey":"missingKey",p,f,c,K?A:v),s){var B=this.resolve(c,T(T({},n),{},{keySeparator:!1}));B&&B.res&&this.logger.warn("Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.")}var M=[],H=this.languageUtils.getFallbackCodes(this.options.fallbackLng,n.lng||this.language);if("fallback"===this.options.saveMissingTo&&H&&H[0])for(var z=0;z1&&void 0!==arguments[1]?arguments[1]:{};return"string"==typeof e&&(e=[e]),e.forEach((function(e){if(!a.isValidLookup(t)){var u=a.extractFromKey(e,s),c=u.key;n=c;var l=u.namespaces;a.options.fallbackNS&&(l=l.concat(a.options.fallbackNS));var f=void 0!==s.count&&"string"!=typeof s.count,p=f&&!s.ordinal&&0===s.count&&a.pluralResolver.shouldUseIntlApi(),g=void 0!==s.context&&("string"==typeof s.context||"number"==typeof s.context)&&""!==s.context,h=s.lngs?s.lngs:a.languageUtils.toResolveHierarchy(s.lng||a.language,s.fallbackLng);l.forEach((function(e){a.isValidLookup(t)||(i=e,!U["".concat(h[0],"-").concat(e)]&&a.utils&&a.utils.hasLoadedNamespace&&!a.utils.hasLoadedNamespace(i)&&(U["".concat(h[0],"-").concat(e)]=!0,a.logger.warn('key "'.concat(n,'" for languages "').concat(h.join(", "),'" won\'t get resolved as namespace "').concat(i,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!")),h.forEach((function(n){if(!a.isValidLookup(t)){o=n;var i,u=[c];if(a.i18nFormat&&a.i18nFormat.addLookupKeys)a.i18nFormat.addLookupKeys(u,c,n,e,s);else{var l;f&&(l=a.pluralResolver.getSuffix(n,s.count,s));var h="".concat(a.options.pluralSeparator,"zero");if(f&&(u.push(c+l),p&&u.push(c+h)),g){var d="".concat(c).concat(a.options.contextSeparator).concat(s.context);u.push(d),f&&(u.push(d+l),p&&u.push(d+h))}}for(;i=u.pop();)a.isValidLookup(t)||(r=i,t=a.getResource(n,e,i,s))}})))}))}})),{res:t,usedKey:n,exactUsedKey:r,usedLng:o,usedNS:i}}},{key:"isValidLookup",value:function(e){return!(void 0===e||!this.options.returnNull&&null===e||!this.options.returnEmptyString&&""===e)}},{key:"getResource",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return this.i18nFormat&&this.i18nFormat.getResource?this.i18nFormat.getResource(e,t,n,r):this.resourceStore.getResource(e,t,n,r)}}],[{key:"hasDefaultValue",value:function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&"defaultValue"===t.substring(0,"defaultValue".length)&&void 0!==e[t])return!0;return!1}}]),a}(d);function B(e){return e.charAt(0).toUpperCase()+e.slice(1)}var M=function(){function e(n){t(this,e),this.options=n,this.supportedLngs=this.options.supportedLngs||!1,this.logger=h.create("languageUtils")}return o(e,[{key:"getScriptPartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return null;var t=e.split("-");return 2===t.length?null:(t.pop(),"x"===t[t.length-1].toLowerCase()?null:this.formatLanguageCode(t.join("-")))}},{key:"getLanguagePartFromCode",value:function(e){if(!e||e.indexOf("-")<0)return e;var t=e.split("-");return this.formatLanguageCode(t[0])}},{key:"formatLanguageCode",value:function(e){if("string"==typeof e&&e.indexOf("-")>-1){var t=["hans","hant","latn","cyrl","cans","mong","arab"],n=e.split("-");return this.options.lowerCaseLng?n=n.map((function(e){return e.toLowerCase()})):2===n.length?(n[0]=n[0].toLowerCase(),n[1]=n[1].toUpperCase(),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=B(n[1].toLowerCase()))):3===n.length&&(n[0]=n[0].toLowerCase(),2===n[1].length&&(n[1]=n[1].toUpperCase()),"sgn"!==n[0]&&2===n[2].length&&(n[2]=n[2].toUpperCase()),t.indexOf(n[1].toLowerCase())>-1&&(n[1]=B(n[1].toLowerCase())),t.indexOf(n[2].toLowerCase())>-1&&(n[2]=B(n[2].toLowerCase()))),n.join("-")}return this.options.cleanCode||this.options.lowerCaseLng?e.toLowerCase():e}},{key:"isSupportedCode",value:function(e){return("languageOnly"===this.options.load||this.options.nonExplicitSupportedLngs)&&(e=this.getLanguagePartFromCode(e)),!this.supportedLngs||!this.supportedLngs.length||this.supportedLngs.indexOf(e)>-1}},{key:"getBestMatchFromCodes",value:function(e){var t,n=this;return e?(e.forEach((function(e){if(!t){var r=n.formatLanguageCode(e);n.options.supportedLngs&&!n.isSupportedCode(r)||(t=r)}})),!t&&this.options.supportedLngs&&e.forEach((function(e){if(!t){var r=n.getLanguagePartFromCode(e);if(n.isSupportedCode(r))return t=r;t=n.options.supportedLngs.find((function(e){if(0===e.indexOf(r))return e}))}})),t||(t=this.getFallbackCodes(this.options.fallbackLng)[0]),t):null}},{key:"getFallbackCodes",value:function(e,t){if(!e)return[];if("function"==typeof e&&(e=e(t)),"string"==typeof e&&(e=[e]),"[object Array]"===Object.prototype.toString.apply(e))return e;if(!t)return e.default||[];var n=e[t];return n||(n=e[this.getScriptPartFromCode(t)]),n||(n=e[this.formatLanguageCode(t)]),n||(n=e[this.getLanguagePartFromCode(t)]),n||(n=e.default),n||[]}},{key:"toResolveHierarchy",value:function(e,t){var n=this,r=this.getFallbackCodes(t||this.options.fallbackLng||[],e),o=[],i=function(e){e&&(n.isSupportedCode(e)?o.push(e):n.logger.warn("rejecting language code not found in supportedLngs: ".concat(e)))};return"string"==typeof e&&e.indexOf("-")>-1?("languageOnly"!==this.options.load&&i(this.formatLanguageCode(e)),"languageOnly"!==this.options.load&&"currentOnly"!==this.options.load&&i(this.getScriptPartFromCode(e)),"currentOnly"!==this.options.load&&i(this.getLanguagePartFromCode(e))):"string"==typeof e&&i(this.formatLanguageCode(e)),r.forEach((function(e){o.indexOf(e)<0&&i(n.formatLanguageCode(e))})),o}}]),e}(),H=[{lngs:["ach","ak","am","arn","br","fil","gun","ln","mfe","mg","mi","oc","pt","pt-BR","tg","tl","ti","tr","uz","wa"],nr:[1,2],fc:1},{lngs:["af","an","ast","az","bg","bn","ca","da","de","dev","el","en","eo","es","et","eu","fi","fo","fur","fy","gl","gu","ha","hi","hu","hy","ia","it","kk","kn","ku","lb","mai","ml","mn","mr","nah","nap","nb","ne","nl","nn","no","nso","pa","pap","pms","ps","pt-PT","rm","sco","se","si","so","son","sq","sv","sw","ta","te","tk","ur","yo"],nr:[1,2],fc:2},{lngs:["ay","bo","cgg","fa","ht","id","ja","jbo","ka","km","ko","ky","lo","ms","sah","su","th","tt","ug","vi","wo","zh"],nr:[1],fc:3},{lngs:["be","bs","cnr","dz","hr","ru","sr","uk"],nr:[1,2,5],fc:4},{lngs:["ar"],nr:[0,1,2,3,11,100],fc:5},{lngs:["cs","sk"],nr:[1,2,5],fc:6},{lngs:["csb","pl"],nr:[1,2,5],fc:7},{lngs:["cy"],nr:[1,2,3,8],fc:8},{lngs:["fr"],nr:[1,2],fc:9},{lngs:["ga"],nr:[1,2,3,7,11],fc:10},{lngs:["gd"],nr:[1,2,3,20],fc:11},{lngs:["is"],nr:[1,2],fc:12},{lngs:["jv"],nr:[0,1],fc:13},{lngs:["kw"],nr:[1,2,3,4],fc:14},{lngs:["lt"],nr:[1,2,10],fc:15},{lngs:["lv"],nr:[1,2,0],fc:16},{lngs:["mk"],nr:[1,2],fc:17},{lngs:["mnk"],nr:[0,1,2],fc:18},{lngs:["mt"],nr:[1,2,11,20],fc:19},{lngs:["or"],nr:[2,1],fc:2},{lngs:["ro"],nr:[1,2,20],fc:20},{lngs:["sl"],nr:[5,1,2,3],fc:21},{lngs:["he","iw"],nr:[1,2,20,21],fc:22}],z={1:function(e){return Number(e>1)},2:function(e){return Number(1!=e)},3:function(e){return 0},4:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},5:function(e){return Number(0==e?0:1==e?1:2==e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5)},6:function(e){return Number(1==e?0:e>=2&&e<=4?1:2)},7:function(e){return Number(1==e?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2)},8:function(e){return Number(1==e?0:2==e?1:8!=e&&11!=e?2:3)},9:function(e){return Number(e>=2)},10:function(e){return Number(1==e?0:2==e?1:e<7?2:e<11?3:4)},11:function(e){return Number(1==e||11==e?0:2==e||12==e?1:e>2&&e<20?2:3)},12:function(e){return Number(e%10!=1||e%100==11)},13:function(e){return Number(0!==e)},14:function(e){return Number(1==e?0:2==e?1:3==e?2:3)},15:function(e){return Number(e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2)},16:function(e){return Number(e%10==1&&e%100!=11?0:0!==e?1:2)},17:function(e){return Number(1==e||e%10==1&&e%100!=11?0:1)},18:function(e){return Number(0==e?0:1==e?1:2)},19:function(e){return Number(1==e?0:0==e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3)},20:function(e){return Number(1==e?0:0==e||e%100>0&&e%100<20?1:2)},21:function(e){return Number(e%100==1?1:e%100==2?2:e%100==3||e%100==4?3:0)},22:function(e){return Number(1==e?0:2==e?1:(e<0||e>10)&&e%10==0?2:3)}},J=["v1","v2","v3"],_={zero:0,one:1,two:2,few:3,many:4,other:5};function q(){var e={};return H.forEach((function(t){t.lngs.forEach((function(n){e[n]={numbers:t.nr,plurals:z[t.fc]}}))})),e}var $=function(){function e(n){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t(this,e),this.languageUtils=n,this.options=r,this.logger=h.create("pluralResolver"),this.options.compatibilityJSON&&"v4"!==this.options.compatibilityJSON||"undefined"!=typeof Intl&&Intl.PluralRules||(this.options.compatibilityJSON="v3",this.logger.error("Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.")),this.rules=q()}return o(e,[{key:"addRule",value:function(e,t){this.rules[e]=t}},{key:"getRule",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.shouldUseIntlApi())try{return new Intl.PluralRules(e,{type:t.ordinal?"ordinal":"cardinal"})}catch(e){return}return this.rules[e]||this.rules[this.languageUtils.getLanguagePartFromCode(e)]}},{key:"needsPlural",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=this.getRule(e,t);return this.shouldUseIntlApi()?n&&n.resolvedOptions().pluralCategories.length>1:n&&n.numbers.length>1}},{key:"getPluralFormsOfKey",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.getSuffixes(e,n).map((function(e){return"".concat(t).concat(e)}))}},{key:"getSuffixes",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=this.getRule(e,n);return r?this.shouldUseIntlApi()?r.resolvedOptions().pluralCategories.sort((function(e,t){return _[e]-_[t]})).map((function(e){return"".concat(t.options.prepend).concat(e)})):r.numbers.map((function(r){return t.getSuffix(e,r,n)})):[]}},{key:"getSuffix",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=this.getRule(e,n);return r?this.shouldUseIntlApi()?"".concat(this.options.prepend).concat(r.select(t)):this.getSuffixRetroCompatible(r,t):(this.logger.warn("no plural rule found for: ".concat(e)),"")}},{key:"getSuffixRetroCompatible",value:function(e,t){var n=this,r=e.noAbs?e.plurals(t):e.plurals(Math.abs(t)),o=e.numbers[r];this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]&&(2===o?o="plural":1===o&&(o=""));var i=function(){return n.options.prepend&&o.toString()?n.options.prepend+o.toString():o.toString()};return"v1"===this.options.compatibilityJSON?1===o?"":"number"==typeof o?"_plural_".concat(o.toString()):i():"v2"===this.options.compatibilityJSON||this.options.simplifyPluralSuffix&&2===e.numbers.length&&1===e.numbers[0]?i():this.options.prepend&&r.toString()?this.options.prepend+r.toString():r.toString()}},{key:"shouldUseIntlApi",value:function(){return!J.includes(this.options.compatibilityJSON)}}]),e}();function W(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Y(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.logger=h.create("interpolator"),this.options=n,this.format=n.interpolation&&n.interpolation.format||function(e){return e},this.init(n)}return o(e,[{key:"init",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.interpolation||(e.interpolation={escapeValue:!0});var t=e.interpolation;this.escape=void 0!==t.escape?t.escape:P,this.escapeValue=void 0===t.escapeValue||t.escapeValue,this.useRawValueToEscape=void 0!==t.useRawValueToEscape&&t.useRawValueToEscape,this.prefix=t.prefix?S(t.prefix):t.prefixEscaped||"{{",this.suffix=t.suffix?S(t.suffix):t.suffixEscaped||"}}",this.formatSeparator=t.formatSeparator?t.formatSeparator:t.formatSeparator||",",this.unescapePrefix=t.unescapeSuffix?"":t.unescapePrefix||"-",this.unescapeSuffix=this.unescapePrefix?"":t.unescapeSuffix||"",this.nestingPrefix=t.nestingPrefix?S(t.nestingPrefix):t.nestingPrefixEscaped||S("$t("),this.nestingSuffix=t.nestingSuffix?S(t.nestingSuffix):t.nestingSuffixEscaped||S(")"),this.nestingOptionsSeparator=t.nestingOptionsSeparator?t.nestingOptionsSeparator:t.nestingOptionsSeparator||",",this.maxReplaces=t.maxReplaces?t.maxReplaces:1e3,this.alwaysFormat=void 0!==t.alwaysFormat&&t.alwaysFormat,this.resetRegExp()}},{key:"reset",value:function(){this.options&&this.init(this.options)}},{key:"resetRegExp",value:function(){var e="".concat(this.prefix,"(.+?)").concat(this.suffix);this.regexp=new RegExp(e,"g");var t="".concat(this.prefix).concat(this.unescapePrefix,"(.+?)").concat(this.unescapeSuffix).concat(this.suffix);this.regexpUnescape=new RegExp(t,"g");var n="".concat(this.nestingPrefix,"(.+?)").concat(this.nestingSuffix);this.nestingRegexp=new RegExp(n,"g")}},{key:"interpolate",value:function(e,t,n,r){var o,i,a,s=this,u=this.options&&this.options.interpolation&&this.options.interpolation.defaultVariables||{};function c(e){return e.replace(/\$/g,"$$$$")}var l=function(e){if(e.indexOf(s.formatSeparator)<0){var o=w(t,u,e);return s.alwaysFormat?s.format(o,void 0,n,Y(Y(Y({},r),t),{},{interpolationkey:e})):o}var i=e.split(s.formatSeparator),a=i.shift().trim(),c=i.join(s.formatSeparator).trim();return s.format(w(t,u,a),c,n,Y(Y(Y({},r),t),{},{interpolationkey:a}))};this.resetRegExp();var f=r&&r.missingInterpolationHandler||this.options.missingInterpolationHandler,p=r&&r.interpolation&&void 0!==r.interpolation.skipOnVariables?r.interpolation.skipOnVariables:this.options.interpolation.skipOnVariables;return[{regex:this.regexpUnescape,safeValue:function(e){return c(e)}},{regex:this.regexp,safeValue:function(e){return s.escapeValue?c(s.escape(e)):c(e)}}].forEach((function(t){for(a=0;o=t.regex.exec(e);){var n=o[1].trim();if(void 0===(i=l(n)))if("function"==typeof f){var u=f(e,o,r);i="string"==typeof u?u:""}else if(r&&r.hasOwnProperty(n))i="";else{if(p){i=o[0];continue}s.logger.warn("missed to pass in variable ".concat(n," for interpolating ").concat(e)),i=""}else"string"==typeof i||s.useRawValueToEscape||(i=y(i));var c=t.safeValue(i);if(e=e.replace(o[0],c),p?(t.regex.lastIndex+=i.length,t.regex.lastIndex-=o[0].length):t.regex.lastIndex=0,++a>=s.maxReplaces)break}})),e}},{key:"nest",value:function(e,t){var n,r,o,i=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};function s(e,t){var n=this.nestingOptionsSeparator;if(e.indexOf(n)<0)return e;var r=e.split(new RegExp("".concat(n,"[ ]*{"))),i="{".concat(r[1]);e=r[0];var a=(i=this.interpolate(i,o)).match(/'/g),s=i.match(/"/g);(a&&a.length%2==0&&!s||s.length%2!=0)&&(i=i.replace(/'/g,'"'));try{o=JSON.parse(i),t&&(o=Y(Y({},t),o))}catch(t){return this.logger.warn("failed parsing options string in nesting for key ".concat(e),t),"".concat(e).concat(n).concat(i)}return delete o.defaultValue,e}for(;n=this.nestingRegexp.exec(e);){var u=[];(o=(o=Y({},a)).replace&&"string"!=typeof o.replace?o.replace:o).applyPostProcessor=!1,delete o.defaultValue;var c=!1;if(-1!==n[0].indexOf(this.formatSeparator)&&!/{.*}/.test(n[1])){var l=n[1].split(this.formatSeparator).map((function(e){return e.trim()}));n[1]=l.shift(),u=l,c=!0}if((r=t(s.call(this,n[1].trim(),o),o))&&n[0]===e&&"string"!=typeof r)return r;"string"!=typeof r&&(r=y(r)),r||(this.logger.warn("missed to resolve ".concat(n[1]," for nesting ").concat(e)),r=""),c&&(r=u.reduce((function(e,t){return i.format(e,t,a.lng,Y(Y({},a),{},{interpolationkey:n[1].trim()}))}),r.trim())),e=e.replace(n[0],r),this.regexp.lastIndex=0}return e}}]),e}();function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.logger=h.create("formatter"),this.options=n,this.formats={number:te((function(e,t){var n=new Intl.NumberFormat(e,t);return function(e){return n.format(e)}})),currency:te((function(e,t){var n=new Intl.NumberFormat(e,ee(ee({},t),{},{style:"currency"}));return function(e){return n.format(e)}})),datetime:te((function(e,t){var n=new Intl.DateTimeFormat(e,ee({},t));return function(e){return n.format(e)}})),relativetime:te((function(e,t){var n=new Intl.RelativeTimeFormat(e,ee({},t));return function(e){return n.format(e,t.range||"day")}})),list:te((function(e,t){var n=new Intl.ListFormat(e,ee({},t));return function(e){return n.format(e)}}))},this.init(n)}return o(e,[{key:"init",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{interpolation:{}},n=t.interpolation;this.formatSeparator=n.formatSeparator?n.formatSeparator:n.formatSeparator||","}},{key:"add",value:function(e,t){this.formats[e.toLowerCase().trim()]=t}},{key:"addCached",value:function(e,t){this.formats[e.toLowerCase().trim()]=te(t)}},{key:"format",value:function(e,t,n,r){var o=this;return t.split(this.formatSeparator).reduce((function(e,t){var i=function(e){var t=e.toLowerCase().trim(),n={};if(e.indexOf("(")>-1){var r=e.split("(");t=r[0].toLowerCase().trim();var o=r[1].substring(0,r[1].length-1);if("currency"===t&&o.indexOf(":")<0)n.currency||(n.currency=o.trim());else if("relativetime"===t&&o.indexOf(":")<0)n.range||(n.range=o.trim());else{o.split(";").forEach((function(e){if(e){var t=X(e.split(":")),r=t[0],o=t.slice(1).join(":").trim().replace(/^'+|'+$/g,"");n[r.trim()]||(n[r.trim()]=o),"false"===o&&(n[r.trim()]=!1),"true"===o&&(n[r.trim()]=!0),isNaN(o)||(n[r.trim()]=parseInt(o,10))}}))}}return{formatName:t,formatOptions:n}}(t),a=i.formatName,s=i.formatOptions;if(o.formats[a]){var u=e;try{var c=r&&r.formatParams&&r.formatParams[r.interpolationkey]||{},l=c.locale||c.lng||r.locale||r.lng||n;u=o.formats[a](e,l,ee(ee(ee({},s),r),c))}catch(e){o.logger.warn(e)}return u}return o.logger.warn("there was no format function for ".concat(a)),e}),e)}}]),e}();function re(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function oe(e){for(var t=1;t3&&void 0!==arguments[3]?arguments[3]:{};return t(this,r),s=n.call(this),L&&d.call(i(s)),s.backend=e,s.store=o,s.services=a,s.languageUtils=a.languageUtils,s.options=u,s.logger=h.create("backendConnector"),s.waitingReads=[],s.maxParallelReads=u.maxParallelReads||10,s.readingCalls=0,s.maxRetries=u.maxRetries>=0?u.maxRetries:5,s.retryTimeout=u.retryTimeout>=1?u.retryTimeout:350,s.state={},s.queue=[],s.backend&&s.backend.init&&s.backend.init(a,u.backend,u),s}return o(r,[{key:"queueLoad",value:function(e,t,n,r){var o=this,i={},a={},s={},u={};return e.forEach((function(e){var r=!0;t.forEach((function(t){var s="".concat(e,"|").concat(t);!n.reload&&o.store.hasResourceBundle(e,t)?o.state[s]=2:o.state[s]<0||(1===o.state[s]?void 0===a[s]&&(a[s]=!0):(o.state[s]=1,r=!1,void 0===a[s]&&(a[s]=!0),void 0===i[s]&&(i[s]=!0),void 0===u[t]&&(u[t]=!0)))})),r||(s[e]=!0)})),(Object.keys(i).length||Object.keys(a).length)&&this.queue.push({pending:a,pendingCount:Object.keys(a).length,loaded:{},errors:[],callback:r}),{toLoad:Object.keys(i),pending:Object.keys(a),toLoadLanguages:Object.keys(s),toLoadNamespaces:Object.keys(u)}}},{key:"loaded",value:function(e,t,n){var r=e.split("|"),o=r[0],i=r[1];t&&this.emit("failedLoading",o,i,t),n&&this.store.addResourceBundle(o,i,n),this.state[e]=t?-1:2;var a={};this.queue.forEach((function(n){var r,s,u,c,l,f;r=n.loaded,s=i,c=b(r,[o],Object),l=c.obj,f=c.k,l[f]=l[f]||[],u&&(l[f]=l[f].concat(s)),u||l[f].push(s),function(e,t){void 0!==e.pending[t]&&(delete e.pending[t],e.pendingCount--)}(n,e),t&&n.errors.push(t),0!==n.pendingCount||n.done||(Object.keys(n.loaded).forEach((function(e){a[e]||(a[e]={});var t=n.loaded[e];t.length&&t.forEach((function(t){void 0===a[e][t]&&(a[e][t]=!0)}))})),n.done=!0,n.errors.length?n.callback(n.errors):n.callback())})),this.emit("loaded",a),this.queue=this.queue.filter((function(e){return!e.done}))}},{key:"read",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:this.retryTimeout,a=arguments.length>5?arguments[5]:void 0;if(!e.length)return a(null,{});if(this.readingCalls>=this.maxParallelReads)this.waitingReads.push({lng:e,ns:t,fcName:n,tried:o,wait:i,callback:a});else{this.readingCalls++;var s=function(s,u){if(r.readingCalls--,r.waitingReads.length>0){var c=r.waitingReads.shift();r.read(c.lng,c.ns,c.fcName,c.tried,c.wait,c.callback)}s&&u&&o2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3?arguments[3]:void 0;if(!this.backend)return this.logger.warn("No backend was added via i18next.use. Will not load resources."),o&&o();"string"==typeof e&&(e=this.languageUtils.toResolveHierarchy(e)),"string"==typeof t&&(t=[t]);var i=this.queueLoad(e,t,r,o);if(!i.toLoad.length)return i.pending.length||o(),null;i.toLoad.forEach((function(e){n.loadOne(e)}))}},{key:"load",value:function(e,t,n){this.prepareLoading(e,t,{},n)}},{key:"reload",value:function(e,t,n){this.prepareLoading(e,t,{reload:!0},n)}},{key:"loadOne",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=e.split("|"),o=r[0],i=r[1];this.read(o,i,"read",void 0,void 0,(function(r,a){r&&t.logger.warn("".concat(n,"loading namespace ").concat(i," for language ").concat(o," failed"),r),!r&&a&&t.logger.log("".concat(n,"loaded namespace ").concat(i," for language ").concat(o),a),t.loaded(e,r,a)}))}},{key:"saveMissing",value:function(e,t,n,r,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:function(){};if(this.services.utils&&this.services.utils.hasLoadedNamespace&&!this.services.utils.hasLoadedNamespace(t))this.logger.warn('did not save key "'.concat(n,'" as the namespace "').concat(t,'" was not yet loaded'),"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!");else if(null!=n&&""!==n){if(this.backend&&this.backend.create){var s=oe(oe({},i),{},{isUpdate:o}),u=this.backend.create.bind(this.backend);if(u.length<6)try{var c;(c=5===u.length?u(e,t,n,r,s):u(e,t,n,r))&&"function"==typeof c.then?c.then((function(e){return a(null,e)})).catch(a):a(null,c)}catch(e){a(e)}else u(e,t,n,r,a,s)}e&&e[0]&&this.store.addResource(e[0],t,n,r)}}}]),r}(d);function se(){return{debug:!1,initImmediate:!0,ns:["translation"],defaultNS:["translation"],fallbackLng:["dev"],fallbackNS:!1,supportedLngs:!1,nonExplicitSupportedLngs:!1,load:"all",preload:!1,simplifyPluralSuffix:!0,keySeparator:".",nsSeparator:":",pluralSeparator:"_",contextSeparator:"_",partialBundledLanguages:!1,saveMissing:!1,updateMissing:!1,saveMissingTo:"fallback",saveMissingPlurals:!0,missingKeyHandler:!1,missingInterpolationHandler:!1,postProcess:!1,postProcessPassResolved:!1,returnNull:!0,returnEmptyString:!0,returnObjects:!1,joinArrays:!1,returnedObjectHandler:!1,parseMissingKeyHandler:!1,appendNamespaceToMissingKey:!1,appendNamespaceToCIMode:!1,overloadTranslationOptionHandler:function(t){var n={};if("object"===e(t[1])&&(n=t[1]),"string"==typeof t[1]&&(n.defaultValue=t[1]),"string"==typeof t[2]&&(n.tDescription=t[2]),"object"===e(t[2])||"object"===e(t[3])){var r=t[3]||t[2];Object.keys(r).forEach((function(e){n[e]=r[e]}))}return n},interpolation:{escapeValue:!0,format:function(e,t,n,r){return e},prefix:"{{",suffix:"}}",formatSeparator:",",unescapePrefix:"-",nestingPrefix:"$t(",nestingSuffix:")",nestingOptionsSeparator:",",maxReplaces:1e3,skipOnVariables:!0}}}function ue(e){return"string"==typeof e.ns&&(e.ns=[e.ns]),"string"==typeof e.fallbackLng&&(e.fallbackLng=[e.fallbackLng]),"string"==typeof e.fallbackNS&&(e.fallbackNS=[e.fallbackNS]),e.supportedLngs&&e.supportedLngs.indexOf("cimode")<0&&(e.supportedLngs=e.supportedLngs.concat(["cimode"])),e}function ce(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function le(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1?arguments[1]:void 0;if(t(this,a),e=r.call(this),L&&d.call(i(e)),e.options=ue(n),e.services={},e.logger=h,e.modules={external:[]},ge(i(e)),o&&!e.isInitialized&&!n.isClone){if(!e.options.initImmediate)return e.init(n,o),u(e,i(e));setTimeout((function(){e.init(n,o)}),0)}return e}return o(a,[{key:"init",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0;"function"==typeof t&&(n=t,t={}),!t.defaultNS&&!1!==t.defaultNS&&t.ns&&("string"==typeof t.ns?t.defaultNS=t.ns:t.ns.indexOf("translation")<0&&(t.defaultNS=t.ns[0]));var r=se();function o(e){return e?"function"==typeof e?new e:e:null}if(this.options=le(le(le({},r),this.options),ue(t)),"v1"!==this.options.compatibilityAPI&&(this.options.interpolation=le(le({},r.interpolation),this.options.interpolation)),void 0!==t.keySeparator&&(this.options.userDefinedKeySeparator=t.keySeparator),void 0!==t.nsSeparator&&(this.options.userDefinedNsSeparator=t.nsSeparator),!this.options.isClone){var i;this.modules.logger?h.init(o(this.modules.logger),this.options):h.init(null,this.options),this.modules.formatter?i=this.modules.formatter:"undefined"!=typeof Intl&&(i=ne);var a=new M(this.options);this.store=new F(this.options.resources,this.options);var s=this.services;s.logger=h,s.resourceStore=this.store,s.languageUtils=a,s.pluralResolver=new $(a,{prepend:this.options.pluralSeparator,compatibilityJSON:this.options.compatibilityJSON,simplifyPluralSuffix:this.options.simplifyPluralSuffix}),!i||this.options.interpolation.format&&this.options.interpolation.format!==r.interpolation.format||(s.formatter=o(i),s.formatter.init(s,this.options),this.options.interpolation.format=s.formatter.format.bind(s.formatter)),s.interpolator=new G(this.options),s.utils={hasLoadedNamespace:this.hasLoadedNamespace.bind(this)},s.backendConnector=new ae(o(this.modules.backend),s.resourceStore,s,this.options),s.backendConnector.on("*",(function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o1?n-1:0),o=1;o0&&"dev"!==u[0]&&(this.options.lng=u[0])}this.services.languageDetector||this.options.lng||this.logger.warn("init: no languageDetector is used and no lng is defined");var c=["getResource","hasResourceBundle","getResourceBundle","getDataByLanguage"];c.forEach((function(t){e[t]=function(){var n;return(n=e.store)[t].apply(n,arguments)}}));var l=["addResource","addResources","addResourceBundle","removeResourceBundle"];l.forEach((function(t){e[t]=function(){var n;return(n=e.store)[t].apply(n,arguments),e}}));var f=v(),p=function(){var t=function(t,r){e.isInitialized&&!e.initializedStoreOnce&&e.logger.warn("init: i18next is already initialized. You should call init just once!"),e.isInitialized=!0,e.options.isClone||e.logger.log("initialized",e.options),e.emit("initialized",e.options),f.resolve(r),n(t,r)};if(e.languages&&"v1"!==e.options.compatibilityAPI&&!e.isInitialized)return t(null,e.t.bind(e));e.changeLanguage(e.options.lng,t)};return this.options.resources||!this.options.initImmediate?p():setTimeout(p,0),f}},{key:"loadResources",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:pe,r=n,o="string"==typeof e?e:this.language;if("function"==typeof e&&(r=e),!this.options.resources||this.options.partialBundledLanguages){if(o&&"cimode"===o.toLowerCase())return r();var i=[],a=function(e){e&&t.services.languageUtils.toResolveHierarchy(e).forEach((function(e){i.indexOf(e)<0&&i.push(e)}))};if(o)a(o);else{var s=this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);s.forEach((function(e){return a(e)}))}this.options.preload&&this.options.preload.forEach((function(e){return a(e)})),this.services.backendConnector.load(i,this.options.ns,(function(e){e||t.resolvedLanguage||!t.language||t.setResolvedLanguage(t.language),r(e)}))}else r(null)}},{key:"reloadResources",value:function(e,t,n){var r=v();return e||(e=this.languages),t||(t=this.options.ns),n||(n=pe),this.services.backendConnector.reload(e,t,(function(e){r.resolve(),n(e)})),r}},{key:"use",value:function(e){if(!e)throw new Error("You are passing an undefined module! Please check the object you are passing to i18next.use()");if(!e.type)throw new Error("You are passing a wrong module! Please check the object you are passing to i18next.use()");return"backend"===e.type&&(this.modules.backend=e),("logger"===e.type||e.log&&e.warn&&e.error)&&(this.modules.logger=e),"languageDetector"===e.type&&(this.modules.languageDetector=e),"i18nFormat"===e.type&&(this.modules.i18nFormat=e),"postProcessor"===e.type&&I.addPostProcessor(e),"formatter"===e.type&&(this.modules.formatter=e),"3rdParty"===e.type&&this.modules.external.push(e),this}},{key:"setResolvedLanguage",value:function(e){if(e&&this.languages&&!(["cimode","dev"].indexOf(e)>-1))for(var t=0;t-1)&&this.store.hasLanguageSomeTranslations(n)){this.resolvedLanguage=n;break}}}},{key:"changeLanguage",value:function(e,t){var n=this;this.isLanguageChangingTo=e;var r=v();this.emit("languageChanging",e);var o=function(e){n.language=e,n.languages=n.services.languageUtils.toResolveHierarchy(e),n.resolvedLanguage=void 0,n.setResolvedLanguage(e)},i=function(i){e||i||!n.services.languageDetector||(i=[]);var a="string"==typeof i?i:n.services.languageUtils.getBestMatchFromCodes(i);a&&(n.language||o(a),n.translator.language||n.translator.changeLanguage(a),n.services.languageDetector&&n.services.languageDetector.cacheUserLanguage&&n.services.languageDetector.cacheUserLanguage(a)),n.loadResources(a,(function(e){!function(e,i){i?(o(i),n.translator.changeLanguage(i),n.isLanguageChangingTo=void 0,n.emit("languageChanged",i),n.logger.log("languageChanged",i)):n.isLanguageChangingTo=void 0,r.resolve((function(){return n.t.apply(n,arguments)})),t&&t(e,(function(){return n.t.apply(n,arguments)}))}(e,a)}))};return e||!this.services.languageDetector||this.services.languageDetector.async?!e&&this.services.languageDetector&&this.services.languageDetector.async?0===this.services.languageDetector.detect.length?this.services.languageDetector.detect().then(i):this.services.languageDetector.detect(i):i(e):i(this.services.languageDetector.detect()),r}},{key:"getFixedT",value:function(t,n,r){var o=this,i=function t(n,i){var a;if("object"!==e(i)){for(var s=arguments.length,u=new Array(s>2?s-2:0),c=2;c1&&void 0!==arguments[1]?arguments[1]:{};if(!this.isInitialized)return this.logger.warn("hasLoadedNamespace: i18next was not initialized",this.languages),!1;if(!this.languages||!this.languages.length)return this.logger.warn("hasLoadedNamespace: i18n.languages were undefined or empty",this.languages),!1;var r=this.resolvedLanguage||this.languages[0],o=!!this.options&&this.options.fallbackLng,i=this.languages[this.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,n){var r=t.services.backendConnector.state["".concat(e,"|").concat(n)];return-1===r||2===r};if(n.precheck){var s=n.precheck(this,a);if(void 0!==s)return s}return!!this.hasResourceBundle(r,e)||(!(this.services.backendConnector.backend&&(!this.options.resources||this.options.partialBundledLanguages))||!(!a(r,e)||o&&!a(i,e)))}},{key:"loadNamespaces",value:function(e,t){var n=this,r=v();return this.options.ns?("string"==typeof e&&(e=[e]),e.forEach((function(e){n.options.ns.indexOf(e)<0&&n.options.ns.push(e)})),this.loadResources((function(e){r.resolve(),t&&t(e)})),r):(t&&t(),Promise.resolve())}},{key:"loadLanguages",value:function(e,t){var n=v();"string"==typeof e&&(e=[e]);var r=this.options.preload||[],o=e.filter((function(e){return r.indexOf(e)<0}));return o.length?(this.options.preload=r.concat(o),this.loadResources((function(e){n.resolve(),t&&t(e)})),n):(t&&t(),Promise.resolve())}},{key:"dir",value:function(e){if(e||(e=this.resolvedLanguage||(this.languages&&this.languages.length>0?this.languages[0]:this.language)),!e)return"rtl";var t=this.services&&this.services.languageUtils||new M(se());return["ar","shu","sqr","ssh","xaa","yhd","yud","aao","abh","abv","acm","acq","acw","acx","acy","adf","ads","aeb","aec","afb","ajp","apc","apd","arb","arq","ars","ary","arz","auz","avl","ayh","ayl","ayn","ayp","bbz","pga","he","iw","ps","pbt","pbu","pst","prp","prd","ug","ur","ydd","yds","yih","ji","yi","hbo","men","xmn","fa","jpr","peo","pes","prs","dv","sam","ckb"].indexOf(t.getLanguagePartFromCode(e))>-1||e.toLowerCase().indexOf("-arab")>1?"rtl":"ltr"}},{key:"cloneInstance",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:pe,r=le(le(le({},this.options),t),{isClone:!0}),o=new a(r);void 0===t.debug&&void 0===t.prefix||(o.logger=o.logger.clone(t));var i=["store","services","language"];return i.forEach((function(t){o[t]=e[t]})),o.services=le({},this.services),o.services.utils={hasLoadedNamespace:o.hasLoadedNamespace.bind(o)},o.translator=new K(o.services,o.options),o.translator.on("*",(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;return new he(e,t)}));var de=he.createInstance();return de.createInstance=he.createInstance,de})); diff --git a/html/js/i18nextHttpBackend.min.js b/html/js/i18nextHttpBackend.min.js new file mode 100644 index 00000000..3100ac9d --- /dev/null +++ b/html/js/i18nextHttpBackend.min.js @@ -0,0 +1 @@ +!function(e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).i18nextHttpBackend=e()}(function(){return function o(i,r,a){function s(t,e){if(!r[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}n=r[t]={exports:{}},i[t][0].call(n.exports,function(e){return s(i[t][1][e]||e)},n,n.exports,o,i,r,a)}return r[t].exports}for(var u="function"==typeof require&&require,e=0;e"),u=t.innerHTML.indexOf("")+11;l>-1&&u>6&&(t.innerHTML=[t.innerHTML.substring(0,l),t.innerHTML.slice(u)].join("")),t.innerHTML=["",e.t(n,c(r,t.innerHTML)),"",t.innerHTML].join("")}else if("append"===i){var f=t.innerHTML.indexOf(""),s=t.innerHTML.indexOf("")+11;f>-1&&s>6&&(t.innerHTML=[t.innerHTML.substring(0,f),t.innerHTML.slice(s)].join("")),t.innerHTML=[t.innerHTML,"",e.t(n,c(r,t.innerHTML),"")].join("")}else if(0===i.indexOf("data-")){var a=i.substr("data-".length),p=e.t(n,c(r,t.getAttribute(a)));t.setAttribute(a,p),t.setAttribute(i,p)}else t.setAttribute(i,e.t(n,c(r,t.getAttribute(i))))}function i(e){return JSON.parse(e.replace(/:\s*"([^"]*)"/g,function(e,t){return': "'+t.replace(/:/g,"@colon@")+'"'}).replace(/:\s*'([^']*)'/g,function(e,t){return': "'+t.replace(/:/g,"@colon@")+'"'}).replace(/(['"])?([a-z0-9A-Z_]+)(['"])?\s*:/g,'"$2": ').replace(/@colon@/g,":"))}function o(e,r){var o=e.getAttribute(u.selectorAttr);if(o){var l=e,c=e.getAttribute(u.targetAttr);if(null!=c&&(l=e.querySelector(c)||e),r||!0!==u.useOptionsAttr||(r=i(e.getAttribute(u.optionsAttr)||"{}")),r=r||{},o.indexOf(";")>=0)for(var f=o.split(";"),s=0,a=f.length;s-1;c--)o(l[c],t);o(i,t)}}var u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u=t({},r,u);var c=function(e,n){return u.parseDefaultValueFromContent?t({},e,{defaultValue:n}):e};return l}var r={selectorAttr:"data-i18n",targetAttr:"i18n-target",optionsAttr:"i18n-options",useOptionsAttr:!1,parseDefaultValueFromContent:!0,document:document};return{init:n}}); \ No newline at end of file diff --git a/html/locales/de.json b/html/locales/de.json new file mode 100644 index 00000000..4f4839fa --- /dev/null +++ b/html/locales/de.json @@ -0,0 +1,230 @@ +{ + "submit": "Absenden", + "restart": "Neustart", + "reset": "Reset", + "title": "ESPuino-Konfiguration", + "shutdown": "Ausschalten", + "log": "Log", + "info": "Info", + "toast": { + "rfidDetect": "RFID Tag mit {{rfidId}} erkannt.", + "success": "Aktion erfolgreich ausgeführt.", + "conlost": "Die Verbindung zum ESPuino ist unterbrochen! Bitte Seite neu laden." + }, + "nav": { + "control": "Steuerung", + "rfid": "RFID", + "wifi": "WLAN", + "mqtt": "MQTT", + "ftp": "FTP", + "general": "Allgemein", + "tools": "Tools", + "forum": "Forum" + }, + "wifi": { + "title": "WLAN-Einstellungen", + "ssid": { + "title": "WLAN-Name (SSID)", + "placeholder": "SSID", + "validation": "Bitte SSID des WLANs eintragen" + }, + "password": { + "title": "Passwort", + "placeholder": "Passwort", + "validation": "Bitte Passwort vom WLANs eintragen" + }, + "hostname": { + "title": "ESPuino-Name (Hostname)", + "placeholder": "espuino", + "validation": "Trage einen validen Hostnamen ein" + }, + "restartPrompt": "Fertig?" + }, + "control": { + "title": "Steuerung", + "first": "Erster", + "prev": "Vorheriger", + "playpause": "Play / Pause", + "forward": "Nächster", + "last": "Letzter", + "volume": "Lautstärke", + "voldown": "Leiser", + "volup": "Lauter", + "current": "Aktueller Titel" + }, + "files": { + "title": "Dateien", + "loading": "Wird geladen...", + "context": { + "newFolder" : "Neuer Ordner", + "play": "Abspielen", + "refresh": "Aktualisieren", + "delete": "Löschen", + "rename": "Umbenennen", + "download": "Download" + }, + "files": { + "title": "Dateien", + "desc": "Eine oder mehrere Datei(en) hochladen" + }, + "directory": { + "title": "Ordner", + "desc": "Einen Ordner samt Inhalt (und allen Unterordnern) hochladen" + }, + "upload": { + "title": "Upload", + "desc": "Upload starten", + "selectFolder": "Wähle den Ordner für den Upload!", + "selectFile": "Wähle eine Datei zum Hochladen!", + "success": "Upload erfolgreich", + "error": "Upload fehlgeschlagen" + }, + "rfid": { + "title": "RFID-Zuweisungen", + "idNumber": "RFID-Chip-Nummer (12-stellig)", + "music": "Musik", + "modification": "Modifikation", + "fileurl": { + "title": "Datei, Verzeichnis oder URL (^ und # als Zeichen nicht erlaubt)", + "placeholder": "z.B. /mp3/Hoerspiele/Yakari/Yakari_und_seine_Freunde.mp3" + }, + "playmode": { + "title": "Abspielmodus", + "mode": [ + "Modus auswählen", + "Einzelner Titel", + "Einzelner Titel (Endlosschleife)", + "Einzelner Titel eines Verzeichnis (zufällig). Danach schlafen.", + "Hörbuch", + "Hörbuch (Endlosschleife)", + "Alle Titel eines Verzeichnis (sortiert)", + "Alle Titel eines Verzeichnis (zufällig)", + "Alle Titel eines Verzeichnis (sortiert, Endlosschleife)", + "Alle Titel eines Verzeichnis (zufällig, Endlosschleife)", + "Alle Titel aus einem zufälligen Unterverzeichnis (sortiert)", + "Webradio", + "Liste (Dateien von SD und/oder Webstreams) aus lokaler .m3u-Datei" + ] + }, + "mod": { + "title": "Modifikation", + "mods": [ + "Modifikation auswählen", + "Tastensperre", + "Schlafe sofort", + "Schlafen nach 15 Minuten", + "Schlafen nach 30 Minuten", + "Schlafen nach 1 Stunde", + "Schlafen nach 2 Stunden", + "Schlafen nach Ende des Titels", + "Schlafen nach Ende der Playlist", + "Schlafen nach fünf Titeln", + "Wiederhole Playlist (endlos)", + "Wiederhole Titel (endlos)", + "Dimme LEDs (Nachtmodus)", + "Aktiviere/deaktive WLAN", + "Bluetooth Lautsprecher aktivieren/deaktivieren", + "Bluetooth Kopfhörer aktivieren/deaktivieren", + "Aktiviere FTP", + "Lösche Zuordnung", + "Play/Pause", + "Vorheriger Titel", + "Nächster Titel", + "Erster Titel", + "Letzter Titel", + "Springe vorwärts (n Sekunden)", + "Springe rückwärts (n Sekunden)" + ] + } + } + }, + "mqtt": { + "title": "MQTT-Einstellungen", + "enable": "MQTT aktivieren", + "clientId": { + "title": "MQTT-ClientId", + "placeholder": "z.B. ESPuino", + "validation": "" + }, + "server": { + "title": "MQTT-Server", + "placeholder": "f.e. 192.168.2.89", + "validation": "" + }, + "user": { + "title": "MQTT-Benutzername (optional)", + "placeholder": "Benutzername", + "validation": "" + }, + "pwd": { + "title": "MQTT-Passwort (optional)", + "placeholder": "Passwort", + "validation": "" + }, + "port": { + "title": "MQTT-Port", + "placeholder": "z.B.. 1883", + "validation": "" + } + }, + "ftp": { + "title": "FTP-Einstellungen", + "user": { + "title": "FTP-Benutzername", + "placeholder": "Benutzername" + }, + "pwd": { + "title": "FTP-Passwort", + "placeholder": "Passwort" + }, + "start": { + "title": "FTP-Server starten", + "desc": "Aktiviert den FTP-Server bis zum Neustart des Geräts.", + "button": "FTP-Server starten" + } + }, + "general": { + "volume": { + "title": "Lautstärke", + "restart": "Nach dem Einschalten", + "speakerMax": "Maximal (Lautsprecher)", + "headphoneMax": "Maximal (Kopfhörer)" + }, + "neopixel": { + "title": "Neopixel (Helligkeit)", + "restart": "Nach dem Einschalten", + "nightmode": "Im Nachtmodus" + }, + "sleep": { + "title": "Deep Sleep", + "incativity": "Inaktivität nach (in Minuten)" + }, + "battery": { + "title": "Batterie", + "desc": "Status über Neopixel anzeigen", + "lowWarning": "Unter dieser Spannung wird eine Warnung angezeigt", + "lowCritical": "Eine LED leuchtet bei dieser Spannung", + "high": "Alle LEDs leuchten bei dieser Spannung", + "measureInterval": "Zeitabstand der Messung (in Minuten)" + } + }, + "tools": { + "nvserase": { + "title": "NVS RFID-Zuweisungen löschen", + "desc": "Über den Importer werden lediglich neue Einträge importiert, jedoch keine bestehenden Einträge aktiv gelöscht. Im Falle einer doppelten Zuweisung wird ein Eintrag allenfalls überschrieben. Mit dieser Funktion können alle bestehenden NVS-RFID-Zuweisungen gelöscht werden, so dass der ESPuino im Anschluss keinerlei Karten mehr kennt. Wird im Anschluss der Importer gestartet, befinden sich im Speicher des ESPuino anschließend exakt nur solche Zuweisungen, die Teil der Backup-Datei sind. Weitere Infos gibt es hier.", + "button": "Zuweisungen löschen" + }, + "nvsimport": { + "title": "NVS RFID-Importer", + "desc": "Hier kann eine Backup-Datei hochgeladen werden, um NVS-RFID-Zuweisungen zu importieren." + }, + "fwupdate": { + "title": "Firmware-Update", + "desc": "Hier kann ein Firmware-Update durchgeführt werden." + } + }, + "forum": { + "title": "Forum", + "desc": "Du hast Probleme mit ESPuino oder bist an einem Erfahrungsaustausch interessiert?
Dann schaue doch mal im ESPuino-Forum vorbei! Insbesondere gibt es dort auch einen
Bereich, in dem reichlich Dokumentation hinterlegt ist. Wir freuen uns auf deinen Besuch!" + } +} \ No newline at end of file diff --git a/html/locales/en.json b/html/locales/en.json new file mode 100644 index 00000000..89e9317e --- /dev/null +++ b/html/locales/en.json @@ -0,0 +1,229 @@ +{ + "submit": "Submit", + "restart": "Restart", + "reset": "Reset", + "title": "ESPuino-Settings", + "shutdown": "Shutdown", + "log": "Log", + "info": "Info", + "toast": { + "rfidDetect": "RFID-tag {{rfidId}} detected.", + "success": "Action performed successfully.", + "conlost": "Connection to ESPuino broken! Please reload website." + }, + "nav": { + "control": "Control", + "rfid": "RFID", + "wifi": "WiFi", + "mqtt": "MQTT", + "ftp": "FTP", + "general": "General", + "tools": "Tools", + "forum": "Forum" + }, + "wifi": { + "title": "WiFi-configuration", + "ssid": { + "title": "WiFi-name (SSID)", + "placeholder": "SSID", + "validation": "Enter WiFi's SSID" + }, + "password": { + "title": "Password", + "placeholder": "Password", + "validation": "Enter the WiFi's password" + }, + "hostname": { + "title": "ESPuino's name (hostname)", + "placeholder": "espuino", + "validation": "Enter a valid hostname" + }, + "restartPrompt": "Ready to go?" + }, + "control": { + "title": "Control", + "first": "First", + "prev": "Previous", + "playpause": "Play / Pause", + "forward": "Next", + "last": "Last", + "volume": "Volume", + "voldown": "Volume Down", + "volup": "Volume Up", + "current": "Current track" + }, + "files": { + "title": "Files", + "loading": "Please wait...", + "context": { + "newFolder": "New Folder", + "play": "Play", + "refresh": "Refresh", + "delete": "Delete", + "rename": "Rename", + "download": "Download" + }, + "files": { + "title": "Files", + "desc": "Upload one ore more files" + }, + "directory": { + "title": "Directory", + "desc": "Upload directory with all files and subdirectories" + }, + "upload": { + "title": "Upload", + "desc": "Start Upload", + "selectFolder": "Please select the upload location!", + "selectFile": "Please select files to upload!", + "success": "Upload success", + "error": "Upload error" + }, + "rfid": { + "title": "RFID-Assignments", + "idNumber": "RFID-number (12 digits)", + "music": "Music", + "modification": "Modification", + "fileurl": { + "title": "File, directory or URL (^ and # aren't allowed as chars)", + "placeholder": "f.e. /mp3/Audiobook/Yakari/Yakari_and_Friends.mp3" + }, + "playmode": { + "title": "Playmode", + "mode": [ + "Select mode", + "Single track", + "Single track (loop)", + "Single track of a directory (random). Followed by sleep.", + "Audiobook", + "Audiobook (loop)", + "All tracks of a directory (sorted alph.)", + "All tracks of a directory (random)", + "All tracks of a directory (sorted alph., loop)", + "All tracks of a directory (random, loop)", + "All tracks of a random subdirectory (sorted alph.)", + "Webradio", + "List (files from SD and/or webstreams) from local .m3u-File" + ] + }, + "mod": { + "title": "Mod", + "mods": [ + "Select modification", + "Keylock", + "Sleep immediately", + "Sleep after 15 minutes", + "Sleep after 30 minutes", + "Sleep after 1 hour", + "Sleep after 2 hours", + "Sleep after end of track", + "Sleep after end of playlist", + "Sleep after end of five tracks", + "Loop playlist", + "Loop track", + "Dimm LEDs (nightmode)", + "Toggle WiFi", + "Toggle Bluetooth", + "Enable FTP", + "Remove assignment", + "Toggle Play/Pause", + "Previous track", + "Next track", + "First track", + "Last track", + "Seek forwards (n seconds)", + "Seek backwards (n seconds)" + ] + } + } + }, + "mqtt": { + "title": "MQTT-settings", + "enable": "Enable MQTT", + "clientId": { + "title": "MQTT-ClientId", + "placeholder": "f.e. ESPuino", + "validation": "" + }, + "server": { + "title": "MQTT-server", + "placeholder": "f.e. 192.168.2.89", + "validation": "" + }, + "user": { + "title": "MQTT-username (optional)", + "placeholder": "username", + "validation": "" + }, + "pwd": { + "title": "MQTT-password (optional)", + "placeholder": "password", + "validation": "" + }, + "port": { + "title": "MQTT-port", + "placeholder": "f.e. 1883", + "validation": "" + } + }, + "ftp": { + "title": "FTP-settings", + "user": { + "title": "FTP-Username", + "placeholder": "username" + }, + "pwd": { + "title": "FTP-password", + "placeholder": "password" + }, + "start": { + "title": "Start FTP-server", + "desc": "Enables FTP-server until device is restarted.", + "button": "Start FTP-server" + } + }, + "general": { + "volume": { + "title": "Volume", + "restart": "After restart", + "speakerMax": "Max. volume (speaker)", + "headphoneMax": "Max. volume (headphones)" + }, + "neopixel": { + "title": "Neopixel (brightness)", + "restart": "After restart", + "nightmode": "For nightmode" + }, + "sleep": { + "title": "Deep Sleep", + "incativity": "After n minutes inactivity" + }, + "battery": { + "title": "Battery", + "desc": "Show voltage-status via Neopixel", + "lowWarning": "Show warning below this threshold", + "lowCritical": "Lowest voltage, that is indicated by one LED", + "high": "Voltage, that is indicated by all LEDs", + "measureInterval": "Interval between measurements (in minutes)" + } + }, + "tools": { + "nvserase": { + "title": "Erase NVS RFID-assignments", + "desc": "Via importer new entries will only be inserted but old ones won't be erased. Only in case an old assignment to the same entry already exists, it will be overwritten. With this function all existing rfid-assignments will be erased. Further infos in German language.", + "button": "Delete assignments" + }, + "nvsimport": { + "title": "NVS RFID-Importer", + "desc": "Backupfile can be uploaded right here in order to import NVS-RFID-assignments." + }, + "fwupdate": { + "title": "Firmware-Update", + "desc": "Firmware can be updated right here." + } + }, + "forum": { + "title": "Forum", + "desc": "Having problems or aim to discuss about ESPuino?
Join us at ESPuino-Forum! Especially there's a lot of (german)
documentation online!" + } +} \ No newline at end of file diff --git a/html/management_EN.html b/html/management.html similarity index 74% rename from html/management_EN.html rename to html/management.html index 49dd37b1..2b4ec524 100644 --- a/html/management_EN.html +++ b/html/management.html @@ -1,7 +1,7 @@ - ESPuino-Settings + ESPuino-Settings @@ -17,6 +17,10 @@ + + + + @@ -141,23 +148,27 @@ width="35" height="35" class="d-inline-block align-top" alt=""/> ESPuino - Restart - Shutdown - Log - Infos + Restart + Shutdown + Log + Infos +

@@ -166,22 +177,20 @@
- WiFi-settings - - -
- Enter WiFi's SSID. -
- - - - WiFi-settings + + +
+ + + +

- - +   +
@@ -189,43 +198,43 @@