From b43626b5a285d3fd61c014e69b6c590bf0457c83 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 30 Jul 2021 19:13:47 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96i18n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/applications/serializers/application.py | 8 +- apps/assets/serializers/domain.py | 4 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 80516 -> 80121 bytes apps/locale/zh/LC_MESSAGES/django.po | 362 ++++++++++-------- .../serializers/application/permission.py | 29 +- apps/perms/serializers/asset/permission.py | 52 +-- 6 files changed, 258 insertions(+), 197 deletions(-) diff --git a/apps/applications/serializers/application.py b/apps/applications/serializers/application.py index 8e0c414a1..205b2d244 100644 --- a/apps/applications/serializers/application.py +++ b/apps/applications/serializers/application.py @@ -45,8 +45,8 @@ class ApplicationSerializerMixin(serializers.Serializer): class ApplicationSerializer(ApplicationSerializerMixin, BulkOrgResourceModelSerializer): - category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category(Display)')) - type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type(Dispaly)')) + category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category display')) + type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display')) class Meta: model = models.Application @@ -76,9 +76,9 @@ class ApplicationAccountSerializer(serializers.Serializer): uid = serializers.ReadOnlyField(label=_("Union id")) app_name = serializers.ReadOnlyField(label=_("Application name"), read_only=True) app_category = serializers.ChoiceField(label=_('Category'), choices=const.AppCategory.choices, read_only=True) - app_category_display = serializers.SerializerMethodField(label=_('Category')) + app_category_display = serializers.SerializerMethodField(label=_('Category display')) app_type = serializers.ChoiceField(label=_('Type'), choices=const.AppType.choices, read_only=True) - app_type_display = serializers.SerializerMethodField(label=_('Type')) + app_type_display = serializers.SerializerMethodField(label=_('Type display')) category_mapper = dict(const.AppCategory.choices) type_mapper = dict(const.AppType.choices) diff --git a/apps/assets/serializers/domain.py b/apps/assets/serializers/domain.py index 08182127e..3afffb4f7 100644 --- a/apps/assets/serializers/domain.py +++ b/apps/assets/serializers/domain.py @@ -9,8 +9,8 @@ from .base import AuthSerializerMixin class DomainSerializer(BulkOrgResourceModelSerializer): - asset_count = serializers.SerializerMethodField(label=_('Assets count')) - application_count = serializers.SerializerMethodField(label=_('Applications count')) + asset_count = serializers.SerializerMethodField(label=_('Assets amount')) + application_count = serializers.SerializerMethodField(label=_('Applications amount')) gateway_count = serializers.SerializerMethodField(label=_('Gateways count')) class Meta: diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 0133308889c136f77eb3e0bd7882a8b61fe755d2..c541ded64954b10a4b5fdb52a5861086efb9901a 100644 GIT binary patch delta 23664 zcmZA92bfJ)`}grZOfeXvGwK*j(G5n87DNfrf{m5a_#*KJZJAt74$%<-pWY zp0^^%^IpEGsOK$h?s+lEJZ~BP65x5q-}k)jxVWX~y+{3rtvzod?!bXqr;X<|q5T0I zM>%IZ&l`$M@hrx*_q?CzAJoC~wtAk=JK53mGScDmPM&v+2H$k?yiC}qtLFvdI1Izd zm7>8r5ejReN-hQhu)!XxuQ+^X;@vYwMe+-$P z1hjye$l3E2VpCj-#nJoNO%RXiC{{)d)DYFLiN#x^cBr?NhoEj`lDPnNcGh8j{NZEv zUpsJ*Kn8q?>X5dNdzN`nhp9L!UI#Pc`bOzP$E^7SOsD2sx zy837z8BOp8s-h|C4!fW_3_?AtNvMIAqS|jkE&L>A!iyM=Pf?FBxSv}{8q{l@7j-5o zV`h8@wQyetG8xGXM@=vTHQ-XzfZtpBC~84ht^C}|Y5Kd@EDEzyAA{;&8M9#%)cC!u zezeukb8(-yfsCH{VN8L?P>1O^)U&*f`S20y4zhmY4r2@!rW}tt1Fcaz(gk%R{ZXF> zV^D9!Qq;I>P~+^te0u+nkkJ4SP+R{G@_FQi4R9UPqE3Gn%#2Z}g_cE4Sk>b1pzgc_ z=EXr+3g=@9JdNcrB_EU8nd%s*_rEn6EucMW0X?u74nwVc9clqvPm*_)BhFf&Q_tecrWS>kC>;;i{?#KyT_;< zdS&GlgIzhDnFFJ$2G-@ZVV+1A};uf3( zwa|D}{|czLr<&Oqi&Acf+M#Kv{wsZCbQ%w!w)zyR<4x3C@i%ILI;eW~A*e%_2{lm^ z>dp(G`jxVHb<{_5U5ocb?Z8mfd{a<6?^|FEHkkWSTXPDv1J_U!-9tU1XQkGFYT#n1{*_Si`j{1)q5Abg-N0a^-sg=Y<6n^rcneTlxeV1X5%v1)LhZz3%#Qz{ z+GQE$wla@d9(9J^MeR&iY>WM@{x{T(J;GpZ>q|1)y5z&%7H2>`iae+Z63ogNNx3#^ zfUc-J>Vw+Kp{UP?X{fhj1?mRYqT27U@&VMNJc;4V?_DCJ9e99Ru{XjUvQ(&YG-@Hm zQ3IAo4Nwy`a1+#4w?f@WN7RD)TX{Tc=VqhkS%?MkJMyH_P;in&{3{KV+^GH0cyo< zQCr;E?28(B7&gOksGYciIq(5i#WbT`xdB$D+#S_#4F=(6jKl9ov;W$%8w7&!IqKQJ zMxEk}pSe?>A9adLqwcsq=E7#Ef%}_7F^ck7)VM2AZ_Repq5T=7@fPOB^u96fC!BcH zGiis~vPr0p-=Y?>2{qs$)T8;;ypC%36hkm{tgBCldfy{a@p#k?mctZS#p1r&R?!f1 zQt=)}Vt*^oM0MDRdd54gd;~S%Dbxh#tbEn#Z=oLDW6Xp4WkCI-P&ZN(xlx~2iHx3E zBW!}xaWUS(Z8&Yb>rj7!do-<41NFs}I2^T*iKvB4L+#KU)K0EI?ch#S`(vmxa~4DN z{{KZrr~3iw{Y^E|O&EoG=JA*e>!9wa9)@Cb48wM)Gt(P2@n@(*Jl&j)VU*{i4(V!( z|A?V_|BqSVchm%bU~0UDk@y_-2qHdr6GWlvi=+SR6?LlXqqepQhG7R(yFRD|4ny6@ zbaNK^bcb`uXo3x>0l!BLa13>tFPH&e@PjJle5ljg7PZC0QIB9c7RRq~IsS|~Qv)Zt zM>7+((D_zgJc<2RU^RiFxE|lZt5^(6PIix^J!)qLp%yv@)8J&(Lg%A@Yf*2*kEnJR z%K~vM z@DdAR&{Ws2IOe5X0h42E9~pg+v_oz62y-!Nf*;WTnxPhU4s}RxqV6PMn)_f0#q^Z( zqsA$NT38Fz8R&v)-ygN(z9dJH(MrdoCY**Da6W3n^{6}EW96Sv3pk7VM0<$pm*z`1 zVK$7W9Ea*xAGNR+s2%K%n(q@=_Ibm|sNr~2!|A9MFT-@W(drMGCs7N$fcjDDA!>(G zPIn7Phx)*YMAcVCZFO_h0$QRL&yl!zcW^L3Rw?f@v57dGNU}hYGYX2q184F=8 zEROw9ukTXSBiN66y^f(4@))&%z&Y-0greeEQ9BbmhyB+?MF{A$mq!g$3(H_*)I<|e zTfP&s;Q`bgUb6BnjG-L-wVR*_>Z7(I>b0wa{&7*`G`4sP9~m|L5VepFs4f2(wN;~0 zhiW!z<*QKbc3@gOj5+Wu>Q0|yX?%s6sMK7yfC{Mo)li4IG3qVywI-vL^+9dD54GYk zR-R!MNmoSp}3)ClEw)t*{;>_}xop@c0z|N=}8i5*byg3KM_5Ht!Og<`hpbo`l z^9E{1?xI%y40Y#03)~}$M3qaRCai}Vrwi(B`U16prC1pEpdQtIEQw(Y8Hf43s$}xu zyQpW_AGOtkP%9scTF7M7LcT&h!=d{<6P5d0yKGQd@J~#Rl zh$W+E7LPh4Z=hbcx~PGNVk}O<+_(+(`EVAskOx=N$pgL<11vNq~ z@B`HA-3f#6Qy-Z?GQ&`(b2J9y4AdEzi(0@6)IeKNcf1evsE%3uB5FZ5t^5ep|CN(<20!8 zvZLa8QCnRIqcI+}=mLDZcbMNM?t%J)zMJVWioON*yo zVb2(K$f8gSErp?2AGMI?W*hXSBG8G9UXwnk6^=zcqnVfr7h8NC>TK*ryXz zby19=+yD#X04#t@@B=(y7F)xCru;eTlk++1>pAOM{tf}_`^Z!!vkG-+?qgAm`Hmk( zuql3mQ?Wg!Ugsw2jm0Q`jXKpwQFrzP^I?WWcVlHx?Yd(@oQHMsN7T2jFJir$xHvW- z&+=<%S)2KuG0K@PFrp1tr?kr@*jFbzZ;#DvmHpExO`IdFz1dB?2J=(ii@otLtb*@v zagS^+#_Ih)LZ${4Pp~;w*y?`vn}IrX$1nq)#;kY~wKK`Lxt++4T5vpuVTkai29mYH8)2R*H;l2gSpziEF)N9uZHP9f`osB?EG!^wo=9x=S3tfY4 za0}{Avw!b)pg5|1f>{wYevR+he{Dqr0_xBjb6`Krj8jo(Vma#cZ^nX{Yo}XCZB+jz zs7KHqwIjVzH!>1);v6i2TTv6=MZNAXcKY0eId-`L%VK&es-vEHGt>khq3-Zg)B;9X z`8(8^*oJz9zo7d6iF#zuQ40y!?To-ul#637?C2w-LpB<92NO_tJPRw~64XG~QSI)d z9?4VGBYB0|+OR$D1~Q=*ng_dLLDc8L4AjE5qsI9e^(cL($Y@2Euo!09>$bioszWQ( z9rQ+>=5eTneqqkRij{;=AO{BO{f{G) zBY?&jMZ-FW+yvb*i1KHsEuDy(Xa?$8uR|TCy{H8qMLm+osIwFJgF8D}F%RV!)DG4{ zjav^3GQZcDOaUB4)k+6MfNSc3H)B)YgR_anC##YTyLSj_;yg&t9kxn$J;>YAI?*wqZqf@(A9; zR7Xkp&(CZ*h8%ZaJ{eCiG40!)fOcdq6NpU4KL|L=QJ)JRq0YzP1KIHL7jy$7>VDY+V8`hcn=dW>;hj@SPc_Z{=+?r-KZVA>La61 zx+kdjKJ`UsHdKRHOo?SN1goLiy^X1{x!Dobu8);{7)*JBm8Y8X%~hsvD;YIBXn~_v zK8v9qkHF%$QLo(#E2qEY>T{#|$C<^<(x?SiH0z+wN;A}1>WYl-^FAXJOJFkU*=)t; zc+55M3SM>-ltP`_3T8Xh1QV=&7S^LYA4}jptIvDIy^h6D3$2E_u{!Ag{r_Du8mPTh z^tSRKbF4WXweoMQywf~_X^8)ZdjD^r?)15pQ(bj8mfb9lxu}0j`p9%3qYk62!A#U? zU2WxE=4tabY9Yz~bOYxyOPaM&^{uTu2=(Zupcc3Sb;H}x|L=bekdhN{Wo>hs_j zYM@J~iEfxrPzy_T)79re)yJX^XDPFq)i*MI&B>@?8`L4}j@tTR*5E7Doh`snT!i|0 zU=3=*gQ$MjP~ROdQ2o=~ayJx%Dpy4zx_wU9#SfB#GPGyJPGvyu6s`7u_e!wA$u_n`*(9Sh(k z)WoUpxOiqvO*yAo0JTG<&D!P%=>Pk_o@6xOK&u#LPD6c(EJ1DI1@jr|(51cW78Hpp zC!ofuVb(=0tTAdqEiK;F%DvH-k_w+yjKgTkldZvKb3bZ=6R116Z1E>%vU_fVa5D#L zA#qkNX1;-1P;IMke2?d^m9?-2ovflS>W&AYI(%vM^Q^qm${SG=?X~h@^9;U4{HoO# zy6+ZV0ySO@49EKS?fq|Ufo|4dFn&OT&rq-BpQwqv2X256)Bx#FH;@OlGeuDCs-PyS ziF!*KTDcdh->0Y>9PcBeL-j4H<5tvwyUnBKS@Q;Jq9ZWYhu{ScBD8-hlc@-D6(0`rt=yz%W$5j2MG?Fg?~X-$yO52WkOh zkoG?B3zzZcSj95bLe^S*m-&m<>sHS5*bP|3EQMM~1+$jf1gjGN(8`N3J@b2s zWQtL7z#rg`)vTQIiQAd-s1?^j?Ld9h0()D0IOQ}BqW=uvo+KfXTu0j}uRWS$F#5C9*i(()1TWm=A7u1f%{Oc@-EWqd0B@;_U zV_b-XQ4>VIb}LLU-!QA0b+8KU8e$!shB`ABQ4dw2OI`lOMnIll&_v0`ZZom}y3u-Np8Syo0oQwf(A=%AXvlQlIey^$pI-*wI z2lX0#X7OdHL$(q16Vh>vz*88B_fYSD+GGL#-+E(EkFo@6yvnHdjZin(4YkAl(WeFz z$>@;HH@BeTCr};!H1DDA=mqM|z2t79P*nTOsGW$jcv-WC)i<*G4i@j1JivYbk078k zFv%*mpawjETEK6p39nfFZSw`HU2vdVNCc`JZRN6N4b&lTWVW+--$0-1Fr0v%?U$&n z--Wu9%jkb^Q9JYs6EJg7fdAi&)J1LOdCZQFP#@9Z!LEO0RJ=Zxz>lmvAJuQW&jKgR zyQqm%hPZ*Up&Hgf4b%qpYzLzb**J5ax!(N2ykI^;J-QSroZ+Z(e3{8;i}RwkuCP^9 zMs=ub@y2FHbD%j9wcz>YT8r;Oy(K46JNM8`73${6hs1qeX);<#ee(m<#9dI2q!(&o zb5K86tU)dK3}(PfR(@i>HbYao_8H9bSeW)7qCO`kqyO*!Hj>dwccCWw1GRvMs5^Us zT3{%Dl%;rPR5_-Ym^*ZY5kj3#<*4Z``eGBwO$ z#-RpEFyAn%S$!SU1kKE@sPTqa{paRvb1CXfZ9ty}{*g>UJb^0zYX*h6g`_qk%xF}* z5~xQ}&dSxyI;b0HXysO@1$8j{p%y$kjQ3vy%_5+I=A%BzmZRdkQ3D-9J)%=qevBF* zAdMS1BkJwQXXVPMLsuWwt~2Vj9)uciuDK!&@4r^InScg3gz9(|wSZUFFfiP8OlRgo zwJ&Jpw@~dHTe*eV3ANRItvntz-%N9Vm$5D^q0_x5mqdJCUa0^O@8aOMK$NZ=>(8lTq zqu&3KsCL^>;~YYLkex-{Sa3#HABOs$ad_FtsG^uz8Z~i6)Ic>+1HEhIPN?>MEk4NN zUzl?&z6`ZP+sz}W8$5>^_aXY!;58Zj4j7)v{Q!~Ej5AA_RZ!2aE~;NM)IvL<2JCHR zpE(wFn5Uu^yu@6M8fQZ$`~KfWK(F0T*a@#$`JK!*f!P~1(IC`-V^N23lEr7CCR~jA zjNghH_YbRoZU$v>z3W6VQN#tfBnZRxANDhp9Pm&d9~GVGxwnX zOUBAqFp%~)QD^BMYT>?Q5w;bmirlD`##_7&YNgFk3uc{W5QJ;(*F&00;+_(U>6T4CEkDC`z?QWqy z0Ws7`^|)$-INhu?GH)WwA<5_r89L`YxD^T}=(`rrQ>7I==DC{1L57l{d|l{Q6v`3ykq)N<78wHNse z_io@6%#z1F!sX@;)YczE^}A#7;3)SfBBJd5&r3jCSPXSoDw~Zg-oeWKP^WsV#lJyq zd7`>8NLziz7wXSCOm<5~1rr$>WZWs{b%z#>Wejgb%jJH5_)Bp{w{2pqnJD|QL z$DdYLr@^jSA1r?^f-v3-=G(bVrfaOsOs*Y;d z3@czS)Ztu>n&^o6n|TejlaEl3uyhgk9Z?ZAZdFvjw^8-)q5tRq))wf9A5qaAHSt;0 zLLQ?!h7@(>jHo+`G2cbCA7Rcx9o7w~FR5Qp3-}c^&Slge+1x8?KmV66=00GmVty(< zMt$(i!f$XJ>g%{waraT&9(DSMqTY@NU|771m%$R0>!AAk;(7no zVKxDMB(6qv+=tqtJE#>uHUmnycpBtq2`>}orM^%}cX;cg?zju;j=Q7A|HK?`@wuqC zXsM5kCioF`2ftc_8>kgNL@gvuDK~H?EKWHB^^sf$i{c>EovyU{Ggcp(;Ofhv>bszJ z_)FBz`L**t_x(|u|fcKx|UHNNxDo~ z|K}yTmRp}}w&*>KcYrjEx}4O7lV*_5OWJOIdiu!BCN&~B%?98HBCk6sl7Y6OuB`YL z&cr^}ZX#x)yu;suw}En3t4l-tG~-^OT$Vh?!P`#?W6V_6=6kgJcO%@O!Dc!IXktvd z<`SiSXs2zBKlzbl!|Uz$P> z8tLjqgKgI6TMV&yCA>{LoqAnc$nPUIn>PGCr1t}PeGwfaUYPvnfATA*70w zCtwge8B6^(@+tq*hN5?oaXabxHzU<1pdS!a&PbeX{9)9Up1L3LI!3dg zv()7w6(FD578pw1BgT!?{XeFl>mli98tVFql+W_LX}Fk_bR8x>kn$YTU<=+RHeC~w z=8(!!7r|to*ceHDQ;_+Y`svi`=YY49v;XmAj*=?c>e|pC>3TrJFDb9ZuW=x0fep&f zmEKj-H5#wPL8Nxn$JscW$(JXuuj}8)FCmq&y7jd6UwZyosR*Uws>Q^=OcFs_KwT_# z{mH)|uWJIGd*L|BXKXQ}lLjPSjdX+fdsau$dujFIn1ym<>Z*}6zyB)0V82?UU?vPB zUx~DXM(1czoccvpA7u*}Ox;mpp`jr5H%pU!)#1oKJiT^>1NsY)^WRy5zK5O#VD6gm$f|Paw9Rx^<+aD~S5)O4OGm z_`)WCMcIGz@9})Z8VxQuDI)6y~6B|Tr^;6L$D<`A3Em_h%^)e5sE7?p$bSXWM%QCJLE8`; zBp)^CEfAM&4ZI$Erv)8}2az#nuRuHJSPB>rns0k{8WkiC>2P|r{0-T~{c zrWsj8pZ~NQM44X!yi&NE`qZ?YOnw}(W~9w4I}C5Ne5ji zFfY3@#wHAMVgG*Ah8d5b^FKc%F+g0}fcy8fljPo&)BTU)F=`6k4^BMl*@-~Hbse-dwy zeC-%y4XFqz=~_+$T?L4hq|-F3YeD{Zt5f|yX(tfM14+nNWYK_Aoe@uOXN>b zw~@4)r0Wi;4EZccKmSd#3HVK$zqRJujRvuFE~nO9Qym_^Yxu9WIF?*W+72cEHu)Mh zMswH1J4ZP;V^pP_g8T;3E6Ts&Bx2S5?b!e11ZrqtDs_F~@G@ArE%i-F|4>eck+hvn zn|H`B$M=ZmP#y7$lsl2Cl5a@;9pYbOG%;OIh&Q7AF{vlzt3Dd&sz*g<(tgU>P}fs@ zPTFQ|YT;-)mL$DF()B&582NhE<`>G3$bUv`3hAMZrM9|O6RSh|i#F-0^ZiTa6aiiR z38W&aIFEFY)R6it#EOtVPSQ1r@+cZDA@Qrcm!4;ygZxU`_EKlNKB7F9^ew4A?L6A) zx=HyPQhd_$kE5WgFis`yBz?|6^|2cr_fU6$bcfg)Y)EW9`Mjk34Ehe`ROEGKr978@ zN!OdywW9C^<{?Fqbp43>{~zR%I{kFDdo15caU=Hwz%>je+K21W{jk38JT0mW{^(NR##*F{IBaK!4F9t z{U!IGFaOh7k&+C$4>MpSbzuy03+vLaG_f?~o0GnwO;dH?8bEqZyHdoD&`#Gv^0|nW zpif@@{K>mUU@w8B>kk@EB?Z!;3-K=2aSRTnt(M$@cv0(9fmj`4mnmnqwy%kGA(n|) zP4c=DsY^q7BjsG=cd4xg8%W?=(g*^nN&Se0QBF{U|8p%TKGb3pssF_m(bw8Wv1naw zNniPM960*u+Tig2cNOi=($_bbOcSg4#Rgex<+3#RiL{FHVXGU(g zbF(ph!fl-AW)T**hJFPpcP5q4^WRA(EfpOYcr*F6G$@Q8k#v1UydLQ_@uce=^1&4H zG1*=6<*}MgeBT;fpwDoN%e@(s$eMVpmX(ajW#FMTc$OqFl-o{8t#Ta6nX{Yn& z9kG^~X|Ts8sE=(dzMK3!8gC&rrsGTEugN#ENm5bHMVp!!OspKKnAIJmT}o2Y^@2>S z73ymK)Yee3QdY47KeUBpr*nJK_mq7$&?fS=$loO`rEL|)NF+9md?#!3w^`#q<7@bH zR_;o^lJ0*Mfe%PIxcmNA`MyoA4sQ`_NjU(g<4>gZlyuY?CgbE<26eQ@(C74W#P};=0Na|BifS zQaKjchCb2cM^hI^emM0_aW}El#D1iFAvyDZVFP|n#U>hLqVpZBPopSOLCR@JN!M!X zbPb?=(shmec*YrMf!o&R2Jt%9t{HXjl8?h#IE^-slm2ulIe{ajY&JkH98CFL{DXmy z;XKN^-Xx`CL6aF^mjYaWTHRP;f73o2i6a@^Vp-;?S9)bgOx=4)vSe+#C9dzYB`~C2 z=Z|}S)Mmic-UH$imkhWPm^f!hsgT4+qe^8-s!GiBb&9~mvJ0-J`u~wt@!^SWwmcseaYIy377MS1iSpyO@BouUj3_Y zU}BHEJAxDIKPi~jYBo&_3dkL@XX-&zVFrJz+uk#k>=k3JoUwK|*>aREVym45jh3ECd-?0JhtF-jIF_h=D z_PjxuvyJDS$K`mK{=?gP-geLPd3D=+UTQid?cjOGXppU==Y`-u7$1W=d0sH4z{D7a zX)rft!HQ;U45K^()8i84oV-0)01skbe1Ym0*_o4Key=K-Py*dC7f!^2xC1}J2WI9j zo_B_F4ZMVrUEP3z-8?TP<${}>YK1jI+G%>3R2GCH%_meJSFgcDw zEno&}L2Jxys0k0C&ioAOlHJ9u7|_E_6oFBc3!>UJMK;aridx9!9_)WyGWQAO#K)Ke zGeo-uRYdMZuLd^6I#>W#pa!^rDe!O9IRBwe#OvweL8u+eWaXTw6Dw&}@5%n_W@<_x z5~EQ&G6PfM5^J~(b!~q`-CXA^{tu?69Iuyap8+#c&WpOqK0(!YM9nh@wSZ}u3YYoF zXri6g;3#T>Sc`k#xHCzG>JW*#b|p{))kd{%iCXvo48hT;1^nka>w(d9vQFVQ$m} z$6xRB@{!R5)ld~*qON%~Cd9s|Ydr*YEhl0G&PJWVUewKb4D;f7)IE@>uiKGSs1pfC zy&npo-Yc~+SkHeWGTOSfsDYzV6HP}Av9nr_!DNpm#8gF)!!{39clqtF+UbYEual*0i94g)EhO? zaMZ$Qp~hKk^(!zf<*lfBj-gKj-6bQRpl+5|m>B~GxE%>Yb*zMnH$`2leyD*aSa}6% z!riC^96*hG1l9jf^gr&X6M8&={Z}ULKoK}wKMHd19wHW>x1e)+RC#~ zJF*JX;~~_-uc8+G0yRzm^Xh3zJ`>e(E$S)RjoRXa zsC(cK)XjGeHPJ294m?El``6+@gWRjymy(PsilEMsGV4e znrI{XUu3AK=O}8t^Qij!sBxd6`Uej7$9-N1nREm)qdFEvok2y{z^jG+1zEW*YAd^- z+V#OgI2^ST+b|>ULAASp+R0ec8{#fW1`N{kpPx)i8k9mcoQpcMt*8O_qITdH)E1vX zU5Z%L1h36_LwU(iPKN5AA9X?{P&-)}^`2;qdP=&X|MR~W8Fd(<0FFgXG#xeZ64VZC zMqSH;=zo5#d>6Hl=cxYPFxNjAHEu@KC5S+cmj|_=(&$s*b22*9=BSCvEwDan;%?}_ROWEhIFp96|60i`0y=}W<~G!s?#C>6 z1V6<`sE(yZxCK>0E&LPIR)20bMYU^>jj%gvM}Naicm^xtvk_c>1&WX4lMd^nI!?uS z_#;N)V$@C@#rSv`{r3RsZhnor+mnoPH*+W^pj-??u^cAEFU@wCm2x*984Wxc_4q7A z-MyPJJD$KWe1!!t{b+Y-s-t$UH>%%Q)I#Q>##@WJM7zx+sCE}o3wva7-%B!Dd4e&n zB0cI1vtUBZY4HLUFM*kfm&b7Y(#k$m`#GplUmC3p&VVE^x2`(oqVrKyS7(q88F0lj`{& zN=6e*LT%v^REI4XjQda>j-l@IGpOhI32Lhojd#~PJ;tG25EEk&OoSCM7^|c1nZ}qD zyI>&mdjplhA*hBUQ8(oji*G;;w8hGMQ4{=(I>Qqfj+arFz?J>c{HNkAufQwQ6x1jFkgXV24Lpkw8ck_ON+TjkU zOE3_1GY^}{{;wdjnSgGp7T>$A_Muif(#qqkJO%R+pM|yXcg&9&C%H>f1GO`)Pz&vf zNwE+5cNYCSiz$h3n8g08;XwlOi1`=lnqR>vyp8IZaW$Y3b*Z9J z_s~Gpf<~bh@&gveg;syYM@AE0$J}_&D$@PnzAR?LxWucXUL@5~Tm7{;4mH6#^gm{( zh3!Y(q{mSwavSwtd4wr3$rSti4s^@F40N)mhXIJw`3yC1%m{pJ1A65QW<63aABCMlGNg>K+}Pd_)S0B5 z?j{Ju?34?l;*C)YY=e>5$KrEQC$Ivw;7wA`{~3^7p7qalqn- zt$Yo&Q+HAQU!vN-!919MwtLYuLp{C|P?um8X2UJB*?+C%JOK@G7q!)oQ1N%Dok=#w zO%#F}AS)KfyjTF+qPBWEX22g&C$`-#M8a0nE>5py!A*cZ|qi&MC zsK=)SYGE}|m!J`9!7Z%Z!R&#WxIbzKMxhqC5Oqnnq9#0w8t=5L_jy;zXyE6l7s)#e z!{B*t0eLYkI|ow%TevNV>q5bUCO7Z9f~vGnHqJX*)gM@|Dt5l6R3ka zvredidz!;h9j0OgEeVyJQIVmjvc`jF8A zzQ??{5_QeaVqtua8YuTd_YJ8m>RL8OZFw8i!h4_=(hs$ep{PswJ?dthgW8FusP@~? zrw)6`=o&qJIlfk6TgHz#T9r_D5a9MX2|~0n|dy;YS#Y zx-=n+?fH*b>~4;aP!ktHbts47SRMVB2IEogiMpBkS$r^R0i!KG3$^eCsEJmh#@miM zfuB+H9AC`-tK)eBx?As~29C4DnFuvNaty~X)Fmp9@vsXPz@DgfOHezx3G?6|sD->j zU6MFU-5WJI#;5#|&oV_&D=LjzVHMOhuZ^0hH3s6>sGGAZYJfqgdtfAL0Y9L|S%^C0 z)u>Cg&EmhJ7If0ez6)eDK&%CxqE`CG%88e`tq(!PGouE`je0*6Momx+wSY!eZiiZ6 zZ}VH!i4C{n~sw!9)H!m6l_wNV3oiQ3|JsK+!K zb;ipqz81Bx9jH&w)2K`L5Tnpr$&;h!KNp!GY=Ih}6KciLs09o`?Z8N@pK0~;t-KDk zGh0v-?Y8n6RR1feow#Z7XXwAg=+nT7SGkpjqRzAgY9Sw+pJHOlwNXz=Gt>fmpavRj z^%E>U3w3X-Ks{Z%P&;u9wF7sp{=Zf1zZxW8?RFrmnHRP4;+O=>ptk%|)B@{TxtZ0s zMeSfT>Jom7IFw+6LSf2?Nz^~SqNKr4*1#+ez_usCYP4X_Bd!>l+5 zlj0uK0*|7$_yXp{dzb}7*1FIAVwjimSC|XOVKdz7vrL+Gygmu^#4x;s`ka1?O|j^D z_uKDeEK2z_=EL9({51s2U?1#@ZSV9Dcn|dSa#Li;``d*RInT2k24eMcU z%EPfHu19^WzC%r%b`$pjeukW+HxE@`YqR?hYlqn=55_dO7`3xIQ8(#d7>t)Oxt{;~ zWKt1$i>Wc?7PsX&Fa_n}7>b`-yaQ^0eyFV=wR=|qe-8CDAx~3bj3ZBO%n01Hy4mc2X(``nb$WGMFbqv$u z9ZZ7(JKciQVKT~*m{`w$5i(kF1#3_Rb%u2@1Y2NI?2Q_51hRGBTyrgIfqPJAd-V8<%B!fGDqxrUG|YoqP)*e1 z*9J9CH`E#SMolylwSdXyEYw05?qdI2kXcPYXPRuc+lfe2hg@bs)C46_J5d?cz8+@6 zuTfh(618)4QBT1t)Xki7k6TDtRR2#=_fF$IKDQ-p3Fu7vU}l_%g>VgO;%lhq{yu8L z6OPf=4kw#yjA)z9_1FP1FfA$3X0Z{)L)juq^Ru$ijTyX)+}UT*QKy_Mm%p zeu}*0yiTYEg#PSaED>fk)Elr9YU0_b_s3d{!~>{t|3+W)B<;6 zGUoTLk1Lj?!JUp#vGJ; zU>MFs-Amiir;caIWW%>sk@XLEW)(0C@z$sTMqqYaWAQ&xJNE*0&66B<14m#+${(Yi zmakCnnE|LvH5IiZ%MY{vW!cK@1Rmn6Biv+o=NNgv;A5b+$C01KkpmBb`i&8&}V z=WA(!&KRFSKPwM5$D6avWvF(Wti038zhWZd$1Hvh_1N9AvUknZ2c!C@b^5$e3q+z; zn8z%Ex@oGQZkpy+jz-;F<4_YW$DA00x>Ogi2|ls#u-rMyr?rPW7fq`${oy6s2y5r_1jT5?=dT1GhdoXW8Fd`(EsK_V*k})fHnNioNWzO znfuH$s7vtxHDR3FZefYctf-wSW#uNQ38Sq%!CZ#wzxOu#uWR`W0WIVNs(cNz;5~~c zz2nX}6mt^KZRL7q3$qJq!v3fUrdfQhxe~R&tyccaMj_5z_|DpwZ(D%b|ym& zoC!5>af_ETYnY8uFPgTP8wX=nT#fo{IEH%lzC(@UOMcf)kk*Vqt*`*9!RHolh`LEz zo6%N3#2k%U@I=(jI0tplth4%GQ73i`b;75R&kUb;iHs(Ej_Me4&wZ%mL=8{|bw&-W z+#R*BF_;9uM-4a^b(1YaO|%QO;C<$C^NRTp{r~>wtv|zH_g#k!r~#wQLS`AWs#zPg zkS|b|uBF+-9AZu~7hrkXZ9pybDaP0HpXh=6Fi4J?xD;yO%9sRepgJ_Ra#z$&4KOE| z3sC(xq5AK(_|N89)Mv~+)Xrvm$o?x+nvBk%K5C*iR_>1)XskI2HNgzj!WLS5ot3v> z5b*;RKZ@BYpSJopX3!%yU)o1pf1ODV0vfQSS=Fp(wm>bUixmnuvX6`gsDT=w0cwD@m=dE=6OKT&8;5#YrdfG2s^1>e86HDj!aJyb z?@;5#f9gzShMT^;WKzD{nxh8nY~>N=WOJUm8a2^&b1w!{{spzL)2Ic+TK!Wi z|BJj~eO`ip+^aSUHBfc44yt2g%zK>Yk5jYQh zdB_|jqm@3vqL}Tadv2Rx8p?xFTRj~^a6M{ahs<;4ebk4P_sUI_3ANDdW+AgYYT-3s zas8F4M?fq4!YbOJCg_A3(1+TgS*UhDp$0x=a82HBhY88fBU@=s?s;G%SL%njpuyR{eyJ&MLs{LehCaT|j)Pj6# z$Y@IsS%c%|8C1i|<~`KS^a|BJ{aaU`4K-nYvpj0T&oMbRM2*uP)vp(-y$|DnH^F7R zNvNA^3dX~gmP&qPY;YfX%3{YCquuj75z<+6(a4|LE7J ze?;U0tIdsAfrdMTX7Zc+|)P%E911?9k--$ZI)2J=JV)f5aH(8=UXI50d zQmFQy1@iA;m1#skXVelCVh7YjJy0EdsGXQ(@df5utKVt$M=gHYyob66URgP7JU3oG z)Vvkr`P_sx2x!9kW=qti=xXKhsD;e3@)~mo>MsAqJZtg4QSD!#E^SbJxAjF(C(;o0 z*tYYL(H8YUy?V#u1l)(($~p-G{BOYas8{qb)Bu|-eh>>$zG~%=gsxu!)SI)a*$UOq zhZ<)BYJA@wYj7I115Z#l**i0JB3F(w%bIn~_UOME&0(l<#-g@(I%+2tSbP(z{XQ4> zdB0kN3+6*JPLNx1h#83*s0ixPR734tJ9CiL&#>|;)ItuLCr}e#MqQFvOv(GlOTk~9 z^aUdVwc;9>3L9AYYqO{MEvo$}a~R+aCCnQ+T{;%1C>F&$v#K5>yN4*f|_uG#TT2aP!q?X+Wmw+ZP9NQxPuz#IclYEES@}# z>yX*Zh1#KFW>wUL4XwVj#rvUt(;0*M{xIEKWUfoY^RJ4X1a$3wK@EHowbJXTmEO1V zzh+=scQ+?REjX(gg&HS6s$VJ8V^^871vpMW~NKn)m}&fScOQSsEM z$0rNw9bW`Ba1*PKHV2vG%$cb1mRflY>dWm8RR6s`YjDoIidxWZ)J{A>ol%_h?n5RR zHDD=JeMQtjba{=-nu|9C8i>rf~12-W|Mm3@I3Tp$IiK|0iT!AL7dS$$En4C-mA zWaTe0ka8Q;J@YkcVFOX)jkEYn)IwKV{AXmLKJO$Mt>~gv+&~TR*bK<%&L{KK+ zoTv$lTe&*w_k}Mk-p3qk&PDCadUFTH*XRF1G8*^~^Q;+bJ~j0p{nRcPwcre>3A3OE zE^F~>7O#am<4#r{j{3b|0cxD>n1T7dLuB-7yoUO=`V_-3Q)YLjrBNMfn2k~G+M?co z6Rf-ebSBhN2BH$jp4W+HSUQlJpcOe`GK^c2 zC8Iam3)E*prYLu+k#^;S8qiZ?S+=9BRPob{u3)BF~bGrd^pw6&>S=OwMdQ&zsTcIZEf*)fq)Fs|# z@spTH&;L1phVOEyfghl@?ltP>Nt(x%L(KwaB^*P2LoANhQ2jIJb^UUp7El~DUOCif zNF6J;#TI)0`;yUCokv}ho91har})SXn9MtUXPe7}#^{a(iSRWr5t@yp)S;Y+G%Z@h>vr)gLh`W2wqt5sl>Wp8Z78JLr zGYu*pg?fq#p~i23I)PSJAB|d|Zy*`1WCm*Bc~}4!p|e^jF-2-t- zx^fm&`D4^pw?uun?1OBi*MJ{g19`9DEW$EO5eyR7$@#jNOcpe}&) zAD!z`w}bp`tE@u4JcH@Fe@S{uS;tWQpzU#Jhp)7~97S#HH1zq~N8y%r_?60IR=I}! zJL0cNcj)*JalP*=kw#dXDdcqxZ&UvX?P`%fK;3=Zj=M?o$!{Y4LYsy71F_?z_lNH~ z6@^G`Njl4*Or7LU9T&sW?Q3kv6D0-?Yy2h<&U8$5Ud(X#Wcnj3(a|t5N?SKE+Y4nHQhD zj@D*PTaZ3$S`a%#-yLzd{#E_WxE2^gMI9=3k&@8im~}dbWo#fdkFod|Vi!rtiS@vL ztj$RJhpGxr)nrK7C8sX#>6`pPW1|MXv(+GZweDUU@S8sf*yu-XA3y ztTu&=#FCT0MLx#*ou#a!$_L}?}RdB6t^HNbXjyT{_a%`3F$t?U2dsdi!3?v>S7r|$i+(dtzGh2+b_DpL>)qHuu@ zmr3R5P>=K*Nne?Cd`5gK<>L5|_8U+~`ws>@Wchf+hgrTaUZ>w!V%1Q`cwz;yr>?)g z=Qk$sCj%ZP4YPr_;8h#sCT%KF=3BJ?=!M^s>XS~9Hd8lcDY%Y*4H zHWdG36uwsS9l_my{z1D~12+X97*dUwhp5Fg)Xb?b$)T~^`USiiV0*Bxle1DX*Hf=3dlzt27A3=jY zq}-$oAGA+p`FFUJx>dAKX0e9!^WEde_aq(V7(CeW60^%{l7#59Yq}epZX=U5lNrlI{1ay z|NjxD{A2Puekc7wT4?>36W?YNr7(l2OH975I&h39|A2PEOumo0X>qy!qX;&&L9*gU zr0Y)~4Y^wc_}U{4!DrI(&tnP=6RZq7J^;_>Xv$$CC7QEV0G*qrMH@ zAPupYzcD{1)3yj>o+R$OWrL}5E%}_O-{-c$(N^Y zgKPf3KUa`zOI<0_m(-u8Z9!Jm6qArLkpG-`etrJy*hT6_<2Y36n1&%V_?mnz;)(Dq zDUME!<0f@IiSI-mv&lcBPY%ktNo|RJL3zK8r#6LXqhky8buHgg@BeWW7GO&nFQ&ml z${nm@C*m1M1xXo6I!582v{926)=s~IPas|lZ&*9B{^J|{w1u~!?rZDw6M5fw>huf5 zAGRX3{ep@Iq;SPiM-B$~4)xVKsl^VHA41qHb)HZDYtkv==Tym2+2MUmyejSXk;2H2X3W9lzac-z#(zcr z{Si&wZ~g+;Khn158VxGZcqb;ML0aOU(C8%jI5x;t^6M=hMcsDVHYb%Ju44xNN_tBE zBJp9Qbc|C6o03Wr-%l!PbFS6(fBz03?#0sRJhozxYc^4GYpnW%)Xyh=h7?Jgb_#M# zCY7UHi}V{wM_SSt+CR5)0OORS-(}*d@jP|^JNGx%XcoRDMNkQ4s^_^DjQ497_EX+GQcdl61_VE}WEC&woc3^N!PLKfy0h|Fz>V zmL(k_uRlsmB_(CBA8n9>CSmUY?W$8=Pd=0}-XGVArKRo>X(nk86_rs(InrnR{lS0y zM8gwQRG{-}(tXkt%Db@12NRvP&gztpx-ThrB7c(n`(vGDmQvS>d=q@a7|*dNX&r6H z5MNEK?EC#6Nbm~53#6?i9W`jIV-V&cWg)-XVnH7)Di`@O)ZJr@(io3j(xH2+H>omd znhW`V_TuMg#wkTRUn44qlQJ<#dV&`*kn%$sWhE^m)g<*L>1aW{j-<2=BK<%<7XwWq zuj4Gn;vLd8QUlsg!f&k~S^fWh`j0Pk|HU#{LON|A{Y;*}L3vxT0yab)W$lb=FvucO zc47%FR);nPX z#LJ{8;&DkEX`GETg8Xi4lY{&}4Db&QCT$_jrOhN#chc{qti&3Va+B|1{rt1?!$(ZV zUE=TWKQEd>F{{`^K9EJtq}+l*baW?HmZW1FX)gIQR;So-@-39HBMHpB$oF@Jq zh=~H3@urr3)_0Pft;p7uq-{sVowz`_+ zf3mnJMLIw%C)Pm!|Nc`IUoprH(su+Ck*1Rt5buUMQZis>^6Od5TH2+eyoz`c$~yKE z>tb!YP%dN(@K^Fo`S-`avl6-6OdGI9Z z!{Z6{V@XK~7AH+0ji=mMiE(C7*8S%{Iuf`~#bZjplRr;t#K4V7aml|w(vV4GUH$PWB5B`^dspAB-V+1cUSc8Q!c}qm&HVwo&Wyet)ieK5eLZANja!Y zV-sB?|A;yrUy|=Zd?xw)7F&U@EkBU>kCs<^9YZPi!2F!RORLL8`K~RXuwFd5?d<-t zNz+sQmNYb#Lt@QHmo)kZM`QB0iGM&_jzg!hVW(<8ifhv;sdTJ-%e)TT>|mYv#!(>kU>_n0^Vtzr`Q+!h$G zRo7l!dQSemPgKG-J)^_BwCLO>=24$pfyrC+Y}2l5kG?r8xsjq`{v22=L1;$}-#WZ= z*B))cd$w=UCA@h4$dcjx2Zom^%g>mE!%L)%sWm$wFiCXpu02|Z_v+S~abjxByPY`D zKXj>81(OBW>)Wl3f7}+G`bNcc+VL{bRd(D{IKbtW?A;JnC3f_n*x93Rt(kvo;)t8y zPro^F?X4e{Y5m@<(c5C@45bu1YRk=u<8Cco=iS`7{pP66|4-wXudhZXm|XmJ@Z{OI z(6Lo)A{A{-t4!$*O`i-A< zGt;f{BX4gWetY-G|8vH%PxB;C`Eci`54%6yIeJUFz<{s>TPh_E7#=tA+7Y+r4UV0) zF?Q;@E&KzwneqOg4%6DD4)|=#j?@7?<4rCTn_wFMDkE#W^;1~VmS!0Of`U`C%(-L# l&oZ~P$q`U3a9T|6fTwY9?HIOYNuGdD0=7KK8;~IJ{{XNT>{b8( diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index ba3f42c3b..16199457b 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-28 18:36+0800\n" +"POT-Creation-Date: 2021-07-30 19:09+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -18,14 +18,14 @@ msgstr "" "X-Generator: Poedit 2.4.3\n" #: acls/models/base.py:25 acls/serializers/login_asset_acl.py:47 -#: applications/models/application.py:162 assets/models/asset.py:139 +#: applications/models/application.py:163 assets/models/asset.py:139 #: assets/models/base.py:175 assets/models/cluster.py:18 #: assets/models/cmd_filter.py:21 assets/models/domain.py:21 #: assets/models/group.py:20 assets/models/label.py:18 ops/mixin.py:24 #: orgs/models.py:24 perms/models/base.py:49 settings/models.py:29 #: terminal/models/storage.py:23 terminal/models/task.py:16 #: terminal/models/terminal.py:100 users/forms/profile.py:32 -#: users/models/group.py:15 users/models/user.py:555 +#: users/models/group.py:15 users/models/user.py:556 #: users/templates/users/_select_user_modal.html:13 #: users/templates/users/user_asset_permission.html:37 #: users/templates/users/user_asset_permission.html:154 @@ -52,7 +52,7 @@ msgstr "激活中" # msgid "Date created" # msgstr "创建日期" -#: acls/models/base.py:32 applications/models/application.py:175 +#: acls/models/base.py:32 applications/models/application.py:176 #: assets/models/asset.py:144 assets/models/asset.py:220 #: assets/models/base.py:180 assets/models/cluster.py:29 #: assets/models/cmd_filter.py:23 assets/models/cmd_filter.py:64 @@ -61,7 +61,7 @@ msgstr "激活中" #: orgs/models.py:27 perms/models/base.py:57 settings/models.py:34 #: terminal/models/storage.py:26 terminal/models/terminal.py:114 #: tickets/models/ticket.py:73 users/models/group.py:16 -#: users/models/user.py:588 xpack/plugins/change_auth_plan/models.py:77 +#: users/models/user.py:589 xpack/plugins/change_auth_plan/models.py:77 #: xpack/plugins/cloud/models.py:35 xpack/plugins/cloud/models.py:98 #: xpack/plugins/gathered_user/models.py:26 msgid "Comment" @@ -99,7 +99,7 @@ msgstr "动作" #: terminal/backends/command/models.py:18 #: terminal/backends/command/serializers.py:12 terminal/models/session.py:38 #: tickets/models/comment.py:17 users/models/user.py:176 -#: users/models/user.py:751 users/models/user.py:777 +#: users/models/user.py:752 users/models/user.py:778 #: users/serializers/group.py:19 #: users/templates/users/user_asset_permission.html:38 #: users/templates/users/user_asset_permission.html:64 @@ -179,7 +179,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " #: applications/serializers/attrs/application_type/vmware_client.py:26 #: assets/models/base.py:176 assets/models/gathered_user.py:15 #: audits/models.py:100 authentication/forms.py:15 authentication/forms.py:17 -#: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:553 +#: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:554 #: users/templates/users/_select_user_modal.html:14 #: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:278 @@ -229,7 +229,7 @@ msgstr "组织 `{}` 不存在" msgid "None of the reviewers belong to Organization `{}`" msgstr "所有复核人都不属于组织 `{}`" -#: applications/api/mixin.py:19 templates/_nav_user.html:10 +#: applications/api/mixin.py:20 templates/_nav_user.html:10 msgid "My applications" msgstr "我的应用" @@ -247,25 +247,21 @@ msgstr "远程应用" msgid "Custom" msgstr "自定义" -#: applications/models/application.py:46 templates/_nav.html:60 +#: applications/models/application.py:47 templates/_nav.html:60 msgid "Applications" msgstr "应用管理" -#: applications/models/application.py:164 -#: applications/serializers/application.py:78 -#: applications/serializers/application.py:79 assets/models/label.py:21 +#: applications/models/application.py:165 +#: applications/serializers/application.py:78 assets/models/label.py:21 #: perms/models/application_permission.py:20 -#: perms/serializers/application/permission.py:16 #: perms/serializers/application/user_permission.py:33 #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:20 msgid "Category" msgstr "类别" -#: applications/models/application.py:167 -#: applications/serializers/application.py:80 -#: applications/serializers/application.py:81 assets/models/cmd_filter.py:53 +#: applications/models/application.py:168 +#: applications/serializers/application.py:80 assets/models/cmd_filter.py:53 #: assets/models/user.py:202 perms/models/application_permission.py:23 -#: perms/serializers/application/permission.py:17 #: perms/serializers/application/user_permission.py:34 #: terminal/models/storage.py:55 terminal/models/storage.py:116 #: tickets/models/ticket.py:38 @@ -273,22 +269,30 @@ msgstr "类别" msgid "Type" msgstr "类型" -#: applications/models/application.py:171 assets/models/asset.py:188 +#: applications/models/application.py:172 assets/models/asset.py:188 #: assets/models/domain.py:27 assets/models/domain.py:52 msgid "Domain" msgstr "网域" -#: applications/models/application.py:173 xpack/plugins/cloud/models.py:33 +#: applications/models/application.py:174 xpack/plugins/cloud/models.py:33 msgid "Attrs" msgstr "" #: applications/serializers/application.py:48 -msgid "Category(Display)" -msgstr "类别 (显示名称)" +#: applications/serializers/application.py:79 assets/serializers/label.py:13 +#: perms/serializers/application/permission.py:16 +#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:24 +msgid "Category display" +msgstr "类别名称" #: applications/serializers/application.py:49 -msgid "Type(Dispaly)" -msgstr "类型 (显示名称)" +#: applications/serializers/application.py:81 +#: assets/serializers/system_user.py:26 audits/serializers.py:29 +#: perms/serializers/application/permission.py:17 +#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:31 +#: tickets/serializers/ticket/ticket.py:19 +msgid "Type display" +msgstr "类型名称" #: applications/serializers/application.py:72 #: applications/serializers/application.py:100 @@ -327,7 +331,7 @@ msgstr "系统用户" #: applications/serializers/application.py:74 assets/serializers/account.py:31 msgid "System user display" -msgstr "系统用户显示" +msgstr "系统用户名称" #: applications/serializers/application.py:75 msgid "App" @@ -515,7 +519,7 @@ msgstr "标签管理" #: assets/models/cluster.py:28 assets/models/cmd_filter.py:26 #: assets/models/cmd_filter.py:67 assets/models/group.py:21 #: common/db/models.py:70 common/mixins/models.py:49 orgs/models.py:25 -#: orgs/models.py:437 perms/models/base.py:55 users/models/user.py:596 +#: orgs/models.py:437 perms/models/base.py:55 users/models/user.py:597 #: users/serializers/group.py:33 xpack/plugins/change_auth_plan/models.py:81 #: xpack/plugins/cloud/models.py:104 xpack/plugins/gathered_user/models.py:30 msgid "Created by" @@ -529,7 +533,7 @@ msgstr "创建者" #: assets/models/label.py:25 common/db/models.py:72 common/mixins/models.py:50 #: ops/models/adhoc.py:38 ops/models/command.py:29 orgs/models.py:26 #: orgs/models.py:435 perms/models/base.py:56 users/models/group.py:18 -#: users/models/user.py:778 xpack/plugins/cloud/models.py:107 +#: users/models/user.py:779 xpack/plugins/cloud/models.py:107 msgid "Date created" msgstr "创建日期" @@ -587,7 +591,7 @@ msgstr "带宽" msgid "Contact" msgstr "联系人" -#: assets/models/cluster.py:22 users/models/user.py:574 +#: assets/models/cluster.py:22 users/models/user.py:575 msgid "Phone" msgstr "手机" @@ -613,7 +617,7 @@ msgid "Default" msgstr "默认" #: assets/models/cluster.py:36 assets/models/label.py:14 -#: users/models/user.py:763 +#: users/models/user.py:764 msgid "System" msgstr "系统" @@ -753,7 +757,7 @@ msgid "Assets" msgstr "资产" #: assets/models/user.py:200 templates/_nav.html:17 -#: users/views/profile/password.py:43 users/views/profile/pubkey.py:37 +#: users/views/profile/pubkey.py:37 msgid "Users" msgstr "用户管理" @@ -810,7 +814,7 @@ msgstr "协议重复: {}" msgid "Domain name" msgstr "网域名称" -#: assets/serializers/asset.py:67 perms/serializers/asset/permission.py:49 +#: assets/serializers/asset.py:67 msgid "Nodes name" msgstr "节点名称" @@ -831,28 +835,21 @@ msgstr "特权用户名称" msgid "private key invalid" msgstr "密钥不合法" -#: assets/serializers/domain.py:12 -msgid "Assets count" +#: assets/serializers/domain.py:12 assets/serializers/label.py:12 +#: assets/serializers/system_user.py:52 +#: perms/serializers/asset/permission.py:72 +msgid "Assets amount" msgstr "资产数量" #: assets/serializers/domain.py:13 -msgid "Applications count" +#: perms/serializers/application/permission.py:43 +msgid "Applications amount" msgstr "应用数量" #: assets/serializers/domain.py:14 msgid "Gateways count" msgstr "网关数量" -#: assets/serializers/label.py:12 assets/serializers/system_user.py:52 -#: perms/serializers/asset/permission.py:74 -msgid "Assets amount" -msgstr "资产数量" - -#: assets/serializers/label.py:13 -#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:24 -msgid "Category display" -msgstr "类别名称" - #: assets/serializers/node.py:18 msgid "value" msgstr "值" @@ -865,24 +862,18 @@ msgstr "不能包含: /" msgid "The same level node name cannot be the same" msgstr "同级别节点名字不能重复" -#: assets/serializers/system_user.py:26 audits/serializers.py:29 -#: tickets/serializers/ticket/meta/ticket_type/apply_application.py:31 -#: tickets/serializers/ticket/ticket.py:19 -msgid "Type display" -msgstr "类型名称" - #: assets/serializers/system_user.py:27 msgid "SSH key fingerprint" msgstr "密钥指纹" #: assets/serializers/system_user.py:51 -#: perms/serializers/asset/permission.py:75 +#: perms/serializers/asset/permission.py:73 msgid "Nodes amount" msgstr "节点数量" #: assets/serializers/system_user.py:53 assets/serializers/system_user.py:201 msgid "Login mode display" -msgstr "认证方式(显示名称)" +msgstr "认证方式名称" #: assets/serializers/system_user.py:55 msgid "Ad domain" @@ -1151,7 +1142,7 @@ msgstr "用户代理" #: audits/models.py:105 #: authentication/templates/authentication/_mfa_confirm_modal.html:14 #: authentication/templates/authentication/login_otp.html:6 -#: users/forms/profile.py:64 users/models/user.py:577 +#: users/forms/profile.py:64 users/models/user.py:578 #: users/serializers/profile.py:102 msgid "MFA" msgstr "多因子认证" @@ -1210,11 +1201,11 @@ msgstr "运行用户" #: audits/serializers.py:94 msgid "Run as display" -msgstr "运行用户" +msgstr "运行用户名称" #: audits/serializers.py:95 msgid "User display" -msgstr "用户" +msgstr "用户名称" #: audits/signals_handler.py:62 msgid "SSH Key" @@ -2021,7 +2012,7 @@ msgstr "" "div>" #: notifications/backends/__init__.py:11 users/forms/profile.py:101 -#: users/models/user.py:557 +#: users/models/user.py:558 msgid "Email" msgstr "邮件" @@ -2037,7 +2028,7 @@ msgstr "等待任务开始" msgid "Not has host {} permission" msgstr "没有该主机 {} 权限" -#: ops/apps.py:9 ops/notifications.py:13 +#: ops/apps.py:9 ops/notifications.py:16 msgid "Operations" msgstr "运维" @@ -2115,7 +2106,7 @@ msgstr "创建者" #: ops/models/adhoc.py:240 msgid "Task display" -msgstr "任务展示" +msgstr "任务名称" #: ops/models/adhoc.py:242 msgid "Host amount" @@ -2164,12 +2155,30 @@ msgstr "命令 `{}` 不允许被执行 ......." msgid "Task end" msgstr "任务结束" -#: ops/notifications.py:14 +#: ops/notifications.py:17 msgid "Server performance" msgstr "监控告警" -#: ops/notifications.py:21 -msgid "Disk used more than 80%: {} => {}" +#: ops/notifications.py:86 +msgid "The terminal is offline: {}" +msgstr "" + +#: ops/notifications.py:103 +#, fuzzy +#| msgid "Disk used more than 80%: {} => {}" +msgid "Disk used more than {}%: {} => {} ({})" +msgstr "磁盘使用率超过 80%: {} => {}" + +#: ops/notifications.py:128 +#, fuzzy +#| msgid "Disk used more than 80%: {} => {}" +msgid "CPU load more than {}: => {} ({})" +msgstr "磁盘使用率超过 80%: {} => {}" + +#: ops/notifications.py:142 +#, fuzzy +#| msgid "Disk used more than 80%: {} => {}" +msgid "Memory used more than {}%: => {} ({})" msgstr "磁盘使用率超过 80%: {} => {}" #: ops/tasks.py:71 @@ -2214,7 +2223,7 @@ msgstr "组织审计员" msgid "GLOBAL" msgstr "全局组织" -#: orgs/models.py:434 users/models/user.py:565 +#: orgs/models.py:434 users/models/user.py:566 #: users/templates/users/_select_user_modal.html:15 msgid "Role" msgstr "角色" @@ -2264,7 +2273,9 @@ msgid "Clipboard copy paste" msgstr "剪贴板复制粘贴" #: perms/models/asset_permission.py:102 -#: perms/serializers/asset/permission.py:71 +#: perms/serializers/application/permission.py:39 +#: perms/serializers/asset/permission.py:41 +#: perms/serializers/asset/permission.py:69 msgid "Actions" msgstr "动作" @@ -2277,7 +2288,7 @@ msgid "Favorite" msgstr "收藏夹" #: perms/models/base.py:51 templates/_nav.html:21 users/models/group.py:31 -#: users/models/user.py:561 users/templates/users/_select_user_modal.html:16 +#: users/models/user.py:562 users/templates/users/_select_user_modal.html:16 #: users/templates/users/user_asset_permission.html:39 #: users/templates/users/user_asset_permission.html:67 #: users/templates/users/user_database_app_permission.html:38 @@ -2290,54 +2301,66 @@ msgstr "用户组" #: tickets/serializers/ticket/meta/ticket_type/apply_application.py:77 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:43 #: tickets/serializers/ticket/meta/ticket_type/apply_asset.py:81 -#: users/models/user.py:593 +#: users/models/user.py:594 msgid "Date expired" msgstr "失效日期" -#: perms/serializers/application/permission.py:53 +#: perms/serializers/application/permission.py:18 +#: perms/serializers/application/permission.py:38 +#: perms/serializers/asset/permission.py:42 +#: perms/serializers/asset/permission.py:68 users/serializers/user.py:80 +msgid "Is valid" +msgstr "账户是否有效" + +#: perms/serializers/application/permission.py:19 +#: perms/serializers/application/permission.py:37 +#: perms/serializers/asset/permission.py:43 +#: perms/serializers/asset/permission.py:67 users/serializers/user.py:33 +#: users/serializers/user.py:81 +msgid "Is expired" +msgstr "是否过期" + +#: perms/serializers/application/permission.py:40 +#: perms/serializers/asset/permission.py:70 users/serializers/group.py:34 +msgid "Users amount" +msgstr "用户数量" + +#: perms/serializers/application/permission.py:41 +#: perms/serializers/asset/permission.py:71 +msgid "User groups amount" +msgstr "用户组数量" + +#: perms/serializers/application/permission.py:42 +#: perms/serializers/asset/permission.py:74 +msgid "System users amount" +msgstr "系统用户数量" + +#: perms/serializers/application/permission.py:66 msgid "" "The application list contains applications that are different from the " "permission type. ({})" msgstr "应用列表中包含与授权类型不同的应用。({})" +#: perms/serializers/asset/permission.py:44 +msgid "Users display" +msgstr "用户名称" + #: perms/serializers/asset/permission.py:45 -#: perms/serializers/asset/permission.py:69 users/serializers/user.py:33 -#: users/serializers/user.py:81 -msgid "Is expired" -msgstr "是否过期" +msgid "User groups display" +msgstr "用户名称" #: perms/serializers/asset/permission.py:46 -msgid "Users name" -msgstr "用户名" - -#: perms/serializers/asset/permission.py:47 -msgid "User groups name" -msgstr "用户组名称" - -#: perms/serializers/asset/permission.py:48 -msgid "Assets name" +msgid "Assets display" msgstr "资产名称" -#: perms/serializers/asset/permission.py:50 -msgid "System users name" +#: perms/serializers/asset/permission.py:47 +msgid "Nodes display" +msgstr "节点名称" + +#: perms/serializers/asset/permission.py:48 +msgid "System users display" msgstr "系统用户名称" -#: perms/serializers/asset/permission.py:70 users/serializers/user.py:80 -msgid "Is valid" -msgstr "账户是否有效" - -#: perms/serializers/asset/permission.py:72 users/serializers/group.py:34 -msgid "Users amount" -msgstr "用户数量" - -#: perms/serializers/asset/permission.py:73 -msgid "User groups amount" -msgstr "用户组数量" - -#: perms/serializers/asset/permission.py:76 -msgid "System users amount" -msgstr "系统用户数量" - #: settings/api/common.py:25 msgid "Test mail sent to {}, please check" msgstr "邮件已经发送{}, 请检查" @@ -2599,59 +2622,51 @@ msgid "Global MFA auth" msgstr "全局启用 MFA 认证" #: settings/serializers/settings.py:155 -msgid "Admin user MFA auth" -msgstr "所有管理员启用 MFA" - -#: settings/serializers/settings.py:156 -msgid "Admin user enable MFA" -msgstr "强制管理员启用 MFA" - -#: settings/serializers/settings.py:159 msgid "Batch command execution" msgstr "批量命令执行" -#: settings/serializers/settings.py:160 +#: settings/serializers/settings.py:156 msgid "Allow user run batch command or not using ansible" msgstr "是否允许用户使用 ansible 执行批量命令" -#: settings/serializers/settings.py:163 +#: settings/serializers/settings.py:159 msgid "Enable terminal register" msgstr "终端注册" -#: settings/serializers/settings.py:164 +#: settings/serializers/settings.py:160 msgid "" "Allow terminal register, after all terminal setup, you should disable this " "for security" msgstr "是否允许终端注册,当所有终端启动后,为了安全应该关闭" -#: settings/serializers/settings.py:168 +#: settings/serializers/settings.py:164 msgid "Limit the number of login failures" msgstr "限制登录失败次数" -#: settings/serializers/settings.py:172 +#: settings/serializers/settings.py:168 msgid "Block logon interval" msgstr "禁止登录时间间隔" -#: settings/serializers/settings.py:173 +#: settings/serializers/settings.py:169 msgid "" "Tip: (unit/minute) if the user has failed to log in for a limited number of " "times, no login is allowed during this time interval." msgstr "" "提示:(单位:分)当用户登录失败次数达到限制后,那么在此时间间隔内禁止登录" -#: settings/serializers/settings.py:177 +#: settings/serializers/settings.py:173 msgid "Connection max idle time" msgstr "连接最大空闲时间" -#: settings/serializers/settings.py:178 +#: settings/serializers/settings.py:174 msgid "If idle time more than it, disconnect connection Unit: minute" msgstr "提示:如果超过该配置没有操作,连接会被断开 (单位:分)" -#: settings/serializers/settings.py:182 +#: settings/serializers/settings.py:178 msgid "User password expiration" msgstr "用户密码过期时间" -#: settings/serializers/settings.py:183 +#: settings/serializers/settings.py:179 msgid "" "Tip: (unit: day) If the user does not update the password during the time, " "the user password will expire failure;The password expiration reminder mail " @@ -2661,57 +2676,57 @@ msgstr "" "提示:(单位:天)如果用户在此期间没有更新密码,用户密码将过期失效; 密码过期" "提醒邮件将在密码过期前5天内由系统(每天)自动发送给用户" -#: settings/serializers/settings.py:187 +#: settings/serializers/settings.py:183 msgid "Number of repeated historical passwords" msgstr "不能设置近几次密码" -#: settings/serializers/settings.py:188 +#: settings/serializers/settings.py:184 msgid "" "Tip: When the user resets the password, it cannot be the previous n " "historical passwords of the user" msgstr "提示:用户重置密码时,不能为该用户前几次使用过的密码" -#: settings/serializers/settings.py:192 +#: settings/serializers/settings.py:188 msgid "Password minimum length" msgstr "密码最小长度" -#: settings/serializers/settings.py:196 +#: settings/serializers/settings.py:192 msgid "Admin user password minimum length" msgstr "管理员密码最小长度" -#: settings/serializers/settings.py:199 +#: settings/serializers/settings.py:195 msgid "Must contain capital" msgstr "必须包含大写字符" -#: settings/serializers/settings.py:201 +#: settings/serializers/settings.py:197 msgid "Must contain lowercase" msgstr "必须包含小写字符" -#: settings/serializers/settings.py:202 +#: settings/serializers/settings.py:198 msgid "Must contain numeric" msgstr "必须包含数字" -#: settings/serializers/settings.py:203 +#: settings/serializers/settings.py:199 msgid "Must contain special" msgstr "必须包含特殊字符" -#: settings/serializers/settings.py:204 +#: settings/serializers/settings.py:200 msgid "Insecure command alert" msgstr "危险命令告警" -#: settings/serializers/settings.py:206 +#: settings/serializers/settings.py:202 msgid "Email recipient" msgstr "邮件收件人" -#: settings/serializers/settings.py:207 +#: settings/serializers/settings.py:203 msgid "Multiple user using , split" msgstr "多个用户,使用 , 分割" -#: settings/serializers/settings.py:215 +#: settings/serializers/settings.py:211 msgid "Enable WeCom Auth" msgstr "启用企业微信认证" -#: settings/serializers/settings.py:222 +#: settings/serializers/settings.py:218 msgid "Enable DingTalk Auth" msgstr "启用钉钉认证" @@ -3349,7 +3364,7 @@ msgstr "会话ID" #: terminal/backends/command/serializers.py:19 msgid "Risk level display" -msgstr "风险等级(显示名称)" +msgstr "风险等级名称" #: terminal/backends/command/serializers.py:21 msgid "Timestamp" @@ -3428,6 +3443,10 @@ msgstr "默认存储" msgid "Args" msgstr "参数" +#: terminal/models/task.py:18 +msgid "Kwargs" +msgstr "" + #: terminal/models/terminal.py:103 msgid "type" msgstr "类型" @@ -4082,11 +4101,11 @@ msgid "Public key should not be the same as your old one." msgstr "不能和原来的密钥相同" #: users/forms/profile.py:149 users/serializers/profile.py:74 -#: users/serializers/profile.py:148 users/serializers/profile.py:161 +#: users/serializers/profile.py:149 users/serializers/profile.py:162 msgid "Not a valid ssh public key" msgstr "SSH密钥不合法" -#: users/forms/profile.py:160 users/models/user.py:585 +#: users/forms/profile.py:160 users/models/user.py:586 #: users/templates/users/user_password_update.html:48 msgid "Public key" msgstr "SSH公钥" @@ -4103,39 +4122,39 @@ msgstr "系统审计员" msgid "Force enable" msgstr "强制启用" -#: users/models/user.py:534 +#: users/models/user.py:535 msgid "Local" msgstr "数据库" -#: users/models/user.py:568 +#: users/models/user.py:569 msgid "Avatar" msgstr "头像" -#: users/models/user.py:571 +#: users/models/user.py:572 msgid "Wechat" msgstr "微信" -#: users/models/user.py:582 +#: users/models/user.py:583 msgid "Private key" msgstr "ssh私钥" -#: users/models/user.py:601 +#: users/models/user.py:602 msgid "Source" msgstr "来源" -#: users/models/user.py:605 +#: users/models/user.py:606 msgid "Date password last updated" msgstr "最后更新密码日期" -#: users/models/user.py:608 +#: users/models/user.py:609 msgid "Need update password" msgstr "需要更新密码" -#: users/models/user.py:759 +#: users/models/user.py:760 msgid "Administrator" msgstr "管理员" -#: users/models/user.py:762 +#: users/models/user.py:763 msgid "Administrator is the super user of system" msgstr "Administrator是初始的超级管理员" @@ -4155,7 +4174,7 @@ msgstr "新密码不能是最近 {} 次的密码" msgid "The newly set password is inconsistent" msgstr "两次密码不一致" -#: users/serializers/profile.py:119 users/serializers/user.py:79 +#: users/serializers/profile.py:120 users/serializers/user.py:79 msgid "Is first login" msgstr "首次登录" @@ -4522,7 +4541,7 @@ msgstr "" "
\n" " " -#: users/utils.py:116 users/views/profile/reset.py:124 +#: users/utils.py:116 users/views/profile/reset.py:125 msgid "Reset password success" msgstr "重置密码成功" @@ -4726,36 +4745,28 @@ msgstr "" "
\n" " " -#: users/views/profile/otp.py:107 users/views/profile/otp.py:147 -#: users/views/profile/otp.py:167 +#: users/views/profile/otp.py:122 users/views/profile/otp.py:161 +#: users/views/profile/otp.py:181 msgid "MFA code invalid, or ntp sync server time" msgstr "MFA验证码不正确,或者服务器端时间不对" -#: users/views/profile/otp.py:191 +#: users/views/profile/otp.py:205 msgid "MFA enable success" msgstr "多因子认证启用成功" -#: users/views/profile/otp.py:192 +#: users/views/profile/otp.py:206 msgid "MFA enable success, return login page" msgstr "多因子认证启用成功,返回到登录页面" -#: users/views/profile/otp.py:194 +#: users/views/profile/otp.py:208 msgid "MFA disable success" msgstr "多因子认证禁用成功" -#: users/views/profile/otp.py:195 +#: users/views/profile/otp.py:209 msgid "MFA disable success, return login page" msgstr "多因子认证禁用成功,返回登录页面" -#: users/views/profile/password.py:44 -msgid "Password update" -msgstr "密码更新" - -#: users/views/profile/password.py:60 users/views/profile/reset.py:105 -msgid "* Your password does not meet the requirements" -msgstr "* 您的密码不符合要求" - -#: users/views/profile/password.py:75 +#: users/views/profile/password.py:30 msgid "Password invalid" msgstr "用户名或密码无效" @@ -4782,19 +4793,23 @@ msgid "" "password" msgstr "用户来自 {} 请去相应系统修改密码" -#: users/views/profile/reset.py:83 users/views/profile/reset.py:93 +#: users/views/profile/reset.py:83 users/views/profile/reset.py:94 msgid "Token invalid or expired" msgstr "Token错误或失效" -#: users/views/profile/reset.py:98 +#: users/views/profile/reset.py:99 msgid "User auth from {}, go there change password" msgstr "用户认证源来自 {}, 请去相应系统修改密码" -#: users/views/profile/reset.py:111 +#: users/views/profile/reset.py:106 +msgid "* Your password does not meet the requirements" +msgstr "* 您的密码不符合要求" + +#: users/views/profile/reset.py:112 msgid "* The new password cannot be the last {} passwords" msgstr "* 新密码不能是最近 {} 次的密码" -#: users/views/profile/reset.py:125 +#: users/views/profile/reset.py:126 msgid "Reset password success, return to login page" msgstr "重置密码成功,返回到登录页面" @@ -5294,6 +5309,33 @@ msgstr "旗舰版" msgid "Community edition" msgstr "社区版" +#~ msgid "Category(Display)" +#~ msgstr "类别 (显示名称)" + +#~ msgid "Type(Dispaly)" +#~ msgstr "类型 (显示名称)" + +#~ msgid "Users name" +#~ msgstr "用户名" + +#~ msgid "User groups name" +#~ msgstr "用户组名称" + +#~ msgid "Assets name" +#~ msgstr "资产名称" + +#~ msgid "System users name" +#~ msgstr "系统用户名称" + +#~ msgid "Admin user MFA auth" +#~ msgstr "所有管理员启用 MFA" + +#~ msgid "Admin user enable MFA" +#~ msgstr "强制管理员启用 MFA" + +#~ msgid "Password update" +#~ msgstr "密码更新" + #~ msgid "All user enable MFA" #~ msgstr "强制所有用户启用 MFA" diff --git a/apps/perms/serializers/application/permission.py b/apps/perms/serializers/application/permission.py index ce820b858..ecf6ae3f4 100644 --- a/apps/perms/serializers/application/permission.py +++ b/apps/perms/serializers/application/permission.py @@ -13,29 +13,42 @@ __all__ = [ class ApplicationPermissionSerializer(BulkOrgResourceModelSerializer): - category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category')) - type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type')) - is_valid = serializers.BooleanField(read_only=True) - is_expired = serializers.BooleanField(read_only=True) + category_display = serializers.ReadOnlyField(source='get_category_display', label=_('Category display')) + type_display = serializers.ReadOnlyField(source='get_type_display', label=_('Type display')) + is_valid = serializers.BooleanField(read_only=True, label=_('Is valid')) + is_expired = serializers.BooleanField(read_only=True, label=_("Is expired")) class Meta: model = ApplicationPermission fields_mini = ['id', 'name'] fields_small = fields_mini + [ - 'category', 'category_display', 'type', 'type_display', 'is_active', 'is_expired', - 'is_valid', 'created_by', 'date_created', 'date_expired', 'date_start', 'comment' + 'category', 'category_display', 'type', 'type_display', + 'is_active', 'is_expired', 'is_valid', + 'created_by', 'date_created', 'date_expired', 'date_start', 'comment' ] fields_m2m = [ 'users', 'user_groups', 'applications', 'system_users', - 'users_amount', 'user_groups_amount', 'applications_amount', 'system_users_amount', + 'users_amount', 'user_groups_amount', 'applications_amount', + 'system_users_amount', ] fields = fields_small + fields_m2m read_only_fields = ['created_by', 'date_created'] + extra_kwargs = { + 'is_expired': {'label': _('Is expired')}, + 'is_valid': {'label': _('Is valid')}, + 'actions': {'label': _('Actions')}, + 'users_amount': {'label': _('Users amount')}, + 'user_groups_amount': {'label': _('User groups amount')}, + 'system_users_amount': {'label': _('System users amount')}, + 'applications_amount': {'label': _('Applications amount')}, + } @classmethod def setup_eager_loading(cls, queryset): """ Perform necessary eager loading of data. """ - queryset = queryset.prefetch_related('users', 'user_groups', 'applications', 'system_users') + queryset = queryset.prefetch_related( + 'users', 'user_groups', 'applications', 'system_users' + ) return queryset def validate_applications(self, applications): diff --git a/apps/perms/serializers/asset/permission.py b/apps/perms/serializers/asset/permission.py index 3f0a01061..824a25292 100644 --- a/apps/perms/serializers/asset/permission.py +++ b/apps/perms/serializers/asset/permission.py @@ -3,9 +3,7 @@ from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ - -from django.db.models import Prefetch, Q - +from django.db.models import Q from orgs.mixins.serializers import BulkOrgResourceModelSerializer from perms.models import AssetPermission, Action @@ -40,14 +38,14 @@ class ActionsDisplayField(ActionsField): class AssetPermissionSerializer(BulkOrgResourceModelSerializer): - actions = ActionsField(required=False, allow_null=True) - is_valid = serializers.BooleanField(read_only=True) + actions = ActionsField(required=False, allow_null=True, label=_("Actions")) + is_valid = serializers.BooleanField(read_only=True, label=_("Is valid")) is_expired = serializers.BooleanField(read_only=True, label=_('Is expired')) - users_display = serializers.ListField(child=serializers.CharField(), label=_('Users name'), required=False) - user_groups_display = serializers.ListField(child=serializers.CharField(), label=_('User groups name'), required=False) - assets_display = serializers.ListField(child=serializers.CharField(), label=_('Assets name'), required=False) - nodes_display = serializers.ListField(child=serializers.CharField(), label=_('Nodes name'), required=False) - system_users_display = serializers.ListField(child=serializers.CharField(), label=_('System users name'), required=False) + users_display = serializers.ListField(child=serializers.CharField(), label=_('Users display'), required=False) + user_groups_display = serializers.ListField(child=serializers.CharField(), label=_('User groups display'), required=False) + assets_display = serializers.ListField(child=serializers.CharField(), label=_('Assets display'), required=False) + nodes_display = serializers.ListField(child=serializers.CharField(), label=_('Nodes display'), required=False) + system_users_display = serializers.ListField(child=serializers.CharField(), label=_('System users display'), required=False) class Meta: model = AssetPermission @@ -58,8 +56,8 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer): 'date_start', 'comment' ] fields_m2m = [ - 'users', 'users_display', 'user_groups', 'user_groups_display', 'assets', 'assets_display', - 'nodes', 'nodes_display', 'system_users', 'system_users_display', + 'users', 'users_display', 'user_groups', 'user_groups_display', 'assets', + 'assets_display', 'nodes', 'nodes_display', 'system_users', 'system_users_display', 'users_amount', 'user_groups_amount', 'assets_amount', 'nodes_amount', 'system_users_amount', ] @@ -79,7 +77,9 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer): @classmethod def setup_eager_loading(cls, queryset): """ Perform necessary eager loading of data. """ - queryset = queryset.prefetch_related('users', 'user_groups', 'assets', 'nodes', 'system_users') + queryset = queryset.prefetch_related( + 'users', 'user_groups', 'assets', 'nodes', 'system_users' + ) return queryset def to_internal_value(self, data): @@ -93,33 +93,39 @@ class AssetPermissionSerializer(BulkOrgResourceModelSerializer): if system_user and system_user.id not in system_users: system_users.append(system_user.id) data['system_users'] = system_users - return super().to_internal_value(data) - def perform_display_create(self, instance, **kwargs): + @staticmethod + def perform_display_create(instance, **kwargs): # 用户 users_to_set = User.objects.filter( - Q(name__in=kwargs.get('users_display')) | Q(username__in=kwargs.get('users_display')) + Q(name__in=kwargs.get('users_display')) | + Q(username__in=kwargs.get('users_display')) ).distinct() instance.users.add(*users_to_set) # 用户组 - user_groups_to_set = UserGroup.objects.filter(name__in=kwargs.get('user_groups_display')).distinct() + user_groups_to_set = UserGroup.objects.filter( + name__in=kwargs.get('user_groups_display') + ).distinct() instance.user_groups.add(*user_groups_to_set) # 资产 assets_to_set = Asset.objects.filter( - Q(ip__in=kwargs.get('assets_display')) | Q(hostname__in=kwargs.get('assets_display')) + Q(ip__in=kwargs.get('assets_display')) | + Q(hostname__in=kwargs.get('assets_display')) ).distinct() instance.assets.add(*assets_to_set) # 节点 - nodes_to_set = Node.objects.filter(full_value__in=kwargs.get('nodes_display')).distinct() + nodes_to_set = Node.objects.filter( + full_value__in=kwargs.get('nodes_display') + ).distinct() instance.nodes.add(*nodes_to_set) def create(self, validated_data): display = { - 'users_display' : validated_data.pop('users_display', ''), - 'user_groups_display' : validated_data.pop('user_groups_display', ''), - 'assets_display' : validated_data.pop('assets_display', ''), - 'nodes_display' : validated_data.pop('nodes_display', '') + 'users_display': validated_data.pop('users_display', ''), + 'user_groups_display': validated_data.pop('user_groups_display', ''), + 'assets_display': validated_data.pop('assets_display', ''), + 'nodes_display': validated_data.pop('nodes_display', '') } instance = super().create(validated_data) self.perform_display_create(instance, **display)