From 73ba7fb929820c93c0e78ae066df0f39dd8cc7a7 Mon Sep 17 00:00:00 2001 From: magdev Date: Tue, 3 Feb 2026 10:52:50 +0100 Subject: [PATCH] Add Prometheus metrics integration (v0.7.4) - New Metrics settings tab with enable/disable toggle - PrometheusController for wp_prometheus_collect_metrics hook - License gauges: total by status, lifetime, expiring, expiring soon - Download gauges: total downloads, active versions - API counters: requests, rate limits, validation errors - Metric tracking in RestApiController and UpdateController Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 22 + languages/wc-licensed-product-de_CH.mo | Bin 37570 -> 38146 bytes languages/wc-licensed-product-de_CH.po | 3538 ++++++++++++------------ languages/wc-licensed-product.pot | 3155 +++++++++++---------- src/Admin/SettingsController.php | 36 + src/Api/RestApiController.php | 36 + src/Api/UpdateController.php | 21 +- src/Metrics/PrometheusController.php | 259 ++ src/Plugin.php | 4 + wc-licensed-product.php | 4 +- 10 files changed, 3722 insertions(+), 3353 deletions(-) create mode 100644 src/Metrics/PrometheusController.php diff --git a/CHANGELOG.md b/CHANGELOG.md index e9a96a7..be82ef9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.7.4] - 2026-02-03 + +### Added + +- **Prometheus Metrics Integration**: Expose license and API metrics for monitoring + - New "Metrics" settings tab with enable/disable toggle + - License gauges: total by status, lifetime, expiring, expiring soon + - Download gauges: total downloads, active versions count + - API counters: requests by endpoint/result, rate limit exceeded events, validation errors by type + - Requires [WP Prometheus](https://src.bundespruefstelle.ch/magdev/wp-prometheus) plugin + +### New Files + +- `src/Metrics/PrometheusController.php` - Prometheus metrics collection and registration + +### Technical Details + +- Hooks into `wp_prometheus_collect_metrics` action for metric collection +- API counters stored persistently in WordPress options (`wclp_prometheus_counters`) +- Static methods for incrementing counters from API controllers +- Metrics only collected when enabled in settings + ## [0.7.3] - 2026-02-01 ### Fixed diff --git a/languages/wc-licensed-product-de_CH.mo b/languages/wc-licensed-product-de_CH.mo index 5cd1f95625c23f8a7423125e872738f1d550a479..3fb09bcb9c6ba2701160b4402c8f52bb95ca28d3 100644 GIT binary patch delta 9381 zcmZwL2UwNY9mnwlD&hbIR2&FbaUcTXUMLRS!M!)i6^RJS1+}QTu4o)F8l!Q?YRoid zn7U$WX}o}y@H$q(`^sU zD;{P;Z4?=Qryq45Z;OMq<^v)?{o-y}PT=LUrI7491NZgxj$K?!a<*0K@UP ztN#hhQ@`fCjp|rHJ!9tbe3L-IL&Hv_59TzM!rPdL_ndL{jp;>wFpk2lNV1BDp=5G|>VcC{ z9odc{_%_+eXIpz-*-NW*6$l7qBtjK$eH8$(B&Zx}Y*U8g>6Er~xkXQ&0w;L49Bc zmc!571sAXt_3NnA*W&IPNj%oVR;ULLckN!BPThw+@rG+}(ZmiU%{c(WIPV`vK|Lx! zWnhK#6;vvZpfYsBwU=Q}YD!{JnMlV@I1@F}cTv}WfgZf$+N(6P_iuzseGlZ7;5TzA zXi;oObz}#&!{exJ64c!Gv=*v^O;H(0N3He|SOzmN9w%X6T!a1a8ur50EsPn9kE1en z6)R}}-=v_P2hgp_SRIwRCr~N>6!qZqs2lwQD`6+*r3wx~jX2lUm!a0gHjKbCSP?Iy zQho<3VCmMzwAcQRq@WB8Mx}NXR>egagIiFkejmxE`3|*sYPYd#B_4I-7N{F{M=jc+ zuAb$bj_SxFjKsC*uSVew3f1u>>IPR(i|`JX$AGpr<)Ii(JqmTBMy}ogb;AM9NvMv` zM`dQ4Yd?r%ss9msW1AH6uWhzC#oqWO)Q#UkjrbHYedZoUVKNItFQ#-<>hn<@T8uSu zBkE1KAC*yQO-2I*ln<6LXY*jeH3W>d1Cf2acdpdKQ(TYghvVQf&unqSi(y zoP)ivE1q)g5glwMqnrt--IRj##f(Qy;cxw}@Urtw)T-WxTBYw{Af7}mrjJk^yog$4 zw_H7@qwR1q#?jshm6=JXHS-uMV{f6}Gbb<^{WmFS@zrJ%Yg;uy?dO*K&;yH5Jzb94 zW@}K_ZNbX86WOWe2&!X0p)ympv+Y0x^3pW*P!Ar2x_&k?#eVY^1BkG z*;My&7NAnM4%va`3)GD(bg`?wJw8G`9o6CWSO>SFI(E$YB`P!DV6gW8KV3s9CQu`+ ziW*^UXEJI;?J)?up>|1cS09afpcgg5$*2dcMh)yG)D(PxLHHAvMAMC3#`8@n3Z*a% zbwMPmBhjuNhk9TmRL4>=2Gdd7b292dMW{J`7WIPK={$_u&R?RgyNuc$0o}>JZd{#$ zMi`H!u_zWgBA+!=Q8(I$y8d(LSE!L)MLpmK>OLiV*u@%&O{k|K8^uiT zLH>tP*h9l44CB4q7-!=Yd>yqGJiY8TOmz;!c-noa?YkMZ7WQF%ypHN%MHYnamx#*L z7#xH-$h*xPdW8IIZtl~d8#Ye2^^vF#tZ;5ZW$G0S#r+tJCs2#)6I4epVQmcTZKt9x zDnlu#&!?f@D+93sPViI6ps)f-g1Lp$Fr|;3>s?rv`axH}hDzNX48`VsZAa5k59)_y zaTw~AoQaykSy&U-Vj}KFO^yGuJMklGM3wv59!8@ckc=UiiWM>4IU4oAJk)z)I%SVH^%RSLX=%^4LDcF!iQ0~*Q6oO<&R=zY zk9h&c+(l(*;t-pO=~$V%-?(G^tc5p_ca{kmZZk3fHGs*exu1p_z+9|~i!cJWU?qGTwYX29Uvv98g>rZqTjCG6 z4&z4H?Q{s+Q2#6HL3Kyk-|Lf5?GtedZo`FGX_U>}2GpY4f%@D@)Pp}o4_+8W{&Oh= zjJBzpf?BN$Q9a&@dZX<|rTQZ*gXd8rz3S>Wu{!miF&(Rnu^q_7R@4ho1Ko-G+yPW3 zj*ao#KaI}Quz-fDW7*@l3Dx878Fm}>Lp>lHQ*Z(5{6VaMCs8Rsht2Q;a!XTroE>o? zDiiZiYh(+y!`*%gn)BPJ8;%`sw?{TcQJ;d*_#}F82Ws1Wgb8>SJ78d@?MP=-rUsx! zI1css>8Lff29<#$s9oegO+l%?=uX_h-qelPef^?tP~hsTFpm0OjKqtm>wiM6h3*rK zVHueDSeyye11o3Q_k#yhse7@W_WyPY>gg%eTwg?e;4a2siHUZ9$D&3y9JL0rQ7QDH zu7A^=KY(?qe~6lzo2UT>Wb?Yk$~X{bVYv4H#}stIW#?T~N6J5HZxrk7f%Mqqq4x6{ zR7#J!_S@K+dJX2YBMw4d5$0Kp!@r@fuaaXwpN4Tf-xN@2fSa%@9@7a7oowg2C2Cis zqTXyHFcx>BI{pc2tz5WGs%w;m8g&@1UP)Gu86=3mE;Vl-)&5 zNidsQH?E1ZunqRZJy;scOtq^z3^nJCuo^By?Uom?79Moc^euT>H0JiSzeedw8K;OLb89ZHv0^Ag9ky zK_gm;!|^p7fWg!3>K}=^;VcZ-b=VZ2M`h$o)D0_5x8HtE&_g`~tKdA;_FaeZxYyM$ zVSVcUKqg+>EFK$SPxN3BYVJ0;^S?)RAqs2i95jeSqlLoM1~7>otD1!vWLhSOS}1Ic$L?u@h>f-B2AIjmnVE)nCL& z>IbkTeuh=CJS)1b_J3Up%0LDx19P!6zKMG99aNA1jomSPwte6T)JXGDYiK4$;1cxU zX6%XYVRbC~n9V?4)OE?&iszd&3XO3#Dg&=$8@!2nFC=hLdmM~P@oH>^?_x9j5r<&H z9QzN71=yDQ8PuvTKi96U>Zr^XqV78zi+}%rkwWpRMy2XFYGfBsJ^jX=zmM7_q4VtZ z(WrVORHjldlt! z9FDp^3pMAt&iPo6`dZWg-oq$7j>_B>tbw5m>~@S_KR0`if zrS4tVeiZd3a~{=^z{l;{D1#pA{ZZHZoHJ3^%|~TuiF2!;g648RHpjoC=Dxu~zPm9K zdFh#BsPkR%)GG}V^zU60S>GZ^}$z412G>feo;svDSz0n6?ECZM)u5o#(HV_95@ zHE|=>(*EC1L8&~C?eJ&R9JPMRz5)ATFm)g5MKcREvQ?;&zks@aFKRKKL0x|ZHL&k+ zFb1x$zdH`YCe+tpHqSRFC};#tSK8Iz0|TiK!0tF0wI-fJ&E+{~*wePXJ8A&)QTN%3 ziMSUv$5$~PqgL79fVyD^>O0Zjl*0EE`eQ8lRR*SEIeZ(LBlA8gg(qG86Rbe}JZhxh zqSnM648TD|c@=(j#L`xcI7|D7#Nz?vUw=yJ&;#BsF4<$f36BXqn*#1NTWqgCI9*hEaA-ii1ZWu82wP;T! zbnGDBB-&AbhUiN)q&^WF5jx%?t`a?oFNrm@e~p@!*9jeCi2k%kU^Dl*e(b8^BaMbI zN*#%{?&JvPb=u|>ULb`REEu4@#p5b=CKzbWa^wx3C)6Xj?xB(zlc{wh9(Q2zCiMZ+0l7UyOY z?TMkpLE4ht#oefv^i!$m8aCpyG$vpXvDLN5(AI|d&eip1)iIa0I>d{VzaXkpenBTV zrV>vOeIM?X7MXV?MJNa>%cyJ`T3sfIKS+Dy?-O2S2o%_9O+l#!i%%q3T z{neeDg|mqTL|4wAa_wHq?@;cg`Hymq;(1~eagP{I=qSy_TZlWhTKv7EVmIPx+Lsf` zVjR{ZVksx!Q2h1r2<_>_C!DxMv&gIfq4bBNU{ za6C)+i1}ReM>TNhtD!Hko$%4VAHN|+QZ6E%B=oiLXZ1Xc$|j-|@i}!Jdn_i1HXR!= z$rg*hM@~}yi1?ORNkqHr>N^KxbD}JQgTDiA(AN9AapDw zeoM4ch2tsLu5wGtRftNIKOhR#$nmbl{0(;#M~OLHR|@|^MCi-&!BLAsMNaDY!D8}V zUDYGRa-tm3;Gy<&)L$ho688xmD>>f>`xn>juNI-SEpqh=l;=@S4Jg6?E?3>D6_Y)I zY9!4%TI0uWWf!Y7F+cb(cN6HgIcX#2MsIF4D&6SUQJ*DiK#3wO<~eWqM^ z-~7DE-hzqVLZ2tyTaceU-nXku($T3$ydRJ`eZw4C(vuWm9qrv$AtnRj6CDXO|iObAMk!MnSf( zfLkXNKc~=_k>yP&er#sm^xT}hjLcu2JuN%qp_?Y{3T|8&8svIDGj&j@|2Lx3X`^By z{@dZi;*n1B=I-)jE-&GKB)iC)Ta@T2w4?mxtY^aE0}qcgG5wcudd7M4z1ao60&h-^ zH#f=CC7+aJdh-iBnHj$S9d=^h;$bHl`|#^P3)agSWr}$n^pYyG&kD+_TlgW h9`(?GfA!>DuVwWOE3M&cI6u!g6!d?`dB7hO@gFA+$Tk1~ delta 8850 zcmZA533yId9>?*MAQ3`DB$5c;1W7CrV&C^Av4+MHu?I~NYg1x*#onkjl#;;|omMSv z(~dILp{*%X>r@xos&+8cD9UJ+j`{v_j%Pf*kAFVrf9`$nJ?niV^LP4wu*27Tp<>B( zhGUbDF;RFo(3k{YV~$6t)|h!Q#+1iA^v6|L2{&LE?#6of5jMcv7>_YEjH!b?uq)=c z{2-1bzlvPvH7PZXd5Vf@SQ(ExFJdF|UtC_VmTf?1EKPk+^usg^!VD~n6R;xAaQQN% zPiDPyJE~!CVjj;oUsLc?o@KmP3b$hd?sR^MJ;?pyj2VjkupGXDk@!BA!E>kw zUc#z)8`a|=x*LL1P}eWQ3OwIzr4Wj5qCWUBmd3NF8-9a+coj85H?cqZ*R~B9g7m>; zp&Gu@xekNLH(@K>jcUj>T!=jw2CqMb(-bsxU!p#62{jV;Q0J@EwQHaTmL^ZaX4ndQ z;WR9RhcO(FV+Fj7E$|)=#s(}DbtK=px*p@N9&MmPL-ht~5uQXn_&U;9a|iXns?3KL zV;XAcGf_i274_i7$Sj#HSQ7t+W$_a%hhLx?dKq=UTM3N69vokvUSe0QhNDmq%ER`! z3i*sVgUR>^X_HA#v^UJbhU9t3bekengT6wI=v~zP{n#SvSPZJ;b-WbxfsUw_KI1OP z!RF+1QA55D)q_JAjVDn(x#j8~I0I-!dFm@WV^Ixgf@(lF)XpC5^v;b(Co-oO;? z{~=B75Wj+Y@Ltr7j$tJXr5j;b2i4;aE+39s134Ii+pq%eLv`dR>cQu+E&hNSf!fTg zMz#TlYyYQHsE*T6LtTIjf;o&@EdN2Rjo(l=4rpO-Tm?1PbzR=lnSyFaI#$N<7=a5= zBmDV-cLB0!nW4Ts# zS7o5?I}3H+6|ES5^>_;vOousv+W#e5+ZT`rHS}FjAIv~KXcFp;w;aQ<2t9ZlwL5Mg zJI(~L!gPH*jKra+?L7n4fc0${e+}uYR7Btbtb%7zZ@^oq?H9@f&ckZh6}O=3ub_tV zrt=YMHwCpTUfrfCY6_=2XQLMLLe%2S_fqhsunx6|HlSLz3$?foy8H)JLmyx~mTPZE zq$z5xB%?-Z4(fff78~Gus6}@JHMMt9+t{~*eV(@q1+{Q6YI}`DT{s>?aVD~}%t}*qo#HaM&aw2gh#O&K0rp;Ya%<@p>Btaw#h_xig_7z zRtt6GUZ@_8Kn?vI)aT#ClK3uaR~^Jscno#^6sjSgyZj;s@qF_y3ToNU zSRG4swcD{4>Oo1Ux$T2`A&qs;LOo~|>bgSIZrG3N$Ujgc@I9&{*HIm~gIeT%-57sA z3NaM;XKM39H=2U}xWf4&s%M)~57>sf(R-*xdJ2>9A-2QB?)LkB5{@T7h7GYvvN4l! z9BK`Gnauoa+x<+13{J7{_PVJ3Isml>reGXyMK$m!>V}t5FRscx_?-Z2BJUiNi<+8u zunt~xc_kK*uJ7(l>&f_Qs76ttMK%>RWO=AXm5*xaCXB%YsHyk{{qZj9^AAzmGq9I^ zw^zfFaTGrbg4u?01ByRkgpz(9P6dQdh+duq+m0Gkg_a!i%Wgl$*}8 zHDoVS(1X6g7I+0!?-^qE>kwQ_ejGJ){WI*M%S3%{KI*~C(1RN=8~39|E`F$8tZh*Z zPRB6J9?JgLP%ok)0N0{=y4mHgVI+AG_QI2>21E_Bza1x_dO8;Mx#_5p@M0@miwp5I z?!>g=w!vnE-9-T-7=Jw=nu^xg8jBYV29eK44fz^uj2n=9m=mZTCycZs(Gu0uLD&Yf zQFFcvb-(aYc6UT$6nQ*W!!BM59txSLZMO*P;c{$`2T%=pfEuZ?qiqi(Q8!4$1ni9( zf!U~Cv;;NOFS+{N*qi)atcm`aR&PBD@l>Q@Wz0ogxCXTbzC)(bM2)c{FcbBlJ=hud zV>|pW#$wyCwt-_%bDWF1el=FdLTrlfAszCXI}|kczT@oB1)@HXg6eS^*1}BGNaUk> zwh=4h9+w|>eujGRHPq+K)7DswCGCmYw$m_y=bLTr#2M7;{{=f>QkMNvnU3+~e@6}V z9n=k?pK&9HwaIg_D{go7*U_K65(}XUMxkC{&9Me9!w{Zt_EONI_z<b}3?Y^Q0ycBf9+gKlip0)3Twx|aWNA2?*tb^-ZehA~pzePRBKgTZ0IP{PYL`~fc)cK8A z2@g0=q3-LwM4={y63^My9FL{RQ*kS%Bi|S10cuLpSZV6X2Rwe{4NII zLo9)QGwqjA8Pwtq!!YgtDiqYRB-GG!bNMW+Ouh=6;j0*q7g0lZAJwxaxwhwN*ok}* z>cPiQ4gD0m;}ztACUKVSU{@@!{ojW|2q%W22d82R7GNY^K=u4S>bjEbrRErp4KWqf z^99%vkD%TMW{&-Te;w5OBMbGpHP{$G!GS!VKl0c=I1Iv8q}x%e{UWC0kEkI{=3?DA z6}8%Dp;q%U)JPSgrtWQ5e-L%uNta)6`AyUaJwmTO7%yFGk@~)R67KDtHnj z@CQ_nOU}28E)@0P4j78*sF9nD8nL;qelhC1pb*uN53oBPo6it^2#j3NICwHQNbzNR1*18^d07d+=&hI-%@%*S(>g_$I4@g(X&qnFuLpM#pJ*D+K3 z|1bsJF!lxeE^mqc-;AP=fHP2Y{0i2=uW>B;ueQGnW@97rz1R=`i5h{XYwQ$GM>S|3 zY6SCLz6OKH3sD{2g@O1EdVMIQ5v5i5-BFFYP~sodA0_5de#Tv=2fXR7kEX5?F_?JD zonObf@~+$oN09$UWKzD4T2nci|KA@ssZj4V=Z}vU-HoQXibAYFT{b>)b@9$PoX@#u zQU9I$1c%~uLI+#lyieRE-h2G~og~$X;asFu--Xynj3jSE{7U&Dv5N96Ttc)bo*}*= zqNuM+=y;9TLo_E}N%YV;^3hm_(6N{JCy}E5e@3k4#Mh{K*+u9WM)aayi!#xD@Oho! zXh$B59f$&VZh-SLb#nm!FJFB89IKruW17qE} z{gkUxzJ=wqM!uskg}6h!LWB}J26531TP*%cRk5VIiS~Fy%HO;5J+VId)5IcoO;^ky zx)3iBCET^0ox`!s<25qTRf<0mwfMkbSJxe95WNV0>L(Mq#5{5x{V4zb(AGXdJjb~i zL<^$7yRLz|xFdNzt2pw|>-mt}oz6qxi zbGhboTUGqs(3kSdL^k#N@Cq@I^0UNJB7yw8=D!@t2EvE{-{5kPpW@M8$El9PWX5(yo1sLQ~giPFRo zB8j*}1aodNp(Dll73F5cPsAkRs&aR36y-?bE#gJu7eYsWeYyU%;5$!9n^Nx5F_`Si zZMkH5@rCwBTk6kH-1i`M{+HT=Pn=oCnRDa?L~Y8I2^|ZF%|vr09Qm$Z z+3@NTP{APU`r##Y}X$(!<0uqAXGK ziTW?dUnMRO_X!;@aJ~=rE6(ii7G3ZwS-#wl;At1pi4~ktTCh^?zWBbB>8w^ z2ccsjbsaIkIQ##P2^3!-+H?MatNzHjfI1JMW3k2L6`hDVUAAan{r7!~nkP*yU-VY{ i{-uh-yJl1`Di|}rMA4b7KEXw`XC3k@`Yo?i$o~L0ITV5b diff --git a/languages/wc-licensed-product-de_CH.po b/languages/wc-licensed-product-de_CH.po index 82c0e19..5d833f7 100644 --- a/languages/wc-licensed-product-de_CH.po +++ b/languages/wc-licensed-product-de_CH.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: WC Licensed Product 0.7.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-28 12:03+0100\n" +"POT-Creation-Date: 2026-02-03 10:41+0100\n" "PO-Revision-Date: 2026-01-28T10:00:00+00:00\n" "Last-Translator: Marco Graetsch \n" "Language-Team: German (Switzerland) \n" @@ -15,141 +15,14 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. translators: %d: number of days -#: src/Product/LicensedProductVariation.php:211 -#, php-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d Tag" -msgstr[1] "%d Tage" +#: src/Admin/DashboardWidgetController.php:47 +msgid "License Statistics" +msgstr "Lizenzstatistiken" -#: src/Product/LicensedProductType.php:183 -#: src/Product/LicensedProductType.php:543 -#, php-format -msgid "%d days" -msgstr "%d Tage" - -#. translators: %d: number of errors -#: src/Admin/AdminController.php:1246 -#, php-format -msgid "%d error." -msgid_plural "%d errors." -msgstr[0] "%d Fehler." -msgstr[1] "%d Fehler." - -#: src/Email/LicenseEmailController.php:277 -#, php-format -msgid "%d license" -msgid_plural "%d licenses" -msgstr[0] "%d Lizenz" -msgstr[1] "%d Lizenzen" - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1170 -#, php-format -msgid "%d license activated." -msgid_plural "%d licenses activated." -msgstr[0] "%d Lizenz aktiviert." -msgstr[1] "%d Lizenzen aktiviert." - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1178 -#, php-format -msgid "%d license deactivated." -msgid_plural "%d licenses deactivated." -msgstr[0] "%d Lizenz deaktiviert." -msgstr[1] "%d Lizenzen deaktiviert." - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1194 -#, php-format -msgid "%d license deleted." -msgid_plural "%d licenses deleted." -msgstr[0] "%d Lizenz gelöscht." -msgstr[1] "%d Lizenzen gelöscht." - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1202 -#, php-format -msgid "%d license extended." -msgid_plural "%d licenses extended." -msgstr[0] "%d Lizenz verlängert." -msgstr[1] "%d Lizenzen verlängert." - -#: src/Admin/OrderLicenseController.php:529 -#, php-format -msgid "%d license generated successfully." -msgid_plural "%d licenses generated successfully." -msgstr[0] "%d Lizenz erfolgreich generiert." -msgstr[1] "%d Lizenzen erfolgreich generiert." - -#. translators: %d: number of licenses imported -#: src/Admin/AdminController.php:1223 -#, php-format -msgid "%d license imported." -msgid_plural "%d licenses imported." -msgstr[0] "%d Lizenz importiert." -msgstr[1] "%d Lizenzen importiert." - -#: src/Admin/AdminController.php:1006 -#, php-format -msgid "%d license is expiring within the next 30 days." -msgid_plural "%d licenses are expiring within the next 30 days." -msgstr[0] "%d Lizenz läuft innerhalb der nächsten 30 Tage ab." -msgstr[1] "%d Lizenzen laufen innerhalb der nächsten 30 Tage ab." - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1186 -#, php-format -msgid "%d license revoked." -msgid_plural "%d licenses revoked." -msgstr[0] "%d Lizenz widerrufen." -msgstr[1] "%d Lizenzen widerrufen." - -#: src/Admin/OrderLicenseController.php:293 -#, php-format -msgid "%d licensed product is missing a license." -msgid_plural "%d licensed products are missing licenses." -msgstr[0] "%d lizenziertes Produkt hat keine Lizenz." -msgstr[1] "%d lizenzierte Produkte haben keine Lizenzen." - -#. translators: %d: number of licenses skipped -#: src/Admin/AdminController.php:1238 -#, php-format -msgid "%d skipped." -msgid_plural "%d skipped." -msgstr[0] "%d übersprungen." -msgstr[1] "%d übersprungen." - -#. translators: %d: number of licenses updated -#: src/Admin/AdminController.php:1230 -#, php-format -msgid "%d updated." -msgid_plural "%d updated." -msgstr[0] "%d aktualisiert." -msgstr[1] "%d aktualisiert." - -#. translators: %s: WooCommerce plugin name -#: wc-licensed-product.php:61 -#, php-format -msgid "%s requires WooCommerce to be installed and active." -msgstr "%s benötigt WooCommerce als installierte und aktivierte Erweiterung." - -#: src/Frontend/AccountController.php:435 -msgid "API Verification Secret" -msgstr "API-Verifizierungs-Secret" - -#: src/Admin/OrderLicenseController.php:208 -#: src/Admin/VersionAdminController.php:138 src/Admin/AdminController.php:1362 -#: src/Admin/AdminController.php:1513 -msgid "Actions" -msgstr "Aktionen" - -#: src/Admin/VersionAdminController.php:184 -#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1337 -#: src/Admin/AdminController.php:1522 -msgid "Activate" -msgstr "Aktivieren" +#: src/Admin/DashboardWidgetController.php:113 +#: src/Admin/AdminController.php:964 +msgid "Total Licenses" +msgstr "Lizenzen insgesamt" #: src/Admin/DashboardWidgetController.php:117 #: src/Admin/VersionAdminController.php:178 @@ -159,429 +32,9 @@ msgstr "Aktivieren" msgid "Active" msgstr "Aktiv" -#: src/Admin/VersionAdminController.php:74 -msgid "Add New Version" -msgstr "Neue Version hinzufügen" - -#: src/Admin/VersionAdminController.php:120 -msgid "Add Version" -msgstr "Version hinzufügen" - -#: src/Email/LicenseExpirationEmail.php:329 -#: src/Email/LicenseExpiredEmail.php:316 -msgid "Additional content" -msgstr "Zusätzlicher Inhalt" - -#: src/Frontend/AccountController.php:337 -msgid "All Domains" -msgstr "Alle Domains" - -#: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:323 -msgid "All Products" -msgstr "Alle Produkte" - -#: src/Admin/AdminController.php:1295 -msgid "All Statuses" -msgstr "Alle Status" - -#: src/Admin/OrderLicenseController.php:542 -msgid "All licenses already exist for this order." -msgstr "Alle Lizenzen für diese Bestellung existieren bereits." - -#: src/Admin/SettingsController.php:260 -msgid "" -"Allow customers to purchase multiple licenses for different domains at once. " -"Each unit in cart quantity requires a unique domain." -msgstr "" -"Ermöglicht Kunden, mehrere Lizenzen für verschiedene Domains auf einmal zu " -"kaufen. Jede Einheit in der Warenkorbmenge erfordert eine eindeutige Domain." - -#: src/Admin/AdminController.php:1770 -msgid "An error occurred during import." -msgstr "Beim Import ist ein Fehler aufgetreten." - -#: src/Admin/VersionAdminController.php:231 -msgid "An error occurred. Please try again." -msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut." - -#: src/Admin/AdminController.php:1345 src/Admin/AdminController.php:1530 -msgid "Apply" -msgstr "Anwenden" - -#: src/Admin/AdminController.php:1491 -msgid "Are you sure you want to delete this license?" -msgstr "Sind Sie sicher, dass Sie diese Lizenz löschen möchten?" - -#: src/Admin/VersionAdminController.php:228 -msgid "Are you sure you want to delete this version?" -msgstr "Sind Sie sicher, dass Sie diese Version löschen möchten?" - -#: src/Admin/AdminController.php:162 -msgid "" -"Are you sure you want to revoke this license? This action cannot be undone." -msgstr "" -"Sind Sie sicher, dass Sie diese Lizenz widerrufen möchten? Diese Aktion kann " -"nicht rückgängig gemacht werden." - -#: src/Frontend/AccountController.php:590 -msgid "" -"Are you sure you want to transfer this license to a new domain? This action " -"cannot be undone." -msgstr "" -"Sind Sie sicher, dass Sie diese Lizenz auf eine neue Domain übertragen " -"möchten? Diese Aktion kann nicht rückgängig gemacht werden." - -#: src/Admin/AdminController.php:1482 -msgid "Are you sure?" -msgstr "Sind Sie sicher?" - -#: src/Product/VersionManager.php:166 -msgid "Attachment file not found." -msgstr "Anhangs-Datei nicht gefunden." - -#: src/Admin/AdminController.php:1001 -msgid "Attention:" -msgstr "Achtung:" - -#: src/Admin/SettingsController.php:65 src/Admin/SettingsController.php:174 -msgid "Auto-Updates" -msgstr "Auto-Updates" - -#: src/Admin/SettingsController.php:187 -msgid "Automatically Install Updates" -msgstr "Updates automatisch installieren" - -#: src/Admin/SettingsController.php:191 -msgid "" -"Automatically install updates when they become available (requires update " -"notifications enabled)." -msgstr "" -"Updates automatisch installieren, wenn sie verfügbar werden (erfordert " -"aktivierte Update-Benachrichtigungen)." - -#: src/Frontend/AccountController.php:457 -msgid "Available Downloads" -msgstr "Verfügbare Downloads" - -#. translators: %s: list of placeholders -#: src/Email/LicenseExpirationEmail.php:301 -#: src/Email/LicenseExpiredEmail.php:288 -#, php-format -msgid "Available placeholders: %s" -msgstr "Verfügbare Platzhalter: %s" - -#: src/Admin/AdminController.php:1736 -msgid "Back to Licenses" -msgstr "Zurück zu Lizenzen" - -#: src/Admin/SettingsController.php:251 src/Product/LicensedProductType.php:238 -msgid "Bind to Major Version" -msgstr "An Hauptversion binden" - -#: src/Admin/AdminController.php:1336 src/Admin/AdminController.php:1521 -msgid "Bulk Actions" -msgstr "Massenaktionen" - -#: src/Admin/AdminController.php:1827 -msgid "CSV File" -msgstr "CSV-Datei" - -#: src/Admin/AdminController.php:1798 -msgid "CSV Format" -msgstr "CSV-Format" - -#: src/Admin/OrderLicenseController.php:244 src/Admin/AdminController.php:164 -#: src/Admin/AdminController.php:1405 src/Admin/AdminController.php:1425 -#: src/Admin/AdminController.php:1446 src/Admin/AdminController.php:1601 -#: src/Frontend/AccountController.php:548 -msgid "Cancel" -msgstr "Abbrechen" - -#: src/Admin/SettingsController.php:197 -msgid "Check Frequency (Hours)" -msgstr "Prüfhäufigkeit (Stunden)" - -#: src/Admin/SettingsController.php:182 -msgid "" -"Check for and display available updates from the license server in WordPress " -"admin." -msgstr "" -"Verfügbare Updates vom Lizenzserver prüfen und im WordPress-Admin anzeigen." - -#: src/Admin/VersionAdminController.php:98 -msgid "Checksum File" -msgstr "Prüfsummendatei" - -#: src/Email/LicenseExpirationEmail.php:340 -#: src/Email/LicenseExpiredEmail.php:327 -msgid "Choose which format of email to send." -msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." - -#: src/Admin/AdminController.php:1312 src/Frontend/AccountController.php:350 -msgid "Clear" -msgstr "Zurücksetzen" - -#: src/Admin/AdminController.php:1572 src/Frontend/AccountController.php:526 -msgid "Close" -msgstr "Schliessen" - -#: src/Plugin.php:355 -msgid "Configure License" -msgstr "Lizenz konfigurieren" - -#: src/Admin/SettingsController.php:176 -msgid "Configure automatic plugin updates from the license server." -msgstr "Automatische Plugin-Updates vom Lizenzserver konfigurieren." - -#: src/Admin/SettingsController.php:132 -msgid "" -"Configure the license for this plugin. A valid license is required for " -"frontend features to work." -msgstr "" -"Konfigurieren Sie die Lizenz für dieses Plugin. Eine gültige Lizenz ist " -"erforderlich, damit die Frontend-Funktionen funktionieren." - -#. translators: %s: URL to WooCommerce email settings -#: src/Admin/SettingsController.php:282 -#, php-format -msgid "" -"Configure when expiration warning emails are sent. To customize the email " -"template, enable/disable, or change the subject, go to %s." -msgstr "" -"Konfigurieren Sie, wann Ablaufwarnungs-E-Mails gesendet werden. Um die E-" -"Mail-Vorlage anzupassen, zu aktivieren/deaktivieren oder den Betreff zu " -"ändern, gehen Sie zu %s." - -#: src/Admin/AdminController.php:167 src/Frontend/AccountController.php:586 -msgid "Copied!" -msgstr "Kopiert!" - -#: src/Admin/AdminController.php:168 src/Frontend/AccountController.php:587 -msgid "Copy failed" -msgstr "Kopieren fehlgeschlagen" - -#: src/Admin/AdminController.php:1378 src/Frontend/AccountController.php:404 -#: src/Frontend/AccountController.php:444 -msgid "Copy to clipboard" -msgstr "In Zwischenablage kopieren" - -#: src/License/PluginLicenseChecker.php:168 -msgid "Could not connect to license server." -msgstr "Verbindung zum Lizenzserver konnte nicht hergestellt werden." - -#: src/Admin/AdminController.php:1360 src/Admin/AdminController.php:1511 -msgid "Created" -msgstr "Erstellt" - -#: src/Admin/AdminController.php:1588 src/Frontend/AccountController.php:532 -msgid "Current Domain" -msgstr "Aktuelle Domain" - -#: src/Admin/AdminController.php:1357 src/Admin/AdminController.php:1508 -#: src/Email/LicenseExpirationEmail.php:104 -#: src/Email/LicenseExpiredEmail.php:96 -msgid "Customer" -msgstr "Kunde" - -#: src/Admin/SettingsController.php:291 -msgid "Days before expiration to send the first warning email." -msgstr "Tage vor Ablauf, um die erste Warn-E-Mail zu senden." - -#: src/Admin/SettingsController.php:302 -msgid "" -"Days before expiration to send the second warning email. Set to 0 to disable." -msgstr "" -"Tage vor Ablauf, um die zweite Warn-E-Mail zu senden. Setzen Sie auf 0, um " -"sie zu deaktivieren." - -#: src/Admin/VersionAdminController.php:184 -#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1338 -#: src/Admin/AdminController.php:1523 -msgid "Deactivate" -msgstr "Deaktivieren" - -#: src/Admin/SettingsController.php:222 -msgid "Default License Settings" -msgstr "Standard Lizenz-Einstellungen" - -#: src/Admin/SettingsController.php:66 -msgid "Default Settings" -msgstr "Standardeinstellungen" - -#: src/Admin/SettingsController.php:230 -msgid "Default maximum number of domain activations per license." -msgstr "Standard maximale Anzahl der Domain-Aktivierungen pro Lizenz." - -#: src/Admin/SettingsController.php:241 -msgid "" -"Default number of days a license is valid. Leave empty or set to 0 for " -"lifetime licenses." -msgstr "" -"Standard Anzahl Tage, die eine Lizenz gültig ist. Leer lassen oder auf 0 " -"setzen für lebenslange Lizenzen." - -#: src/Admin/VersionAdminController.php:187 -#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1343 -#: src/Admin/AdminController.php:1492 src/Admin/AdminController.php:1528 -msgid "Delete" -msgstr "Löschen" - -#: src/Admin/OrderLicenseController.php:205 src/Admin/AdminController.php:1358 -#: src/Admin/AdminController.php:1509 src/Admin/AdminController.php:1559 -#: src/Checkout/CheckoutBlocksIntegration.php:132 -#: src/Checkout/CheckoutController.php:164 -#: src/Frontend/AccountController.php:335 -#: src/Email/LicenseEmailController.php:288 -msgid "Domain" -msgstr "Domain" - -#: src/Admin/OrderLicenseController.php:437 src/Admin/AdminController.php:327 -msgid "Domain cannot be empty." -msgstr "Domain darf nicht leer sein." - -#: src/Checkout/StoreApiExtension.php:120 -msgid "Domain for license activation" -msgstr "Domain für Lizenz-Aktivierung" - -#: src/Admin/AdminController.php:338 -msgid "Domain updated successfully." -msgstr "Domain erfolgreich aktualisiert." - -#: src/Email/LicenseExpirationEmail.php:215 -#: src/Email/LicenseExpirationEmail.php:271 -#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 -#: src/Email/LicenseEmailController.php:345 -msgid "Domain:" -msgstr "Domain:" - -#: src/Checkout/StoreApiExtension.php:93 -msgid "Domains for license activation by product" -msgstr "Domains für Lizenz-Aktivierung nach Produkt" - -#: src/Admin/OrderLicenseController.php:113 -msgid "Domains specified during checkout (multi-domain order)." -msgstr "Bei der Bestellung angegebene Domains (Multi-Domain-Bestellung)." - -#: src/Frontend/DownloadController.php:81 -#: src/Frontend/DownloadController.php:91 -#: src/Frontend/DownloadController.php:105 -#: src/Frontend/DownloadController.php:120 -#: src/Frontend/DownloadController.php:130 -#: src/Frontend/DownloadController.php:140 -#: src/Frontend/DownloadController.php:149 -#: src/Frontend/DownloadController.php:159 -#: src/Frontend/DownloadController.php:168 -#: src/Frontend/DownloadController.php:177 -#: src/Frontend/DownloadController.php:199 -#: src/Frontend/DownloadController.php:215 -msgid "Download Error" -msgstr "Download-Fehler" - -#: src/Admin/VersionAdminController.php:84 -#: src/Admin/VersionAdminController.php:133 -msgid "Download File" -msgstr "Download-Datei" - -#: src/Admin/DownloadWidgetController.php:46 -msgid "Download Statistics" -msgstr "Download-Statistiken" - -#: src/Frontend/DownloadController.php:214 -msgid "Download file not found." -msgstr "Download-Datei nicht gefunden." - -#: src/Checkout/CheckoutBlocksIntegration.php:130 -msgid "Each license requires a unique domain." -msgstr "Jede Lizenz erfordert eine eindeutige Domain." - -#: src/Admin/AdminController.php:163 src/Admin/AdminController.php:1399 -#: src/Admin/AdminController.php:1414 src/Admin/AdminController.php:1440 -msgid "Edit" -msgstr "Bearbeiten" - -#: src/Admin/OrderLicenseController.php:237 -msgid "Edit domain" -msgstr "Domain bearbeiten" - -#: src/Email/LicenseExpirationEmail.php:321 -#: src/Email/LicenseExpiredEmail.php:308 -msgid "Email heading" -msgstr "E-Mail-Überschrift" - -#: src/Email/LicenseExpirationEmail.php:338 -#: src/Email/LicenseExpiredEmail.php:325 -msgid "Email type" -msgstr "E-Mail-Typ" - -#: src/Admin/SettingsController.php:190 -msgid "Enable \"Update Notifications\" above to use this option." -msgstr "" -"Aktivieren Sie \"Update-Benachrichtigungen\" oben, um diese Option zu " -"verwenden." - -#: src/Admin/SettingsController.php:258 -msgid "Enable Multi-Domain Licensing" -msgstr "Multi-Domain-Lizenzierung aktivieren" - -#: src/Admin/SettingsController.php:180 -msgid "Enable Update Notifications" -msgstr "Update-Benachrichtigungen aktivieren" - -#: src/Email/LicenseExpirationEmail.php:309 -#: src/Email/LicenseExpiredEmail.php:296 -msgid "Enable this email notification" -msgstr "Diese E-Mail-Benachrichtigung aktivieren" - -#: src/Email/LicenseExpirationEmail.php:307 -#: src/Email/LicenseExpiredEmail.php:294 -msgid "Enable/Disable" -msgstr "Aktivieren/Deaktivieren" - -#: src/Checkout/CheckoutBlocksIntegration.php:124 -#: src/Checkout/CheckoutController.php:192 -msgid "Enter a unique domain for each license (without http:// or www)." -msgstr "" -"Geben Sie für jede Lizenz eine eindeutige Domain ein (ohne http:// oder www)." - -#: src/Checkout/CheckoutBlocksIntegration.php:86 -msgid "Enter a valid domain (without http:// or www)" -msgstr "Geben Sie eine gültige Domain ein (ohne http:// oder www)" - -#: src/Checkout/CheckoutBlocksIntegration.php:125 -#: src/Checkout/CheckoutController.php:176 -msgid "" -"Enter the domain where you will use the license (without http:// or www)." -msgstr "" -"Geben Sie die Domain ein, auf der Sie die Lizenz verwenden möchten (ohne " -"http:// oder www)." - -#: src/Admin/AdminController.php:1595 src/Frontend/AccountController.php:541 -msgid "Enter the new domain without http:// or www." -msgstr "Geben Sie die neue Domain ohne http:// oder www ein." - -#: src/Admin/AdminController.php:1682 -msgid "Error Code" -msgstr "Fehlercode" - -#: src/Admin/AdminController.php:1752 -msgid "Error reading file. Please check the file format." -msgstr "Fehler beim Lesen der Datei. Bitte überprüfen Sie das Dateiformat." - -#: src/Admin/AdminController.php:1746 -msgid "Error uploading file. Please try again." -msgstr "Fehler beim Hochladen der Datei. Bitte versuchen Sie es erneut." - -#: src/Admin/OrderLicenseController.php:372 -msgid "Error. Please try again." -msgstr "Fehler. Bitte versuchen Sie es erneut." - -#: src/Admin/VersionAdminController.php:128 -msgid "Existing Versions" -msgstr "Vorhandene Versionen" - -#: src/Admin/SettingsController.php:278 -msgid "Expiration Warning Schedule" -msgstr "Ablaufwarnung Zeitplan" +#: src/Admin/DashboardWidgetController.php:121 +msgid "Expiring Soon" +msgstr "Bald ablaufend" #: src/Admin/DashboardWidgetController.php:125 #: src/Admin/AdminController.php:173 src/Admin/AdminController.php:985 @@ -590,560 +43,104 @@ msgstr "Ablaufwarnung Zeitplan" msgid "Expired" msgstr "Abgelaufen" -#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 -msgid "Expired License Details" -msgstr "Details der abgelaufenen Lizenz" +#: src/Admin/DashboardWidgetController.php:132 +msgid "Time-limited" +msgstr "Zeitbegrenzt" -#: src/Frontend/AccountController.php:651 -msgid "Expired licenses cannot be transferred." -msgstr "Abgelaufene Lizenzen können nicht übertragen werden." +#: src/Admin/DashboardWidgetController.php:136 +#: src/Admin/OrderLicenseController.php:260 +#: src/Admin/SettingsController.php:246 src/Admin/AdminController.php:166 +#: src/Admin/AdminController.php:281 src/Admin/AdminController.php:1437 +#: src/Admin/AdminController.php:1676 +#: src/Product/LicensedProductVariation.php:194 +#: src/Product/LicensedProductType.php:184 +#: src/Product/LicensedProductType.php:232 +#: src/Product/LicensedProductType.php:544 +#: src/Frontend/AccountController.php:427 +msgid "Lifetime" +msgstr "Lebenslang" -#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 -msgid "Expired on:" -msgstr "Abgelaufen am:" +#: src/Admin/DashboardWidgetController.php:142 +msgid "View All Licenses" +msgstr "Alle Lizenzen anzeigen" -#: src/Admin/OrderLicenseController.php:207 src/Admin/AdminController.php:1361 -#: src/Admin/AdminController.php:1512 src/Admin/AdminController.php:1674 -#: src/Admin/AdminController.php:1676 src/Email/LicenseEmailController.php:289 -msgid "Expires" -msgstr "Läuft ab" +#: src/Admin/DownloadWidgetController.php:46 +msgid "Download Statistics" +msgstr "Download-Statistiken" -#: src/Admin/AdminController.php:1815 -msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"." -msgstr "Ablaufdatum sollte im Format JJJJ-MM-TT oder \"Lifetime\" sein." +#: src/Admin/DownloadWidgetController.php:140 +msgid "Total Downloads" +msgstr "Gesamte Downloads" -#: src/Email/LicenseExpirationEmail.php:219 -#: src/Email/LicenseExpirationEmail.php:272 -#: src/Email/LicenseEmailController.php:347 -msgid "Expires:" -msgstr "Läuft ab:" +#: src/Admin/DownloadWidgetController.php:145 +msgid "Top Products" +msgstr "Top-Produkte" -#: src/Admin/DashboardWidgetController.php:121 -msgid "Expiring Soon" -msgstr "Bald ablaufend" +#: src/Admin/DownloadWidgetController.php:159 +#: src/Admin/DownloadWidgetController.php:180 +msgid "No downloads yet" +msgstr "Noch keine Downloads" -#: src/Admin/AdminController.php:296 -msgid "Expiry date updated successfully." -msgstr "Ablaufdatum erfolgreich aktualisiert." +#: src/Admin/DownloadWidgetController.php:163 +msgid "Top Versions" +msgstr "Top-Versionen" -#: src/Admin/AdminController.php:1267 -msgid "Export CSV" -msgstr "CSV exportieren" +#: src/Admin/OrderLicenseController.php:57 +msgid "Product Licenses" +msgstr "Produktlizenzen" -#: src/Admin/AdminController.php:1028 -msgid "Export to CSV" -msgstr "Als CSV exportieren" +#: src/Admin/OrderLicenseController.php:78 +#: src/Admin/OrderLicenseController.php:399 +#: src/Admin/OrderLicenseController.php:501 +msgid "Order not found." +msgstr "Bestellung nicht gefunden." -#: src/Admin/AdminController.php:1342 src/Admin/AdminController.php:1527 -msgid "Extend 1 year" -msgstr "1 Jahr verlängern" +#: src/Admin/OrderLicenseController.php:93 +msgid "This order does not contain licensed products." +msgstr "Diese Bestellung enthält keine lizensierten Produkte." -#: src/Admin/AdminController.php:1340 src/Admin/AdminController.php:1525 -msgid "Extend 30 days" -msgstr "30 Tage verlängern" +#: src/Admin/OrderLicenseController.php:109 +msgid "Order Domains" +msgstr "Bestellungs-Domains" -#: src/Admin/AdminController.php:1341 src/Admin/AdminController.php:1526 -msgid "Extend 90 days" -msgstr "90 Tage verlängern" +#: src/Admin/OrderLicenseController.php:113 +msgid "Domains specified during checkout (multi-domain order)." +msgstr "Bei der Bestellung angegebene Domains (Multi-Domain-Bestellung)." -#: src/Admin/AdminController.php:1470 -msgid "Extend by 30 days" -msgstr "Um 30 Tage verlängern" +#: src/Admin/OrderLicenseController.php:119 src/Admin/AdminController.php:403 +#: src/Checkout/CheckoutController.php:534 +#: src/Checkout/CheckoutController.php:595 +#: src/Checkout/CheckoutController.php:617 src/License/LicenseManager.php:886 +#: src/Product/VersionManager.php:349 src/Product/VersionManager.php:361 +#: src/Frontend/AccountController.php:190 +#: src/Frontend/AccountController.php:232 +#: src/Email/LicenseExpirationEmail.php:107 +#: src/Email/LicenseExpiredEmail.php:99 +msgid "Unknown Product" +msgstr "Unbekanntes Produkt" -#: src/Api/RestApiController.php:324 -msgid "Failed to activate license." -msgstr "Lizenz konnte nicht aktiviert werden." - -#: src/Admin/VersionAdminController.php:303 -msgid "Failed to create version." -msgstr "Version konnte nicht erstellt werden." - -#: src/Admin/VersionAdminController.php:337 -msgid "Failed to delete version." -msgstr "Version konnte nicht gelöscht werden." - -#: src/Admin/AdminController.php:866 -#, php-format -msgid "Failed to import license for domain %s" -msgstr "Import der Lizenz für Domain %s fehlgeschlagen" - -#: src/Admin/VersionAdminController.php:235 -msgid "Failed to read checksum file." -msgstr "Prüfsummendatei konnte nicht gelesen werden." - -#: src/Admin/AdminController.php:372 -msgid "Failed to revoke license." -msgstr "Lizenz konnte nicht widerrufen werden." - -#: src/Admin/AdminController.php:1696 -msgid "Failed to test license. Please try again." -msgstr "Lizenztest fehlgeschlagen. Bitte versuchen Sie es erneut." - -#: src/Frontend/AccountController.php:668 -msgid "Failed to transfer license. Please try again." -msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut." - -#: src/Admin/AdminController.php:1210 -msgid "Failed to transfer license. The license may be revoked or invalid." -msgstr "" -"Lizenzübertragung fehlgeschlagen. Die Lizenz könnte widerrufen oder ungültig " -"sein." - -#: src/Admin/AdminController.php:342 -msgid "Failed to update domain." -msgstr "Domain konnte nicht aktualisiert werden." - -#: src/Admin/AdminController.php:284 src/Admin/AdminController.php:301 -msgid "Failed to update expiry date." -msgstr "Ablaufdatum konnte nicht aktualisiert werden." - -#: src/Admin/OrderLicenseController.php:461 -msgid "Failed to update license domain." -msgstr "Lizenz-Domain konnte nicht aktualisiert werden." - -#: src/Admin/AdminController.php:252 -msgid "Failed to update status." -msgstr "Status konnte nicht aktualisiert werden." - -#: src/Admin/VersionAdminController.php:364 -msgid "Failed to update version." -msgstr "Version konnte nicht aktualisiert werden." - -#. translators: 1: provided hash, 2: calculated hash -#: src/Product/VersionManager.php:177 -#, php-format -msgid "File checksum does not match. Expected: %1$s, Got: %2$s" -msgstr "Datei-Prüfsumme stimmt nicht überein. Erwartet: %1$s, Erhalten: %2$s" - -#. translators: %s: max file size -#: src/Admin/AdminController.php:1757 -#, php-format -msgid "File too large. Maximum size is %s." -msgstr "Datei zu gross. Maximale Grösse ist %s." - -#: src/Admin/AdminController.php:1309 src/Frontend/AccountController.php:348 -msgid "Filter" -msgstr "Filtern" - -#: src/Admin/SettingsController.php:289 -msgid "First Warning (Days Before)" -msgstr "Erste Warnung (Tage vorher)" - -#. translators: %s: Link to licenses page -#: src/Admin/OrderLicenseController.php:280 -#, php-format -msgid "For more actions (revoke, extend, delete), go to the %s page." -msgstr "" -"Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite " -"%s." - -#: src/Admin/AdminController.php:1804 -msgid "Full Format (from Export):" -msgstr "Vollständiges Format (vom Export):" - -#: src/Admin/OrderLicenseController.php:188 -msgid "Generate Licenses" -msgstr "Lizenzen generieren" - -#: src/Admin/OrderLicenseController.php:302 -msgid "Generate Missing Licenses" -msgstr "Fehlende Lizenzen generieren" - -#: src/Admin/OrderLicenseController.php:374 -msgid "Generating..." -msgstr "Generiere..." - -#: src/Admin/AdminController.php:211 src/Admin/AdminController.php:1087 -msgid "Guest" -msgstr "Gast" - -#: src/Email/LicenseExpirationEmail.php:176 -#: src/Email/LicenseExpirationEmail.php:246 -#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 -#, php-format -msgid "Hello %s," -msgstr "Guten Tag %s," - -#: src/Admin/SettingsController.php:199 -msgid "How often to check for updates (in hours)." -msgstr "Wie oft auf Updates geprüft werden soll (in Stunden)." - -#: src/Admin/SettingsController.php:253 +#: src/Admin/OrderLicenseController.php:129 msgid "" -"If enabled, licenses are bound to the major version at purchase time by " -"default." +"The domain specified during checkout. Changing this will not automatically " +"update existing license domains." msgstr "" -"Falls aktiviert, werden Lizenzen standardmässig an die Hauptversion zum " -"Kaufzeitpunkt gebunden." - -#. translators: %s: default bind to version value (Yes/No) -#: src/Product/LicensedProductType.php:241 -#, php-format -msgid "" -"If enabled, licenses are bound to the major version at purchase time. " -"Default: %s" -msgstr "" -"Falls aktiviert, werden Lizenzen an die Hauptversion zum Kaufzeitpunkt " -"gebunden. Standard: %s" - -#: src/Admin/AdminController.php:1847 -msgid "" -"If enabled, licenses with matching keys will be updated instead of skipped." -msgstr "" -"Falls aktiviert, werden Lizenzen mit übereinstimmenden Schlüsseln " -"aktualisiert statt übersprungen." - -#: src/Admin/SettingsController.php:154 -msgid "" -"If the license server uses signed responses, enter the shared secret here " -"for enhanced security." -msgstr "" -"Falls der Lizenzserver signierte Antworten verwendet, geben Sie hier das " -"gemeinsame Secret für erhöhte Sicherheit ein." - -#: src/Admin/AdminController.php:1271 -msgid "Import CSV" -msgstr "CSV importieren" - -#: src/Admin/AdminController.php:1734 src/Admin/AdminController.php:1856 -msgid "Import Licenses" -msgstr "Lizenzen importieren" - -#: src/Admin/AdminController.php:1792 -msgid "Import Licenses from CSV" -msgstr "Lizenzen aus CSV importieren" - -#. translators: %1$s: max file size, %2$d: max rows, %3$d: rate limit minutes -#: src/Admin/AdminController.php:1782 -#, php-format -msgid "" -"Import limits: Maximum file size %1$s, maximum %2$d rows per import. You can " -"import again after %3$d minutes." -msgstr "" -"Import-Limits: Maximale Dateigrösse %1$s, maximal %2$d Zeilen pro Import. " -"Sie können nach %3$d Minuten erneut importieren." - -#. translators: %1$d: max rows, %2$d: imported count, %3$d: updated count -#: src/Admin/AdminController.php:729 -#, php-format -msgid "" -"Import stopped: Maximum of %1$d rows allowed. %2$d imported, %3$d updated." -msgstr "" -"Import gestoppt: Maximal %1$d Zeilen erlaubt. %2$d importiert, %3$d " -"aktualisiert." - -#: src/Admin/VersionAdminController.php:178 -#: src/Admin/VersionAdminController.php:410 src/Admin/AdminController.php:172 -#: src/Admin/AdminController.php:978 src/Admin/AdminController.php:1297 -#: src/Admin/AdminController.php:1420 -msgid "Inactive" -msgstr "Inaktiv" - -#: src/Admin/SettingsController.php:563 -msgid "Insufficient permissions." -msgstr "Unzureichende Berechtigungen." - -#: src/Admin/VersionAdminController.php:234 -msgid "" -"Invalid checksum file format. File must contain a 64-character SHA256 hash." -msgstr "" -"Ungültiges Prüfsummendateiformat. Die Datei muss einen 64-stelligen SHA256-" -"Hash enthalten." - -#: src/Admin/AdminController.php:304 -msgid "Invalid date format." -msgstr "Ungültiges Datumsformat." - -#: src/Admin/OrderLicenseController.php:405 -#: src/Admin/OrderLicenseController.php:443 -msgid "Invalid domain format." -msgstr "Ungültiges Domain-Format." - -#: src/Frontend/DownloadController.php:90 -msgid "Invalid download link format." -msgstr "Ungültiges Download-Link-Format." - -#: src/Frontend/DownloadController.php:80 -#: src/Frontend/DownloadController.php:104 -msgid "Invalid download link." -msgstr "Ungültiger Download-Link." - -#: src/Admin/AdminController.php:1749 -msgid "Invalid file type. Please upload a CSV file." -msgstr "Ungültiger Dateityp. Bitte laden Sie eine CSV-Datei hoch." - -#: src/Admin/OrderLicenseController.php:433 src/Admin/AdminController.php:235 -#: src/Admin/AdminController.php:271 src/Admin/AdminController.php:323 -#: src/Admin/AdminController.php:360 -msgid "Invalid license ID." -msgstr "Ungültige Lizenz-ID." - -#: src/Frontend/AccountController.php:624 -msgid "Invalid license." -msgstr "Ungültige Lizenz." - -#: src/Admin/OrderLicenseController.php:394 -#: src/Admin/OrderLicenseController.php:496 -msgid "Invalid order ID." -msgstr "Ungültige Bestellungs-ID." - -#: src/Admin/AdminController.php:240 -msgid "Invalid status." -msgstr "Ungültiger Status." - -#: src/Admin/VersionAdminController.php:270 -msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." -msgstr "" -"Ungültiges Versionsformat. Verwenden Sie semantische Versionierung (z.B. " -"1.0.0)." - -#: src/Frontend/AccountController.php:468 -msgid "Latest" -msgstr "Neueste" - -#: src/Admin/AdminController.php:1813 -msgid "Leave License Key empty to auto-generate." -msgstr "Lizenzschlüssel leer lassen für automatische Generierung." - -#: src/Admin/AdminController.php:1444 -msgid "Leave empty for lifetime" -msgstr "Leer lassen für lebenslang" - -#: src/Product/LicensedProductType.php:570 -msgid "Leave empty for parent default." -msgstr "Leer lassen für übergeordneten Standard." - -#: src/Product/LicensedProductType.php:558 -msgid "Leave empty for parent default. 0 = Lifetime." -msgstr "Leer lassen für übergeordneten Standard. 0 = Lebenslang." - -#. translators: %s: URL to settings page -#: src/Product/LicensedProductType.php:193 -#, php-format -msgid "Leave fields empty to use default settings from %s." -msgstr "Felder leer lassen, um Standardeinstellungen von %s zu verwenden." - -#: src/Admin/AdminController.php:1874 -msgid "License" -msgstr "Lizenz" - -#. translators: %d: license number -#: src/Checkout/CheckoutBlocksIntegration.php:131 -#: src/Checkout/CheckoutController.php:227 -#, php-format -msgid "License %d:" -msgstr "Lizenz %d:" - -#: src/Admin/AdminController.php:956 -msgid "License Dashboard" -msgstr "Lizenz-Dashboard" - -#: src/Email/LicenseExpirationEmail.php:197 -#: src/Email/LicenseExpirationEmail.php:266 -msgid "License Details" -msgstr "Lizenzdetails" - -#: src/Checkout/CheckoutBlocksIntegration.php:79 -#: src/Checkout/CheckoutBlocksIntegration.php:128 -#: src/Checkout/CheckoutController.php:161 -msgid "License Domain" -msgstr "Lizenz-Domain" - -#: src/Checkout/CheckoutController.php:504 -#: src/Checkout/CheckoutController.php:565 -#: src/Checkout/CheckoutController.php:569 -msgid "License Domain:" -msgstr "Lizenz-Domain:" - -#: src/Checkout/CheckoutBlocksIntegration.php:127 -#: src/Checkout/CheckoutController.php:190 -msgid "License Domains" -msgstr "Lizenz-Domains" - -#: src/Checkout/CheckoutController.php:517 -#: src/Checkout/CheckoutController.php:582 -#: src/Checkout/CheckoutController.php:603 -msgid "License Domains:" -msgstr "Lizenz-Domains:" - -#: src/Product/LicensedProductType.php:549 -msgid "License Duration (Days)" -msgstr "Lizenz-Gültigkeit (Tage)" - -#: src/Email/LicenseExpirationEmail.php:82 -msgid "License Expiration Notice" -msgstr "Lizenzablauf-Benachrichtigung" - -#: src/Email/LicenseExpirationEmail.php:55 -msgid "License Expiration Warning" -msgstr "Lizenzablauf-Warnung" - -#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 -msgid "License Expired" -msgstr "Lizenz abgelaufen" - -#: src/Admin/OrderLicenseController.php:203 -#: src/Admin/SettingsController.php:144 src/Admin/AdminController.php:1355 -#: src/Admin/AdminController.php:1506 src/Admin/AdminController.php:1555 -#: src/Email/LicenseEmailController.php:287 -msgid "License Key" -msgstr "Lizenzschlüssel" - -#: src/Email/LicenseExpirationEmail.php:207 -#: src/Email/LicenseExpirationEmail.php:270 -#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 -#: src/Email/LicenseEmailController.php:343 -msgid "License Key:" -msgstr "Lizenzschlüssel:" - -#: src/Email/LicenseEmailController.php:212 -#: src/Email/LicenseEmailController.php:220 -msgid "License Keys:" -msgstr "Lizenzschlüssel:" - -#: src/Admin/SettingsController.php:136 -msgid "License Server URL" -msgstr "Lizenzserver-URL" - -#: src/Product/LicensedProductType.php:150 -msgid "License Settings" -msgstr "Lizenz-Einstellungen" - -#: src/Admin/DashboardWidgetController.php:47 -msgid "License Statistics" -msgstr "Lizenzstatistiken" - -#: src/Admin/AdminController.php:1551 -msgid "License Validation Test" -msgstr "Lizenzvalidierungstest" - -#: src/Admin/SettingsController.php:239 src/Product/LicensedProductType.php:220 -msgid "License Validity (Days)" -msgstr "Lizenz-Gültigkeit (Tage)" - -#: src/Api/RestApiController.php:330 -msgid "License activated successfully." -msgstr "Lizenz erfolgreich aktiviert." - -#: src/Admin/AdminController.php:1155 -msgid "License deleted successfully." -msgstr "Lizenz erfolgreich gelöscht." - -#: src/Admin/OrderLicenseController.php:457 -msgid "License domain updated." -msgstr "Lizenz-Domain aktualisiert." - -#: src/Email/LicenseExpirationEmail.php:56 -msgid "" -"License expiration warning emails are sent to customers when their licenses " -"are about to expire." -msgstr "" -"Lizenzablauf-Warnungs-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " -"bald ablaufen." - -#: src/Email/LicenseExpiredEmail.php:51 -msgid "" -"License expired emails are sent to customers when their licenses have " -"expired." -msgstr "" -"Lizenzablauf-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " -"abgelaufen sind." - -#: src/Admin/AdminController.php:1161 -msgid "License extended successfully." -msgstr "Lizenz erfolgreich verlängert." - -#: src/Admin/AdminController.php:1680 -msgid "License is INVALID" -msgstr "Lizenz ist UNGÜLTIG" - -#: src/Admin/AdminController.php:1670 -msgid "License is VALID" -msgstr "Lizenz ist GÜLTIG" - -#: src/Api/RestApiController.php:304 -msgid "License is already activated for this domain." -msgstr "Die Lizenz ist bereits für diese Domain aktiviert." - -#: src/Admin/SettingsController.php:356 -msgid "License is not valid. Frontend features are disabled." -msgstr "Lizenz ist ungültig. Frontend-Funktionen sind deaktiviert." - -#: src/Admin/SettingsController.php:350 -msgid "License is valid and active." -msgstr "Lizenz ist gültig und aktiv." - -#: src/Admin/AdminController.php:391 -msgid "License key and domain are required." -msgstr "Lizenzschlüssel und Domain sind erforderlich." - -#: src/Api/RestApiController.php:253 src/Api/RestApiController.php:286 -#: src/License/LicenseManager.php:483 -msgid "License key not found." -msgstr "Lizenzschlüssel nicht gefunden." - -#: src/Admin/OrderLicenseController.php:449 src/Api/UpdateController.php:197 -#: src/Frontend/AccountController.php:638 -#: src/Frontend/DownloadController.php:129 -msgid "License not found." -msgstr "Lizenz nicht gefunden." - -#: src/Admin/AdminController.php:367 src/Admin/AdminController.php:1158 -msgid "License revoked successfully." -msgstr "Lizenz erfolgreich widerrufen." - -#: src/Admin/AdminController.php:1164 -msgid "License set to lifetime successfully." -msgstr "Lizenz erfolgreich auf lebenslang gesetzt." - -#: src/Admin/AdminController.php:279 -msgid "License set to lifetime." -msgstr "Lizenz auf lebenslang gesetzt." - -#: src/License/PluginLicenseChecker.php:132 -msgid "License settings not configured." -msgstr "Lizenzeinstellungen nicht konfiguriert." - -#: src/Frontend/AccountController.php:588 -#: src/Frontend/AccountController.php:664 -msgid "License transferred successfully!" -msgstr "Lizenz erfolgreich übertragen!" - -#: src/Admin/AdminController.php:1207 -msgid "License transferred to new domain successfully." -msgstr "Lizenz erfolgreich auf neue Domain übertragen." - -#: src/Admin/AdminController.php:1152 -msgid "License updated successfully." -msgstr "Lizenz erfolgreich aktualisiert." - -#: src/Admin/SettingsController.php:574 src/Api/UpdateController.php:186 -msgid "License validation failed." -msgstr "Lizenzvalidierung fehlgeschlagen." - -#: src/Admin/SettingsController.php:572 -msgid "License verified successfully!" -msgstr "Lizenz erfolgreich überprüft!" - -#: src/Product/LicensedProductType.php:94 -msgid "Licensed Product" -msgstr "Lizensiertes Produkt" - -#: src/Admin/SettingsController.php:54 -msgid "Licensed Products" -msgstr "Lizensierte Produkte" - -#: src/Product/LicensedProductType.php:95 -msgid "Licensed Variable Product" -msgstr "Lizensiertes variables Produkt" - -#: src/Api/UpdateController.php:209 -msgid "Licensed product not found." -msgstr "Lizenziertes Produkt nicht gefunden." - -#: src/Product/LicensedProductType.php:514 -msgid "Licensed products are always virtual" -msgstr "Lizenzierte Produkte sind immer virtuell" +"Die bei der Bestellung angegebene Domain. Eine Änderung aktualisiert nicht " +"automatisch bestehende Lizenz-Domains." + +#: src/Admin/OrderLicenseController.php:137 +#: src/Checkout/CheckoutBlocksIntegration.php:84 +#: src/Checkout/CheckoutBlocksIntegration.php:122 +#: src/Checkout/CheckoutController.php:172 +#: src/Checkout/CheckoutController.php:238 +msgid "example.com" +msgstr "beispiel.ch" + +#: src/Admin/OrderLicenseController.php:139 +#: src/Admin/OrderLicenseController.php:241 src/Admin/AdminController.php:165 +#: src/Admin/AdminController.php:1404 src/Admin/AdminController.php:1424 +#: src/Admin/AdminController.php:1445 +msgid "Save" +msgstr "Speichern" #: src/Admin/OrderLicenseController.php:149 #: src/Admin/OrderLicenseController.php:281 src/Admin/AdminController.php:91 @@ -1152,6 +149,10 @@ msgstr "Lizenzierte Produkte sind immer virtuell" msgid "Licenses" msgstr "Lizenzen" +#: src/Admin/OrderLicenseController.php:176 +msgid "No licenses have been generated for this order yet." +msgstr "Für diese Bestellung wurden noch keine Lizenzen generiert." + #: src/Admin/OrderLicenseController.php:179 msgid "" "Licenses should be generated automatically when an order is paid. If " @@ -1167,156 +168,116 @@ msgstr "" "Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen " "markiert wird." -#: src/Admin/DashboardWidgetController.php:136 -#: src/Admin/OrderLicenseController.php:260 -#: src/Admin/SettingsController.php:244 src/Admin/AdminController.php:166 -#: src/Admin/AdminController.php:281 src/Admin/AdminController.php:1437 -#: src/Admin/AdminController.php:1676 -#: src/Product/LicensedProductVariation.php:194 -#: src/Product/LicensedProductType.php:184 -#: src/Product/LicensedProductType.php:232 -#: src/Product/LicensedProductType.php:544 -#: src/Frontend/AccountController.php:427 -msgid "Lifetime" -msgstr "Lebenslang" +#: src/Admin/OrderLicenseController.php:188 +msgid "Generate Licenses" +msgstr "Lizenzen generieren" -#: src/Admin/AdminController.php:1024 -msgid "Manage Licenses" -msgstr "Lizenzen verwalten" - -#: src/Admin/SettingsController.php:228 src/Product/LicensedProductType.php:202 -#: src/Product/LicensedProductType.php:561 -msgid "Max Activations" -msgstr "Max. Aktivierungen" - -#: src/Api/RestApiController.php:313 -msgid "Maximum number of activations reached." -msgstr "Maximale Anzahl der Aktivierungen erreicht." - -#. translators: %d: default max activations value -#: src/Product/LicensedProductType.php:205 -#, php-format -msgid "Maximum number of domain activations per license. Default: %d" -msgstr "Maximale Anzahl der Domain-Aktivierungen pro Lizenz. Standard: %d" - -#: src/Admin/AdminController.php:1683 -msgid "Message" -msgstr "Meldung" - -#: src/Product/LicensedProductVariation.php:198 -msgid "Monthly" -msgstr "Monatlich" - -#: src/Email/LicenseEmailController.php:308 -#: src/Email/LicenseEmailController.php:352 -msgid "Never" -msgstr "Nie" - -#: src/Admin/AdminController.php:1592 src/Frontend/AccountController.php:537 -msgid "New Domain" -msgstr "Neue Domain" - -#: src/Product/LicensedProductType.php:242 -msgid "No" -msgstr "Nein" - -#: src/Admin/AdminController.php:1933 -msgid "No domain specified" -msgstr "Keine Domain angegeben" - -#: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:397 -msgid "No download file" -msgstr "Keine Download-Datei" - -#: src/Frontend/DownloadController.php:198 -msgid "No download file available for this version." -msgstr "Keine Download-Datei für diese Version verfügbar." - -#: src/Admin/DownloadWidgetController.php:159 -#: src/Admin/DownloadWidgetController.php:180 -msgid "No downloads yet" -msgstr "Noch keine Downloads" - -#: src/Admin/AdminController.php:156 -msgid "No licenses found" -msgstr "Keine Lizenzen gefunden" - -#: src/Frontend/AccountController.php:361 -msgid "No licenses found matching your filters." -msgstr "Keine Lizenzen gefunden, die Ihren Filtern entsprechen." - -#: src/Admin/AdminController.php:1368 -msgid "No licenses found." -msgstr "Keine Lizenzen gefunden." - -#: src/Admin/OrderLicenseController.php:176 -msgid "No licenses have been generated for this order yet." -msgstr "Für diese Bestellung wurden noch keine Lizenzen generiert." - -#: src/Admin/AdminController.php:1213 -msgid "No licenses to export." -msgstr "Keine Lizenzen zum Exportieren." - -#: src/Api/UpdateController.php:221 -msgid "No versions available for this product." -msgstr "Keine Versionen für dieses Produkt verfügbar." - -#: src/Admin/VersionAdminController.php:144 -msgid "No versions found. Add your first version above." -msgstr "Keine Versionen gefunden. Fügen Sie Ihre erste Version oben hinzu." - -#: src/Admin/AdminController.php:1812 -msgid "Notes:" -msgstr "Hinweise:" - -#: src/Admin/SettingsController.php:67 -msgid "Notifications" -msgstr "Benachrichtigungen" - -#. translators: %s: default validity value -#: src/Product/LicensedProductType.php:223 -#, php-format -msgid "Number of days the license is valid. Leave empty for default (%s)." -msgstr "Anzahl Tage, die die Lizenz gültig ist. Leer lassen für Standard (%s)." - -#: src/Frontend/AccountController.php:488 -#, php-format -msgid "Older versions (%d)" -msgstr "Ältere Versionen (%d)" - -#: src/Admin/AdminController.php:1835 -msgid "Options" -msgstr "Optionen" - -#. translators: %s: order number -#: src/Frontend/AccountController.php:386 -#, php-format -msgid "Order #%s" -msgstr "Bestellung #%s" - -#: src/Admin/OrderLicenseController.php:109 -msgid "Order Domains" -msgstr "Bestellungs-Domains" - -#: src/Admin/OrderLicenseController.php:413 -msgid "Order domain updated." -msgstr "Bestellungs-Domain aktualisiert." - -#: src/Admin/OrderLicenseController.php:506 -msgid "Order must be paid before licenses can be generated." +#: src/Admin/OrderLicenseController.php:196 +msgid "Please set the order domain above before generating licenses." msgstr "" -"Die Bestellung muss bezahlt sein, bevor Lizenzen generiert werden können." +"Bitte legen Sie zuerst die Bestellungs-Domain oben fest, bevor Sie Lizenzen " +"generieren." -#: src/Admin/OrderLicenseController.php:78 -#: src/Admin/OrderLicenseController.php:399 -#: src/Admin/OrderLicenseController.php:501 -msgid "Order not found." -msgstr "Bestellung nicht gefunden." +#: src/Admin/OrderLicenseController.php:203 +#: src/Admin/SettingsController.php:146 src/Admin/AdminController.php:1355 +#: src/Admin/AdminController.php:1506 src/Admin/AdminController.php:1555 +#: src/Email/LicenseEmailController.php:287 +msgid "License Key" +msgstr "Lizenzschlüssel" -#: src/Admin/AdminController.php:108 -msgid "Overview" -msgstr "Übersicht" +#: src/Admin/OrderLicenseController.php:204 src/Admin/AdminController.php:1356 +#: src/Admin/AdminController.php:1507 src/Admin/AdminController.php:1672 +#: src/Frontend/AccountController.php:321 +msgid "Product" +msgstr "Produkt" + +#: src/Admin/OrderLicenseController.php:205 src/Admin/AdminController.php:1358 +#: src/Admin/AdminController.php:1509 src/Admin/AdminController.php:1559 +#: src/Checkout/CheckoutBlocksIntegration.php:132 +#: src/Checkout/CheckoutController.php:164 +#: src/Frontend/AccountController.php:335 +#: src/Email/LicenseEmailController.php:288 +msgid "Domain" +msgstr "Domain" + +#: src/Admin/OrderLicenseController.php:206 +#: src/Admin/VersionAdminController.php:136 src/Admin/AdminController.php:1359 +#: src/Admin/AdminController.php:1510 +msgid "Status" +msgstr "Status" + +#: src/Admin/OrderLicenseController.php:207 src/Admin/AdminController.php:1361 +#: src/Admin/AdminController.php:1512 src/Admin/AdminController.php:1674 +#: src/Admin/AdminController.php:1676 src/Email/LicenseEmailController.php:289 +msgid "Expires" +msgstr "Läuft ab" + +#: src/Admin/OrderLicenseController.php:208 +#: src/Admin/VersionAdminController.php:138 src/Admin/AdminController.php:1362 +#: src/Admin/AdminController.php:1513 +msgid "Actions" +msgstr "Aktionen" + +#: src/Admin/OrderLicenseController.php:227 src/Admin/AdminController.php:210 +#: src/Admin/AdminController.php:1083 +msgid "Unknown" +msgstr "Unbekannt" + +#: src/Admin/OrderLicenseController.php:237 +msgid "Edit domain" +msgstr "Domain bearbeiten" + +#: src/Admin/OrderLicenseController.php:244 src/Admin/AdminController.php:164 +#: src/Admin/AdminController.php:1405 src/Admin/AdminController.php:1425 +#: src/Admin/AdminController.php:1446 src/Admin/AdminController.php:1601 +#: src/Frontend/AccountController.php:548 +msgid "Cancel" +msgstr "Abbrechen" + +#: src/Admin/OrderLicenseController.php:267 +msgid "View in Licenses" +msgstr "In Lizenzen anzeigen" + +#: src/Admin/OrderLicenseController.php:280 +#, php-format +msgid "For more actions (revoke, extend, delete), go to the %s page." +msgstr "" +"Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite " +"%s." + +#: src/Admin/OrderLicenseController.php:293 +#, php-format +msgid "%d licensed product is missing a license." +msgid_plural "%d licensed products are missing licenses." +msgstr[0] "%d lizenziertes Produkt hat keine Lizenz." +msgstr[1] "%d lizenzierte Produkte haben keine Lizenzen." + +#: src/Admin/OrderLicenseController.php:302 +msgid "Generate Missing Licenses" +msgstr "Fehlende Lizenzen generieren" + +#: src/Admin/OrderLicenseController.php:370 src/Admin/AdminController.php:159 +msgid "Saving..." +msgstr "Speichere..." + +#: src/Admin/OrderLicenseController.php:371 +msgid "Saved!" +msgstr "Gespeichert!" + +#: src/Admin/OrderLicenseController.php:372 +msgid "Error. Please try again." +msgstr "Fehler. Bitte versuchen Sie es erneut." + +#: src/Admin/OrderLicenseController.php:373 +#: src/Checkout/CheckoutBlocksIntegration.php:129 +#: src/Frontend/AccountController.php:591 +#: src/Frontend/AccountController.php:632 +msgid "Please enter a valid domain." +msgstr "Bitte geben Sie eine gültige Domain ein." + +#: src/Admin/OrderLicenseController.php:374 +msgid "Generating..." +msgstr "Generiere..." #: src/Admin/OrderLicenseController.php:387 #: src/Admin/OrderLicenseController.php:426 @@ -1330,144 +291,639 @@ msgstr "Übersicht" msgid "Permission denied." msgstr "Zugriff verweigert." -#. translators: 1: product name, 2: license number -#: src/Checkout/CheckoutController.php:359 -#, php-format -msgid "Please enter a domain for %1$s (License %2$d)." -msgstr "Bitte geben Sie eine Domain für %1$s (Lizenz %2$d) ein." +#: src/Admin/OrderLicenseController.php:394 +#: src/Admin/OrderLicenseController.php:496 +msgid "Invalid order ID." +msgstr "Ungültige Bestellungs-ID." -#: src/Checkout/CheckoutController.php:326 -msgid "Please enter a domain for your license." -msgstr "Bitte geben Sie eine Domain für Ihre Lizenz ein." +#: src/Admin/OrderLicenseController.php:405 +#: src/Admin/OrderLicenseController.php:443 +msgid "Invalid domain format." +msgstr "Ungültiges Domain-Format." -#. translators: 1: product name, 2: license number -#: src/Checkout/CheckoutController.php:374 -#, php-format -msgid "Please enter a valid domain for %1$s (License %2$d)." -msgstr "Bitte geben Sie eine gültige Domain für %1$s (Lizenz %2$d) ein." +#: src/Admin/OrderLicenseController.php:413 +msgid "Order domain updated." +msgstr "Bestellungs-Domain aktualisiert." -#: src/Checkout/CheckoutController.php:332 -msgid "Please enter a valid domain for your license." -msgstr "Bitte geben Sie eine gültige Domain für Ihre Lizenz ein." +#: src/Admin/OrderLicenseController.php:433 src/Admin/AdminController.php:235 +#: src/Admin/AdminController.php:271 src/Admin/AdminController.php:323 +#: src/Admin/AdminController.php:360 +msgid "Invalid license ID." +msgstr "Ungültige Lizenz-ID." -#: src/Admin/OrderLicenseController.php:373 -#: src/Checkout/CheckoutBlocksIntegration.php:129 -#: src/Frontend/AccountController.php:591 -#: src/Frontend/AccountController.php:632 -msgid "Please enter a valid domain." -msgstr "Bitte geben Sie eine gültige Domain ein." +#: src/Admin/OrderLicenseController.php:437 src/Admin/AdminController.php:327 +msgid "Domain cannot be empty." +msgstr "Domain darf nicht leer sein." -#: src/Admin/VersionAdminController.php:230 -msgid "Please enter a valid version number (e.g., 1.0.0)." -msgstr "Bitte geben Sie eine gültige Versionsnummer ein (z.B. 1.0.0)." +#: src/Admin/OrderLicenseController.php:449 src/Api/UpdateController.php:209 +#: src/Frontend/DownloadController.php:129 +#: src/Frontend/AccountController.php:638 +msgid "License not found." +msgstr "Lizenz nicht gefunden." -#: src/Admin/VersionAdminController.php:229 -msgid "Please enter a version number." -msgstr "Bitte geben Sie eine Versionsnummer ein." +#: src/Admin/OrderLicenseController.php:457 +msgid "License domain updated." +msgstr "Lizenz-Domain aktualisiert." -#: src/Frontend/AccountController.php:618 -msgid "Please log in to transfer a license." -msgstr "Bitte melden Sie sich an, um eine Lizenz zu übertragen." +#: src/Admin/OrderLicenseController.php:461 +msgid "Failed to update license domain." +msgstr "Lizenz-Domain konnte nicht aktualisiert werden." -#: src/Frontend/AccountController.php:108 -msgid "Please log in to view your licenses." -msgstr "Bitte melden Sie sich an, um Ihre Lizenzen zu sehen." - -#: src/Admin/OrderLicenseController.php:196 -msgid "Please set the order domain above before generating licenses." +#: src/Admin/OrderLicenseController.php:506 +msgid "Order must be paid before licenses can be generated." msgstr "" -"Bitte legen Sie zuerst die Bestellungs-Domain oben fest, bevor Sie Lizenzen " -"generieren." +"Die Bestellung muss bezahlt sein, bevor Lizenzen generiert werden können." #: src/Admin/OrderLicenseController.php:520 msgid "Please set the order domain before generating licenses." msgstr "" "Bitte legen Sie die Bestellungs-Domain fest, bevor Sie Lizenzen generieren." -#. translators: %d: seconds to wait -#: src/Admin/AdminController.php:1765 +#: src/Admin/OrderLicenseController.php:529 #, php-format -msgid "Please wait %d seconds before importing again." -msgstr "Bitte warten Sie %d Sekunden, bevor Sie erneut importieren." +msgid "%d license generated successfully." +msgid_plural "%d licenses generated successfully." +msgstr[0] "%d Lizenz erfolgreich generiert." +msgstr[1] "%d Lizenzen erfolgreich generiert." -#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:130 -msgid "Plugin License" -msgstr "Plugin-Lizenz" - -#: src/Plugin.php:354 -msgid "" -"Plugin license is not configured or invalid. Frontend features are disabled." -msgstr "" -"Plugin-Lizenz ist nicht konfiguriert oder ungültig. Frontend-Funktionen sind " -"deaktiviert." - -#: src/Admin/OrderLicenseController.php:204 src/Admin/AdminController.php:1356 -#: src/Admin/AdminController.php:1507 src/Admin/AdminController.php:1672 -#: src/Frontend/AccountController.php:321 -msgid "Product" -msgstr "Produkt" - -#: src/Admin/VersionAdminController.php:265 -msgid "Product ID and version are required." -msgstr "Produkt-ID und Version sind erforderlich." - -#: src/Admin/OrderLicenseController.php:57 -msgid "Product Licenses" -msgstr "Produktlizenzen" +#: src/Admin/OrderLicenseController.php:542 +msgid "All licenses already exist for this order." +msgstr "Alle Lizenzen für diese Bestellung existieren bereits." #: src/Admin/VersionAdminController.php:55 msgid "Product Versions" msgstr "Produktversionen" -#: src/Admin/VersionAdminController.php:282 -msgid "Product not found." -msgstr "Produkt nicht gefunden." +#: src/Admin/VersionAdminController.php:74 +msgid "Add New Version" +msgstr "Neue Version hinzufügen" -#: src/Email/LicenseExpirationEmail.php:203 -#: src/Email/LicenseExpirationEmail.php:269 -#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 -msgid "Product:" -msgstr "Produkt:" +#: src/Admin/VersionAdminController.php:77 +#: src/Admin/VersionAdminController.php:132 +msgid "Version" +msgstr "Version" -#: src/Product/LicensedProductVariation.php:202 -msgid "Quarterly" -msgstr "Vierteljährlich" +#: src/Admin/VersionAdminController.php:80 +msgid "Use semantic versioning (e.g., 1.0.0)" +msgstr "Verwenden Sie semantische Versionierung (z.B. 1.0.0)" -#: src/Admin/AdminController.php:1020 -msgid "Quick Actions" -msgstr "Schnellaktionen" +#: src/Admin/VersionAdminController.php:84 +#: src/Admin/VersionAdminController.php:133 +msgid "Download File" +msgstr "Download-Datei" -#: src/Admin/VersionAdminController.php:112 -#: src/Admin/VersionAdminController.php:135 -msgid "Release Notes" -msgstr "Versionshinweise" - -#: src/Admin/VersionAdminController.php:137 -msgid "Released" -msgstr "Veröffentlicht" +#: src/Admin/VersionAdminController.php:89 +msgid "Select File" +msgstr "Datei auswählen" #: src/Admin/VersionAdminController.php:92 #: src/Admin/VersionAdminController.php:106 msgid "Remove" msgstr "Entfernen" -#: src/Admin/SettingsController.php:400 +#: src/Admin/VersionAdminController.php:94 +msgid "" +"Upload or select a file from the media library. Version will be auto-" +"detected from filename (e.g., plugin-v1.2.3.zip)." +msgstr "" +"Laden Sie eine Datei hoch oder wählen Sie eine aus der Mediathek. Die " +"Version wird automatisch aus dem Dateinamen erkannt (z.B. plugin-v1.2.3.zip)." + +#: src/Admin/VersionAdminController.php:98 +msgid "Checksum File" +msgstr "Prüfsummendatei" + +#: src/Admin/VersionAdminController.php:103 +msgid "Select Checksum File" +msgstr "Prüfsummendatei auswählen" + +#: src/Admin/VersionAdminController.php:108 +msgid "" +"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." +msgstr "" +"Laden Sie eine SHA256-Prüfsummendatei (.sha256 oder .txt) hoch, um die " +"Dateiintegrität zu überprüfen." + +#: src/Admin/VersionAdminController.php:112 +#: src/Admin/VersionAdminController.php:135 +msgid "Release Notes" +msgstr "Versionshinweise" + +#: src/Admin/VersionAdminController.php:120 +msgid "Add Version" +msgstr "Version hinzufügen" + +#: src/Admin/VersionAdminController.php:128 +msgid "Existing Versions" +msgstr "Vorhandene Versionen" + +#: src/Admin/VersionAdminController.php:134 +msgid "SHA256" +msgstr "SHA256" + +#: src/Admin/VersionAdminController.php:137 +msgid "Released" +msgstr "Veröffentlicht" + +#: src/Admin/VersionAdminController.php:144 +msgid "No versions found. Add your first version above." +msgstr "Keine Versionen gefunden. Fügen Sie Ihre erste Version oben hinzu." + +#: src/Admin/VersionAdminController.php:161 +#: src/Admin/VersionAdminController.php:393 +msgid "Uploaded file" +msgstr "Hochgeladene Datei" + +#: src/Admin/VersionAdminController.php:165 +#: src/Admin/VersionAdminController.php:397 +msgid "No download file" +msgstr "Keine Download-Datei" + +#: src/Admin/VersionAdminController.php:178 +#: src/Admin/VersionAdminController.php:410 src/Admin/AdminController.php:172 +#: src/Admin/AdminController.php:978 src/Admin/AdminController.php:1297 +#: src/Admin/AdminController.php:1420 +msgid "Inactive" +msgstr "Inaktiv" + +#: src/Admin/VersionAdminController.php:184 +#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1338 +#: src/Admin/AdminController.php:1523 +msgid "Deactivate" +msgstr "Deaktivieren" + +#: src/Admin/VersionAdminController.php:184 +#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1337 +#: src/Admin/AdminController.php:1522 +msgid "Activate" +msgstr "Aktivieren" + +#: src/Admin/VersionAdminController.php:187 +#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1343 +#: src/Admin/AdminController.php:1492 src/Admin/AdminController.php:1528 +msgid "Delete" +msgstr "Löschen" + +#: src/Admin/VersionAdminController.php:228 +msgid "Are you sure you want to delete this version?" +msgstr "Sind Sie sicher, dass Sie diese Version löschen möchten?" + +#: src/Admin/VersionAdminController.php:229 +msgid "Please enter a version number." +msgstr "Bitte geben Sie eine Versionsnummer ein." + +#: src/Admin/VersionAdminController.php:230 +msgid "Please enter a valid version number (e.g., 1.0.0)." +msgstr "Bitte geben Sie eine gültige Versionsnummer ein (z.B. 1.0.0)." + +#: src/Admin/VersionAdminController.php:231 +msgid "An error occurred. Please try again." +msgstr "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut." + +#: src/Admin/VersionAdminController.php:232 +msgid "Select Download File" +msgstr "Download-Datei auswählen" + +#: src/Admin/VersionAdminController.php:233 +msgid "Use this file" +msgstr "Diese Datei verwenden" + +#: src/Admin/VersionAdminController.php:234 +msgid "" +"Invalid checksum file format. File must contain a 64-character SHA256 hash." +msgstr "" +"Ungültiges Prüfsummendateiformat. Die Datei muss einen 64-stelligen SHA256-" +"Hash enthalten." + +#: src/Admin/VersionAdminController.php:235 +msgid "Failed to read checksum file." +msgstr "Prüfsummendatei konnte nicht gelesen werden." + +#: src/Admin/VersionAdminController.php:265 +msgid "Product ID and version are required." +msgstr "Produkt-ID und Version sind erforderlich." + +#: src/Admin/VersionAdminController.php:270 +msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." +msgstr "" +"Ungültiges Versionsformat. Verwenden Sie semantische Versionierung (z.B. " +"1.0.0)." + +#: src/Admin/VersionAdminController.php:275 +msgid "This version already exists." +msgstr "Diese Version existiert bereits." + +#: src/Admin/VersionAdminController.php:282 +msgid "Product not found." +msgstr "Produkt nicht gefunden." + +#: src/Admin/VersionAdminController.php:286 +msgid "This product is not a licensed product." +msgstr "Dieses Produkt ist kein lizensiertes Produkt." + +#: src/Admin/VersionAdminController.php:303 +msgid "Failed to create version." +msgstr "Version konnte nicht erstellt werden." + +#: src/Admin/VersionAdminController.php:311 +msgid "Version added successfully." +msgstr "Version erfolgreich hinzugefügt." + +#: src/Admin/VersionAdminController.php:331 +#: src/Admin/VersionAdminController.php:358 +msgid "Version ID is required." +msgstr "Versions-ID ist erforderlich." + +#: src/Admin/VersionAdminController.php:337 +msgid "Failed to delete version." +msgstr "Version konnte nicht gelöscht werden." + +#: src/Admin/VersionAdminController.php:340 +msgid "Version deleted successfully." +msgstr "Version erfolgreich gelöscht." + +#: src/Admin/VersionAdminController.php:364 +msgid "Failed to update version." +msgstr "Version konnte nicht aktualisiert werden." + +#: src/Admin/VersionAdminController.php:368 +msgid "Version updated successfully." +msgstr "Version erfolgreich aktualisiert." + +#: src/Admin/SettingsController.php:54 +msgid "Licensed Products" +msgstr "Lizensierte Produkte" + +#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:132 +msgid "Plugin License" +msgstr "Plugin-Lizenz" + +#: src/Admin/SettingsController.php:65 src/Admin/SettingsController.php:176 +msgid "Auto-Updates" +msgstr "Auto-Updates" + +#: src/Admin/SettingsController.php:66 +msgid "Default Settings" +msgstr "Standardeinstellungen" + +#: src/Admin/SettingsController.php:67 +msgid "Notifications" +msgstr "Benachrichtigungen" + +#: src/Admin/SettingsController.php:68 +msgid "Metrics" +msgstr "Metriken" + +#: src/Admin/SettingsController.php:134 +msgid "" +"Configure the license for this plugin. A valid license is required for " +"frontend features to work." +msgstr "" +"Konfigurieren Sie die Lizenz für dieses Plugin. Eine gültige Lizenz ist " +"erforderlich, damit die Frontend-Funktionen funktionieren." + +#: src/Admin/SettingsController.php:138 +msgid "License Server URL" +msgstr "Lizenzserver-URL" + +#: src/Admin/SettingsController.php:140 +msgid "The URL of the license server (e.g., https://shop.example.com)." +msgstr "Die URL des Lizenzservers (z.B. https://shop.example.com)." + +#: src/Admin/SettingsController.php:148 +msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." +msgstr "Ihr Lizenzschlüssel im Format XXXX-XXXX-XXXX-XXXX." + +#: src/Admin/SettingsController.php:154 +msgid "Server Secret (Optional)" +msgstr "Server-Secret (Optional)" + +#: src/Admin/SettingsController.php:156 +msgid "" +"If the license server uses signed responses, enter the shared secret here " +"for enhanced security." +msgstr "" +"Falls der Lizenzserver signierte Antworten verwendet, geben Sie hier das " +"gemeinsame Secret für erhöhte Sicherheit ein." + +#: src/Admin/SettingsController.php:178 +msgid "Configure automatic plugin updates from the license server." +msgstr "Automatische Plugin-Updates vom Lizenzserver konfigurieren." + +#: src/Admin/SettingsController.php:182 +msgid "Enable Update Notifications" +msgstr "Update-Benachrichtigungen aktivieren" + +#: src/Admin/SettingsController.php:184 +msgid "" +"Check for and display available updates from the license server in WordPress " +"admin." +msgstr "" +"Verfügbare Updates vom Lizenzserver prüfen und im WordPress-Admin anzeigen." + +#: src/Admin/SettingsController.php:189 +msgid "Automatically Install Updates" +msgstr "Updates automatisch installieren" + +#: src/Admin/SettingsController.php:192 +msgid "Enable \"Update Notifications\" above to use this option." +msgstr "" +"Aktivieren Sie \"Update-Benachrichtigungen\" oben, um diese Option zu " +"verwenden." + +#: src/Admin/SettingsController.php:193 +msgid "" +"Automatically install updates when they become available (requires update " +"notifications enabled)." +msgstr "" +"Updates automatisch installieren, wenn sie verfügbar werden (erfordert " +"aktivierte Update-Benachrichtigungen)." + +#: src/Admin/SettingsController.php:199 +msgid "Check Frequency (Hours)" +msgstr "Prüfhäufigkeit (Stunden)" + +#: src/Admin/SettingsController.php:201 +msgid "How often to check for updates (in hours)." +msgstr "Wie oft auf Updates geprüft werden soll (in Stunden)." + +#: src/Admin/SettingsController.php:224 +msgid "Default License Settings" +msgstr "Standard Lizenz-Einstellungen" + +#: src/Admin/SettingsController.php:226 +msgid "" +"These settings serve as defaults for new licensed products. Individual " +"product settings override these defaults." +msgstr "" +"Diese Einstellungen dienen als Standard für neue lizensierte Produkte. " +"Individuelle Produkteinstellungen überschreiben diese Standards." + +#: src/Admin/SettingsController.php:230 src/Product/LicensedProductType.php:202 +#: src/Product/LicensedProductType.php:561 +msgid "Max Activations" +msgstr "Max. Aktivierungen" + +#: src/Admin/SettingsController.php:232 +msgid "Default maximum number of domain activations per license." +msgstr "Standard maximale Anzahl der Domain-Aktivierungen pro Lizenz." + +#: src/Admin/SettingsController.php:241 src/Product/LicensedProductType.php:220 +msgid "License Validity (Days)" +msgstr "Lizenz-Gültigkeit (Tage)" + +#: src/Admin/SettingsController.php:243 +msgid "" +"Default number of days a license is valid. Leave empty or set to 0 for " +"lifetime licenses." +msgstr "" +"Standard Anzahl Tage, die eine Lizenz gültig ist. Leer lassen oder auf 0 " +"setzen für lebenslange Lizenzen." + +#: src/Admin/SettingsController.php:253 src/Product/LicensedProductType.php:238 +msgid "Bind to Major Version" +msgstr "An Hauptversion binden" + +#: src/Admin/SettingsController.php:255 +msgid "" +"If enabled, licenses are bound to the major version at purchase time by " +"default." +msgstr "" +"Falls aktiviert, werden Lizenzen standardmässig an die Hauptversion zum " +"Kaufzeitpunkt gebunden." + +#: src/Admin/SettingsController.php:260 +msgid "Enable Multi-Domain Licensing" +msgstr "Multi-Domain-Lizenzierung aktivieren" + +#: src/Admin/SettingsController.php:262 +msgid "" +"Allow customers to purchase multiple licenses for different domains at once. " +"Each unit in cart quantity requires a unique domain." +msgstr "" +"Ermöglicht Kunden, mehrere Lizenzen für verschiedene Domains auf einmal zu " +"kaufen. Jede Einheit in der Warenkorbmenge erfordert eine eindeutige Domain." + +#: src/Admin/SettingsController.php:280 +msgid "Expiration Warning Schedule" +msgstr "Ablaufwarnung Zeitplan" + +#: src/Admin/SettingsController.php:284 +#, php-format +msgid "" +"Configure when expiration warning emails are sent. To customize the email " +"template, enable/disable, or change the subject, go to %s." +msgstr "" +"Konfigurieren Sie, wann Ablaufwarnungs-E-Mails gesendet werden. Um die E-" +"Mail-Vorlage anzupassen, zu aktivieren/deaktivieren oder den Betreff zu " +"ändern, gehen Sie zu %s." + +#: src/Admin/SettingsController.php:286 +msgid "WooCommerce > Settings > Emails > License Expiration Warning" +msgstr "WooCommerce > Einstellungen > E-Mails > Lizenzablauf-Warnung" + +#: src/Admin/SettingsController.php:291 +msgid "First Warning (Days Before)" +msgstr "Erste Warnung (Tage vorher)" + +#: src/Admin/SettingsController.php:293 +msgid "Days before expiration to send the first warning email." +msgstr "Tage vor Ablauf, um die erste Warn-E-Mail zu senden." + +#: src/Admin/SettingsController.php:302 +msgid "Second Warning (Days Before)" +msgstr "Zweite Warnung (Tage vorher)" + +#: src/Admin/SettingsController.php:304 +msgid "" +"Days before expiration to send the second warning email. Set to 0 to disable." +msgstr "" +"Tage vor Ablauf, um die zweite Warn-E-Mail zu senden. Setzen Sie auf 0, um " +"sie zu deaktivieren." + +#: src/Admin/SettingsController.php:326 +msgid "Prometheus Metrics" +msgstr "Prometheus-Metriken" + +#: src/Admin/SettingsController.php:328 +msgid "" +"Expose license and API metrics for Prometheus monitoring. Requires the WP " +"Prometheus plugin to be installed and active." +msgstr "" +"Lizenz- und API-Metriken für Prometheus-Monitoring bereitstellen. " +"Erfordert das WP Prometheus-Plugin." + +#: src/Admin/SettingsController.php:332 +msgid "Enable Prometheus Metrics" +msgstr "Prometheus-Metriken aktivieren" + +#: src/Admin/SettingsController.php:334 +msgid "" +"Expose license statistics, API usage, and download metrics via Prometheus." +msgstr "" +"Lizenzstatistiken, API-Nutzung und Download-Metriken über Prometheus bereitstellen." + +#: src/Admin/SettingsController.php:370 +msgid "Running on localhost - license validation bypassed." +msgstr "Läuft auf localhost - Lizenzvalidierung übersprungen." + +#: src/Admin/SettingsController.php:378 +msgid "License is valid and active." +msgstr "Lizenz ist gültig und aktiv." + +#: src/Admin/SettingsController.php:384 +msgid "License is not valid. Frontend features are disabled." +msgstr "Lizenz ist ungültig. Frontend-Funktionen sind deaktiviert." + +#: src/Admin/SettingsController.php:395 src/Admin/SettingsController.php:431 +msgid "Verify License" +msgstr "Lizenz überprüfen" + +#: src/Admin/SettingsController.php:409 +msgid "Verifying..." +msgstr "Überprüfe..." + +#: src/Admin/SettingsController.php:428 msgid "Request failed." msgstr "Anfrage fehlgeschlagen." -#: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1483 -#: src/Admin/AdminController.php:1524 -msgid "Revoke" -msgstr "Widerrufen" +#: src/Admin/SettingsController.php:587 src/Admin/AdminController.php:483 +#: src/Admin/AdminController.php:503 src/Admin/AdminController.php:521 +#: src/Admin/AdminController.php:539 src/Admin/AdminController.php:559 +#: src/Admin/AdminController.php:577 src/Admin/AdminController.php:605 +#: src/Admin/AdminController.php:649 src/Admin/AdminController.php:875 +#: src/Frontend/AccountController.php:612 +msgid "Security check failed." +msgstr "Sicherheitsüberprüfung fehlgeschlagen." + +#: src/Admin/SettingsController.php:591 +msgid "Insufficient permissions." +msgstr "Unzureichende Berechtigungen." + +#: src/Admin/SettingsController.php:600 +msgid "License verified successfully!" +msgstr "Lizenz erfolgreich überprüft!" + +#: src/Admin/SettingsController.php:602 src/Api/UpdateController.php:195 +msgid "License validation failed." +msgstr "Lizenzvalidierung fehlgeschlagen." + +#: src/Admin/AdminController.php:108 +msgid "Overview" +msgstr "Übersicht" + +#: src/Admin/AdminController.php:156 +msgid "No licenses found" +msgstr "Keine Lizenzen gefunden" + +#: src/Admin/AdminController.php:157 +msgid "Searching..." +msgstr "Suche..." + +#: src/Admin/AdminController.php:158 +msgid "Search failed" +msgstr "Suche fehlgeschlagen" + +#: src/Admin/AdminController.php:160 +msgid "Saved" +msgstr "Gespeichert" + +#: src/Admin/AdminController.php:161 +msgid "Save failed" +msgstr "Speichern fehlgeschlagen" + +#: src/Admin/AdminController.php:162 +msgid "" +"Are you sure you want to revoke this license? This action cannot be undone." +msgstr "" +"Sind Sie sicher, dass Sie diese Lizenz widerrufen möchten? Diese Aktion kann " +"nicht rückgängig gemacht werden." + +#: src/Admin/AdminController.php:163 src/Admin/AdminController.php:1399 +#: src/Admin/AdminController.php:1414 src/Admin/AdminController.php:1440 +msgid "Edit" +msgstr "Bearbeiten" + +#: src/Admin/AdminController.php:167 src/Frontend/AccountController.php:586 +msgid "Copied!" +msgstr "Kopiert!" + +#: src/Admin/AdminController.php:168 src/Frontend/AccountController.php:587 +msgid "Copy failed" +msgstr "Kopieren fehlgeschlagen" #: src/Admin/AdminController.php:174 src/Admin/AdminController.php:992 #: src/Admin/AdminController.php:1299 src/Admin/AdminController.php:1422 msgid "Revoked" msgstr "Widerrufen" -#: src/Frontend/AccountController.php:647 -msgid "Revoked licenses cannot be transferred." -msgstr "Widerrufene Lizenzen können nicht übertragen werden." +#: src/Admin/AdminController.php:211 src/Admin/AdminController.php:1087 +msgid "Guest" +msgstr "Gast" + +#: src/Admin/AdminController.php:240 +msgid "Invalid status." +msgstr "Ungültiger Status." + +#: src/Admin/AdminController.php:247 +msgid "Status updated successfully." +msgstr "Status erfolgreich aktualisiert." + +#: src/Admin/AdminController.php:252 +msgid "Failed to update status." +msgstr "Status konnte nicht aktualisiert werden." + +#: src/Admin/AdminController.php:279 +msgid "License set to lifetime." +msgstr "Lizenz auf lebenslang gesetzt." + +#: src/Admin/AdminController.php:284 src/Admin/AdminController.php:301 +msgid "Failed to update expiry date." +msgstr "Ablaufdatum konnte nicht aktualisiert werden." + +#: src/Admin/AdminController.php:296 +msgid "Expiry date updated successfully." +msgstr "Ablaufdatum erfolgreich aktualisiert." + +#: src/Admin/AdminController.php:304 +msgid "Invalid date format." +msgstr "Ungültiges Datumsformat." + +#: src/Admin/AdminController.php:338 +msgid "Domain updated successfully." +msgstr "Domain erfolgreich aktualisiert." + +#: src/Admin/AdminController.php:342 +msgid "Failed to update domain." +msgstr "Domain konnte nicht aktualisiert werden." + +#: src/Admin/AdminController.php:367 src/Admin/AdminController.php:1158 +msgid "License revoked successfully." +msgstr "Lizenz erfolgreich widerrufen." + +#: src/Admin/AdminController.php:372 +msgid "Failed to revoke license." +msgstr "Lizenz konnte nicht widerrufen werden." + +#: src/Admin/AdminController.php:391 +msgid "License key and domain are required." +msgstr "Lizenzschlüssel und Domain sind erforderlich." + +#: src/Admin/AdminController.php:609 +msgid "You do not have permission to export licenses." +msgstr "Sie haben keine Berechtigung, Lizenzen zu exportieren." + +#: src/Admin/AdminController.php:653 +msgid "You do not have permission to import licenses." +msgstr "Sie haben keine Berechtigung, Lizenzen zu importieren." + +#: src/Admin/AdminController.php:729 +#, php-format +msgid "" +"Import stopped: Maximum of %1$d rows allowed. %2$d imported, %3$d updated." +msgstr "" +"Import gestoppt: Maximal %1$d Zeilen erlaubt. %2$d importiert, %3$d " +"aktualisiert." #: src/Admin/AdminController.php:809 msgid "Row missing domain" @@ -1477,160 +933,559 @@ msgstr "Zeile ohne Domain" msgid "Row missing valid product ID" msgstr "Zeile ohne gültige Produkt-ID" -#: src/Admin/SettingsController.php:342 -msgid "Running on localhost - license validation bypassed." -msgstr "Läuft auf localhost - Lizenzvalidierung übersprungen." +#: src/Admin/AdminController.php:866 +#, php-format +msgid "Failed to import license for domain %s" +msgstr "Import der Lizenz für Domain %s fehlgeschlagen" -#: src/Admin/VersionAdminController.php:134 -msgid "SHA256" -msgstr "SHA256" +#: src/Admin/AdminController.php:956 +msgid "License Dashboard" +msgstr "Lizenz-Dashboard" -#: src/Admin/OrderLicenseController.php:139 -#: src/Admin/OrderLicenseController.php:241 src/Admin/AdminController.php:165 -#: src/Admin/AdminController.php:1404 src/Admin/AdminController.php:1424 -#: src/Admin/AdminController.php:1445 -msgid "Save" -msgstr "Speichern" +#: src/Admin/AdminController.php:1001 +msgid "Attention:" +msgstr "Achtung:" -#: src/Admin/AdminController.php:161 -msgid "Save failed" -msgstr "Speichern fehlgeschlagen" +#: src/Admin/AdminController.php:1006 +#, php-format +msgid "%d license is expiring within the next 30 days." +msgid_plural "%d licenses are expiring within the next 30 days." +msgstr[0] "%d Lizenz läuft innerhalb der nächsten 30 Tage ab." +msgstr[1] "%d Lizenzen laufen innerhalb der nächsten 30 Tage ab." -#: src/Admin/AdminController.php:160 -msgid "Saved" -msgstr "Gespeichert" +#: src/Admin/AdminController.php:1014 +msgid "View Licenses" +msgstr "Lizenzen anzeigen" -#: src/Admin/OrderLicenseController.php:371 -msgid "Saved!" -msgstr "Gespeichert!" +#: src/Admin/AdminController.php:1020 +msgid "Quick Actions" +msgstr "Schnellaktionen" -#: src/Admin/OrderLicenseController.php:370 src/Admin/AdminController.php:159 -msgid "Saving..." -msgstr "Speichere..." +#: src/Admin/AdminController.php:1024 +msgid "Manage Licenses" +msgstr "Lizenzen verwalten" -#: src/Admin/AdminController.php:1289 -msgid "Search" -msgstr "Suchen" - -#: src/Admin/AdminController.php:1286 -msgid "Search Licenses" -msgstr "Lizenzen durchsuchen" - -#: src/Admin/AdminController.php:158 -msgid "Search failed" -msgstr "Suche fehlgeschlagen" - -#: src/Admin/AdminController.php:1288 -msgid "Search license key or domain..." -msgstr "Lizenzschlüssel oder Domain suchen..." - -#: src/Admin/AdminController.php:157 -msgid "Searching..." -msgstr "Suche..." - -#: src/Admin/SettingsController.php:300 -msgid "Second Warning (Days Before)" -msgstr "Zweite Warnung (Tage vorher)" - -#: src/Admin/SettingsController.php:559 src/Admin/AdminController.php:483 -#: src/Admin/AdminController.php:503 src/Admin/AdminController.php:521 -#: src/Admin/AdminController.php:539 src/Admin/AdminController.php:559 -#: src/Admin/AdminController.php:577 src/Admin/AdminController.php:605 -#: src/Admin/AdminController.php:649 src/Admin/AdminController.php:875 -#: src/Frontend/AccountController.php:612 -msgid "Security check failed." -msgstr "Sicherheitsüberprüfung fehlgeschlagen." - -#: src/Admin/VersionAdminController.php:103 -msgid "Select Checksum File" -msgstr "Prüfsummendatei auswählen" - -#: src/Admin/VersionAdminController.php:232 -msgid "Select Download File" -msgstr "Download-Datei auswählen" - -#: src/Admin/VersionAdminController.php:89 -msgid "Select File" -msgstr "Datei auswählen" - -#: src/Admin/AdminController.php:1831 -msgid "Select a CSV file to import." -msgstr "Wählen Sie eine CSV-Datei zum Importieren." - -#: src/Admin/SettingsController.php:152 -msgid "Server Secret (Optional)" -msgstr "Server-Secret (Optional)" - -#: src/Admin/AdminController.php:1447 src/Admin/AdminController.php:1476 -msgid "Set to lifetime" -msgstr "Auf lebenslang setzen" +#: src/Admin/AdminController.php:1028 +msgid "Export to CSV" +msgstr "Als CSV exportieren" #: src/Admin/AdminController.php:1032 wc-licensed-product.php:137 msgid "Settings" msgstr "Einstellungen" +#: src/Admin/AdminController.php:1152 +msgid "License updated successfully." +msgstr "Lizenz erfolgreich aktualisiert." + +#: src/Admin/AdminController.php:1155 +msgid "License deleted successfully." +msgstr "Lizenz erfolgreich gelöscht." + +#: src/Admin/AdminController.php:1161 +msgid "License extended successfully." +msgstr "Lizenz erfolgreich verlängert." + +#: src/Admin/AdminController.php:1164 +msgid "License set to lifetime successfully." +msgstr "Lizenz erfolgreich auf lebenslang gesetzt." + +#: src/Admin/AdminController.php:1170 +#, php-format +msgid "%d license activated." +msgid_plural "%d licenses activated." +msgstr[0] "%d Lizenz aktiviert." +msgstr[1] "%d Lizenzen aktiviert." + +#: src/Admin/AdminController.php:1178 +#, php-format +msgid "%d license deactivated." +msgid_plural "%d licenses deactivated." +msgstr[0] "%d Lizenz deaktiviert." +msgstr[1] "%d Lizenzen deaktiviert." + +#: src/Admin/AdminController.php:1186 +#, php-format +msgid "%d license revoked." +msgid_plural "%d licenses revoked." +msgstr[0] "%d Lizenz widerrufen." +msgstr[1] "%d Lizenzen widerrufen." + +#: src/Admin/AdminController.php:1194 +#, php-format +msgid "%d license deleted." +msgid_plural "%d licenses deleted." +msgstr[0] "%d Lizenz gelöscht." +msgstr[1] "%d Lizenzen gelöscht." + +#: src/Admin/AdminController.php:1202 +#, php-format +msgid "%d license extended." +msgid_plural "%d licenses extended." +msgstr[0] "%d Lizenz verlängert." +msgstr[1] "%d Lizenzen verlängert." + +#: src/Admin/AdminController.php:1207 +msgid "License transferred to new domain successfully." +msgstr "Lizenz erfolgreich auf neue Domain übertragen." + +#: src/Admin/AdminController.php:1210 +msgid "Failed to transfer license. The license may be revoked or invalid." +msgstr "" +"Lizenzübertragung fehlgeschlagen. Die Lizenz könnte widerrufen oder ungültig " +"sein." + +#: src/Admin/AdminController.php:1213 +msgid "No licenses to export." +msgstr "Keine Lizenzen zum Exportieren." + +#: src/Admin/AdminController.php:1223 +#, php-format +msgid "%d license imported." +msgid_plural "%d licenses imported." +msgstr[0] "%d Lizenz importiert." +msgstr[1] "%d Lizenzen importiert." + +#: src/Admin/AdminController.php:1230 +#, php-format +msgid "%d updated." +msgid_plural "%d updated." +msgstr[0] "%d aktualisiert." +msgstr[1] "%d aktualisiert." + +#: src/Admin/AdminController.php:1238 +#, php-format +msgid "%d skipped." +msgid_plural "%d skipped." +msgstr[0] "%d übersprungen." +msgstr[1] "%d übersprungen." + +#: src/Admin/AdminController.php:1246 +#, php-format +msgid "%d error." +msgid_plural "%d errors." +msgstr[0] "%d Fehler." +msgstr[1] "%d Fehler." + +#: src/Admin/AdminController.php:1267 +msgid "Export CSV" +msgstr "CSV exportieren" + +#: src/Admin/AdminController.php:1271 +msgid "Import CSV" +msgstr "CSV importieren" + +#: src/Admin/AdminController.php:1286 +msgid "Search Licenses" +msgstr "Lizenzen durchsuchen" + +#: src/Admin/AdminController.php:1288 +msgid "Search license key or domain..." +msgstr "Lizenzschlüssel oder Domain suchen..." + +#: src/Admin/AdminController.php:1289 +msgid "Search" +msgstr "Suchen" + +#: src/Admin/AdminController.php:1295 +msgid "All Statuses" +msgstr "Alle Status" + +#: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:323 +msgid "All Products" +msgstr "Alle Produkte" + +#: src/Admin/AdminController.php:1309 src/Frontend/AccountController.php:348 +msgid "Filter" +msgstr "Filtern" + +#: src/Admin/AdminController.php:1312 src/Frontend/AccountController.php:350 +msgid "Clear" +msgstr "Zurücksetzen" + +#: src/Admin/AdminController.php:1317 +msgid "item" +msgstr "Eintrag" + +#: src/Admin/AdminController.php:1317 +msgid "items" +msgstr "Einträge" + #: src/Admin/AdminController.php:1323 msgid "Showing" msgstr "Anzeige" +#: src/Admin/AdminController.php:1323 src/Email/LicenseEmailController.php:338 +msgid "license" +msgid_plural "licenses" +msgstr[0] "Lizenz" +msgstr[1] "Lizenzen" + +#: src/Admin/AdminController.php:1323 +msgid "licenses" +msgstr "Lizenzen" + +#: src/Admin/AdminController.php:1325 +msgid "filtered" +msgstr "gefiltert" + +#: src/Admin/AdminController.php:1327 +msgid "View Dashboard" +msgstr "Dashboard anzeigen" + +#: src/Admin/AdminController.php:1336 src/Admin/AdminController.php:1521 +msgid "Bulk Actions" +msgstr "Massenaktionen" + +#: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1483 +#: src/Admin/AdminController.php:1524 +msgid "Revoke" +msgstr "Widerrufen" + +#: src/Admin/AdminController.php:1340 src/Admin/AdminController.php:1525 +msgid "Extend 30 days" +msgstr "30 Tage verlängern" + +#: src/Admin/AdminController.php:1341 src/Admin/AdminController.php:1526 +msgid "Extend 90 days" +msgstr "90 Tage verlängern" + +#: src/Admin/AdminController.php:1342 src/Admin/AdminController.php:1527 +msgid "Extend 1 year" +msgstr "1 Jahr verlängern" + +#: src/Admin/AdminController.php:1345 src/Admin/AdminController.php:1530 +msgid "Apply" +msgstr "Anwenden" + +#: src/Admin/AdminController.php:1357 src/Admin/AdminController.php:1508 +#: src/Email/LicenseExpirationEmail.php:104 +#: src/Email/LicenseExpiredEmail.php:96 +msgid "Customer" +msgstr "Kunde" + +#: src/Admin/AdminController.php:1360 src/Admin/AdminController.php:1511 +msgid "Created" +msgstr "Erstellt" + +#: src/Admin/AdminController.php:1368 +msgid "No licenses found." +msgstr "Keine Lizenzen gefunden." + +#: src/Admin/AdminController.php:1378 src/Frontend/AccountController.php:404 +#: src/Frontend/AccountController.php:444 +msgid "Copy to clipboard" +msgstr "In Zwischenablage kopieren" + +#: src/Admin/AdminController.php:1444 +msgid "Leave empty for lifetime" +msgstr "Leer lassen für lebenslang" + +#: src/Admin/AdminController.php:1447 src/Admin/AdminController.php:1476 +msgid "Set to lifetime" +msgstr "Auf lebenslang setzen" + +#: src/Admin/AdminController.php:1457 +msgid "Test license against API" +msgstr "Lizenz gegen API testen" + +#: src/Admin/AdminController.php:1457 +msgid "Test" +msgstr "Testen" + +#: src/Admin/AdminController.php:1464 src/Frontend/AccountController.php:411 +msgid "Transfer to new domain" +msgstr "Auf neue Domain übertragen" + +#: src/Admin/AdminController.php:1464 +msgid "Transfer" +msgstr "Übertragen" + +#: src/Admin/AdminController.php:1470 +msgid "Extend by 30 days" +msgstr "Um 30 Tage verlängern" + +#: src/Admin/AdminController.php:1482 +msgid "Are you sure?" +msgstr "Sind Sie sicher?" + +#: src/Admin/AdminController.php:1491 +msgid "Are you sure you want to delete this license?" +msgstr "Sind Sie sicher, dass Sie diese Lizenz löschen möchten?" + +#: src/Admin/AdminController.php:1551 +msgid "License Validation Test" +msgstr "Lizenzvalidierungstest" + +#: src/Admin/AdminController.php:1566 +msgid "Testing license..." +msgstr "Lizenz wird geprüft..." + +#: src/Admin/AdminController.php:1572 src/Frontend/AccountController.php:526 +msgid "Close" +msgstr "Schliessen" + +#: src/Admin/AdminController.php:1581 src/Frontend/AccountController.php:527 +msgid "Transfer License to New Domain" +msgstr "Lizenz auf neue Domain übertragen" + +#: src/Admin/AdminController.php:1588 src/Frontend/AccountController.php:532 +msgid "Current Domain" +msgstr "Aktuelle Domain" + +#: src/Admin/AdminController.php:1592 src/Frontend/AccountController.php:537 +msgid "New Domain" +msgstr "Neue Domain" + +#: src/Admin/AdminController.php:1595 src/Frontend/AccountController.php:541 +msgid "Enter the new domain without http:// or www." +msgstr "Geben Sie die neue Domain ohne http:// oder www ein." + +#: src/Admin/AdminController.php:1600 src/Frontend/AccountController.php:546 +msgid "Transfer License" +msgstr "Lizenz übertragen" + +#: src/Admin/AdminController.php:1670 +msgid "License is VALID" +msgstr "Lizenz ist GÜLTIG" + +#: src/Admin/AdminController.php:1680 +msgid "License is INVALID" +msgstr "Lizenz ist UNGÜLTIG" + +#: src/Admin/AdminController.php:1682 +msgid "Error Code" +msgstr "Fehlercode" + +#: src/Admin/AdminController.php:1683 +msgid "Message" +msgstr "Meldung" + +#: src/Admin/AdminController.php:1696 +msgid "Failed to test license. Please try again." +msgstr "Lizenztest fehlgeschlagen. Bitte versuchen Sie es erneut." + +#: src/Admin/AdminController.php:1734 src/Admin/AdminController.php:1856 +msgid "Import Licenses" +msgstr "Lizenzen importieren" + +#: src/Admin/AdminController.php:1736 +msgid "Back to Licenses" +msgstr "Zurück zu Lizenzen" + +#: src/Admin/AdminController.php:1746 +msgid "Error uploading file. Please try again." +msgstr "Fehler beim Hochladen der Datei. Bitte versuchen Sie es erneut." + +#: src/Admin/AdminController.php:1749 +msgid "Invalid file type. Please upload a CSV file." +msgstr "Ungültiger Dateityp. Bitte laden Sie eine CSV-Datei hoch." + +#: src/Admin/AdminController.php:1752 +msgid "Error reading file. Please check the file format." +msgstr "Fehler beim Lesen der Datei. Bitte überprüfen Sie das Dateiformat." + +#: src/Admin/AdminController.php:1757 +#, php-format +msgid "File too large. Maximum size is %s." +msgstr "Datei zu gross. Maximale Grösse ist %s." + +#: src/Admin/AdminController.php:1765 +#, php-format +msgid "Please wait %d seconds before importing again." +msgstr "Bitte warten Sie %d Sekunden, bevor Sie erneut importieren." + +#: src/Admin/AdminController.php:1770 +msgid "An error occurred during import." +msgstr "Beim Import ist ein Fehler aufgetreten." + +#: src/Admin/AdminController.php:1782 +#, php-format +msgid "" +"Import limits: Maximum file size %1$s, maximum %2$d rows per import. You can " +"import again after %3$d minutes." +msgstr "" +"Import-Limits: Maximale Dateigrösse %1$s, maximal %2$d Zeilen pro Import. " +"Sie können nach %3$d Minuten erneut importieren." + +#: src/Admin/AdminController.php:1792 +msgid "Import Licenses from CSV" +msgstr "Lizenzen aus CSV importieren" + +#: src/Admin/AdminController.php:1795 +msgid "" +"Upload a CSV file to import licenses. You can use the exported CSV format or " +"a simplified format." +msgstr "" +"Laden Sie eine CSV-Datei hoch, um Lizenzen zu importieren. Sie können das " +"exportierte CSV-Format oder ein vereinfachtes Format verwenden." + +#: src/Admin/AdminController.php:1798 +msgid "CSV Format" +msgstr "CSV-Format" + +#: src/Admin/AdminController.php:1800 +msgid "The CSV file should contain the following columns:" +msgstr "Die CSV-Datei sollte die folgenden Spalten enthalten:" + +#: src/Admin/AdminController.php:1804 +msgid "Full Format (from Export):" +msgstr "Vollständiges Format (vom Export):" + #: src/Admin/AdminController.php:1807 msgid "Simplified Format:" msgstr "Vereinfachtes Format:" -#: src/Admin/AdminController.php:1839 -msgid "Skip first row (header row)" -msgstr "Erste Zeile überspringen (Kopfzeile)" +#: src/Admin/AdminController.php:1812 +msgid "Notes:" +msgstr "Hinweise:" -#: src/Admin/OrderLicenseController.php:206 -#: src/Admin/VersionAdminController.php:136 src/Admin/AdminController.php:1359 -#: src/Admin/AdminController.php:1510 -msgid "Status" -msgstr "Status" +#: src/Admin/AdminController.php:1813 +msgid "Leave License Key empty to auto-generate." +msgstr "Lizenzschlüssel leer lassen für automatische Generierung." #: src/Admin/AdminController.php:1814 msgid "Status can be: active, inactive, expired, revoked (defaults to active)." msgstr "" "Status kann sein: active, inactive, expired, revoked (Standard: active)." -#: src/Admin/AdminController.php:247 -msgid "Status updated successfully." -msgstr "Status erfolgreich aktualisiert." +#: src/Admin/AdminController.php:1815 +msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"." +msgstr "Ablaufdatum sollte im Format JJJJ-MM-TT oder \"Lifetime\" sein." -#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 -msgid "Status:" -msgstr "Status:" +#: src/Admin/AdminController.php:1827 +msgid "CSV File" +msgstr "CSV-Datei" -#: src/Email/LicenseExpirationEmail.php:313 -#: src/Email/LicenseExpiredEmail.php:300 -msgid "Subject" -msgstr "Betreff" +#: src/Admin/AdminController.php:1831 +msgid "Select a CSV file to import." +msgstr "Wählen Sie eine CSV-Datei zum Importieren." -#: src/Admin/AdminController.php:1457 -msgid "Test" -msgstr "Testen" +#: src/Admin/AdminController.php:1835 +msgid "Options" +msgstr "Optionen" -#: src/Admin/AdminController.php:1457 -msgid "Test license against API" -msgstr "Lizenz gegen API testen" +#: src/Admin/AdminController.php:1839 +msgid "Skip first row (header row)" +msgstr "Erste Zeile überspringen (Kopfzeile)" -#: src/Admin/AdminController.php:1566 -msgid "Testing license..." -msgstr "Lizenz wird geprüft..." +#: src/Admin/AdminController.php:1844 +msgid "Update existing licenses (by license key)" +msgstr "Bestehende Lizenzen aktualisieren (nach Lizenzschlüssel)" -#: src/Email/LicenseExpirationEmail.php:330 -#: src/Email/LicenseExpiredEmail.php:317 -msgid "Text to appear below the main email content." -msgstr "Text, der unter dem Haupt-E-Mail-Inhalt erscheinen soll." +#: src/Admin/AdminController.php:1847 +msgid "" +"If enabled, licenses with matching keys will be updated instead of skipped." +msgstr "" +"Falls aktiviert, werden Lizenzen mit übereinstimmenden Schlüsseln " +"aktualisiert statt übersprungen." -#: src/Admin/AdminController.php:1800 -msgid "The CSV file should contain the following columns:" -msgstr "Die CSV-Datei sollte die folgenden Spalten enthalten:" +#: src/Admin/AdminController.php:1874 +msgid "License" +msgstr "Lizenz" -#: src/Admin/SettingsController.php:138 -msgid "The URL of the license server (e.g., https://shop.example.com)." -msgstr "Die URL des Lizenzservers (z.B. https://shop.example.com)." +#: src/Admin/AdminController.php:1933 +msgid "No domain specified" +msgstr "Keine Domain angegeben" + +#: src/Api/RestApiController.php:108 src/Api/UpdateController.php:113 +msgid "Too many requests. Please try again later." +msgstr "Zu viele Anfragen. Bitte versuchen Sie es später erneut." + +#: src/Api/RestApiController.php:271 src/Api/RestApiController.php:309 +#: src/License/LicenseManager.php:483 +msgid "License key not found." +msgstr "Lizenzschlüssel nicht gefunden." + +#: src/Api/RestApiController.php:320 +msgid "This license is not valid." +msgstr "Diese Lizenz ist ungültig." + +#: src/Api/RestApiController.php:332 +msgid "License is already activated for this domain." +msgstr "Die Lizenz ist bereits für diese Domain aktiviert." + +#: src/Api/RestApiController.php:344 +msgid "Maximum number of activations reached." +msgstr "Maximale Anzahl der Aktivierungen erreicht." + +#: src/Api/RestApiController.php:358 +msgid "Failed to activate license." +msgstr "Lizenz konnte nicht aktiviert werden." + +#: src/Api/RestApiController.php:366 +msgid "License activated successfully." +msgstr "Lizenz erfolgreich aktiviert." + +#: src/Api/UpdateController.php:224 +msgid "Licensed product not found." +msgstr "Lizenziertes Produkt nicht gefunden." + +#: src/Api/UpdateController.php:238 +msgid "No versions available for this product." +msgstr "Keine Versionen für dieses Produkt verfügbar." + +#: src/Checkout/CheckoutBlocksIntegration.php:79 +#: src/Checkout/CheckoutBlocksIntegration.php:128 +#: src/Checkout/CheckoutController.php:161 +msgid "License Domain" +msgstr "Lizenz-Domain" + +#: src/Checkout/CheckoutBlocksIntegration.php:86 +msgid "Enter a valid domain (without http:// or www)" +msgstr "Geben Sie eine gültige Domain ein (ohne http:// oder www)" + +#: src/Checkout/CheckoutBlocksIntegration.php:124 +#: src/Checkout/CheckoutController.php:192 +msgid "Enter a unique domain for each license (without http:// or www)." +msgstr "" +"Geben Sie für jede Lizenz eine eindeutige Domain ein (ohne http:// oder www)." + +#: src/Checkout/CheckoutBlocksIntegration.php:125 +#: src/Checkout/CheckoutController.php:176 +msgid "" +"Enter the domain where you will use the license (without http:// or www)." +msgstr "" +"Geben Sie die Domain ein, auf der Sie die Lizenz verwenden möchten (ohne " +"http:// oder www)." + +#: src/Checkout/CheckoutBlocksIntegration.php:127 +#: src/Checkout/CheckoutController.php:190 +msgid "License Domains" +msgstr "Lizenz-Domains" + +#: src/Checkout/CheckoutBlocksIntegration.php:130 +msgid "Each license requires a unique domain." +msgstr "Jede Lizenz erfordert eine eindeutige Domain." + +#: src/Checkout/CheckoutBlocksIntegration.php:131 +#: src/Checkout/CheckoutController.php:227 +#, php-format +msgid "License %d:" +msgstr "Lizenz %d:" + +#: src/Checkout/CheckoutController.php:165 +#: src/Checkout/CheckoutController.php:231 +msgid "required" +msgstr "erforderlich" + +#: src/Checkout/CheckoutController.php:326 +msgid "Please enter a domain for your license." +msgstr "Bitte geben Sie eine Domain für Ihre Lizenz ein." + +#: src/Checkout/CheckoutController.php:332 +msgid "Please enter a valid domain for your license." +msgstr "Bitte geben Sie eine gültige Domain für Ihre Lizenz ein." + +#: src/Checkout/CheckoutController.php:359 +#, php-format +msgid "Please enter a domain for %1$s (License %2$d)." +msgstr "Bitte geben Sie eine Domain für %1$s (Lizenz %2$d) ein." + +#: src/Checkout/CheckoutController.php:374 +#, php-format +msgid "Please enter a valid domain for %1$s (License %2$d)." +msgstr "Bitte geben Sie eine gültige Domain für %1$s (Lizenz %2$d) ein." -#. translators: 1: domain name, 2: product name #: src/Checkout/CheckoutController.php:388 #, php-format msgid "" @@ -1640,25 +1495,39 @@ msgstr "" "Die Domain \"%1$s\" wird mehrfach für %2$s verwendet. Jede Lizenz erfordert " "eine eindeutige Domain." -#: src/Admin/OrderLicenseController.php:129 -msgid "" -"The domain specified during checkout. Changing this will not automatically " -"update existing license domains." -msgstr "" -"Die bei der Bestellung angegebene Domain. Eine Änderung aktualisiert nicht " -"automatisch bestehende Lizenz-Domains." +#: src/Checkout/CheckoutController.php:504 +#: src/Checkout/CheckoutController.php:565 +#: src/Checkout/CheckoutController.php:569 +msgid "License Domain:" +msgstr "Lizenz-Domain:" -#: src/Frontend/AccountController.php:656 -msgid "The new domain is the same as the current domain." -msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain." +#: src/Checkout/CheckoutController.php:517 +#: src/Checkout/CheckoutController.php:582 +#: src/Checkout/CheckoutController.php:603 +msgid "License Domains:" +msgstr "Lizenz-Domains:" -#: src/Admin/SettingsController.php:224 -msgid "" -"These settings serve as defaults for new licensed products. Individual " -"product settings override these defaults." -msgstr "" -"Diese Einstellungen dienen als Standard für neue lizensierte Produkte. " -"Individuelle Produkteinstellungen überschreiben diese Standards." +#: src/Checkout/CheckoutController.php:526 +#: src/Checkout/CheckoutController.php:589 +#: src/Checkout/CheckoutController.php:611 +msgid "Unknown Variation" +msgstr "Unbekannte Variante" + +#: src/Checkout/StoreApiExtension.php:93 +msgid "Domains for license activation by product" +msgstr "Domains für Lizenz-Aktivierung nach Produkt" + +#: src/Checkout/StoreApiExtension.php:120 +msgid "Domain for license activation" +msgstr "Domain für Lizenz-Aktivierung" + +#: src/License/PluginLicenseChecker.php:132 +msgid "License settings not configured." +msgstr "Lizenzeinstellungen nicht konfiguriert." + +#: src/License/PluginLicenseChecker.php:168 +msgid "Could not connect to license server." +msgstr "Verbindung zum Lizenzserver konnte nicht hergestellt werden." #: src/License/LicenseManager.php:492 msgid "This license has been revoked." @@ -1676,154 +1545,192 @@ msgstr "Diese Lizenz ist inaktiv." msgid "This license is not valid for this domain." msgstr "Diese Lizenz ist für diese Domain nicht gültig." -#: src/Api/RestApiController.php:294 -msgid "This license is not valid." -msgstr "Diese Lizenz ist ungültig." +#: src/Product/VersionManager.php:166 +msgid "Attachment file not found." +msgstr "Anhangs-Datei nicht gefunden." -#: src/Admin/OrderLicenseController.php:93 -msgid "This order does not contain licensed products." -msgstr "Diese Bestellung enthält keine lizensierten Produkte." +#: src/Product/VersionManager.php:177 +#, php-format +msgid "File checksum does not match. Expected: %1$s, Got: %2$s" +msgstr "Datei-Prüfsumme stimmt nicht überein. Erwartet: %1$s, Erhalten: %2$s" -#: src/Admin/VersionAdminController.php:286 -msgid "This product is not a licensed product." -msgstr "Dieses Produkt ist kein lizensiertes Produkt." +#: src/Product/LicensedProductVariation.php:198 +msgid "Monthly" +msgstr "Monatlich" -#: src/Admin/VersionAdminController.php:275 -msgid "This version already exists." -msgstr "Diese Version existiert bereits." +#: src/Product/LicensedProductVariation.php:202 +msgid "Quarterly" +msgstr "Vierteljährlich" -#: src/Frontend/DownloadController.php:176 -msgid "This version is no longer available for download." -msgstr "Diese Version ist nicht mehr zum Download verfügbar." +#: src/Product/LicensedProductVariation.php:206 +msgid "Yearly" +msgstr "Jährlich" -#: src/Admin/DashboardWidgetController.php:132 -msgid "Time-limited" -msgstr "Zeitbegrenzt" +#: src/Product/LicensedProductVariation.php:211 +#, php-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "%d Tag" +msgstr[1] "%d Tage" -#: src/Email/LicenseExpirationEmail.php:291 +#: src/Product/LicensedProductType.php:94 +msgid "Licensed Product" +msgstr "Lizensiertes Produkt" + +#: src/Product/LicensedProductType.php:95 +msgid "Licensed Variable Product" +msgstr "Lizensiertes variables Produkt" + +#: src/Product/LicensedProductType.php:150 +msgid "License Settings" +msgstr "Lizenz-Einstellungen" + +#: src/Product/LicensedProductType.php:183 +#: src/Product/LicensedProductType.php:543 +#, php-format +msgid "%d days" +msgstr "%d Tage" + +#: src/Product/LicensedProductType.php:193 +#, php-format +msgid "Leave fields empty to use default settings from %s." +msgstr "Felder leer lassen, um Standardeinstellungen von %s zu verwenden." + +#: src/Product/LicensedProductType.php:195 +msgid "WooCommerce > Settings > Licensed Products" +msgstr "WooCommerce > Einstellungen > Lizensierte Produkte" + +#: src/Product/LicensedProductType.php:205 +#, php-format +msgid "Maximum number of domain activations per license. Default: %d" +msgstr "Maximale Anzahl der Domain-Aktivierungen pro Lizenz. Standard: %d" + +#: src/Product/LicensedProductType.php:223 +#, php-format +msgid "Number of days the license is valid. Leave empty for default (%s)." +msgstr "Anzahl Tage, die die Lizenz gültig ist. Leer lassen für Standard (%s)." + +#: src/Product/LicensedProductType.php:241 +#, php-format msgid "" -"To continue using this product, please renew your license before the " -"expiration date." +"If enabled, licenses are bound to the major version at purchase time. " +"Default: %s" msgstr "" -"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz vor " -"dem Ablaufdatum." +"Falls aktiviert, werden Lizenzen an die Hauptversion zum Kaufzeitpunkt " +"gebunden. Standard: %s" -#: src/Email/LicenseExpiredEmail.php:278 -msgid "To continue using this product, please renew your license." -msgstr "" -"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz." +#: src/Product/LicensedProductType.php:242 +msgid "Yes" +msgstr "Ja" + +#: src/Product/LicensedProductType.php:242 +msgid "No" +msgstr "Nein" + +#: src/Product/LicensedProductType.php:438 +msgid "Version:" +msgstr "Version:" + +#: src/Product/LicensedProductType.php:514 +msgid "Licensed products are always virtual" +msgstr "Lizenzierte Produkte sind immer virtuell" + +#: src/Product/LicensedProductType.php:516 +msgid "Virtual" +msgstr "Virtuell" + +#: src/Product/LicensedProductType.php:549 +msgid "License Duration (Days)" +msgstr "Lizenz-Gültigkeit (Tage)" + +#: src/Product/LicensedProductType.php:558 +msgid "Leave empty for parent default. 0 = Lifetime." +msgstr "Leer lassen für übergeordneten Standard. 0 = Lebenslang." + +#: src/Product/LicensedProductType.php:570 +msgid "Leave empty for parent default." +msgstr "Leer lassen für übergeordneten Standard." + +#: src/Frontend/DownloadController.php:80 +#: src/Frontend/DownloadController.php:104 +msgid "Invalid download link." +msgstr "Ungültiger Download-Link." + +#: src/Frontend/DownloadController.php:81 +#: src/Frontend/DownloadController.php:91 +#: src/Frontend/DownloadController.php:105 +#: src/Frontend/DownloadController.php:120 +#: src/Frontend/DownloadController.php:130 +#: src/Frontend/DownloadController.php:140 +#: src/Frontend/DownloadController.php:149 +#: src/Frontend/DownloadController.php:159 +#: src/Frontend/DownloadController.php:168 +#: src/Frontend/DownloadController.php:177 +#: src/Frontend/DownloadController.php:199 +#: src/Frontend/DownloadController.php:215 +msgid "Download Error" +msgstr "Download-Fehler" + +#: src/Frontend/DownloadController.php:90 +msgid "Invalid download link format." +msgstr "Ungültiges Download-Link-Format." #: src/Frontend/DownloadController.php:119 msgid "Too many download attempts. Please try again later." msgstr "Zu viele Download-Versuche. Bitte versuchen Sie es später erneut." -#: src/Api/RestApiController.php:107 src/Api/UpdateController.php:112 -msgid "Too many requests. Please try again later." -msgstr "Zu viele Anfragen. Bitte versuchen Sie es später erneut." +#: src/Frontend/DownloadController.php:139 +msgid "You do not have permission to download this file." +msgstr "Sie haben keine Berechtigung, diese Datei herunterzuladen." -#: src/Frontend/AccountController.php:605 -msgid "Too many transfer attempts. Please try again later." -msgstr "Zu viele Übertragungsversuche. Bitte versuchen Sie es später erneut." +#: src/Frontend/DownloadController.php:148 +msgid "Your license is not active. Please contact support." +msgstr "Ihre Lizenz ist nicht aktiv. Bitte kontaktieren Sie den Support." -#: src/Admin/DownloadWidgetController.php:145 -msgid "Top Products" -msgstr "Top-Produkte" +#: src/Frontend/DownloadController.php:158 +msgid "Version not found." +msgstr "Version nicht gefunden." -#: src/Admin/DownloadWidgetController.php:163 -msgid "Top Versions" -msgstr "Top-Versionen" +#: src/Frontend/DownloadController.php:167 +msgid "Version does not match your licensed product." +msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein." -#: src/Admin/DownloadWidgetController.php:140 -msgid "Total Downloads" -msgstr "Gesamte Downloads" +#: src/Frontend/DownloadController.php:176 +msgid "This version is no longer available for download." +msgstr "Diese Version ist nicht mehr zum Download verfügbar." -#: src/Admin/DashboardWidgetController.php:113 -#: src/Admin/AdminController.php:964 -msgid "Total Licenses" -msgstr "Lizenzen insgesamt" +#: src/Frontend/DownloadController.php:198 +msgid "No download file available for this version." +msgstr "Keine Download-Datei für diese Version verfügbar." -#: src/Admin/AdminController.php:1464 -msgid "Transfer" -msgstr "Übertragen" +#: src/Frontend/DownloadController.php:214 +msgid "Download file not found." +msgstr "Download-Datei nicht gefunden." -#: src/Admin/AdminController.php:1600 src/Frontend/AccountController.php:546 -msgid "Transfer License" -msgstr "Lizenz übertragen" +#: src/Frontend/AccountController.php:108 +msgid "Please log in to view your licenses." +msgstr "Bitte melden Sie sich an, um Ihre Lizenzen zu sehen." -#: src/Admin/AdminController.php:1581 src/Frontend/AccountController.php:527 -msgid "Transfer License to New Domain" -msgstr "Lizenz auf neue Domain übertragen" +#: src/Frontend/AccountController.php:337 +msgid "All Domains" +msgstr "Alle Domains" -#: src/Frontend/AccountController.php:589 -msgid "Transfer failed. Please try again." -msgstr "Übertragung fehlgeschlagen. Bitte versuchen Sie es erneut." +#: src/Frontend/AccountController.php:361 +msgid "No licenses found matching your filters." +msgstr "Keine Lizenzen gefunden, die Ihren Filtern entsprechen." -#: src/Admin/AdminController.php:1464 src/Frontend/AccountController.php:411 -msgid "Transfer to new domain" -msgstr "Auf neue Domain übertragen" +#: src/Frontend/AccountController.php:363 +msgid "You have no licenses yet." +msgstr "Sie haben noch keine Lizenzen." -#: src/Admin/OrderLicenseController.php:227 src/Admin/AdminController.php:210 -#: src/Admin/AdminController.php:1083 -msgid "Unknown" -msgstr "Unbekannt" +#: src/Frontend/AccountController.php:386 +#, php-format +msgid "Order #%s" +msgstr "Bestellung #%s" -#: src/Admin/OrderLicenseController.php:119 src/Admin/AdminController.php:403 -#: src/Checkout/CheckoutController.php:534 -#: src/Checkout/CheckoutController.php:595 -#: src/Checkout/CheckoutController.php:617 src/License/LicenseManager.php:886 -#: src/Product/VersionManager.php:349 src/Product/VersionManager.php:361 -#: src/Frontend/AccountController.php:190 -#: src/Frontend/AccountController.php:232 -#: src/Email/LicenseExpirationEmail.php:107 -#: src/Email/LicenseExpiredEmail.php:99 -msgid "Unknown Product" -msgstr "Unbekanntes Produkt" - -#: src/Checkout/CheckoutController.php:526 -#: src/Checkout/CheckoutController.php:589 -#: src/Checkout/CheckoutController.php:611 -msgid "Unknown Variation" -msgstr "Unbekannte Variante" - -#: src/Admin/AdminController.php:1844 -msgid "Update existing licenses (by license key)" -msgstr "Bestehende Lizenzen aktualisieren (nach Lizenzschlüssel)" - -#: src/Admin/AdminController.php:1795 -msgid "" -"Upload a CSV file to import licenses. You can use the exported CSV format or " -"a simplified format." -msgstr "" -"Laden Sie eine CSV-Datei hoch, um Lizenzen zu importieren. Sie können das " -"exportierte CSV-Format oder ein vereinfachtes Format verwenden." - -#: src/Admin/VersionAdminController.php:108 -msgid "" -"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." -msgstr "" -"Laden Sie eine SHA256-Prüfsummendatei (.sha256 oder .txt) hoch, um die " -"Dateiintegrität zu überprüfen." - -#: src/Admin/VersionAdminController.php:94 -msgid "" -"Upload or select a file from the media library. Version will be auto-" -"detected from filename (e.g., plugin-v1.2.3.zip)." -msgstr "" -"Laden Sie eine Datei hoch oder wählen Sie eine aus der Mediathek. Die " -"Version wird automatisch aus dem Dateinamen erkannt (z.B. plugin-v1.2.3.zip)." - -#: src/Admin/VersionAdminController.php:161 -#: src/Admin/VersionAdminController.php:393 -msgid "Uploaded file" -msgstr "Hochgeladene Datei" - -#: src/Admin/VersionAdminController.php:80 -msgid "Use semantic versioning (e.g., 1.0.0)" -msgstr "Verwenden Sie semantische Versionierung (z.B. 1.0.0)" - -#: src/Admin/VersionAdminController.php:233 -msgid "Use this file" -msgstr "Diese Datei verwenden" +#: src/Frontend/AccountController.php:435 +msgid "API Verification Secret" +msgstr "API-Verifizierungs-Secret" #: src/Frontend/AccountController.php:440 msgid "Use this secret to verify signed API responses. Keep it secure." @@ -1831,18 +1738,9 @@ msgstr "" "Verwenden Sie dieses Secret, um signierte API-Antworten zu verifizieren. " "Bewahren Sie es sicher auf." -#: src/Admin/SettingsController.php:367 src/Admin/SettingsController.php:403 -msgid "Verify License" -msgstr "Lizenz überprüfen" - -#: src/Admin/SettingsController.php:381 -msgid "Verifying..." -msgstr "Überprüfe..." - -#: src/Admin/VersionAdminController.php:77 -#: src/Admin/VersionAdminController.php:132 -msgid "Version" -msgstr "Version" +#: src/Frontend/AccountController.php:457 +msgid "Available Downloads" +msgstr "Verfügbare Downloads" #: src/Frontend/AccountController.php:466 #: src/Frontend/AccountController.php:499 @@ -1850,161 +1748,75 @@ msgstr "Version" msgid "Version %s" msgstr "Version %s" -#: src/Admin/VersionAdminController.php:331 -#: src/Admin/VersionAdminController.php:358 -msgid "Version ID is required." -msgstr "Versions-ID ist erforderlich." +#: src/Frontend/AccountController.php:468 +msgid "Latest" +msgstr "Neueste" -#: src/Admin/VersionAdminController.php:311 -msgid "Version added successfully." -msgstr "Version erfolgreich hinzugefügt." +#: src/Frontend/AccountController.php:488 +#, php-format +msgid "Older versions (%d)" +msgstr "Ältere Versionen (%d)" -#: src/Admin/VersionAdminController.php:340 -msgid "Version deleted successfully." -msgstr "Version erfolgreich gelöscht." +#: src/Frontend/AccountController.php:588 +#: src/Frontend/AccountController.php:664 +msgid "License transferred successfully!" +msgstr "Lizenz erfolgreich übertragen!" -#: src/Frontend/DownloadController.php:167 -msgid "Version does not match your licensed product." -msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein." +#: src/Frontend/AccountController.php:589 +msgid "Transfer failed. Please try again." +msgstr "Übertragung fehlgeschlagen. Bitte versuchen Sie es erneut." -#: src/Frontend/DownloadController.php:158 -msgid "Version not found." -msgstr "Version nicht gefunden." - -#: src/Admin/VersionAdminController.php:368 -msgid "Version updated successfully." -msgstr "Version erfolgreich aktualisiert." - -#: src/Product/LicensedProductType.php:438 -msgid "Version:" -msgstr "Version:" - -#: src/Admin/DashboardWidgetController.php:142 -msgid "View All Licenses" -msgstr "Alle Lizenzen anzeigen" - -#: src/Admin/AdminController.php:1327 -msgid "View Dashboard" -msgstr "Dashboard anzeigen" - -#: src/Admin/AdminController.php:1014 -msgid "View Licenses" -msgstr "Lizenzen anzeigen" - -#: src/Email/LicenseExpirationEmail.php:235 -#: src/Email/LicenseExpirationEmail.php:281 -#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 -msgid "View My Licenses" -msgstr "Meine Lizenzen anzeigen" - -#: src/Admin/OrderLicenseController.php:267 -msgid "View in Licenses" -msgstr "In Lizenzen anzeigen" - -#: src/Product/LicensedProductType.php:516 -msgid "Virtual" -msgstr "Virtuell" - -#: src/Plugin.php:353 -msgid "WC Licensed Product" -msgstr "WC Licensed Product" - -#: wc-licensed-product.php:119 -msgid "WC Licensed Product requires WooCommerce to be installed and active." -msgstr "" -"WC Licensed Product benötigt WooCommerce als installierte und aktivierte " -"Erweiterung." - -#: src/Admin/SettingsController.php:284 -msgid "WooCommerce > Settings > Emails > License Expiration Warning" -msgstr "WooCommerce > Einstellungen > E-Mails > Lizenzablauf-Warnung" - -#: src/Product/LicensedProductType.php:195 -msgid "WooCommerce > Settings > Licensed Products" -msgstr "WooCommerce > Einstellungen > Lizensierte Produkte" - -#: src/Update/PluginUpdateChecker.php:354 +#: src/Frontend/AccountController.php:590 msgid "" -"WooCommerce plugin for selling licensed software products with domain-bound " -"license keys." +"Are you sure you want to transfer this license to a new domain? This action " +"cannot be undone." msgstr "" -"WooCommerce-Plugin zum Verkauf von lizenzierten Softwareprodukten mit " -"domaingebundenen Lizenzschlüsseln." +"Sind Sie sicher, dass Sie diese Lizenz auf eine neue Domain übertragen " +"möchten? Diese Aktion kann nicht rückgängig gemacht werden." -#: src/Email/LicenseEmailController.php:332 -msgid "YOUR LICENSE KEYS" -msgstr "IHRE LIZENZSCHLÜSSEL" +#: src/Frontend/AccountController.php:605 +msgid "Too many transfer attempts. Please try again later." +msgstr "Zu viele Übertragungsversuche. Bitte versuchen Sie es später erneut." -#: src/Product/LicensedProductVariation.php:206 -msgid "Yearly" -msgstr "Jährlich" +#: src/Frontend/AccountController.php:618 +msgid "Please log in to transfer a license." +msgstr "Bitte melden Sie sich an, um eine Lizenz zu übertragen." -#: src/Product/LicensedProductType.php:242 -msgid "Yes" -msgstr "Ja" - -#: src/Email/LicenseEmailController.php:319 -#: src/Email/LicenseEmailController.php:357 -msgid "You can also view your licenses in your account under \"Licenses\"." -msgstr "" -"Sie können Ihre Lizenzen auch in Ihrem Konto unter \"Lizenzen\" einsehen." - -#: src/Frontend/DownloadController.php:139 -msgid "You do not have permission to download this file." -msgstr "Sie haben keine Berechtigung, diese Datei herunterzuladen." - -#: src/Admin/AdminController.php:609 -msgid "You do not have permission to export licenses." -msgstr "Sie haben keine Berechtigung, Lizenzen zu exportieren." - -#: src/Admin/AdminController.php:653 -msgid "You do not have permission to import licenses." -msgstr "Sie haben keine Berechtigung, Lizenzen zu importieren." +#: src/Frontend/AccountController.php:624 +msgid "Invalid license." +msgstr "Ungültige Lizenz." #: src/Frontend/AccountController.php:642 msgid "You do not have permission to transfer this license." msgstr "Sie haben keine Berechtigung, diese Lizenz zu übertragen." -#: src/Frontend/AccountController.php:363 -msgid "You have no licenses yet." -msgstr "Sie haben noch keine Lizenzen." +#: src/Frontend/AccountController.php:647 +msgid "Revoked licenses cannot be transferred." +msgstr "Widerrufene Lizenzen können nicht übertragen werden." -#: src/Email/LicenseEmailController.php:268 -msgid "Your License Keys" -msgstr "Ihre Lizenzschlüssel" +#: src/Frontend/AccountController.php:651 +msgid "Expired licenses cannot be transferred." +msgstr "Abgelaufene Lizenzen können nicht übertragen werden." -#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 -#, php-format -msgid "Your license for %1$s has expired on %2$s." -msgstr "Ihre Lizenz für %1$s ist am %2$s abgelaufen." +#: src/Frontend/AccountController.php:656 +msgid "The new domain is the same as the current domain." +msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain." -#: src/Email/LicenseExpirationEmail.php:189 -#: src/Email/LicenseExpirationEmail.php:257 -#, php-format -msgid "Your license for %1$s will expire in %2$d days (%3$s)." -msgstr "Ihre Lizenz für %1$s läuft in %2$d Tagen ab (%3$s)." +#: src/Frontend/AccountController.php:668 +msgid "Failed to transfer license. Please try again." +msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut." -#: src/Email/LicenseExpirationEmail.php:181 -#: src/Email/LicenseExpirationEmail.php:251 -#, php-format -msgid "Your license for %s will expire tomorrow (%s)." -msgstr "Ihre Lizenz für %s läuft morgen ab (%s)." +#: src/Email/LicenseExpirationEmail.php:55 +msgid "License Expiration Warning" +msgstr "Lizenzablauf-Warnung" -#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 +#: src/Email/LicenseExpirationEmail.php:56 msgid "" -"Your license is no longer valid and the product will stop working until you " -"renew." +"License expiration warning emails are sent to customers when their licenses " +"are about to expire." msgstr "" -"Ihre Lizenz ist nicht mehr gültig und das Produkt wird nicht mehr " -"funktionieren, bis Sie verlängern." - -#: src/Frontend/DownloadController.php:148 -msgid "Your license is not active. Please contact support." -msgstr "Ihre Lizenz ist nicht aktiv. Bitte kontaktieren Sie den Support." - -#: src/Admin/SettingsController.php:146 -msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." -msgstr "Ihr Lizenzschlüssel im Format XXXX-XXXX-XXXX-XXXX." +"Lizenzablauf-Warnungs-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " +"bald ablaufen." #: src/Email/LicenseExpirationEmail.php:74 msgid "" @@ -2014,44 +1826,230 @@ msgstr "" "[{site_title}] Ihre Lizenz für {product_name} läuft in {days_remaining} " "Tagen ab" +#: src/Email/LicenseExpirationEmail.php:82 +msgid "License Expiration Notice" +msgstr "Lizenzablauf-Benachrichtigung" + +#: src/Email/LicenseExpirationEmail.php:176 +#: src/Email/LicenseExpirationEmail.php:246 +#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 +#, php-format +msgid "Hello %s," +msgstr "Guten Tag %s," + +#: src/Email/LicenseExpirationEmail.php:181 +#: src/Email/LicenseExpirationEmail.php:251 +#, php-format +msgid "Your license for %s will expire tomorrow (%s)." +msgstr "Ihre Lizenz für %s läuft morgen ab (%s)." + +#: src/Email/LicenseExpirationEmail.php:189 +#: src/Email/LicenseExpirationEmail.php:257 +#, php-format +msgid "Your license for %1$s will expire in %2$d days (%3$s)." +msgstr "Ihre Lizenz für %1$s läuft in %2$d Tagen ab (%3$s)." + +#: src/Email/LicenseExpirationEmail.php:197 +#: src/Email/LicenseExpirationEmail.php:266 +msgid "License Details" +msgstr "Lizenzdetails" + +#: src/Email/LicenseExpirationEmail.php:203 +#: src/Email/LicenseExpirationEmail.php:269 +#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 +msgid "Product:" +msgstr "Produkt:" + +#: src/Email/LicenseExpirationEmail.php:207 +#: src/Email/LicenseExpirationEmail.php:270 +#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 +#: src/Email/LicenseEmailController.php:343 +msgid "License Key:" +msgstr "Lizenzschlüssel:" + +#: src/Email/LicenseExpirationEmail.php:215 +#: src/Email/LicenseExpirationEmail.php:271 +#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 +#: src/Email/LicenseEmailController.php:345 +msgid "Domain:" +msgstr "Domain:" + +#: src/Email/LicenseExpirationEmail.php:219 +#: src/Email/LicenseExpirationEmail.php:272 +#: src/Email/LicenseEmailController.php:347 +msgid "Expires:" +msgstr "Läuft ab:" + +#: src/Email/LicenseExpirationEmail.php:235 +#: src/Email/LicenseExpirationEmail.php:281 +#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 +msgid "View My Licenses" +msgstr "Meine Lizenzen anzeigen" + +#: src/Email/LicenseExpirationEmail.php:291 +msgid "" +"To continue using this product, please renew your license before the " +"expiration date." +msgstr "" +"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz vor " +"dem Ablaufdatum." + +#: src/Email/LicenseExpirationEmail.php:301 +#: src/Email/LicenseExpiredEmail.php:288 +#, php-format +msgid "Available placeholders: %s" +msgstr "Verfügbare Platzhalter: %s" + +#: src/Email/LicenseExpirationEmail.php:307 +#: src/Email/LicenseExpiredEmail.php:294 +msgid "Enable/Disable" +msgstr "Aktivieren/Deaktivieren" + +#: src/Email/LicenseExpirationEmail.php:309 +#: src/Email/LicenseExpiredEmail.php:296 +msgid "Enable this email notification" +msgstr "Diese E-Mail-Benachrichtigung aktivieren" + +#: src/Email/LicenseExpirationEmail.php:313 +#: src/Email/LicenseExpiredEmail.php:300 +msgid "Subject" +msgstr "Betreff" + +#: src/Email/LicenseExpirationEmail.php:321 +#: src/Email/LicenseExpiredEmail.php:308 +msgid "Email heading" +msgstr "E-Mail-Überschrift" + +#: src/Email/LicenseExpirationEmail.php:329 +#: src/Email/LicenseExpiredEmail.php:316 +msgid "Additional content" +msgstr "Zusätzlicher Inhalt" + +#: src/Email/LicenseExpirationEmail.php:330 +#: src/Email/LicenseExpiredEmail.php:317 +msgid "Text to appear below the main email content." +msgstr "Text, der unter dem Haupt-E-Mail-Inhalt erscheinen soll." + +#: src/Email/LicenseExpirationEmail.php:338 +#: src/Email/LicenseExpiredEmail.php:325 +msgid "Email type" +msgstr "E-Mail-Typ" + +#: src/Email/LicenseExpirationEmail.php:340 +#: src/Email/LicenseExpiredEmail.php:327 +msgid "Choose which format of email to send." +msgstr "Wählen Sie, welches E-Mail-Format gesendet werden soll." + +#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 +msgid "License Expired" +msgstr "Lizenz abgelaufen" + +#: src/Email/LicenseExpiredEmail.php:51 +msgid "" +"License expired emails are sent to customers when their licenses have " +"expired." +msgstr "" +"Lizenzablauf-E-Mails werden an Kunden gesendet, wenn ihre Lizenzen " +"abgelaufen sind." + #: src/Email/LicenseExpiredEmail.php:68 msgid "[{site_title}] Your license for {product_name} has expired" msgstr "[{site_title}] Ihre Lizenz für {product_name} ist abgelaufen" -#: src/Admin/OrderLicenseController.php:137 -#: src/Checkout/CheckoutBlocksIntegration.php:84 -#: src/Checkout/CheckoutBlocksIntegration.php:122 -#: src/Checkout/CheckoutController.php:172 -#: src/Checkout/CheckoutController.php:238 -msgid "example.com" -msgstr "beispiel.ch" +#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 +#, php-format +msgid "Your license for %1$s has expired on %2$s." +msgstr "Ihre Lizenz für %1$s ist am %2$s abgelaufen." -#: src/Admin/AdminController.php:1325 -msgid "filtered" -msgstr "gefiltert" +#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 +msgid "" +"Your license is no longer valid and the product will stop working until you " +"renew." +msgstr "" +"Ihre Lizenz ist nicht mehr gültig und das Produkt wird nicht mehr " +"funktionieren, bis Sie verlängern." -#: src/Admin/AdminController.php:1317 -msgid "item" -msgstr "Eintrag" +#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 +msgid "Expired License Details" +msgstr "Details der abgelaufenen Lizenz" -#: src/Admin/AdminController.php:1317 -msgid "items" -msgstr "Einträge" +#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 +msgid "Expired on:" +msgstr "Abgelaufen am:" -#: src/Admin/AdminController.php:1323 src/Email/LicenseEmailController.php:338 -msgid "license" -msgid_plural "licenses" -msgstr[0] "Lizenz" -msgstr[1] "Lizenzen" +#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 +msgid "Status:" +msgstr "Status:" -#: src/Admin/AdminController.php:1323 -msgid "licenses" -msgstr "Lizenzen" +#: src/Email/LicenseExpiredEmail.php:278 +msgid "To continue using this product, please renew your license." +msgstr "" +"Um dieses Produkt weiterhin zu nutzen, verlängern Sie bitte Ihre Lizenz." -#: src/Checkout/CheckoutController.php:165 -#: src/Checkout/CheckoutController.php:231 -msgid "required" -msgstr "erforderlich" +#: src/Email/LicenseEmailController.php:212 +#: src/Email/LicenseEmailController.php:220 +msgid "License Keys:" +msgstr "Lizenzschlüssel:" + +#: src/Email/LicenseEmailController.php:268 +msgid "Your License Keys" +msgstr "Ihre Lizenzschlüssel" + +#: src/Email/LicenseEmailController.php:277 +#, php-format +msgid "%d license" +msgid_plural "%d licenses" +msgstr[0] "%d Lizenz" +msgstr[1] "%d Lizenzen" + +#: src/Email/LicenseEmailController.php:308 +#: src/Email/LicenseEmailController.php:352 +msgid "Never" +msgstr "Nie" + +#: src/Email/LicenseEmailController.php:319 +#: src/Email/LicenseEmailController.php:357 +msgid "You can also view your licenses in your account under \"Licenses\"." +msgstr "" +"Sie können Ihre Lizenzen auch in Ihrem Konto unter \"Lizenzen\" einsehen." + +#: src/Email/LicenseEmailController.php:332 +msgid "YOUR LICENSE KEYS" +msgstr "IHRE LIZENZSCHLÜSSEL" + +#: src/Update/PluginUpdateChecker.php:354 +msgid "" +"WooCommerce plugin for selling licensed software products with domain-bound " +"license keys." +msgstr "" +"WooCommerce-Plugin zum Verkauf von lizenzierten Softwareprodukten mit " +"domaingebundenen Lizenzschlüsseln." + +#: src/Plugin.php:357 +msgid "WC Licensed Product" +msgstr "WC Licensed Product" + +#: src/Plugin.php:358 +msgid "" +"Plugin license is not configured or invalid. Frontend features are disabled." +msgstr "" +"Plugin-Lizenz ist nicht konfiguriert oder ungültig. Frontend-Funktionen sind " +"deaktiviert." + +#: src/Plugin.php:359 +msgid "Configure License" +msgstr "Lizenz konfigurieren" + +#: wc-licensed-product.php:61 +#, php-format +msgid "%s requires WooCommerce to be installed and active." +msgstr "%s benötigt WooCommerce als installierte und aktivierte Erweiterung." + +#: wc-licensed-product.php:119 +msgid "WC Licensed Product requires WooCommerce to be installed and active." +msgstr "" +"WC Licensed Product benötigt WooCommerce als installierte und aktivierte " +"Erweiterung." #, php-format #~ msgid "licensed_domains[%s][%d]" diff --git a/languages/wc-licensed-product.pot b/languages/wc-licensed-product.pot index 8f3ce3b..c9cd3ee 100644 --- a/languages/wc-licensed-product.pot +++ b/languages/wc-licensed-product.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: WooCommerce Licensed Product 0.7.1\n" +"Project-Id-Version: WooCommerce Licensed Product 0.7.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-28 12:03+0100\n" +"POT-Creation-Date: 2026-02-03 10:41+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,140 +18,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#. translators: %d: number of days -#: src/Product/LicensedProductVariation.php:211 -#, php-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "" -msgstr[1] "" - -#: src/Product/LicensedProductType.php:183 -#: src/Product/LicensedProductType.php:543 -#, php-format -msgid "%d days" +#: src/Admin/DashboardWidgetController.php:47 +msgid "License Statistics" msgstr "" -#. translators: %d: number of errors -#: src/Admin/AdminController.php:1246 -#, php-format -msgid "%d error." -msgid_plural "%d errors." -msgstr[0] "" -msgstr[1] "" - -#: src/Email/LicenseEmailController.php:277 -#, php-format -msgid "%d license" -msgid_plural "%d licenses" -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1170 -#, php-format -msgid "%d license activated." -msgid_plural "%d licenses activated." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1178 -#, php-format -msgid "%d license deactivated." -msgid_plural "%d licenses deactivated." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1194 -#, php-format -msgid "%d license deleted." -msgid_plural "%d licenses deleted." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1202 -#, php-format -msgid "%d license extended." -msgid_plural "%d licenses extended." -msgstr[0] "" -msgstr[1] "" - -#: src/Admin/OrderLicenseController.php:529 -#, php-format -msgid "%d license generated successfully." -msgid_plural "%d licenses generated successfully." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses imported -#: src/Admin/AdminController.php:1223 -#, php-format -msgid "%d license imported." -msgid_plural "%d licenses imported." -msgstr[0] "" -msgstr[1] "" - -#: src/Admin/AdminController.php:1006 -#, php-format -msgid "%d license is expiring within the next 30 days." -msgid_plural "%d licenses are expiring within the next 30 days." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses -#: src/Admin/AdminController.php:1186 -#, php-format -msgid "%d license revoked." -msgid_plural "%d licenses revoked." -msgstr[0] "" -msgstr[1] "" - -#: src/Admin/OrderLicenseController.php:293 -#, php-format -msgid "%d licensed product is missing a license." -msgid_plural "%d licensed products are missing licenses." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses skipped -#: src/Admin/AdminController.php:1238 -#, php-format -msgid "%d skipped." -msgid_plural "%d skipped." -msgstr[0] "" -msgstr[1] "" - -#. translators: %d: number of licenses updated -#: src/Admin/AdminController.php:1230 -#, php-format -msgid "%d updated." -msgid_plural "%d updated." -msgstr[0] "" -msgstr[1] "" - -#. translators: %s: WooCommerce plugin name -#: wc-licensed-product.php:61 -#, php-format -msgid "%s requires WooCommerce to be installed and active." -msgstr "" - -#: src/Frontend/AccountController.php:435 -msgid "API Verification Secret" -msgstr "" - -#: src/Admin/OrderLicenseController.php:208 -#: src/Admin/VersionAdminController.php:138 src/Admin/AdminController.php:1362 -#: src/Admin/AdminController.php:1513 -msgid "Actions" -msgstr "" - -#: src/Admin/VersionAdminController.php:184 -#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1337 -#: src/Admin/AdminController.php:1522 -msgid "Activate" +#: src/Admin/DashboardWidgetController.php:113 +#: src/Admin/AdminController.php:964 +msgid "Total Licenses" msgstr "" #: src/Admin/DashboardWidgetController.php:117 @@ -162,405 +35,8 @@ msgstr "" msgid "Active" msgstr "" -#: src/Admin/VersionAdminController.php:74 -msgid "Add New Version" -msgstr "" - -#: src/Admin/VersionAdminController.php:120 -msgid "Add Version" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:329 -#: src/Email/LicenseExpiredEmail.php:316 -msgid "Additional content" -msgstr "" - -#: src/Frontend/AccountController.php:337 -msgid "All Domains" -msgstr "" - -#: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:323 -msgid "All Products" -msgstr "" - -#: src/Admin/AdminController.php:1295 -msgid "All Statuses" -msgstr "" - -#: src/Admin/OrderLicenseController.php:542 -msgid "All licenses already exist for this order." -msgstr "" - -#: src/Admin/SettingsController.php:260 -msgid "" -"Allow customers to purchase multiple licenses for different domains at once. " -"Each unit in cart quantity requires a unique domain." -msgstr "" - -#: src/Admin/AdminController.php:1770 -msgid "An error occurred during import." -msgstr "" - -#: src/Admin/VersionAdminController.php:231 -msgid "An error occurred. Please try again." -msgstr "" - -#: src/Admin/AdminController.php:1345 src/Admin/AdminController.php:1530 -msgid "Apply" -msgstr "" - -#: src/Admin/AdminController.php:1491 -msgid "Are you sure you want to delete this license?" -msgstr "" - -#: src/Admin/VersionAdminController.php:228 -msgid "Are you sure you want to delete this version?" -msgstr "" - -#: src/Admin/AdminController.php:162 -msgid "" -"Are you sure you want to revoke this license? This action cannot be undone." -msgstr "" - -#: src/Frontend/AccountController.php:590 -msgid "" -"Are you sure you want to transfer this license to a new domain? This action " -"cannot be undone." -msgstr "" - -#: src/Admin/AdminController.php:1482 -msgid "Are you sure?" -msgstr "" - -#: src/Product/VersionManager.php:166 -msgid "Attachment file not found." -msgstr "" - -#: src/Admin/AdminController.php:1001 -msgid "Attention:" -msgstr "" - -#: src/Admin/SettingsController.php:65 src/Admin/SettingsController.php:174 -msgid "Auto-Updates" -msgstr "" - -#: src/Admin/SettingsController.php:187 -msgid "Automatically Install Updates" -msgstr "" - -#: src/Admin/SettingsController.php:191 -msgid "" -"Automatically install updates when they become available (requires update " -"notifications enabled)." -msgstr "" - -#: src/Frontend/AccountController.php:457 -msgid "Available Downloads" -msgstr "" - -#. translators: %s: list of placeholders -#: src/Email/LicenseExpirationEmail.php:301 -#: src/Email/LicenseExpiredEmail.php:288 -#, php-format -msgid "Available placeholders: %s" -msgstr "" - -#: src/Admin/AdminController.php:1736 -msgid "Back to Licenses" -msgstr "" - -#: src/Admin/SettingsController.php:251 src/Product/LicensedProductType.php:238 -msgid "Bind to Major Version" -msgstr "" - -#: src/Admin/AdminController.php:1336 src/Admin/AdminController.php:1521 -msgid "Bulk Actions" -msgstr "" - -#: src/Admin/AdminController.php:1827 -msgid "CSV File" -msgstr "" - -#: src/Admin/AdminController.php:1798 -msgid "CSV Format" -msgstr "" - -#: src/Admin/OrderLicenseController.php:244 src/Admin/AdminController.php:164 -#: src/Admin/AdminController.php:1405 src/Admin/AdminController.php:1425 -#: src/Admin/AdminController.php:1446 src/Admin/AdminController.php:1601 -#: src/Frontend/AccountController.php:548 -msgid "Cancel" -msgstr "" - -#: src/Admin/SettingsController.php:197 -msgid "Check Frequency (Hours)" -msgstr "" - -#: src/Admin/SettingsController.php:182 -msgid "" -"Check for and display available updates from the license server in WordPress " -"admin." -msgstr "" - -#: src/Admin/VersionAdminController.php:98 -msgid "Checksum File" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:340 -#: src/Email/LicenseExpiredEmail.php:327 -msgid "Choose which format of email to send." -msgstr "" - -#: src/Admin/AdminController.php:1312 src/Frontend/AccountController.php:350 -msgid "Clear" -msgstr "" - -#: src/Admin/AdminController.php:1572 src/Frontend/AccountController.php:526 -msgid "Close" -msgstr "" - -#: src/Plugin.php:355 -msgid "Configure License" -msgstr "" - -#: src/Admin/SettingsController.php:176 -msgid "Configure automatic plugin updates from the license server." -msgstr "" - -#: src/Admin/SettingsController.php:132 -msgid "" -"Configure the license for this plugin. A valid license is required for " -"frontend features to work." -msgstr "" - -#. translators: %s: URL to WooCommerce email settings -#: src/Admin/SettingsController.php:282 -#, php-format -msgid "" -"Configure when expiration warning emails are sent. To customize the email " -"template, enable/disable, or change the subject, go to %s." -msgstr "" - -#: src/Admin/AdminController.php:167 src/Frontend/AccountController.php:586 -msgid "Copied!" -msgstr "" - -#: src/Admin/AdminController.php:168 src/Frontend/AccountController.php:587 -msgid "Copy failed" -msgstr "" - -#: src/Admin/AdminController.php:1378 src/Frontend/AccountController.php:404 -#: src/Frontend/AccountController.php:444 -msgid "Copy to clipboard" -msgstr "" - -#: src/License/PluginLicenseChecker.php:168 -msgid "Could not connect to license server." -msgstr "" - -#: src/Admin/AdminController.php:1360 src/Admin/AdminController.php:1511 -msgid "Created" -msgstr "" - -#: src/Admin/AdminController.php:1588 src/Frontend/AccountController.php:532 -msgid "Current Domain" -msgstr "" - -#: src/Admin/AdminController.php:1357 src/Admin/AdminController.php:1508 -#: src/Email/LicenseExpirationEmail.php:104 -#: src/Email/LicenseExpiredEmail.php:96 -msgid "Customer" -msgstr "" - -#: src/Admin/SettingsController.php:291 -msgid "Days before expiration to send the first warning email." -msgstr "" - -#: src/Admin/SettingsController.php:302 -msgid "" -"Days before expiration to send the second warning email. Set to 0 to disable." -msgstr "" - -#: src/Admin/VersionAdminController.php:184 -#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1338 -#: src/Admin/AdminController.php:1523 -msgid "Deactivate" -msgstr "" - -#: src/Admin/SettingsController.php:222 -msgid "Default License Settings" -msgstr "" - -#: src/Admin/SettingsController.php:66 -msgid "Default Settings" -msgstr "" - -#: src/Admin/SettingsController.php:230 -msgid "Default maximum number of domain activations per license." -msgstr "" - -#: src/Admin/SettingsController.php:241 -msgid "" -"Default number of days a license is valid. Leave empty or set to 0 for " -"lifetime licenses." -msgstr "" - -#: src/Admin/VersionAdminController.php:187 -#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1343 -#: src/Admin/AdminController.php:1492 src/Admin/AdminController.php:1528 -msgid "Delete" -msgstr "" - -#: src/Admin/OrderLicenseController.php:205 src/Admin/AdminController.php:1358 -#: src/Admin/AdminController.php:1509 src/Admin/AdminController.php:1559 -#: src/Checkout/CheckoutBlocksIntegration.php:132 -#: src/Checkout/CheckoutController.php:164 -#: src/Frontend/AccountController.php:335 -#: src/Email/LicenseEmailController.php:288 -msgid "Domain" -msgstr "" - -#: src/Admin/OrderLicenseController.php:437 src/Admin/AdminController.php:327 -msgid "Domain cannot be empty." -msgstr "" - -#: src/Checkout/StoreApiExtension.php:120 -msgid "Domain for license activation" -msgstr "" - -#: src/Admin/AdminController.php:338 -msgid "Domain updated successfully." -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:215 -#: src/Email/LicenseExpirationEmail.php:271 -#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 -#: src/Email/LicenseEmailController.php:345 -msgid "Domain:" -msgstr "" - -#: src/Checkout/StoreApiExtension.php:93 -msgid "Domains for license activation by product" -msgstr "" - -#: src/Admin/OrderLicenseController.php:113 -msgid "Domains specified during checkout (multi-domain order)." -msgstr "" - -#: src/Frontend/DownloadController.php:81 -#: src/Frontend/DownloadController.php:91 -#: src/Frontend/DownloadController.php:105 -#: src/Frontend/DownloadController.php:120 -#: src/Frontend/DownloadController.php:130 -#: src/Frontend/DownloadController.php:140 -#: src/Frontend/DownloadController.php:149 -#: src/Frontend/DownloadController.php:159 -#: src/Frontend/DownloadController.php:168 -#: src/Frontend/DownloadController.php:177 -#: src/Frontend/DownloadController.php:199 -#: src/Frontend/DownloadController.php:215 -msgid "Download Error" -msgstr "" - -#: src/Admin/VersionAdminController.php:84 -#: src/Admin/VersionAdminController.php:133 -msgid "Download File" -msgstr "" - -#: src/Admin/DownloadWidgetController.php:46 -msgid "Download Statistics" -msgstr "" - -#: src/Frontend/DownloadController.php:214 -msgid "Download file not found." -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:130 -msgid "Each license requires a unique domain." -msgstr "" - -#: src/Admin/AdminController.php:163 src/Admin/AdminController.php:1399 -#: src/Admin/AdminController.php:1414 src/Admin/AdminController.php:1440 -msgid "Edit" -msgstr "" - -#: src/Admin/OrderLicenseController.php:237 -msgid "Edit domain" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:321 -#: src/Email/LicenseExpiredEmail.php:308 -msgid "Email heading" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:338 -#: src/Email/LicenseExpiredEmail.php:325 -msgid "Email type" -msgstr "" - -#: src/Admin/SettingsController.php:190 -msgid "Enable \"Update Notifications\" above to use this option." -msgstr "" - -#: src/Admin/SettingsController.php:258 -msgid "Enable Multi-Domain Licensing" -msgstr "" - -#: src/Admin/SettingsController.php:180 -msgid "Enable Update Notifications" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:309 -#: src/Email/LicenseExpiredEmail.php:296 -msgid "Enable this email notification" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:307 -#: src/Email/LicenseExpiredEmail.php:294 -msgid "Enable/Disable" -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:124 -#: src/Checkout/CheckoutController.php:192 -msgid "Enter a unique domain for each license (without http:// or www)." -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:86 -msgid "Enter a valid domain (without http:// or www)" -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:125 -#: src/Checkout/CheckoutController.php:176 -msgid "" -"Enter the domain where you will use the license (without http:// or www)." -msgstr "" - -#: src/Admin/AdminController.php:1595 src/Frontend/AccountController.php:541 -msgid "Enter the new domain without http:// or www." -msgstr "" - -#: src/Admin/AdminController.php:1682 -msgid "Error Code" -msgstr "" - -#: src/Admin/AdminController.php:1752 -msgid "Error reading file. Please check the file format." -msgstr "" - -#: src/Admin/AdminController.php:1746 -msgid "Error uploading file. Please try again." -msgstr "" - -#: src/Admin/OrderLicenseController.php:372 -msgid "Error. Please try again." -msgstr "" - -#: src/Admin/VersionAdminController.php:128 -msgid "Existing Versions" -msgstr "" - -#: src/Admin/SettingsController.php:278 -msgid "Expiration Warning Schedule" +#: src/Admin/DashboardWidgetController.php:121 +msgid "Expiring Soon" msgstr "" #: src/Admin/DashboardWidgetController.php:125 @@ -570,535 +46,101 @@ msgstr "" msgid "Expired" msgstr "" -#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 -msgid "Expired License Details" +#: src/Admin/DashboardWidgetController.php:132 +msgid "Time-limited" msgstr "" -#: src/Frontend/AccountController.php:651 -msgid "Expired licenses cannot be transferred." +#: src/Admin/DashboardWidgetController.php:136 +#: src/Admin/OrderLicenseController.php:260 +#: src/Admin/SettingsController.php:246 src/Admin/AdminController.php:166 +#: src/Admin/AdminController.php:281 src/Admin/AdminController.php:1437 +#: src/Admin/AdminController.php:1676 +#: src/Product/LicensedProductVariation.php:194 +#: src/Product/LicensedProductType.php:184 +#: src/Product/LicensedProductType.php:232 +#: src/Product/LicensedProductType.php:544 +#: src/Frontend/AccountController.php:427 +msgid "Lifetime" msgstr "" -#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 -msgid "Expired on:" +#: src/Admin/DashboardWidgetController.php:142 +msgid "View All Licenses" msgstr "" -#: src/Admin/OrderLicenseController.php:207 src/Admin/AdminController.php:1361 -#: src/Admin/AdminController.php:1512 src/Admin/AdminController.php:1674 -#: src/Admin/AdminController.php:1676 src/Email/LicenseEmailController.php:289 -msgid "Expires" +#: src/Admin/DownloadWidgetController.php:46 +msgid "Download Statistics" msgstr "" -#: src/Admin/AdminController.php:1815 -msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"." +#: src/Admin/DownloadWidgetController.php:140 +msgid "Total Downloads" msgstr "" -#: src/Email/LicenseExpirationEmail.php:219 -#: src/Email/LicenseExpirationEmail.php:272 -#: src/Email/LicenseEmailController.php:347 -msgid "Expires:" +#: src/Admin/DownloadWidgetController.php:145 +msgid "Top Products" msgstr "" -#: src/Admin/DashboardWidgetController.php:121 -msgid "Expiring Soon" +#: src/Admin/DownloadWidgetController.php:159 +#: src/Admin/DownloadWidgetController.php:180 +msgid "No downloads yet" msgstr "" -#: src/Admin/AdminController.php:296 -msgid "Expiry date updated successfully." +#: src/Admin/DownloadWidgetController.php:163 +msgid "Top Versions" msgstr "" -#: src/Admin/AdminController.php:1267 -msgid "Export CSV" +#: src/Admin/OrderLicenseController.php:57 +msgid "Product Licenses" msgstr "" -#: src/Admin/AdminController.php:1028 -msgid "Export to CSV" +#: src/Admin/OrderLicenseController.php:78 +#: src/Admin/OrderLicenseController.php:399 +#: src/Admin/OrderLicenseController.php:501 +msgid "Order not found." msgstr "" -#: src/Admin/AdminController.php:1342 src/Admin/AdminController.php:1527 -msgid "Extend 1 year" +#: src/Admin/OrderLicenseController.php:93 +msgid "This order does not contain licensed products." msgstr "" -#: src/Admin/AdminController.php:1340 src/Admin/AdminController.php:1525 -msgid "Extend 30 days" +#: src/Admin/OrderLicenseController.php:109 +msgid "Order Domains" msgstr "" -#: src/Admin/AdminController.php:1341 src/Admin/AdminController.php:1526 -msgid "Extend 90 days" +#: src/Admin/OrderLicenseController.php:113 +msgid "Domains specified during checkout (multi-domain order)." msgstr "" -#: src/Admin/AdminController.php:1470 -msgid "Extend by 30 days" +#: src/Admin/OrderLicenseController.php:119 src/Admin/AdminController.php:403 +#: src/Checkout/CheckoutController.php:534 +#: src/Checkout/CheckoutController.php:595 +#: src/Checkout/CheckoutController.php:617 src/License/LicenseManager.php:886 +#: src/Product/VersionManager.php:349 src/Product/VersionManager.php:361 +#: src/Frontend/AccountController.php:190 +#: src/Frontend/AccountController.php:232 +#: src/Email/LicenseExpirationEmail.php:107 +#: src/Email/LicenseExpiredEmail.php:99 +msgid "Unknown Product" msgstr "" -#: src/Api/RestApiController.php:324 -msgid "Failed to activate license." -msgstr "" - -#: src/Admin/VersionAdminController.php:303 -msgid "Failed to create version." -msgstr "" - -#: src/Admin/VersionAdminController.php:337 -msgid "Failed to delete version." -msgstr "" - -#: src/Admin/AdminController.php:866 -#, php-format -msgid "Failed to import license for domain %s" -msgstr "" - -#: src/Admin/VersionAdminController.php:235 -msgid "Failed to read checksum file." -msgstr "" - -#: src/Admin/AdminController.php:372 -msgid "Failed to revoke license." -msgstr "" - -#: src/Admin/AdminController.php:1696 -msgid "Failed to test license. Please try again." -msgstr "" - -#: src/Frontend/AccountController.php:668 -msgid "Failed to transfer license. Please try again." -msgstr "" - -#: src/Admin/AdminController.php:1210 -msgid "Failed to transfer license. The license may be revoked or invalid." -msgstr "" - -#: src/Admin/AdminController.php:342 -msgid "Failed to update domain." -msgstr "" - -#: src/Admin/AdminController.php:284 src/Admin/AdminController.php:301 -msgid "Failed to update expiry date." -msgstr "" - -#: src/Admin/OrderLicenseController.php:461 -msgid "Failed to update license domain." -msgstr "" - -#: src/Admin/AdminController.php:252 -msgid "Failed to update status." -msgstr "" - -#: src/Admin/VersionAdminController.php:364 -msgid "Failed to update version." -msgstr "" - -#. translators: 1: provided hash, 2: calculated hash -#: src/Product/VersionManager.php:177 -#, php-format -msgid "File checksum does not match. Expected: %1$s, Got: %2$s" -msgstr "" - -#. translators: %s: max file size -#: src/Admin/AdminController.php:1757 -#, php-format -msgid "File too large. Maximum size is %s." -msgstr "" - -#: src/Admin/AdminController.php:1309 src/Frontend/AccountController.php:348 -msgid "Filter" -msgstr "" - -#: src/Admin/SettingsController.php:289 -msgid "First Warning (Days Before)" -msgstr "" - -#. translators: %s: Link to licenses page -#: src/Admin/OrderLicenseController.php:280 -#, php-format -msgid "For more actions (revoke, extend, delete), go to the %s page." -msgstr "" - -#: src/Admin/AdminController.php:1804 -msgid "Full Format (from Export):" -msgstr "" - -#: src/Admin/OrderLicenseController.php:188 -msgid "Generate Licenses" -msgstr "" - -#: src/Admin/OrderLicenseController.php:302 -msgid "Generate Missing Licenses" -msgstr "" - -#: src/Admin/OrderLicenseController.php:374 -msgid "Generating..." -msgstr "" - -#: src/Admin/AdminController.php:211 src/Admin/AdminController.php:1087 -msgid "Guest" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:176 -#: src/Email/LicenseExpirationEmail.php:246 -#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 -#, php-format -msgid "Hello %s," -msgstr "" - -#: src/Admin/SettingsController.php:199 -msgid "How often to check for updates (in hours)." -msgstr "" - -#: src/Admin/SettingsController.php:253 +#: src/Admin/OrderLicenseController.php:129 msgid "" -"If enabled, licenses are bound to the major version at purchase time by " -"default." +"The domain specified during checkout. Changing this will not automatically " +"update existing license domains." msgstr "" -#. translators: %s: default bind to version value (Yes/No) -#: src/Product/LicensedProductType.php:241 -#, php-format -msgid "" -"If enabled, licenses are bound to the major version at purchase time. " -"Default: %s" +#: src/Admin/OrderLicenseController.php:137 +#: src/Checkout/CheckoutBlocksIntegration.php:84 +#: src/Checkout/CheckoutBlocksIntegration.php:122 +#: src/Checkout/CheckoutController.php:172 +#: src/Checkout/CheckoutController.php:238 +msgid "example.com" msgstr "" -#: src/Admin/AdminController.php:1847 -msgid "" -"If enabled, licenses with matching keys will be updated instead of skipped." -msgstr "" - -#: src/Admin/SettingsController.php:154 -msgid "" -"If the license server uses signed responses, enter the shared secret here " -"for enhanced security." -msgstr "" - -#: src/Admin/AdminController.php:1271 -msgid "Import CSV" -msgstr "" - -#: src/Admin/AdminController.php:1734 src/Admin/AdminController.php:1856 -msgid "Import Licenses" -msgstr "" - -#: src/Admin/AdminController.php:1792 -msgid "Import Licenses from CSV" -msgstr "" - -#. translators: %1$s: max file size, %2$d: max rows, %3$d: rate limit minutes -#: src/Admin/AdminController.php:1782 -#, php-format -msgid "" -"Import limits: Maximum file size %1$s, maximum %2$d rows per import. You can " -"import again after %3$d minutes." -msgstr "" - -#. translators: %1$d: max rows, %2$d: imported count, %3$d: updated count -#: src/Admin/AdminController.php:729 -#, php-format -msgid "" -"Import stopped: Maximum of %1$d rows allowed. %2$d imported, %3$d updated." -msgstr "" - -#: src/Admin/VersionAdminController.php:178 -#: src/Admin/VersionAdminController.php:410 src/Admin/AdminController.php:172 -#: src/Admin/AdminController.php:978 src/Admin/AdminController.php:1297 -#: src/Admin/AdminController.php:1420 -msgid "Inactive" -msgstr "" - -#: src/Admin/SettingsController.php:563 -msgid "Insufficient permissions." -msgstr "" - -#: src/Admin/VersionAdminController.php:234 -msgid "" -"Invalid checksum file format. File must contain a 64-character SHA256 hash." -msgstr "" - -#: src/Admin/AdminController.php:304 -msgid "Invalid date format." -msgstr "" - -#: src/Admin/OrderLicenseController.php:405 -#: src/Admin/OrderLicenseController.php:443 -msgid "Invalid domain format." -msgstr "" - -#: src/Frontend/DownloadController.php:90 -msgid "Invalid download link format." -msgstr "" - -#: src/Frontend/DownloadController.php:80 -#: src/Frontend/DownloadController.php:104 -msgid "Invalid download link." -msgstr "" - -#: src/Admin/AdminController.php:1749 -msgid "Invalid file type. Please upload a CSV file." -msgstr "" - -#: src/Admin/OrderLicenseController.php:433 src/Admin/AdminController.php:235 -#: src/Admin/AdminController.php:271 src/Admin/AdminController.php:323 -#: src/Admin/AdminController.php:360 -msgid "Invalid license ID." -msgstr "" - -#: src/Frontend/AccountController.php:624 -msgid "Invalid license." -msgstr "" - -#: src/Admin/OrderLicenseController.php:394 -#: src/Admin/OrderLicenseController.php:496 -msgid "Invalid order ID." -msgstr "" - -#: src/Admin/AdminController.php:240 -msgid "Invalid status." -msgstr "" - -#: src/Admin/VersionAdminController.php:270 -msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." -msgstr "" - -#: src/Frontend/AccountController.php:468 -msgid "Latest" -msgstr "" - -#: src/Admin/AdminController.php:1813 -msgid "Leave License Key empty to auto-generate." -msgstr "" - -#: src/Admin/AdminController.php:1444 -msgid "Leave empty for lifetime" -msgstr "" - -#: src/Product/LicensedProductType.php:570 -msgid "Leave empty for parent default." -msgstr "" - -#: src/Product/LicensedProductType.php:558 -msgid "Leave empty for parent default. 0 = Lifetime." -msgstr "" - -#. translators: %s: URL to settings page -#: src/Product/LicensedProductType.php:193 -#, php-format -msgid "Leave fields empty to use default settings from %s." -msgstr "" - -#: src/Admin/AdminController.php:1874 -msgid "License" -msgstr "" - -#. translators: %d: license number -#: src/Checkout/CheckoutBlocksIntegration.php:131 -#: src/Checkout/CheckoutController.php:227 -#, php-format -msgid "License %d:" -msgstr "" - -#: src/Admin/AdminController.php:956 -msgid "License Dashboard" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:197 -#: src/Email/LicenseExpirationEmail.php:266 -msgid "License Details" -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:79 -#: src/Checkout/CheckoutBlocksIntegration.php:128 -#: src/Checkout/CheckoutController.php:161 -msgid "License Domain" -msgstr "" - -#: src/Checkout/CheckoutController.php:504 -#: src/Checkout/CheckoutController.php:565 -#: src/Checkout/CheckoutController.php:569 -msgid "License Domain:" -msgstr "" - -#: src/Checkout/CheckoutBlocksIntegration.php:127 -#: src/Checkout/CheckoutController.php:190 -msgid "License Domains" -msgstr "" - -#: src/Checkout/CheckoutController.php:517 -#: src/Checkout/CheckoutController.php:582 -#: src/Checkout/CheckoutController.php:603 -msgid "License Domains:" -msgstr "" - -#: src/Product/LicensedProductType.php:549 -msgid "License Duration (Days)" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:82 -msgid "License Expiration Notice" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:55 -msgid "License Expiration Warning" -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 -msgid "License Expired" -msgstr "" - -#: src/Admin/OrderLicenseController.php:203 -#: src/Admin/SettingsController.php:144 src/Admin/AdminController.php:1355 -#: src/Admin/AdminController.php:1506 src/Admin/AdminController.php:1555 -#: src/Email/LicenseEmailController.php:287 -msgid "License Key" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:207 -#: src/Email/LicenseExpirationEmail.php:270 -#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 -#: src/Email/LicenseEmailController.php:343 -msgid "License Key:" -msgstr "" - -#: src/Email/LicenseEmailController.php:212 -#: src/Email/LicenseEmailController.php:220 -msgid "License Keys:" -msgstr "" - -#: src/Admin/SettingsController.php:136 -msgid "License Server URL" -msgstr "" - -#: src/Product/LicensedProductType.php:150 -msgid "License Settings" -msgstr "" - -#: src/Admin/DashboardWidgetController.php:47 -msgid "License Statistics" -msgstr "" - -#: src/Admin/AdminController.php:1551 -msgid "License Validation Test" -msgstr "" - -#: src/Admin/SettingsController.php:239 src/Product/LicensedProductType.php:220 -msgid "License Validity (Days)" -msgstr "" - -#: src/Api/RestApiController.php:330 -msgid "License activated successfully." -msgstr "" - -#: src/Admin/AdminController.php:1155 -msgid "License deleted successfully." -msgstr "" - -#: src/Admin/OrderLicenseController.php:457 -msgid "License domain updated." -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:56 -msgid "" -"License expiration warning emails are sent to customers when their licenses " -"are about to expire." -msgstr "" - -#: src/Email/LicenseExpiredEmail.php:51 -msgid "" -"License expired emails are sent to customers when their licenses have " -"expired." -msgstr "" - -#: src/Admin/AdminController.php:1161 -msgid "License extended successfully." -msgstr "" - -#: src/Admin/AdminController.php:1680 -msgid "License is INVALID" -msgstr "" - -#: src/Admin/AdminController.php:1670 -msgid "License is VALID" -msgstr "" - -#: src/Api/RestApiController.php:304 -msgid "License is already activated for this domain." -msgstr "" - -#: src/Admin/SettingsController.php:356 -msgid "License is not valid. Frontend features are disabled." -msgstr "" - -#: src/Admin/SettingsController.php:350 -msgid "License is valid and active." -msgstr "" - -#: src/Admin/AdminController.php:391 -msgid "License key and domain are required." -msgstr "" - -#: src/Api/RestApiController.php:253 src/Api/RestApiController.php:286 -#: src/License/LicenseManager.php:483 -msgid "License key not found." -msgstr "" - -#: src/Admin/OrderLicenseController.php:449 src/Api/UpdateController.php:197 -#: src/Frontend/AccountController.php:638 -#: src/Frontend/DownloadController.php:129 -msgid "License not found." -msgstr "" - -#: src/Admin/AdminController.php:367 src/Admin/AdminController.php:1158 -msgid "License revoked successfully." -msgstr "" - -#: src/Admin/AdminController.php:1164 -msgid "License set to lifetime successfully." -msgstr "" - -#: src/Admin/AdminController.php:279 -msgid "License set to lifetime." -msgstr "" - -#: src/License/PluginLicenseChecker.php:132 -msgid "License settings not configured." -msgstr "" - -#: src/Frontend/AccountController.php:588 -#: src/Frontend/AccountController.php:664 -msgid "License transferred successfully!" -msgstr "" - -#: src/Admin/AdminController.php:1207 -msgid "License transferred to new domain successfully." -msgstr "" - -#: src/Admin/AdminController.php:1152 -msgid "License updated successfully." -msgstr "" - -#: src/Admin/SettingsController.php:574 src/Api/UpdateController.php:186 -msgid "License validation failed." -msgstr "" - -#: src/Admin/SettingsController.php:572 -msgid "License verified successfully!" -msgstr "" - -#: src/Product/LicensedProductType.php:94 -msgid "Licensed Product" -msgstr "" - -#: src/Admin/SettingsController.php:54 -msgid "Licensed Products" -msgstr "" - -#: src/Product/LicensedProductType.php:95 -msgid "Licensed Variable Product" -msgstr "" - -#: src/Api/UpdateController.php:209 -msgid "Licensed product not found." -msgstr "" - -#: src/Product/LicensedProductType.php:514 -msgid "Licensed products are always virtual" +#: src/Admin/OrderLicenseController.php:139 +#: src/Admin/OrderLicenseController.php:241 src/Admin/AdminController.php:165 +#: src/Admin/AdminController.php:1404 src/Admin/AdminController.php:1424 +#: src/Admin/AdminController.php:1445 +msgid "Save" msgstr "" #: src/Admin/OrderLicenseController.php:149 @@ -1108,6 +150,10 @@ msgstr "" msgid "Licenses" msgstr "" +#: src/Admin/OrderLicenseController.php:176 +msgid "No licenses have been generated for this order yet." +msgstr "" + #: src/Admin/OrderLicenseController.php:179 msgid "" "Licenses should be generated automatically when an order is paid. If " @@ -1118,154 +164,111 @@ msgstr "" msgid "Licenses will be generated when the order is marked as paid/completed." msgstr "" -#: src/Admin/DashboardWidgetController.php:136 -#: src/Admin/OrderLicenseController.php:260 -#: src/Admin/SettingsController.php:244 src/Admin/AdminController.php:166 -#: src/Admin/AdminController.php:281 src/Admin/AdminController.php:1437 -#: src/Admin/AdminController.php:1676 -#: src/Product/LicensedProductVariation.php:194 -#: src/Product/LicensedProductType.php:184 -#: src/Product/LicensedProductType.php:232 -#: src/Product/LicensedProductType.php:544 -#: src/Frontend/AccountController.php:427 -msgid "Lifetime" +#: src/Admin/OrderLicenseController.php:188 +msgid "Generate Licenses" msgstr "" -#: src/Admin/AdminController.php:1024 -msgid "Manage Licenses" +#: src/Admin/OrderLicenseController.php:196 +msgid "Please set the order domain above before generating licenses." msgstr "" -#: src/Admin/SettingsController.php:228 src/Product/LicensedProductType.php:202 -#: src/Product/LicensedProductType.php:561 -msgid "Max Activations" +#: src/Admin/OrderLicenseController.php:203 +#: src/Admin/SettingsController.php:146 src/Admin/AdminController.php:1355 +#: src/Admin/AdminController.php:1506 src/Admin/AdminController.php:1555 +#: src/Email/LicenseEmailController.php:287 +msgid "License Key" msgstr "" -#: src/Api/RestApiController.php:313 -msgid "Maximum number of activations reached." +#: src/Admin/OrderLicenseController.php:204 src/Admin/AdminController.php:1356 +#: src/Admin/AdminController.php:1507 src/Admin/AdminController.php:1672 +#: src/Frontend/AccountController.php:321 +msgid "Product" msgstr "" -#. translators: %d: default max activations value -#: src/Product/LicensedProductType.php:205 +#: src/Admin/OrderLicenseController.php:205 src/Admin/AdminController.php:1358 +#: src/Admin/AdminController.php:1509 src/Admin/AdminController.php:1559 +#: src/Checkout/CheckoutBlocksIntegration.php:132 +#: src/Checkout/CheckoutController.php:164 +#: src/Frontend/AccountController.php:335 +#: src/Email/LicenseEmailController.php:288 +msgid "Domain" +msgstr "" + +#: src/Admin/OrderLicenseController.php:206 +#: src/Admin/VersionAdminController.php:136 src/Admin/AdminController.php:1359 +#: src/Admin/AdminController.php:1510 +msgid "Status" +msgstr "" + +#: src/Admin/OrderLicenseController.php:207 src/Admin/AdminController.php:1361 +#: src/Admin/AdminController.php:1512 src/Admin/AdminController.php:1674 +#: src/Admin/AdminController.php:1676 src/Email/LicenseEmailController.php:289 +msgid "Expires" +msgstr "" + +#: src/Admin/OrderLicenseController.php:208 +#: src/Admin/VersionAdminController.php:138 src/Admin/AdminController.php:1362 +#: src/Admin/AdminController.php:1513 +msgid "Actions" +msgstr "" + +#: src/Admin/OrderLicenseController.php:227 src/Admin/AdminController.php:210 +#: src/Admin/AdminController.php:1083 +msgid "Unknown" +msgstr "" + +#: src/Admin/OrderLicenseController.php:237 +msgid "Edit domain" +msgstr "" + +#: src/Admin/OrderLicenseController.php:244 src/Admin/AdminController.php:164 +#: src/Admin/AdminController.php:1405 src/Admin/AdminController.php:1425 +#: src/Admin/AdminController.php:1446 src/Admin/AdminController.php:1601 +#: src/Frontend/AccountController.php:548 +msgid "Cancel" +msgstr "" + +#: src/Admin/OrderLicenseController.php:267 +msgid "View in Licenses" +msgstr "" + +#: src/Admin/OrderLicenseController.php:280 #, php-format -msgid "Maximum number of domain activations per license. Default: %d" +msgid "For more actions (revoke, extend, delete), go to the %s page." msgstr "" -#: src/Admin/AdminController.php:1683 -msgid "Message" -msgstr "" - -#: src/Product/LicensedProductVariation.php:198 -msgid "Monthly" -msgstr "" - -#: src/Email/LicenseEmailController.php:308 -#: src/Email/LicenseEmailController.php:352 -msgid "Never" -msgstr "" - -#: src/Admin/AdminController.php:1592 src/Frontend/AccountController.php:537 -msgid "New Domain" -msgstr "" - -#: src/Product/LicensedProductType.php:242 -msgid "No" -msgstr "" - -#: src/Admin/AdminController.php:1933 -msgid "No domain specified" -msgstr "" - -#: src/Admin/VersionAdminController.php:165 -#: src/Admin/VersionAdminController.php:397 -msgid "No download file" -msgstr "" - -#: src/Frontend/DownloadController.php:198 -msgid "No download file available for this version." -msgstr "" - -#: src/Admin/DownloadWidgetController.php:159 -#: src/Admin/DownloadWidgetController.php:180 -msgid "No downloads yet" -msgstr "" - -#: src/Admin/AdminController.php:156 -msgid "No licenses found" -msgstr "" - -#: src/Frontend/AccountController.php:361 -msgid "No licenses found matching your filters." -msgstr "" - -#: src/Admin/AdminController.php:1368 -msgid "No licenses found." -msgstr "" - -#: src/Admin/OrderLicenseController.php:176 -msgid "No licenses have been generated for this order yet." -msgstr "" - -#: src/Admin/AdminController.php:1213 -msgid "No licenses to export." -msgstr "" - -#: src/Api/UpdateController.php:221 -msgid "No versions available for this product." -msgstr "" - -#: src/Admin/VersionAdminController.php:144 -msgid "No versions found. Add your first version above." -msgstr "" - -#: src/Admin/AdminController.php:1812 -msgid "Notes:" -msgstr "" - -#: src/Admin/SettingsController.php:67 -msgid "Notifications" -msgstr "" - -#. translators: %s: default validity value -#: src/Product/LicensedProductType.php:223 +#: src/Admin/OrderLicenseController.php:293 #, php-format -msgid "Number of days the license is valid. Leave empty for default (%s)." +msgid "%d licensed product is missing a license." +msgid_plural "%d licensed products are missing licenses." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/OrderLicenseController.php:302 +msgid "Generate Missing Licenses" msgstr "" -#: src/Frontend/AccountController.php:488 -#, php-format -msgid "Older versions (%d)" +#: src/Admin/OrderLicenseController.php:370 src/Admin/AdminController.php:159 +msgid "Saving..." msgstr "" -#: src/Admin/AdminController.php:1835 -msgid "Options" +#: src/Admin/OrderLicenseController.php:371 +msgid "Saved!" msgstr "" -#. translators: %s: order number -#: src/Frontend/AccountController.php:386 -#, php-format -msgid "Order #%s" +#: src/Admin/OrderLicenseController.php:372 +msgid "Error. Please try again." msgstr "" -#: src/Admin/OrderLicenseController.php:109 -msgid "Order Domains" +#: src/Admin/OrderLicenseController.php:373 +#: src/Checkout/CheckoutBlocksIntegration.php:129 +#: src/Frontend/AccountController.php:591 +#: src/Frontend/AccountController.php:632 +msgid "Please enter a valid domain." msgstr "" -#: src/Admin/OrderLicenseController.php:413 -msgid "Order domain updated." -msgstr "" - -#: src/Admin/OrderLicenseController.php:506 -msgid "Order must be paid before licenses can be generated." -msgstr "" - -#: src/Admin/OrderLicenseController.php:78 -#: src/Admin/OrderLicenseController.php:399 -#: src/Admin/OrderLicenseController.php:501 -msgid "Order not found." -msgstr "" - -#: src/Admin/AdminController.php:108 -msgid "Overview" +#: src/Admin/OrderLicenseController.php:374 +msgid "Generating..." msgstr "" #: src/Admin/OrderLicenseController.php:387 @@ -1280,115 +283,87 @@ msgstr "" msgid "Permission denied." msgstr "" -#. translators: 1: product name, 2: license number -#: src/Checkout/CheckoutController.php:359 -#, php-format -msgid "Please enter a domain for %1$s (License %2$d)." +#: src/Admin/OrderLicenseController.php:394 +#: src/Admin/OrderLicenseController.php:496 +msgid "Invalid order ID." msgstr "" -#: src/Checkout/CheckoutController.php:326 -msgid "Please enter a domain for your license." +#: src/Admin/OrderLicenseController.php:405 +#: src/Admin/OrderLicenseController.php:443 +msgid "Invalid domain format." msgstr "" -#. translators: 1: product name, 2: license number -#: src/Checkout/CheckoutController.php:374 -#, php-format -msgid "Please enter a valid domain for %1$s (License %2$d)." +#: src/Admin/OrderLicenseController.php:413 +msgid "Order domain updated." msgstr "" -#: src/Checkout/CheckoutController.php:332 -msgid "Please enter a valid domain for your license." +#: src/Admin/OrderLicenseController.php:433 src/Admin/AdminController.php:235 +#: src/Admin/AdminController.php:271 src/Admin/AdminController.php:323 +#: src/Admin/AdminController.php:360 +msgid "Invalid license ID." msgstr "" -#: src/Admin/OrderLicenseController.php:373 -#: src/Checkout/CheckoutBlocksIntegration.php:129 -#: src/Frontend/AccountController.php:591 -#: src/Frontend/AccountController.php:632 -msgid "Please enter a valid domain." +#: src/Admin/OrderLicenseController.php:437 src/Admin/AdminController.php:327 +msgid "Domain cannot be empty." msgstr "" -#: src/Admin/VersionAdminController.php:230 -msgid "Please enter a valid version number (e.g., 1.0.0)." +#: src/Admin/OrderLicenseController.php:449 src/Api/UpdateController.php:209 +#: src/Frontend/DownloadController.php:129 +#: src/Frontend/AccountController.php:638 +msgid "License not found." msgstr "" -#: src/Admin/VersionAdminController.php:229 -msgid "Please enter a version number." +#: src/Admin/OrderLicenseController.php:457 +msgid "License domain updated." msgstr "" -#: src/Frontend/AccountController.php:618 -msgid "Please log in to transfer a license." +#: src/Admin/OrderLicenseController.php:461 +msgid "Failed to update license domain." msgstr "" -#: src/Frontend/AccountController.php:108 -msgid "Please log in to view your licenses." -msgstr "" - -#: src/Admin/OrderLicenseController.php:196 -msgid "Please set the order domain above before generating licenses." +#: src/Admin/OrderLicenseController.php:506 +msgid "Order must be paid before licenses can be generated." msgstr "" #: src/Admin/OrderLicenseController.php:520 msgid "Please set the order domain before generating licenses." msgstr "" -#. translators: %d: seconds to wait -#: src/Admin/AdminController.php:1765 +#: src/Admin/OrderLicenseController.php:529 #, php-format -msgid "Please wait %d seconds before importing again." -msgstr "" +msgid "%d license generated successfully." +msgid_plural "%d licenses generated successfully." +msgstr[0] "" +msgstr[1] "" -#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:130 -msgid "Plugin License" -msgstr "" - -#: src/Plugin.php:354 -msgid "" -"Plugin license is not configured or invalid. Frontend features are disabled." -msgstr "" - -#: src/Admin/OrderLicenseController.php:204 src/Admin/AdminController.php:1356 -#: src/Admin/AdminController.php:1507 src/Admin/AdminController.php:1672 -#: src/Frontend/AccountController.php:321 -msgid "Product" -msgstr "" - -#: src/Admin/VersionAdminController.php:265 -msgid "Product ID and version are required." -msgstr "" - -#: src/Admin/OrderLicenseController.php:57 -msgid "Product Licenses" +#: src/Admin/OrderLicenseController.php:542 +msgid "All licenses already exist for this order." msgstr "" #: src/Admin/VersionAdminController.php:55 msgid "Product Versions" msgstr "" -#: src/Admin/VersionAdminController.php:282 -msgid "Product not found." +#: src/Admin/VersionAdminController.php:74 +msgid "Add New Version" msgstr "" -#: src/Email/LicenseExpirationEmail.php:203 -#: src/Email/LicenseExpirationEmail.php:269 -#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 -msgid "Product:" +#: src/Admin/VersionAdminController.php:77 +#: src/Admin/VersionAdminController.php:132 +msgid "Version" msgstr "" -#: src/Product/LicensedProductVariation.php:202 -msgid "Quarterly" +#: src/Admin/VersionAdminController.php:80 +msgid "Use semantic versioning (e.g., 1.0.0)" msgstr "" -#: src/Admin/AdminController.php:1020 -msgid "Quick Actions" +#: src/Admin/VersionAdminController.php:84 +#: src/Admin/VersionAdminController.php:133 +msgid "Download File" msgstr "" -#: src/Admin/VersionAdminController.php:112 -#: src/Admin/VersionAdminController.php:135 -msgid "Release Notes" -msgstr "" - -#: src/Admin/VersionAdminController.php:137 -msgid "Released" +#: src/Admin/VersionAdminController.php:89 +msgid "Select File" msgstr "" #: src/Admin/VersionAdminController.php:92 @@ -1396,13 +371,440 @@ msgstr "" msgid "Remove" msgstr "" -#: src/Admin/SettingsController.php:400 +#: src/Admin/VersionAdminController.php:94 +msgid "" +"Upload or select a file from the media library. Version will be auto-" +"detected from filename (e.g., plugin-v1.2.3.zip)." +msgstr "" + +#: src/Admin/VersionAdminController.php:98 +msgid "Checksum File" +msgstr "" + +#: src/Admin/VersionAdminController.php:103 +msgid "Select Checksum File" +msgstr "" + +#: src/Admin/VersionAdminController.php:108 +msgid "" +"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." +msgstr "" + +#: src/Admin/VersionAdminController.php:112 +#: src/Admin/VersionAdminController.php:135 +msgid "Release Notes" +msgstr "" + +#: src/Admin/VersionAdminController.php:120 +msgid "Add Version" +msgstr "" + +#: src/Admin/VersionAdminController.php:128 +msgid "Existing Versions" +msgstr "" + +#: src/Admin/VersionAdminController.php:134 +msgid "SHA256" +msgstr "" + +#: src/Admin/VersionAdminController.php:137 +msgid "Released" +msgstr "" + +#: src/Admin/VersionAdminController.php:144 +msgid "No versions found. Add your first version above." +msgstr "" + +#: src/Admin/VersionAdminController.php:161 +#: src/Admin/VersionAdminController.php:393 +msgid "Uploaded file" +msgstr "" + +#: src/Admin/VersionAdminController.php:165 +#: src/Admin/VersionAdminController.php:397 +msgid "No download file" +msgstr "" + +#: src/Admin/VersionAdminController.php:178 +#: src/Admin/VersionAdminController.php:410 src/Admin/AdminController.php:172 +#: src/Admin/AdminController.php:978 src/Admin/AdminController.php:1297 +#: src/Admin/AdminController.php:1420 +msgid "Inactive" +msgstr "" + +#: src/Admin/VersionAdminController.php:184 +#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1338 +#: src/Admin/AdminController.php:1523 +msgid "Deactivate" +msgstr "" + +#: src/Admin/VersionAdminController.php:184 +#: src/Admin/VersionAdminController.php:416 src/Admin/AdminController.php:1337 +#: src/Admin/AdminController.php:1522 +msgid "Activate" +msgstr "" + +#: src/Admin/VersionAdminController.php:187 +#: src/Admin/VersionAdminController.php:419 src/Admin/AdminController.php:1343 +#: src/Admin/AdminController.php:1492 src/Admin/AdminController.php:1528 +msgid "Delete" +msgstr "" + +#: src/Admin/VersionAdminController.php:228 +msgid "Are you sure you want to delete this version?" +msgstr "" + +#: src/Admin/VersionAdminController.php:229 +msgid "Please enter a version number." +msgstr "" + +#: src/Admin/VersionAdminController.php:230 +msgid "Please enter a valid version number (e.g., 1.0.0)." +msgstr "" + +#: src/Admin/VersionAdminController.php:231 +msgid "An error occurred. Please try again." +msgstr "" + +#: src/Admin/VersionAdminController.php:232 +msgid "Select Download File" +msgstr "" + +#: src/Admin/VersionAdminController.php:233 +msgid "Use this file" +msgstr "" + +#: src/Admin/VersionAdminController.php:234 +msgid "" +"Invalid checksum file format. File must contain a 64-character SHA256 hash." +msgstr "" + +#: src/Admin/VersionAdminController.php:235 +msgid "Failed to read checksum file." +msgstr "" + +#: src/Admin/VersionAdminController.php:265 +msgid "Product ID and version are required." +msgstr "" + +#: src/Admin/VersionAdminController.php:270 +msgid "Invalid version format. Use semantic versioning (e.g., 1.0.0)." +msgstr "" + +#: src/Admin/VersionAdminController.php:275 +msgid "This version already exists." +msgstr "" + +#: src/Admin/VersionAdminController.php:282 +msgid "Product not found." +msgstr "" + +#: src/Admin/VersionAdminController.php:286 +msgid "This product is not a licensed product." +msgstr "" + +#: src/Admin/VersionAdminController.php:303 +msgid "Failed to create version." +msgstr "" + +#: src/Admin/VersionAdminController.php:311 +msgid "Version added successfully." +msgstr "" + +#: src/Admin/VersionAdminController.php:331 +#: src/Admin/VersionAdminController.php:358 +msgid "Version ID is required." +msgstr "" + +#: src/Admin/VersionAdminController.php:337 +msgid "Failed to delete version." +msgstr "" + +#: src/Admin/VersionAdminController.php:340 +msgid "Version deleted successfully." +msgstr "" + +#: src/Admin/VersionAdminController.php:364 +msgid "Failed to update version." +msgstr "" + +#: src/Admin/VersionAdminController.php:368 +msgid "Version updated successfully." +msgstr "" + +#: src/Admin/SettingsController.php:54 +msgid "Licensed Products" +msgstr "" + +#: src/Admin/SettingsController.php:64 src/Admin/SettingsController.php:132 +msgid "Plugin License" +msgstr "" + +#: src/Admin/SettingsController.php:65 src/Admin/SettingsController.php:176 +msgid "Auto-Updates" +msgstr "" + +#: src/Admin/SettingsController.php:66 +msgid "Default Settings" +msgstr "" + +#: src/Admin/SettingsController.php:67 +msgid "Notifications" +msgstr "" + +#: src/Admin/SettingsController.php:68 +msgid "Metrics" +msgstr "" + +#: src/Admin/SettingsController.php:134 +msgid "" +"Configure the license for this plugin. A valid license is required for " +"frontend features to work." +msgstr "" + +#: src/Admin/SettingsController.php:138 +msgid "License Server URL" +msgstr "" + +#: src/Admin/SettingsController.php:140 +msgid "The URL of the license server (e.g., https://shop.example.com)." +msgstr "" + +#: src/Admin/SettingsController.php:148 +msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." +msgstr "" + +#: src/Admin/SettingsController.php:154 +msgid "Server Secret (Optional)" +msgstr "" + +#: src/Admin/SettingsController.php:156 +msgid "" +"If the license server uses signed responses, enter the shared secret here " +"for enhanced security." +msgstr "" + +#: src/Admin/SettingsController.php:178 +msgid "Configure automatic plugin updates from the license server." +msgstr "" + +#: src/Admin/SettingsController.php:182 +msgid "Enable Update Notifications" +msgstr "" + +#: src/Admin/SettingsController.php:184 +msgid "" +"Check for and display available updates from the license server in WordPress " +"admin." +msgstr "" + +#: src/Admin/SettingsController.php:189 +msgid "Automatically Install Updates" +msgstr "" + +#: src/Admin/SettingsController.php:192 +msgid "Enable \"Update Notifications\" above to use this option." +msgstr "" + +#: src/Admin/SettingsController.php:193 +msgid "" +"Automatically install updates when they become available (requires update " +"notifications enabled)." +msgstr "" + +#: src/Admin/SettingsController.php:199 +msgid "Check Frequency (Hours)" +msgstr "" + +#: src/Admin/SettingsController.php:201 +msgid "How often to check for updates (in hours)." +msgstr "" + +#: src/Admin/SettingsController.php:224 +msgid "Default License Settings" +msgstr "" + +#: src/Admin/SettingsController.php:226 +msgid "" +"These settings serve as defaults for new licensed products. Individual " +"product settings override these defaults." +msgstr "" + +#: src/Admin/SettingsController.php:230 src/Product/LicensedProductType.php:202 +#: src/Product/LicensedProductType.php:561 +msgid "Max Activations" +msgstr "" + +#: src/Admin/SettingsController.php:232 +msgid "Default maximum number of domain activations per license." +msgstr "" + +#: src/Admin/SettingsController.php:241 src/Product/LicensedProductType.php:220 +msgid "License Validity (Days)" +msgstr "" + +#: src/Admin/SettingsController.php:243 +msgid "" +"Default number of days a license is valid. Leave empty or set to 0 for " +"lifetime licenses." +msgstr "" + +#: src/Admin/SettingsController.php:253 src/Product/LicensedProductType.php:238 +msgid "Bind to Major Version" +msgstr "" + +#: src/Admin/SettingsController.php:255 +msgid "" +"If enabled, licenses are bound to the major version at purchase time by " +"default." +msgstr "" + +#: src/Admin/SettingsController.php:260 +msgid "Enable Multi-Domain Licensing" +msgstr "" + +#: src/Admin/SettingsController.php:262 +msgid "" +"Allow customers to purchase multiple licenses for different domains at once. " +"Each unit in cart quantity requires a unique domain." +msgstr "" + +#: src/Admin/SettingsController.php:280 +msgid "Expiration Warning Schedule" +msgstr "" + +#: src/Admin/SettingsController.php:284 +#, php-format +msgid "" +"Configure when expiration warning emails are sent. To customize the email " +"template, enable/disable, or change the subject, go to %s." +msgstr "" + +#: src/Admin/SettingsController.php:286 +msgid "WooCommerce > Settings > Emails > License Expiration Warning" +msgstr "" + +#: src/Admin/SettingsController.php:291 +msgid "First Warning (Days Before)" +msgstr "" + +#: src/Admin/SettingsController.php:293 +msgid "Days before expiration to send the first warning email." +msgstr "" + +#: src/Admin/SettingsController.php:302 +msgid "Second Warning (Days Before)" +msgstr "" + +#: src/Admin/SettingsController.php:304 +msgid "" +"Days before expiration to send the second warning email. Set to 0 to disable." +msgstr "" + +#: src/Admin/SettingsController.php:326 +msgid "Prometheus Metrics" +msgstr "" + +#: src/Admin/SettingsController.php:328 +msgid "" +"Expose license and API metrics for Prometheus monitoring. Requires the WP " +"Prometheus plugin to be installed and active." +msgstr "" + +#: src/Admin/SettingsController.php:332 +msgid "Enable Prometheus Metrics" +msgstr "" + +#: src/Admin/SettingsController.php:334 +msgid "" +"Expose license statistics, API usage, and download metrics via Prometheus." +msgstr "" + +#: src/Admin/SettingsController.php:370 +msgid "Running on localhost - license validation bypassed." +msgstr "" + +#: src/Admin/SettingsController.php:378 +msgid "License is valid and active." +msgstr "" + +#: src/Admin/SettingsController.php:384 +msgid "License is not valid. Frontend features are disabled." +msgstr "" + +#: src/Admin/SettingsController.php:395 src/Admin/SettingsController.php:431 +msgid "Verify License" +msgstr "" + +#: src/Admin/SettingsController.php:409 +msgid "Verifying..." +msgstr "" + +#: src/Admin/SettingsController.php:428 msgid "Request failed." msgstr "" -#: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1483 -#: src/Admin/AdminController.php:1524 -msgid "Revoke" +#: src/Admin/SettingsController.php:587 src/Admin/AdminController.php:483 +#: src/Admin/AdminController.php:503 src/Admin/AdminController.php:521 +#: src/Admin/AdminController.php:539 src/Admin/AdminController.php:559 +#: src/Admin/AdminController.php:577 src/Admin/AdminController.php:605 +#: src/Admin/AdminController.php:649 src/Admin/AdminController.php:875 +#: src/Frontend/AccountController.php:612 +msgid "Security check failed." +msgstr "" + +#: src/Admin/SettingsController.php:591 +msgid "Insufficient permissions." +msgstr "" + +#: src/Admin/SettingsController.php:600 +msgid "License verified successfully!" +msgstr "" + +#: src/Admin/SettingsController.php:602 src/Api/UpdateController.php:195 +msgid "License validation failed." +msgstr "" + +#: src/Admin/AdminController.php:108 +msgid "Overview" +msgstr "" + +#: src/Admin/AdminController.php:156 +msgid "No licenses found" +msgstr "" + +#: src/Admin/AdminController.php:157 +msgid "Searching..." +msgstr "" + +#: src/Admin/AdminController.php:158 +msgid "Search failed" +msgstr "" + +#: src/Admin/AdminController.php:160 +msgid "Saved" +msgstr "" + +#: src/Admin/AdminController.php:161 +msgid "Save failed" +msgstr "" + +#: src/Admin/AdminController.php:162 +msgid "" +"Are you sure you want to revoke this license? This action cannot be undone." +msgstr "" + +#: src/Admin/AdminController.php:163 src/Admin/AdminController.php:1399 +#: src/Admin/AdminController.php:1414 src/Admin/AdminController.php:1440 +msgid "Edit" +msgstr "" + +#: src/Admin/AdminController.php:167 src/Frontend/AccountController.php:586 +msgid "Copied!" +msgstr "" + +#: src/Admin/AdminController.php:168 src/Frontend/AccountController.php:587 +msgid "Copy failed" msgstr "" #: src/Admin/AdminController.php:174 src/Admin/AdminController.php:992 @@ -1410,8 +812,70 @@ msgstr "" msgid "Revoked" msgstr "" -#: src/Frontend/AccountController.php:647 -msgid "Revoked licenses cannot be transferred." +#: src/Admin/AdminController.php:211 src/Admin/AdminController.php:1087 +msgid "Guest" +msgstr "" + +#: src/Admin/AdminController.php:240 +msgid "Invalid status." +msgstr "" + +#: src/Admin/AdminController.php:247 +msgid "Status updated successfully." +msgstr "" + +#: src/Admin/AdminController.php:252 +msgid "Failed to update status." +msgstr "" + +#: src/Admin/AdminController.php:279 +msgid "License set to lifetime." +msgstr "" + +#: src/Admin/AdminController.php:284 src/Admin/AdminController.php:301 +msgid "Failed to update expiry date." +msgstr "" + +#: src/Admin/AdminController.php:296 +msgid "Expiry date updated successfully." +msgstr "" + +#: src/Admin/AdminController.php:304 +msgid "Invalid date format." +msgstr "" + +#: src/Admin/AdminController.php:338 +msgid "Domain updated successfully." +msgstr "" + +#: src/Admin/AdminController.php:342 +msgid "Failed to update domain." +msgstr "" + +#: src/Admin/AdminController.php:367 src/Admin/AdminController.php:1158 +msgid "License revoked successfully." +msgstr "" + +#: src/Admin/AdminController.php:372 +msgid "Failed to revoke license." +msgstr "" + +#: src/Admin/AdminController.php:391 +msgid "License key and domain are required." +msgstr "" + +#: src/Admin/AdminController.php:609 +msgid "You do not have permission to export licenses." +msgstr "" + +#: src/Admin/AdminController.php:653 +msgid "You do not have permission to import licenses." +msgstr "" + +#: src/Admin/AdminController.php:729 +#, php-format +msgid "" +"Import stopped: Maximum of %1$d rows allowed. %2$d imported, %3$d updated." msgstr "" #: src/Admin/AdminController.php:809 @@ -1422,159 +886,547 @@ msgstr "" msgid "Row missing valid product ID" msgstr "" -#: src/Admin/SettingsController.php:342 -msgid "Running on localhost - license validation bypassed." +#: src/Admin/AdminController.php:866 +#, php-format +msgid "Failed to import license for domain %s" msgstr "" -#: src/Admin/VersionAdminController.php:134 -msgid "SHA256" +#: src/Admin/AdminController.php:956 +msgid "License Dashboard" msgstr "" -#: src/Admin/OrderLicenseController.php:139 -#: src/Admin/OrderLicenseController.php:241 src/Admin/AdminController.php:165 -#: src/Admin/AdminController.php:1404 src/Admin/AdminController.php:1424 -#: src/Admin/AdminController.php:1445 -msgid "Save" +#: src/Admin/AdminController.php:1001 +msgid "Attention:" msgstr "" -#: src/Admin/AdminController.php:161 -msgid "Save failed" +#: src/Admin/AdminController.php:1006 +#, php-format +msgid "%d license is expiring within the next 30 days." +msgid_plural "%d licenses are expiring within the next 30 days." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1014 +msgid "View Licenses" msgstr "" -#: src/Admin/AdminController.php:160 -msgid "Saved" +#: src/Admin/AdminController.php:1020 +msgid "Quick Actions" msgstr "" -#: src/Admin/OrderLicenseController.php:371 -msgid "Saved!" +#: src/Admin/AdminController.php:1024 +msgid "Manage Licenses" msgstr "" -#: src/Admin/OrderLicenseController.php:370 src/Admin/AdminController.php:159 -msgid "Saving..." -msgstr "" - -#: src/Admin/AdminController.php:1289 -msgid "Search" -msgstr "" - -#: src/Admin/AdminController.php:1286 -msgid "Search Licenses" -msgstr "" - -#: src/Admin/AdminController.php:158 -msgid "Search failed" -msgstr "" - -#: src/Admin/AdminController.php:1288 -msgid "Search license key or domain..." -msgstr "" - -#: src/Admin/AdminController.php:157 -msgid "Searching..." -msgstr "" - -#: src/Admin/SettingsController.php:300 -msgid "Second Warning (Days Before)" -msgstr "" - -#: src/Admin/SettingsController.php:559 src/Admin/AdminController.php:483 -#: src/Admin/AdminController.php:503 src/Admin/AdminController.php:521 -#: src/Admin/AdminController.php:539 src/Admin/AdminController.php:559 -#: src/Admin/AdminController.php:577 src/Admin/AdminController.php:605 -#: src/Admin/AdminController.php:649 src/Admin/AdminController.php:875 -#: src/Frontend/AccountController.php:612 -msgid "Security check failed." -msgstr "" - -#: src/Admin/VersionAdminController.php:103 -msgid "Select Checksum File" -msgstr "" - -#: src/Admin/VersionAdminController.php:232 -msgid "Select Download File" -msgstr "" - -#: src/Admin/VersionAdminController.php:89 -msgid "Select File" -msgstr "" - -#: src/Admin/AdminController.php:1831 -msgid "Select a CSV file to import." -msgstr "" - -#: src/Admin/SettingsController.php:152 -msgid "Server Secret (Optional)" -msgstr "" - -#: src/Admin/AdminController.php:1447 src/Admin/AdminController.php:1476 -msgid "Set to lifetime" +#: src/Admin/AdminController.php:1028 +msgid "Export to CSV" msgstr "" #: src/Admin/AdminController.php:1032 wc-licensed-product.php:137 msgid "Settings" msgstr "" +#: src/Admin/AdminController.php:1152 +msgid "License updated successfully." +msgstr "" + +#: src/Admin/AdminController.php:1155 +msgid "License deleted successfully." +msgstr "" + +#: src/Admin/AdminController.php:1161 +msgid "License extended successfully." +msgstr "" + +#: src/Admin/AdminController.php:1164 +msgid "License set to lifetime successfully." +msgstr "" + +#: src/Admin/AdminController.php:1170 +#, php-format +msgid "%d license activated." +msgid_plural "%d licenses activated." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1178 +#, php-format +msgid "%d license deactivated." +msgid_plural "%d licenses deactivated." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1186 +#, php-format +msgid "%d license revoked." +msgid_plural "%d licenses revoked." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1194 +#, php-format +msgid "%d license deleted." +msgid_plural "%d licenses deleted." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1202 +#, php-format +msgid "%d license extended." +msgid_plural "%d licenses extended." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1207 +msgid "License transferred to new domain successfully." +msgstr "" + +#: src/Admin/AdminController.php:1210 +msgid "Failed to transfer license. The license may be revoked or invalid." +msgstr "" + +#: src/Admin/AdminController.php:1213 +msgid "No licenses to export." +msgstr "" + +#: src/Admin/AdminController.php:1223 +#, php-format +msgid "%d license imported." +msgid_plural "%d licenses imported." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1230 +#, php-format +msgid "%d updated." +msgid_plural "%d updated." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1238 +#, php-format +msgid "%d skipped." +msgid_plural "%d skipped." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1246 +#, php-format +msgid "%d error." +msgid_plural "%d errors." +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1267 +msgid "Export CSV" +msgstr "" + +#: src/Admin/AdminController.php:1271 +msgid "Import CSV" +msgstr "" + +#: src/Admin/AdminController.php:1286 +msgid "Search Licenses" +msgstr "" + +#: src/Admin/AdminController.php:1288 +msgid "Search license key or domain..." +msgstr "" + +#: src/Admin/AdminController.php:1289 +msgid "Search" +msgstr "" + +#: src/Admin/AdminController.php:1295 +msgid "All Statuses" +msgstr "" + +#: src/Admin/AdminController.php:1303 src/Frontend/AccountController.php:323 +msgid "All Products" +msgstr "" + +#: src/Admin/AdminController.php:1309 src/Frontend/AccountController.php:348 +msgid "Filter" +msgstr "" + +#: src/Admin/AdminController.php:1312 src/Frontend/AccountController.php:350 +msgid "Clear" +msgstr "" + +#: src/Admin/AdminController.php:1317 +msgid "item" +msgstr "" + +#: src/Admin/AdminController.php:1317 +msgid "items" +msgstr "" + #: src/Admin/AdminController.php:1323 msgid "Showing" msgstr "" -#: src/Admin/AdminController.php:1807 -msgid "Simplified Format:" +#: src/Admin/AdminController.php:1323 src/Email/LicenseEmailController.php:338 +msgid "license" +msgid_plural "licenses" +msgstr[0] "" +msgstr[1] "" + +#: src/Admin/AdminController.php:1323 +msgid "licenses" msgstr "" -#: src/Admin/AdminController.php:1839 -msgid "Skip first row (header row)" +#: src/Admin/AdminController.php:1325 +msgid "filtered" msgstr "" -#: src/Admin/OrderLicenseController.php:206 -#: src/Admin/VersionAdminController.php:136 src/Admin/AdminController.php:1359 -#: src/Admin/AdminController.php:1510 -msgid "Status" +#: src/Admin/AdminController.php:1327 +msgid "View Dashboard" msgstr "" -#: src/Admin/AdminController.php:1814 -msgid "Status can be: active, inactive, expired, revoked (defaults to active)." +#: src/Admin/AdminController.php:1336 src/Admin/AdminController.php:1521 +msgid "Bulk Actions" msgstr "" -#: src/Admin/AdminController.php:247 -msgid "Status updated successfully." +#: src/Admin/AdminController.php:1339 src/Admin/AdminController.php:1483 +#: src/Admin/AdminController.php:1524 +msgid "Revoke" msgstr "" -#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 -msgid "Status:" +#: src/Admin/AdminController.php:1340 src/Admin/AdminController.php:1525 +msgid "Extend 30 days" msgstr "" -#: src/Email/LicenseExpirationEmail.php:313 -#: src/Email/LicenseExpiredEmail.php:300 -msgid "Subject" +#: src/Admin/AdminController.php:1341 src/Admin/AdminController.php:1526 +msgid "Extend 90 days" msgstr "" -#: src/Admin/AdminController.php:1457 -msgid "Test" +#: src/Admin/AdminController.php:1342 src/Admin/AdminController.php:1527 +msgid "Extend 1 year" +msgstr "" + +#: src/Admin/AdminController.php:1345 src/Admin/AdminController.php:1530 +msgid "Apply" +msgstr "" + +#: src/Admin/AdminController.php:1357 src/Admin/AdminController.php:1508 +#: src/Email/LicenseExpirationEmail.php:104 +#: src/Email/LicenseExpiredEmail.php:96 +msgid "Customer" +msgstr "" + +#: src/Admin/AdminController.php:1360 src/Admin/AdminController.php:1511 +msgid "Created" +msgstr "" + +#: src/Admin/AdminController.php:1368 +msgid "No licenses found." +msgstr "" + +#: src/Admin/AdminController.php:1378 src/Frontend/AccountController.php:404 +#: src/Frontend/AccountController.php:444 +msgid "Copy to clipboard" +msgstr "" + +#: src/Admin/AdminController.php:1444 +msgid "Leave empty for lifetime" +msgstr "" + +#: src/Admin/AdminController.php:1447 src/Admin/AdminController.php:1476 +msgid "Set to lifetime" msgstr "" #: src/Admin/AdminController.php:1457 msgid "Test license against API" msgstr "" +#: src/Admin/AdminController.php:1457 +msgid "Test" +msgstr "" + +#: src/Admin/AdminController.php:1464 src/Frontend/AccountController.php:411 +msgid "Transfer to new domain" +msgstr "" + +#: src/Admin/AdminController.php:1464 +msgid "Transfer" +msgstr "" + +#: src/Admin/AdminController.php:1470 +msgid "Extend by 30 days" +msgstr "" + +#: src/Admin/AdminController.php:1482 +msgid "Are you sure?" +msgstr "" + +#: src/Admin/AdminController.php:1491 +msgid "Are you sure you want to delete this license?" +msgstr "" + +#: src/Admin/AdminController.php:1551 +msgid "License Validation Test" +msgstr "" + #: src/Admin/AdminController.php:1566 msgid "Testing license..." msgstr "" -#: src/Email/LicenseExpirationEmail.php:330 -#: src/Email/LicenseExpiredEmail.php:317 -msgid "Text to appear below the main email content." +#: src/Admin/AdminController.php:1572 src/Frontend/AccountController.php:526 +msgid "Close" +msgstr "" + +#: src/Admin/AdminController.php:1581 src/Frontend/AccountController.php:527 +msgid "Transfer License to New Domain" +msgstr "" + +#: src/Admin/AdminController.php:1588 src/Frontend/AccountController.php:532 +msgid "Current Domain" +msgstr "" + +#: src/Admin/AdminController.php:1592 src/Frontend/AccountController.php:537 +msgid "New Domain" +msgstr "" + +#: src/Admin/AdminController.php:1595 src/Frontend/AccountController.php:541 +msgid "Enter the new domain without http:// or www." +msgstr "" + +#: src/Admin/AdminController.php:1600 src/Frontend/AccountController.php:546 +msgid "Transfer License" +msgstr "" + +#: src/Admin/AdminController.php:1670 +msgid "License is VALID" +msgstr "" + +#: src/Admin/AdminController.php:1680 +msgid "License is INVALID" +msgstr "" + +#: src/Admin/AdminController.php:1682 +msgid "Error Code" +msgstr "" + +#: src/Admin/AdminController.php:1683 +msgid "Message" +msgstr "" + +#: src/Admin/AdminController.php:1696 +msgid "Failed to test license. Please try again." +msgstr "" + +#: src/Admin/AdminController.php:1734 src/Admin/AdminController.php:1856 +msgid "Import Licenses" +msgstr "" + +#: src/Admin/AdminController.php:1736 +msgid "Back to Licenses" +msgstr "" + +#: src/Admin/AdminController.php:1746 +msgid "Error uploading file. Please try again." +msgstr "" + +#: src/Admin/AdminController.php:1749 +msgid "Invalid file type. Please upload a CSV file." +msgstr "" + +#: src/Admin/AdminController.php:1752 +msgid "Error reading file. Please check the file format." +msgstr "" + +#: src/Admin/AdminController.php:1757 +#, php-format +msgid "File too large. Maximum size is %s." +msgstr "" + +#: src/Admin/AdminController.php:1765 +#, php-format +msgid "Please wait %d seconds before importing again." +msgstr "" + +#: src/Admin/AdminController.php:1770 +msgid "An error occurred during import." +msgstr "" + +#: src/Admin/AdminController.php:1782 +#, php-format +msgid "" +"Import limits: Maximum file size %1$s, maximum %2$d rows per import. You can " +"import again after %3$d minutes." +msgstr "" + +#: src/Admin/AdminController.php:1792 +msgid "Import Licenses from CSV" +msgstr "" + +#: src/Admin/AdminController.php:1795 +msgid "" +"Upload a CSV file to import licenses. You can use the exported CSV format or " +"a simplified format." +msgstr "" + +#: src/Admin/AdminController.php:1798 +msgid "CSV Format" msgstr "" #: src/Admin/AdminController.php:1800 msgid "The CSV file should contain the following columns:" msgstr "" -#: src/Admin/SettingsController.php:138 -msgid "The URL of the license server (e.g., https://shop.example.com)." +#: src/Admin/AdminController.php:1804 +msgid "Full Format (from Export):" +msgstr "" + +#: src/Admin/AdminController.php:1807 +msgid "Simplified Format:" +msgstr "" + +#: src/Admin/AdminController.php:1812 +msgid "Notes:" +msgstr "" + +#: src/Admin/AdminController.php:1813 +msgid "Leave License Key empty to auto-generate." +msgstr "" + +#: src/Admin/AdminController.php:1814 +msgid "Status can be: active, inactive, expired, revoked (defaults to active)." +msgstr "" + +#: src/Admin/AdminController.php:1815 +msgid "Expires At should be in YYYY-MM-DD format or \"Lifetime\"." +msgstr "" + +#: src/Admin/AdminController.php:1827 +msgid "CSV File" +msgstr "" + +#: src/Admin/AdminController.php:1831 +msgid "Select a CSV file to import." +msgstr "" + +#: src/Admin/AdminController.php:1835 +msgid "Options" +msgstr "" + +#: src/Admin/AdminController.php:1839 +msgid "Skip first row (header row)" +msgstr "" + +#: src/Admin/AdminController.php:1844 +msgid "Update existing licenses (by license key)" +msgstr "" + +#: src/Admin/AdminController.php:1847 +msgid "" +"If enabled, licenses with matching keys will be updated instead of skipped." +msgstr "" + +#: src/Admin/AdminController.php:1874 +msgid "License" +msgstr "" + +#: src/Admin/AdminController.php:1933 +msgid "No domain specified" +msgstr "" + +#: src/Api/RestApiController.php:108 src/Api/UpdateController.php:113 +msgid "Too many requests. Please try again later." +msgstr "" + +#: src/Api/RestApiController.php:271 src/Api/RestApiController.php:309 +#: src/License/LicenseManager.php:483 +msgid "License key not found." +msgstr "" + +#: src/Api/RestApiController.php:320 +msgid "This license is not valid." +msgstr "" + +#: src/Api/RestApiController.php:332 +msgid "License is already activated for this domain." +msgstr "" + +#: src/Api/RestApiController.php:344 +msgid "Maximum number of activations reached." +msgstr "" + +#: src/Api/RestApiController.php:358 +msgid "Failed to activate license." +msgstr "" + +#: src/Api/RestApiController.php:366 +msgid "License activated successfully." +msgstr "" + +#: src/Api/UpdateController.php:224 +msgid "Licensed product not found." +msgstr "" + +#: src/Api/UpdateController.php:238 +msgid "No versions available for this product." +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:79 +#: src/Checkout/CheckoutBlocksIntegration.php:128 +#: src/Checkout/CheckoutController.php:161 +msgid "License Domain" +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:86 +msgid "Enter a valid domain (without http:// or www)" +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:124 +#: src/Checkout/CheckoutController.php:192 +msgid "Enter a unique domain for each license (without http:// or www)." +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:125 +#: src/Checkout/CheckoutController.php:176 +msgid "" +"Enter the domain where you will use the license (without http:// or www)." +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:127 +#: src/Checkout/CheckoutController.php:190 +msgid "License Domains" +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:130 +msgid "Each license requires a unique domain." +msgstr "" + +#: src/Checkout/CheckoutBlocksIntegration.php:131 +#: src/Checkout/CheckoutController.php:227 +#, php-format +msgid "License %d:" +msgstr "" + +#: src/Checkout/CheckoutController.php:165 +#: src/Checkout/CheckoutController.php:231 +msgid "required" +msgstr "" + +#: src/Checkout/CheckoutController.php:326 +msgid "Please enter a domain for your license." +msgstr "" + +#: src/Checkout/CheckoutController.php:332 +msgid "Please enter a valid domain for your license." +msgstr "" + +#: src/Checkout/CheckoutController.php:359 +#, php-format +msgid "Please enter a domain for %1$s (License %2$d)." +msgstr "" + +#: src/Checkout/CheckoutController.php:374 +#, php-format +msgid "Please enter a valid domain for %1$s (License %2$d)." msgstr "" -#. translators: 1: domain name, 2: product name #: src/Checkout/CheckoutController.php:388 #, php-format msgid "" @@ -1582,20 +1434,38 @@ msgid "" "unique domain." msgstr "" -#: src/Admin/OrderLicenseController.php:129 -msgid "" -"The domain specified during checkout. Changing this will not automatically " -"update existing license domains." +#: src/Checkout/CheckoutController.php:504 +#: src/Checkout/CheckoutController.php:565 +#: src/Checkout/CheckoutController.php:569 +msgid "License Domain:" msgstr "" -#: src/Frontend/AccountController.php:656 -msgid "The new domain is the same as the current domain." +#: src/Checkout/CheckoutController.php:517 +#: src/Checkout/CheckoutController.php:582 +#: src/Checkout/CheckoutController.php:603 +msgid "License Domains:" msgstr "" -#: src/Admin/SettingsController.php:224 -msgid "" -"These settings serve as defaults for new licensed products. Individual " -"product settings override these defaults." +#: src/Checkout/CheckoutController.php:526 +#: src/Checkout/CheckoutController.php:589 +#: src/Checkout/CheckoutController.php:611 +msgid "Unknown Variation" +msgstr "" + +#: src/Checkout/StoreApiExtension.php:93 +msgid "Domains for license activation by product" +msgstr "" + +#: src/Checkout/StoreApiExtension.php:120 +msgid "Domain for license activation" +msgstr "" + +#: src/License/PluginLicenseChecker.php:132 +msgid "License settings not configured." +msgstr "" + +#: src/License/PluginLicenseChecker.php:168 +msgid "Could not connect to license server." msgstr "" #: src/License/LicenseManager.php:492 @@ -1614,161 +1484,197 @@ msgstr "" msgid "This license is not valid for this domain." msgstr "" -#: src/Api/RestApiController.php:294 -msgid "This license is not valid." +#: src/Product/VersionManager.php:166 +msgid "Attachment file not found." msgstr "" -#: src/Admin/OrderLicenseController.php:93 -msgid "This order does not contain licensed products." +#: src/Product/VersionManager.php:177 +#, php-format +msgid "File checksum does not match. Expected: %1$s, Got: %2$s" msgstr "" -#: src/Admin/VersionAdminController.php:286 -msgid "This product is not a licensed product." +#: src/Product/LicensedProductVariation.php:198 +msgid "Monthly" msgstr "" -#: src/Admin/VersionAdminController.php:275 -msgid "This version already exists." +#: src/Product/LicensedProductVariation.php:202 +msgid "Quarterly" msgstr "" -#: src/Frontend/DownloadController.php:176 -msgid "This version is no longer available for download." +#: src/Product/LicensedProductVariation.php:206 +msgid "Yearly" msgstr "" -#: src/Admin/DashboardWidgetController.php:132 -msgid "Time-limited" +#: src/Product/LicensedProductVariation.php:211 +#, php-format +msgid "%d day" +msgid_plural "%d days" +msgstr[0] "" +msgstr[1] "" + +#: src/Product/LicensedProductType.php:94 +msgid "Licensed Product" msgstr "" -#: src/Email/LicenseExpirationEmail.php:291 +#: src/Product/LicensedProductType.php:95 +msgid "Licensed Variable Product" +msgstr "" + +#: src/Product/LicensedProductType.php:150 +msgid "License Settings" +msgstr "" + +#: src/Product/LicensedProductType.php:183 +#: src/Product/LicensedProductType.php:543 +#, php-format +msgid "%d days" +msgstr "" + +#: src/Product/LicensedProductType.php:193 +#, php-format +msgid "Leave fields empty to use default settings from %s." +msgstr "" + +#: src/Product/LicensedProductType.php:195 +msgid "WooCommerce > Settings > Licensed Products" +msgstr "" + +#: src/Product/LicensedProductType.php:205 +#, php-format +msgid "Maximum number of domain activations per license. Default: %d" +msgstr "" + +#: src/Product/LicensedProductType.php:223 +#, php-format +msgid "Number of days the license is valid. Leave empty for default (%s)." +msgstr "" + +#: src/Product/LicensedProductType.php:241 +#, php-format msgid "" -"To continue using this product, please renew your license before the " -"expiration date." +"If enabled, licenses are bound to the major version at purchase time. " +"Default: %s" msgstr "" -#: src/Email/LicenseExpiredEmail.php:278 -msgid "To continue using this product, please renew your license." +#: src/Product/LicensedProductType.php:242 +msgid "Yes" +msgstr "" + +#: src/Product/LicensedProductType.php:242 +msgid "No" +msgstr "" + +#: src/Product/LicensedProductType.php:438 +msgid "Version:" +msgstr "" + +#: src/Product/LicensedProductType.php:514 +msgid "Licensed products are always virtual" +msgstr "" + +#: src/Product/LicensedProductType.php:516 +msgid "Virtual" +msgstr "" + +#: src/Product/LicensedProductType.php:549 +msgid "License Duration (Days)" +msgstr "" + +#: src/Product/LicensedProductType.php:558 +msgid "Leave empty for parent default. 0 = Lifetime." +msgstr "" + +#: src/Product/LicensedProductType.php:570 +msgid "Leave empty for parent default." +msgstr "" + +#: src/Frontend/DownloadController.php:80 +#: src/Frontend/DownloadController.php:104 +msgid "Invalid download link." +msgstr "" + +#: src/Frontend/DownloadController.php:81 +#: src/Frontend/DownloadController.php:91 +#: src/Frontend/DownloadController.php:105 +#: src/Frontend/DownloadController.php:120 +#: src/Frontend/DownloadController.php:130 +#: src/Frontend/DownloadController.php:140 +#: src/Frontend/DownloadController.php:149 +#: src/Frontend/DownloadController.php:159 +#: src/Frontend/DownloadController.php:168 +#: src/Frontend/DownloadController.php:177 +#: src/Frontend/DownloadController.php:199 +#: src/Frontend/DownloadController.php:215 +msgid "Download Error" +msgstr "" + +#: src/Frontend/DownloadController.php:90 +msgid "Invalid download link format." msgstr "" #: src/Frontend/DownloadController.php:119 msgid "Too many download attempts. Please try again later." msgstr "" -#: src/Api/RestApiController.php:107 src/Api/UpdateController.php:112 -msgid "Too many requests. Please try again later." +#: src/Frontend/DownloadController.php:139 +msgid "You do not have permission to download this file." msgstr "" -#: src/Frontend/AccountController.php:605 -msgid "Too many transfer attempts. Please try again later." +#: src/Frontend/DownloadController.php:148 +msgid "Your license is not active. Please contact support." msgstr "" -#: src/Admin/DownloadWidgetController.php:145 -msgid "Top Products" +#: src/Frontend/DownloadController.php:158 +msgid "Version not found." msgstr "" -#: src/Admin/DownloadWidgetController.php:163 -msgid "Top Versions" +#: src/Frontend/DownloadController.php:167 +msgid "Version does not match your licensed product." msgstr "" -#: src/Admin/DownloadWidgetController.php:140 -msgid "Total Downloads" +#: src/Frontend/DownloadController.php:176 +msgid "This version is no longer available for download." msgstr "" -#: src/Admin/DashboardWidgetController.php:113 -#: src/Admin/AdminController.php:964 -msgid "Total Licenses" +#: src/Frontend/DownloadController.php:198 +msgid "No download file available for this version." msgstr "" -#: src/Admin/AdminController.php:1464 -msgid "Transfer" +#: src/Frontend/DownloadController.php:214 +msgid "Download file not found." msgstr "" -#: src/Admin/AdminController.php:1600 src/Frontend/AccountController.php:546 -msgid "Transfer License" +#: src/Frontend/AccountController.php:108 +msgid "Please log in to view your licenses." msgstr "" -#: src/Admin/AdminController.php:1581 src/Frontend/AccountController.php:527 -msgid "Transfer License to New Domain" +#: src/Frontend/AccountController.php:337 +msgid "All Domains" msgstr "" -#: src/Frontend/AccountController.php:589 -msgid "Transfer failed. Please try again." +#: src/Frontend/AccountController.php:361 +msgid "No licenses found matching your filters." msgstr "" -#: src/Admin/AdminController.php:1464 src/Frontend/AccountController.php:411 -msgid "Transfer to new domain" +#: src/Frontend/AccountController.php:363 +msgid "You have no licenses yet." msgstr "" -#: src/Admin/OrderLicenseController.php:227 src/Admin/AdminController.php:210 -#: src/Admin/AdminController.php:1083 -msgid "Unknown" +#: src/Frontend/AccountController.php:386 +#, php-format +msgid "Order #%s" msgstr "" -#: src/Admin/OrderLicenseController.php:119 src/Admin/AdminController.php:403 -#: src/Checkout/CheckoutController.php:534 -#: src/Checkout/CheckoutController.php:595 -#: src/Checkout/CheckoutController.php:617 src/License/LicenseManager.php:886 -#: src/Product/VersionManager.php:349 src/Product/VersionManager.php:361 -#: src/Frontend/AccountController.php:190 -#: src/Frontend/AccountController.php:232 -#: src/Email/LicenseExpirationEmail.php:107 -#: src/Email/LicenseExpiredEmail.php:99 -msgid "Unknown Product" -msgstr "" - -#: src/Checkout/CheckoutController.php:526 -#: src/Checkout/CheckoutController.php:589 -#: src/Checkout/CheckoutController.php:611 -msgid "Unknown Variation" -msgstr "" - -#: src/Admin/AdminController.php:1844 -msgid "Update existing licenses (by license key)" -msgstr "" - -#: src/Admin/AdminController.php:1795 -msgid "" -"Upload a CSV file to import licenses. You can use the exported CSV format or " -"a simplified format." -msgstr "" - -#: src/Admin/VersionAdminController.php:108 -msgid "" -"Upload a SHA256 checksum file (.sha256 or .txt) to verify file integrity." -msgstr "" - -#: src/Admin/VersionAdminController.php:94 -msgid "" -"Upload or select a file from the media library. Version will be auto-" -"detected from filename (e.g., plugin-v1.2.3.zip)." -msgstr "" - -#: src/Admin/VersionAdminController.php:161 -#: src/Admin/VersionAdminController.php:393 -msgid "Uploaded file" -msgstr "" - -#: src/Admin/VersionAdminController.php:80 -msgid "Use semantic versioning (e.g., 1.0.0)" -msgstr "" - -#: src/Admin/VersionAdminController.php:233 -msgid "Use this file" +#: src/Frontend/AccountController.php:435 +msgid "API Verification Secret" msgstr "" #: src/Frontend/AccountController.php:440 msgid "Use this secret to verify signed API responses. Keep it secure." msgstr "" -#: src/Admin/SettingsController.php:367 src/Admin/SettingsController.php:403 -msgid "Verify License" -msgstr "" - -#: src/Admin/SettingsController.php:381 -msgid "Verifying..." -msgstr "" - -#: src/Admin/VersionAdminController.php:77 -#: src/Admin/VersionAdminController.php:132 -msgid "Version" +#: src/Frontend/AccountController.php:457 +msgid "Available Downloads" msgstr "" #: src/Frontend/AccountController.php:466 @@ -1777,153 +1683,70 @@ msgstr "" msgid "Version %s" msgstr "" -#: src/Admin/VersionAdminController.php:331 -#: src/Admin/VersionAdminController.php:358 -msgid "Version ID is required." +#: src/Frontend/AccountController.php:468 +msgid "Latest" msgstr "" -#: src/Admin/VersionAdminController.php:311 -msgid "Version added successfully." +#: src/Frontend/AccountController.php:488 +#, php-format +msgid "Older versions (%d)" msgstr "" -#: src/Admin/VersionAdminController.php:340 -msgid "Version deleted successfully." +#: src/Frontend/AccountController.php:588 +#: src/Frontend/AccountController.php:664 +msgid "License transferred successfully!" msgstr "" -#: src/Frontend/DownloadController.php:167 -msgid "Version does not match your licensed product." +#: src/Frontend/AccountController.php:589 +msgid "Transfer failed. Please try again." msgstr "" -#: src/Frontend/DownloadController.php:158 -msgid "Version not found." -msgstr "" - -#: src/Admin/VersionAdminController.php:368 -msgid "Version updated successfully." -msgstr "" - -#: src/Product/LicensedProductType.php:438 -msgid "Version:" -msgstr "" - -#: src/Admin/DashboardWidgetController.php:142 -msgid "View All Licenses" -msgstr "" - -#: src/Admin/AdminController.php:1327 -msgid "View Dashboard" -msgstr "" - -#: src/Admin/AdminController.php:1014 -msgid "View Licenses" -msgstr "" - -#: src/Email/LicenseExpirationEmail.php:235 -#: src/Email/LicenseExpirationEmail.php:281 -#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 -msgid "View My Licenses" -msgstr "" - -#: src/Admin/OrderLicenseController.php:267 -msgid "View in Licenses" -msgstr "" - -#: src/Product/LicensedProductType.php:516 -msgid "Virtual" -msgstr "" - -#: src/Plugin.php:353 -msgid "WC Licensed Product" -msgstr "" - -#: wc-licensed-product.php:119 -msgid "WC Licensed Product requires WooCommerce to be installed and active." -msgstr "" - -#: src/Admin/SettingsController.php:284 -msgid "WooCommerce > Settings > Emails > License Expiration Warning" -msgstr "" - -#: src/Product/LicensedProductType.php:195 -msgid "WooCommerce > Settings > Licensed Products" -msgstr "" - -#: src/Update/PluginUpdateChecker.php:354 +#: src/Frontend/AccountController.php:590 msgid "" -"WooCommerce plugin for selling licensed software products with domain-bound " -"license keys." +"Are you sure you want to transfer this license to a new domain? This action " +"cannot be undone." msgstr "" -#: src/Email/LicenseEmailController.php:332 -msgid "YOUR LICENSE KEYS" +#: src/Frontend/AccountController.php:605 +msgid "Too many transfer attempts. Please try again later." msgstr "" -#: src/Product/LicensedProductVariation.php:206 -msgid "Yearly" +#: src/Frontend/AccountController.php:618 +msgid "Please log in to transfer a license." msgstr "" -#: src/Product/LicensedProductType.php:242 -msgid "Yes" -msgstr "" - -#: src/Email/LicenseEmailController.php:319 -#: src/Email/LicenseEmailController.php:357 -msgid "You can also view your licenses in your account under \"Licenses\"." -msgstr "" - -#: src/Frontend/DownloadController.php:139 -msgid "You do not have permission to download this file." -msgstr "" - -#: src/Admin/AdminController.php:609 -msgid "You do not have permission to export licenses." -msgstr "" - -#: src/Admin/AdminController.php:653 -msgid "You do not have permission to import licenses." +#: src/Frontend/AccountController.php:624 +msgid "Invalid license." msgstr "" #: src/Frontend/AccountController.php:642 msgid "You do not have permission to transfer this license." msgstr "" -#: src/Frontend/AccountController.php:363 -msgid "You have no licenses yet." +#: src/Frontend/AccountController.php:647 +msgid "Revoked licenses cannot be transferred." msgstr "" -#: src/Email/LicenseEmailController.php:268 -msgid "Your License Keys" +#: src/Frontend/AccountController.php:651 +msgid "Expired licenses cannot be transferred." msgstr "" -#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 -#, php-format -msgid "Your license for %1$s has expired on %2$s." +#: src/Frontend/AccountController.php:656 +msgid "The new domain is the same as the current domain." msgstr "" -#: src/Email/LicenseExpirationEmail.php:189 -#: src/Email/LicenseExpirationEmail.php:257 -#, php-format -msgid "Your license for %1$s will expire in %2$d days (%3$s)." +#: src/Frontend/AccountController.php:668 +msgid "Failed to transfer license. Please try again." msgstr "" -#: src/Email/LicenseExpirationEmail.php:181 -#: src/Email/LicenseExpirationEmail.php:251 -#, php-format -msgid "Your license for %s will expire tomorrow (%s)." +#: src/Email/LicenseExpirationEmail.php:55 +msgid "License Expiration Warning" msgstr "" -#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 +#: src/Email/LicenseExpirationEmail.php:56 msgid "" -"Your license is no longer valid and the product will stop working until you " -"renew." -msgstr "" - -#: src/Frontend/DownloadController.php:148 -msgid "Your license is not active. Please contact support." -msgstr "" - -#: src/Admin/SettingsController.php:146 -msgid "Your license key in XXXX-XXXX-XXXX-XXXX format." +"License expiration warning emails are sent to customers when their licenses " +"are about to expire." msgstr "" #: src/Email/LicenseExpirationEmail.php:74 @@ -1932,41 +1755,213 @@ msgid "" "days" msgstr "" +#: src/Email/LicenseExpirationEmail.php:82 +msgid "License Expiration Notice" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:176 +#: src/Email/LicenseExpirationEmail.php:246 +#: src/Email/LicenseExpiredEmail.php:167 src/Email/LicenseExpiredEmail.php:238 +#, php-format +msgid "Hello %s," +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:181 +#: src/Email/LicenseExpirationEmail.php:251 +#, php-format +msgid "Your license for %s will expire tomorrow (%s)." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:189 +#: src/Email/LicenseExpirationEmail.php:257 +#, php-format +msgid "Your license for %1$s will expire in %2$d days (%3$s)." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:197 +#: src/Email/LicenseExpirationEmail.php:266 +msgid "License Details" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:203 +#: src/Email/LicenseExpirationEmail.php:269 +#: src/Email/LicenseExpiredEmail.php:187 src/Email/LicenseExpiredEmail.php:255 +msgid "Product:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:207 +#: src/Email/LicenseExpirationEmail.php:270 +#: src/Email/LicenseExpiredEmail.php:191 src/Email/LicenseExpiredEmail.php:256 +#: src/Email/LicenseEmailController.php:343 +msgid "License Key:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:215 +#: src/Email/LicenseExpirationEmail.php:271 +#: src/Email/LicenseExpiredEmail.php:199 src/Email/LicenseExpiredEmail.php:257 +#: src/Email/LicenseEmailController.php:345 +msgid "Domain:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:219 +#: src/Email/LicenseExpirationEmail.php:272 +#: src/Email/LicenseEmailController.php:347 +msgid "Expires:" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:235 +#: src/Email/LicenseExpirationEmail.php:281 +#: src/Email/LicenseExpiredEmail.php:227 src/Email/LicenseExpiredEmail.php:268 +msgid "View My Licenses" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:291 +msgid "" +"To continue using this product, please renew your license before the " +"expiration date." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:301 +#: src/Email/LicenseExpiredEmail.php:288 +#, php-format +msgid "Available placeholders: %s" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:307 +#: src/Email/LicenseExpiredEmail.php:294 +msgid "Enable/Disable" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:309 +#: src/Email/LicenseExpiredEmail.php:296 +msgid "Enable this email notification" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:313 +#: src/Email/LicenseExpiredEmail.php:300 +msgid "Subject" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:321 +#: src/Email/LicenseExpiredEmail.php:308 +msgid "Email heading" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:329 +#: src/Email/LicenseExpiredEmail.php:316 +msgid "Additional content" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:330 +#: src/Email/LicenseExpiredEmail.php:317 +msgid "Text to appear below the main email content." +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:338 +#: src/Email/LicenseExpiredEmail.php:325 +msgid "Email type" +msgstr "" + +#: src/Email/LicenseExpirationEmail.php:340 +#: src/Email/LicenseExpiredEmail.php:327 +msgid "Choose which format of email to send." +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:50 src/Email/LicenseExpiredEmail.php:76 +msgid "License Expired" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:51 +msgid "" +"License expired emails are sent to customers when their licenses have " +"expired." +msgstr "" + #: src/Email/LicenseExpiredEmail.php:68 msgid "[{site_title}] Your license for {product_name} has expired" msgstr "" -#: src/Admin/OrderLicenseController.php:137 -#: src/Checkout/CheckoutBlocksIntegration.php:84 -#: src/Checkout/CheckoutBlocksIntegration.php:122 -#: src/Checkout/CheckoutController.php:172 -#: src/Checkout/CheckoutController.php:238 -msgid "example.com" +#: src/Email/LicenseExpiredEmail.php:171 src/Email/LicenseExpiredEmail.php:242 +#, php-format +msgid "Your license for %1$s has expired on %2$s." msgstr "" -#: src/Admin/AdminController.php:1325 -msgid "filtered" +#: src/Email/LicenseExpiredEmail.php:178 src/Email/LicenseExpiredEmail.php:248 +msgid "" +"Your license is no longer valid and the product will stop working until you " +"renew." msgstr "" -#: src/Admin/AdminController.php:1317 -msgid "item" +#: src/Email/LicenseExpiredEmail.php:181 src/Email/LicenseExpiredEmail.php:252 +msgid "Expired License Details" msgstr "" -#: src/Admin/AdminController.php:1317 -msgid "items" +#: src/Email/LicenseExpiredEmail.php:203 src/Email/LicenseExpiredEmail.php:258 +msgid "Expired on:" msgstr "" -#: src/Admin/AdminController.php:1323 src/Email/LicenseEmailController.php:338 -msgid "license" -msgid_plural "licenses" +#: src/Email/LicenseExpiredEmail.php:207 src/Email/LicenseExpiredEmail.php:259 +msgid "Status:" +msgstr "" + +#: src/Email/LicenseExpiredEmail.php:278 +msgid "To continue using this product, please renew your license." +msgstr "" + +#: src/Email/LicenseEmailController.php:212 +#: src/Email/LicenseEmailController.php:220 +msgid "License Keys:" +msgstr "" + +#: src/Email/LicenseEmailController.php:268 +msgid "Your License Keys" +msgstr "" + +#: src/Email/LicenseEmailController.php:277 +#, php-format +msgid "%d license" +msgid_plural "%d licenses" msgstr[0] "" msgstr[1] "" -#: src/Admin/AdminController.php:1323 -msgid "licenses" +#: src/Email/LicenseEmailController.php:308 +#: src/Email/LicenseEmailController.php:352 +msgid "Never" msgstr "" -#: src/Checkout/CheckoutController.php:165 -#: src/Checkout/CheckoutController.php:231 -msgid "required" +#: src/Email/LicenseEmailController.php:319 +#: src/Email/LicenseEmailController.php:357 +msgid "You can also view your licenses in your account under \"Licenses\"." +msgstr "" + +#: src/Email/LicenseEmailController.php:332 +msgid "YOUR LICENSE KEYS" +msgstr "" + +#: src/Update/PluginUpdateChecker.php:354 +msgid "" +"WooCommerce plugin for selling licensed software products with domain-bound " +"license keys." +msgstr "" + +#: src/Plugin.php:357 +msgid "WC Licensed Product" +msgstr "" + +#: src/Plugin.php:358 +msgid "" +"Plugin license is not configured or invalid. Frontend features are disabled." +msgstr "" + +#: src/Plugin.php:359 +msgid "Configure License" +msgstr "" + +#: wc-licensed-product.php:61 +#, php-format +msgid "%s requires WooCommerce to be installed and active." +msgstr "" + +#: wc-licensed-product.php:119 +msgid "WC Licensed Product requires WooCommerce to be installed and active." msgstr "" diff --git a/src/Admin/SettingsController.php b/src/Admin/SettingsController.php index 0d778bb..18c5c2a 100644 --- a/src/Admin/SettingsController.php +++ b/src/Admin/SettingsController.php @@ -65,6 +65,7 @@ final class SettingsController 'auto-updates' => __('Auto-Updates', 'wc-licensed-product'), 'defaults' => __('Default Settings', 'wc-licensed-product'), 'notifications' => __('Notifications', 'wc-licensed-product'), + 'metrics' => __('Metrics', 'wc-licensed-product'), ]; } @@ -116,6 +117,7 @@ final class SettingsController 'auto-updates' => $this->getAutoUpdatesSettings(), 'defaults' => $this->getDefaultsSettings(), 'notifications' => $this->getNotificationsSettings(), + 'metrics' => $this->getMetricsSettings(), default => $this->getPluginLicenseSettings(), }; } @@ -314,6 +316,32 @@ final class SettingsController ]; } + /** + * Get metrics settings + */ + private function getMetricsSettings(): array + { + return [ + 'metrics_section_title' => [ + 'name' => __('Prometheus Metrics', 'wc-licensed-product'), + 'type' => 'title', + 'desc' => __('Expose license and API metrics for Prometheus monitoring. Requires the WP Prometheus plugin to be installed and active.', 'wc-licensed-product'), + 'id' => 'wc_licensed_product_section_metrics', + ], + 'metrics_enabled' => [ + 'name' => __('Enable Prometheus Metrics', 'wc-licensed-product'), + 'type' => 'checkbox', + 'desc' => __('Expose license statistics, API usage, and download metrics via Prometheus.', 'wc-licensed-product'), + 'id' => 'wc_licensed_product_metrics_enabled', + 'default' => 'no', + ], + 'metrics_section_end' => [ + 'type' => 'sectionend', + 'id' => 'wc_licensed_product_section_metrics_end', + ], + ]; + } + /** * Render settings tab content */ @@ -575,4 +603,12 @@ final class SettingsController wp_send_json_error(['message' => $error]); } } + + /** + * Check if Prometheus metrics are enabled + */ + public static function isMetricsEnabled(): bool + { + return get_option('wc_licensed_product_metrics_enabled', 'no') === 'yes'; + } } diff --git a/src/Api/RestApiController.php b/src/Api/RestApiController.php index 2c8132a..3f6c86f 100644 --- a/src/Api/RestApiController.php +++ b/src/Api/RestApiController.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace Jeremias\WcLicensedProduct\Api; use Jeremias\WcLicensedProduct\License\LicenseManager; +use Jeremias\WcLicensedProduct\Metrics\PrometheusController; use WP_REST_Request; use WP_REST_Response; use WP_REST_Server; @@ -108,6 +109,10 @@ final class RestApiController 'retry_after' => $retryAfter, ], 429); $response->header('Retry-After', (string) $retryAfter); + + // Track rate limit event for metrics + PrometheusController::incrementRateLimitExceeded('api'); + return $response; } @@ -209,6 +214,16 @@ final class RestApiController $statusCode = $this->getStatusCodeForResult($result); + // Track metrics + if ($result['valid']) { + PrometheusController::incrementApiRequest('validate', 'success'); + } else { + PrometheusController::incrementApiRequest('validate', 'error'); + if (!empty($result['error'])) { + PrometheusController::incrementValidationError($result['error']); + } + } + return new WP_REST_Response($result, $statusCode); } @@ -247,6 +262,9 @@ final class RestApiController $license = $this->licenseManager->getLicenseByKey($licenseKey); if (!$license) { + PrometheusController::incrementApiRequest('status', 'error'); + PrometheusController::incrementValidationError('license_not_found'); + return new WP_REST_Response([ 'valid' => false, 'error' => 'license_not_found', @@ -254,6 +272,8 @@ final class RestApiController ], 404); } + PrometheusController::incrementApiRequest('status', 'success'); + return new WP_REST_Response([ 'valid' => $license->isValid(), 'status' => $license->getStatus(), @@ -280,6 +300,9 @@ final class RestApiController $license = $this->licenseManager->getLicenseByKey($licenseKey); if (!$license) { + PrometheusController::incrementApiRequest('activate', 'error'); + PrometheusController::incrementValidationError('license_not_found'); + return new WP_REST_Response([ 'success' => false, 'error' => 'license_not_found', @@ -288,6 +311,9 @@ final class RestApiController } if (!$license->isValid()) { + PrometheusController::incrementApiRequest('activate', 'error'); + PrometheusController::incrementValidationError('license_invalid'); + return new WP_REST_Response([ 'success' => false, 'error' => 'license_invalid', @@ -299,6 +325,8 @@ final class RestApiController // Check if already activated on this domain if ($license->getDomain() === $normalizedDomain) { + PrometheusController::incrementApiRequest('activate', 'success'); + return new WP_REST_Response([ 'success' => true, 'message' => __('License is already activated for this domain.', 'wc-licensed-product'), @@ -307,6 +335,9 @@ final class RestApiController // Check if can activate on another domain if (!$license->canActivate()) { + PrometheusController::incrementApiRequest('activate', 'error'); + PrometheusController::incrementValidationError('max_activations_reached'); + return new WP_REST_Response([ 'success' => false, 'error' => 'max_activations_reached', @@ -318,6 +349,9 @@ final class RestApiController $success = $this->licenseManager->updateLicenseDomain($license->getId(), $domain); if (!$success) { + PrometheusController::incrementApiRequest('activate', 'error'); + PrometheusController::incrementValidationError('activation_failed'); + return new WP_REST_Response([ 'success' => false, 'error' => 'activation_failed', @@ -325,6 +359,8 @@ final class RestApiController ], 500); } + PrometheusController::incrementApiRequest('activate', 'success'); + return new WP_REST_Response([ 'success' => true, 'message' => __('License activated successfully.', 'wc-licensed-product'), diff --git a/src/Api/UpdateController.php b/src/Api/UpdateController.php index 9404ea2..65cbe2d 100644 --- a/src/Api/UpdateController.php +++ b/src/Api/UpdateController.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Jeremias\WcLicensedProduct\Api; use Jeremias\WcLicensedProduct\License\LicenseManager; +use Jeremias\WcLicensedProduct\Metrics\PrometheusController; use Jeremias\WcLicensedProduct\Product\VersionManager; use Jeremias\WcLicensedProduct\Product\ProductVersion; use WP_REST_Request; @@ -113,6 +114,10 @@ final class UpdateController 'retry_after' => $retryAfter, ], 429); $response->header('Retry-After', (string) $retryAfter); + + // Track rate limit event for metrics + PrometheusController::incrementRateLimitExceeded('update-check'); + return $response; } @@ -179,10 +184,14 @@ final class UpdateController $validationResult = $this->licenseManager->validateLicense($licenseKey, $domain); if (!$validationResult['valid']) { + $errorType = $validationResult['error'] ?? 'license_invalid'; + PrometheusController::incrementApiRequest('update-check', 'error'); + PrometheusController::incrementValidationError($errorType); + return new WP_REST_Response([ 'success' => false, 'update_available' => false, - 'error' => $validationResult['error'] ?? 'license_invalid', + 'error' => $errorType, 'message' => $validationResult['message'] ?? __('License validation failed.', 'wc-licensed-product'), ], $validationResult['error'] === 'license_not_found' ? 404 : 403); } @@ -190,6 +199,9 @@ final class UpdateController // Get license to access product ID $license = $this->licenseManager->getLicenseByKey($licenseKey); if (!$license) { + PrometheusController::incrementApiRequest('update-check', 'error'); + PrometheusController::incrementValidationError('license_not_found'); + return new WP_REST_Response([ 'success' => false, 'update_available' => false, @@ -202,6 +214,9 @@ final class UpdateController $product = wc_get_product($productId); if (!$product) { + PrometheusController::incrementApiRequest('update-check', 'error'); + PrometheusController::incrementValidationError('product_not_found'); + return new WP_REST_Response([ 'success' => false, 'update_available' => false, @@ -214,6 +229,8 @@ final class UpdateController $latestVersion = $this->getLatestVersionForLicense($license); if (!$latestVersion) { + PrometheusController::incrementApiRequest('update-check', 'success'); + return new WP_REST_Response([ 'success' => true, 'update_available' => false, @@ -230,6 +247,8 @@ final class UpdateController // Build response $response = $this->buildUpdateResponse($product, $latestVersion, $license, $updateAvailable); + PrometheusController::incrementApiRequest('update-check', 'success'); + return new WP_REST_Response($response); } diff --git a/src/Metrics/PrometheusController.php b/src/Metrics/PrometheusController.php new file mode 100644 index 0000000..98b08dc --- /dev/null +++ b/src/Metrics/PrometheusController.php @@ -0,0 +1,259 @@ +licenseManager = $licenseManager; + $this->versionManager = $versionManager; + } + + /** + * Register hooks for Prometheus metrics collection + */ + public function register(): void + { + // Only register if metrics are enabled + if (!SettingsController::isMetricsEnabled()) { + return; + } + + add_action('wp_prometheus_collect_metrics', [$this, 'collectMetrics']); + } + + /** + * Collect and register all metrics + * + * @param object $collector The Prometheus collector object + */ + public function collectMetrics(object $collector): void + { + $this->collectLicenseMetrics($collector); + $this->collectDownloadMetrics($collector); + $this->collectApiMetrics($collector); + } + + /** + * Collect license-related metrics + */ + private function collectLicenseMetrics(object $collector): void + { + $stats = $this->licenseManager->getStatistics(); + + // License count by status (gauge) + $licensesByStatus = $collector->register_gauge( + 'wclp_licenses_total', + 'Total number of licenses by status', + ['status'] + ); + + foreach ($stats['by_status'] as $status => $count) { + $licensesByStatus->set($count, [$status]); + } + + // Lifetime licenses (gauge) + $lifetimeLicenses = $collector->register_gauge( + 'wclp_licenses_lifetime_total', + 'Total number of lifetime licenses' + ); + $lifetimeLicenses->set($stats['lifetime']); + + // Expiring licenses (gauge) + $expiringLicenses = $collector->register_gauge( + 'wclp_licenses_expiring_total', + 'Total number of licenses with expiration date' + ); + $expiringLicenses->set($stats['expiring']); + + // Licenses expiring soon - next 30 days (gauge) + $expiringSoon = $collector->register_gauge( + 'wclp_licenses_expiring_soon', + 'Licenses expiring within 30 days' + ); + $expiringSoon->set($stats['expiring_soon']); + } + + /** + * Collect download-related metrics + */ + private function collectDownloadMetrics(object $collector): void + { + $stats = $this->versionManager->getDownloadStatistics(); + + // Total downloads (gauge) + $totalDownloads = $collector->register_gauge( + 'wclp_downloads_total', + 'Total number of file downloads' + ); + $totalDownloads->set($stats['total']); + + // Active versions count (gauge) + $activeVersions = $collector->register_gauge( + 'wclp_versions_active_total', + 'Total number of active product versions' + ); + $activeVersions->set($this->countActiveVersions()); + } + + /** + * Collect API-related metrics (counters) + */ + private function collectApiMetrics(object $collector): void + { + $counters = $this->getCounters(); + + // API requests by endpoint and result (counter) + $apiRequests = $collector->register_counter( + 'wclp_api_requests_total', + 'Total API requests by endpoint and result', + ['endpoint', 'result'] + ); + + foreach ($counters['api_requests'] ?? [] as $key => $count) { + [$endpoint, $result] = explode(':', $key); + $apiRequests->incBy($count, [$endpoint, $result]); + } + + // Rate limit exceeded events (counter) + $rateLimitExceeded = $collector->register_counter( + 'wclp_rate_limit_exceeded_total', + 'Total rate limit exceeded events by endpoint', + ['endpoint'] + ); + + foreach ($counters['rate_limit'] ?? [] as $endpoint => $count) { + $rateLimitExceeded->incBy($count, [$endpoint]); + } + + // Validation errors by type (counter) + $validationErrors = $collector->register_counter( + 'wclp_validation_errors_total', + 'Total validation errors by error type', + ['error_type'] + ); + + foreach ($counters['validation_errors'] ?? [] as $errorType => $count) { + $validationErrors->incBy($count, [$errorType]); + } + } + + /** + * Count active product versions + */ + private function countActiveVersions(): int + { + global $wpdb; + + $tableName = \Jeremias\WcLicensedProduct\Installer::getVersionsTable(); + + return (int) $wpdb->get_var( + "SELECT COUNT(*) FROM {$tableName} WHERE is_active = 1" + ); + } + + /** + * Get stored counters + */ + private function getCounters(): array + { + $counters = get_option(self::COUNTERS_OPTION, []); + return is_array($counters) ? $counters : []; + } + + /** + * Increment an API request counter + * + * @param string $endpoint The API endpoint (validate, status, activate, update-check) + * @param string $result The result (success or error) + */ + public static function incrementApiRequest(string $endpoint, string $result): void + { + if (!SettingsController::isMetricsEnabled()) { + return; + } + + $counters = get_option(self::COUNTERS_OPTION, []); + if (!is_array($counters)) { + $counters = []; + } + + $key = "{$endpoint}:{$result}"; + $counters['api_requests'][$key] = ($counters['api_requests'][$key] ?? 0) + 1; + + update_option(self::COUNTERS_OPTION, $counters, false); + } + + /** + * Increment rate limit exceeded counter + * + * @param string $endpoint The API endpoint + */ + public static function incrementRateLimitExceeded(string $endpoint): void + { + if (!SettingsController::isMetricsEnabled()) { + return; + } + + $counters = get_option(self::COUNTERS_OPTION, []); + if (!is_array($counters)) { + $counters = []; + } + + $counters['rate_limit'][$endpoint] = ($counters['rate_limit'][$endpoint] ?? 0) + 1; + + update_option(self::COUNTERS_OPTION, $counters, false); + } + + /** + * Increment validation error counter + * + * @param string $errorType The error type (license_not_found, domain_mismatch, etc.) + */ + public static function incrementValidationError(string $errorType): void + { + if (!SettingsController::isMetricsEnabled()) { + return; + } + + $counters = get_option(self::COUNTERS_OPTION, []); + if (!is_array($counters)) { + $counters = []; + } + + $counters['validation_errors'][$errorType] = ($counters['validation_errors'][$errorType] ?? 0) + 1; + + update_option(self::COUNTERS_OPTION, $counters, false); + } + + /** + * Reset all counters (useful for testing or maintenance) + */ + public static function resetCounters(): void + { + delete_option(self::COUNTERS_OPTION); + } +} diff --git a/src/Plugin.php b/src/Plugin.php index f26105c..a81df47 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -26,6 +26,7 @@ use Jeremias\WcLicensedProduct\Frontend\AccountController; use Jeremias\WcLicensedProduct\Frontend\DownloadController; use Jeremias\WcLicensedProduct\License\LicenseManager; use Jeremias\WcLicensedProduct\License\PluginLicenseChecker; +use Jeremias\WcLicensedProduct\Metrics\PrometheusController; use Jeremias\WcLicensedProduct\Product\LicensedProductType; use Jeremias\WcLicensedProduct\Product\VersionManager; use Jeremias\WcLicensedProduct\Update\PluginUpdateChecker; @@ -171,6 +172,9 @@ final class Plugin if (!empty($serverUrl) && !$licenseChecker->isSelfLicensing()) { PluginUpdateChecker::getInstance()->register(); } + + // Initialize Prometheus metrics if enabled + (new PrometheusController($this->licenseManager, $this->versionManager))->register(); } /** diff --git a/wc-licensed-product.php b/wc-licensed-product.php index 2abdb92..0cddb90 100644 --- a/wc-licensed-product.php +++ b/wc-licensed-product.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce Licensed Product * Plugin URI: https://src.bundespruefstelle.ch/magdev/wc-licensed-product * Description: WooCommerce plugin to sell software products using license keys with domain-based validation. - * Version: 0.7.3 + * Version: 0.7.4 * Author: Marco Graetsch * Author URI: https://src.bundespruefstelle.ch/magdev * License: GPL-2.0-or-later @@ -28,7 +28,7 @@ if (!defined('ABSPATH')) { } // Plugin constants -define('WC_LICENSED_PRODUCT_VERSION', '0.7.3'); +define('WC_LICENSED_PRODUCT_VERSION', '0.7.4'); define('WC_LICENSED_PRODUCT_PLUGIN_FILE', __FILE__); define('WC_LICENSED_PRODUCT_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('WC_LICENSED_PRODUCT_PLUGIN_URL', plugin_dir_url(__FILE__));