From 50ed08f3cad24fbcf8ef451a8cff236a0bc41d37 Mon Sep 17 00:00:00 2001 From: catborise Date: Sat, 7 Nov 2026 22:47:59 +0300 Subject: [PATCH] fix(migrate): a shut-off VM whose NVRAM file is outside libvirt's directory is refused Only a file in libvirt's NVRAM directory was copied; one elsewhere was skipped without a word, and the VM started on the destination from the firmware's template, its saved boot entries lost. Such a VM is now refused before anything changes. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Kk4h2TcUiaWmU5MUszYSea --- locale/tr/LC_MESSAGES/django.mo | Bin 195551 -> 195743 bytes locale/tr/LC_MESSAGES/django.po | 609 +++++++++++++++-------------- locale/zh/LC_MESSAGES/django.mo | Bin 182916 -> 183102 bytes locale/zh/LC_MESSAGES/django.po | 607 ++++++++++++++-------------- vrtManager/instance.py | 10 +- vrtManager/tests/test_migration.py | 6 + 6 files changed, 630 insertions(+), 602 deletions(-) diff --git a/locale/tr/LC_MESSAGES/django.mo b/locale/tr/LC_MESSAGES/django.mo index ac412e30480fd2812e39087441a55e66129551fd..e761dca880d1ace42248f01ae47831122542d1bb 100644 GIT binary patch delta 38171 zcmYk_2Yk&})N|*3s-+)Nxo>AoJlnHag~c%t$6^?+#e8_drhmc0#B;85xqPt!s{Sshdd6cem&@%s zKp>2SJD3fVuXnlVgDV)x;A)3?aSZ0fZI}noqZ)jN;TXKZa|z^@9$y$LkVQu>vHABlIVkNPd zmczxU5#7Q_OuWyOD~u}F64l@c)KqUmZNkr30t5EDTureVHpd;Pd}-VV%<*W2n&N&K zh|5tka|HeH0%pgjs17GPXc~@0ZMKHi-k6#AbWDnCFc>$ZMt%`lO;?&jW?=5a1XQ8d z4=z_-496lk2z3g!p+eetMGzlpIr z{~rl-;X$P%=D2Lbp~U}2f9!MAtl>0lK>Q>|WA>k1u6kG(E8+?pe~9$eRs5K#?;q5j zD0AGbd3P*Ke6c6)X1Ci1UMF0xDm*A?{T7Q8KZNt~J!ZriC(TG#VO8RHu^NV*GBeW) zRc;G1Lf0cKiBYG`vFnP8pTXI*?@D^c9HT|30zYFAWS0ad15ummIOcAaLgbz_2eTwPuZ%m6xE*UeSIu?wnFv42QKCg(Xul^C88Z^k@Qb<7a${EFQK+e}j`?wrn}8}}OQITQ>d(mH!>az|r{Hc=+*h`CV}O-3J_fm++usC?T|GjJqUtM;`LHso zL%lI2?Yo8$2*hz1h3jnm2IeLH32S4Xo2Fnt%thRd+QlnS9bb>?XolZR$8(_eP!y^o zB~Z`Hq4r7*bf+dzhk!=X64iljsHs|tYG6BRjrX9|@EK}~{co9y!cj|>AN{d7YI8P3 zb+i>~iH2iVoP+An)?3WK3hpAo7k@2I5kWWzw>L8y*YKrKmc%#I^5 z0+*sXaK?HWHPBnA`kta@;_dBnX5_9r=0OHj&-_sp2cbq9h3a5A48$g=kqvO7Qu(-* zbHB}T1~ta}s4jj+HJ$ISS2a)lz+HKU913P(51r zJ98LH;71bF)yJs0dxsS;YD}X$)Q5mN5QLiI0;t_v5>>E{O>c(kNIYtZ z`l3289#wu0>h!Ecb?5*p|2b6t-%$0xM3wujIPJSqJ~LC61+^FQqk3Ay+5lCc1!`mo zm>376PQ`Fcg$pqyuC?hqFe&kKsE@JB*a##3H04L2TO%DyK*wq!=Ed`M{Uxs_W2gn9yo--cm*{hAJDUuFU-vPy_0V?J1zcq2@#^FNV*MlcPv=8I50++f{@x`H{EPX@ zQWZ-R?}Jrv8)`4S#~fJtt2v&{F)Q(YsHK_umHBT$U@-}r;t%#ghJVdP6o?vm4O9mk zq4Ir$DmM%@fE(Be?_)`<>GJY?tsRG&fupDyJ%y_0I%+AOy4)u4ngs3ckEpe(;N|5R zQ7meT$6|e)iJH0xSQh_5^pa)aG4)A$SS3NB%+8lPHmwXNl6GIuPt8ke@&V zYU-Pz_CRY4#jdCk&O+^x#WubH!-?-iP3bMnhwm@~gA;ps*18UA2I5flc0|oYKh$Y( zk0GG7SYTa`>e(I~ia*-)vPrx=$FmleCw&-dX@0Pt!Y;&rL4Pcl)XYo^RL9z(Hs3Ui z#pT$N_Fc~i1dvcInVGsysF_%XnzGfXDcp{W@BpfV&61m?h(qo6zNm)hVjkRyWAO$? zV_XW;q1mVzS%f8Z{#V!sw@~N)4^)GnP#Ke^H1X7^4*6nc3`QNp5~wL{fHko_>KJZA z<^Kt_gcnftUq|hkm*`9TuJ;5q;&iEunNS7&tRbkik3ua~S=1)1g<68PHoY@yjR)HJ zILuCb4yuDYQ5`vo8rWHM>&m@EKs`&8+RO99RW?+CoEU-yunaatP5n&N3@kuz+=iO5 zo!A2pp_ZgT8Z)4Jr~x&$@pd-eF^!ko)1y8lsAoe^BN~IcBB!A)qMuN^{2{8Le^GlO zWm+#+J6wwqil;NDrYP#erZsBjW?^Mqjyi3RPy@-Fp7XB}6b8jM`U3?Ks z;WN~fhh{S8HP+e!RY5n@S`J6e&}3|bvr(JvZ&ZgfW;Qb!h1H3V!=-o$^}Kf$&vAFV zW)RT1J%#1*0T#eKzGgEvLN(kBbxOLTrmz?47%f39$!gREvlo@`3`XGv)T!~#YRrI% zhzDX8o&VefG?G%N3M-*1sDa8@*FJBEn&MWdCFq1Y6}>SKx1q{iM9t7u)RNu9O86S} z*-*^S%kwR}2ezht*8&2?@dM_@LfOnYZi1>X-o`tl8Xkb2y@1+$Gf|s#DQb7GMdiDK z%6A8~`~O1CL=k^;{wtwd8LJb}3^YVl)Cx7_@u&g=Pz{YkU8S>77syG})c=gS5ALBl z{156P`hu!IRdzFznNfSq4>gm~**X83sQUv>SD@f z<8@FKwnXjf&Zv$}K+VWD)UiH}k$4Mrk);VRn?8@5fX;gb^z_u)1~sydsQaNeYIl!9 zt?6vkIbMw_cM7#67cmg8p=RJ8)RZR)G|vN2^@gC9%3Y9vG8RD{!wRSZtlaf&rl7f$Yn;B z69b9oK}~U0)Q8qLs2P}xop3)k#N5H=1{{c5+QX=;_8eBh2UrdB<<=(W{PiQCH5!ka z+NGWc{E7v&`;XZ4i>M{|-9CSVnz^JQX2d?ICCH9S&xNWl619iQ*?1MyX={w0-=Vf4 zpsDVRD%cmb1S3#WwGcIu_4fHLR0T&+Q+&q8ucBu1j*Y*x&p)6#k~oj~kjjKwiU#Ob z1x*R)Q?Na1#NVJcRX;q0Ls4sAI@ENqK1LF6gZiwPhM~9}Rqi@!%74fF_yN^UXqcDh zm%)Wl&qsuD{=*2&CqZj}1XbWJ>cb>$xJi$|+{9y1o2@%)MC(!c_M$4hYU3|3ka()R zrbGEqGgcVOVHwl~H#D!?JeW>GI0^GnH`-CulwY&)`=}1S#|X?EVMZQev>`<3`kR{S&pvUZTpmzYx#}k`yp&lnFKR0Myb%pc-t5s-QEL#qL-X zH>38>AEXckXb?6o9UdT|~OnpsjL(~kkwDEXUhq|F=YEf~{ zzk0ORX4sBetG%d#r>vJy$L%Jn;9FF~|Dx79poAGwD0(`Ky7Nn*W~e-B1}bBHY>H}k zqnm)%WEZO9U+jb1SdRE(Y>Hte&3!Nem2VoV;RUF*U4gA|C+gnFP|6G>0LKxJM0IF4 z>O<@hs+{`*0rlv2Y>S0Uo1fukqjr6gGDd&Yh@())tsYj#hsxnIn)wY!P44QjR_1P!9g{UzP#ya5UOB7)J#-Ftz|RR+OVfLm zRMd#)q6W4YwQ1Mc_%YN#FJLCxcikqSir%0q_=p-oq8O7g6{^R6sORCRjub+DQ!0i! zwlz^5ZHCI<1JwbyeLfL2V{=jUZ$x)Aft>`@fk&ug^uor&E0~!mXf202mbFnMh(~Rv zKB$=*gIeQxs1B?}b!@jy{|U9Je?fJ?ry}QH75P^*7fLu5A^r{K$3>{~dKx{Sc9@5F z#!6;$l|aozWgD-Kx)&N_B=$lLY&jOhb*LG-jver?N^UcfhLugmcBmdFpziqos16Ro z7#xqhmpTSML-Rt zuVF5toTzU)y-=IV!G^d7wP`+~zUw8bY4(CYYK<$PW-=Ca{90iEwnuev6sn!6sC7&Q;5FC@-qPGN|2N2|YI*YR1~2I?xl9ufL5CMNda; z`c(A%{%1M+$lKa@Cse-PHhmy!*N;GL))}ZN-iW1fFKVgY zp{6`-eRHaEq4q?c`ka4N5J`dxmP5sBp{~qUs3{$UnxRRU7pJ2d+>hGTS5Tj#$s3sa zA`fcUH$tUP#QeAp^=Wz)b52$iU z8=K!7#9|HNBQX|#w(+b@%)mOJ8tjewE!$>{#wTt9YA{Dr^RZbU)lhfT3^-UEx7p`U zP$Nmw%#1V|wS?_#d>CrPn=us6pz42vT8gmd=6QM4jp}YqKo`ijs0(2McE+=)%~-63 zsh~a9Bt8#yML)nw=-<-I^A~&DVj1Fla2CG97C5Pu`K{L@)CCpL+8pP~SWBP(3kYZ` zAEQPZ(Z&?$fPuspVIDk)8p$762mRWb4kw_db|I?atEiE6i8D9qXe>v33#!8}PM!L@n!`1P(AF3ZEzFT)$?!6TDQUy#3!RFIF4G=q#e!0l@l8gFOLmz z4i>~`SP`>#GUeN%_QnEqYs!xhP=QaV<5xGq%QYC=qAK_eb!VsPY>rznHYeT~wP&_t zTfC3Ouu>PZNr#}~8&Dm%XU)^q{3O)5E9YNdoi>ti3{Rt$VtP08mFz4QB_7+|Y`WpN zium`aHEhwtG|&%KZZl5CCs+;p_cZs#4;VoFDQZbl_A+1D3iooGKjmsbf_C*q)EXx1 zZ7PVsFyeht7tLbSxxIi|%fx-mUI|AHqzkH^iKr3(h^jAfU-LW+wb`qpmVTm}KwAPS z`i>Qy^bl-Y;PEB{~G}QBLsEg?Zs$<0m zm_6ejLO=~HvHpaS#GhKT4K&{ms-vcG0%}Rtqb{PmsNLLJBCqs*p>L0!%9sL%27s15~; zHVsunRs1dLn65<~$6rx5Wy&#TrpjSg;{8zryN`9S&{#HMUN1hi2y7-{^EfZpXKXRv z%awplCwTsh)^!ARYyu{lrHDl}9FJO(*|-dU#B3Nh$qZ-+>XhujdUy@B1mTm-m)e$- zIsdw=dy$}HF%dPT=TJ-X47DdBrkKst#M%or)swIq?nCXNL{m)z5vZAMjaBhBCc!+@ z%mtSZ1BsWO#u}@~tw>Nu2B6|IP@8BIw#BEYQ&MBPnVDYLg!oO=F^ryJroJO)AwD0! z$8G3~9cP;3>_*MVPZ)$xl%V62$}tIrP&3gG)seZ_26v#2Q^r~580JIGKuy%z4@Ry1 zCe%{h#;KTmw)xnei^}&0YV9-6G4;9Q33MRAjqQ{HS7X(=W(l5S2IBeWnJFxX-oz_o z3ap0eXnp&<8iL)1& zy|4^5#b+@U-ba=D3pJB(QRV#?8iO%_cm!&RYuNM-m|nZ2D*>I;p{Sm1z|?pb)xdMi zgdb4nHtix)QEp61ybP*?l`uWlv9?7mMK9D^FGLOWAZjn2!(iHXy|Ed57kj=Exk{jR z>p0ZZO|dRTjchw6$GxbLA3=5a1nS1Sj5?M9OU#$g>ZtrpQT4`QW$cJ<^<*;vo#$Ur z6((A0GA2i@bz0O6WWY3-2Q|{ds2Qq^nwff-5j&#t4?>N28m7gisB&9u`VUJv|H^Ql z1XXkg)xb0KOgU<5(=Ia=_@QPb47Hg`qDEE;6Jae>`Fhw9+h7YkfkiQRxw$Wzqv9)< zyUlmJ8zh91@B+(XmKEl_HbPD50@OwG0KdfoD@}*ipr(EoYHE+526PfN(qHZKC#a=+ zhsyUAwOJFpSD7h~K#iy%s=|_}DXWT_fySsW7;&iGJRG&DmZ3J`5!7)zg*DJ?wTah4 zecq2j-5;mW2k)ag>V8i^6((C_mLL@UiASS)TnAOK32I4tp*k|wK3|RM@Ma9eeW>Gk z6ZI+h8pAN%S~DZXQ4PmpV}1W`MnDC&p{D)>ssl;anO&R3`KWRqFiht^^CmOGvZzhb88xLdP`iBzYV&PF zEyV}a()esPd&b`yf=Z7>9phrCdP<{CSFC;B$Ubj{Ze?soK)bS|&Cm@s#r;qn7>2q! zr=!mKdeo-;0agAq2I6^CxtFMhKcE^;y2a$rXw8Az>|t9t|LSoe64X#hR0TCr=eUuL zw?|df6?Lozpmy;D)TUf)(|1^pqUyVh%JO!zfVqjk#&GoAZZ>fY1{3dUosQZA-?<6s3&I5)gpW}j zYQMwuFab4!-l!QFi<*I1sB^y>HG`W_BmNFGQ^!$Da|v}yuA%CEWaH0K19pEQpbC=h zG(Ap-dQbvYK}D>M)lgG67xkI25Y?e2s0KIL=X+3Ve*l&56lznSMdf>g8u`CSKDW#N zJ2N$5r~)-nd!UZBDQX09s1f!;b$AqN6HY>PbPj5S3sEz+95qwBP#r&xDt8)niY{R~ zeg6MRKvVhIW=OQl6ikJ>!Lp;)vIJ(s_Nb8$!{Rs@wdTiA4Ln74=(Y8|^)srR*Y~EQ z>Cp4{|1%TNE)GH+ucD|atBD#>A5?_{QA;xnHI?IWm=}8iV~G3gF+Wx}Lfw>eP#4on z%!h${?M;e-#0R1~KY;}VG$kid4c|ju#VPig-CYe;QD@ZMzW^KHUeswxv)`T?j3OS3 zAvhRS|8nbjEJgea>eQ4t!1-5!76(iRreGlPwO9~Oq6&OKeGC^lXukChM>Vh&yWkbn zT_1DE{A|}06`zUvLb4tU-~kN7XQ)$`=?Bige&);fgZW%{;~3)au^|rq(fl^-5~@I% z!{#(J!Y0I5SwEwuyx|e!7HjgOCf*K5@ce*{m;K2MaGsk$MIM~OdYI;z`F`F8TM^%i zos@pu*dMit?x2?HIqG7`bi&M3any|V#df#`wMkQ)H2Eu__F4jJhTX#mXwz*)9hYOM z^LZ6D#jjDvFY76@xx!HAI{`H#{jnoX#ew(^bxL}kHa}NP!mh+$qSn0C8S}-&jVy`V zwVOa?9z4XVnD4ByFP0#F0CoJ{p*B(&s{C9mjJIrh#-B~O7*x3~sQmL$ zOMVh_>HPbjH@_e#i;Z|N2Akqdtb>Iwn30aglEfFGMsm%je?U!ThKuG?vI45X7MKes zpk`zfs@w_G1@#1z>+}B$0Znz%OJ)z`!#{`*!&q$pi`sJ-w2wO49iHos6 zHGe>{33VToyl%d9Hp6)0t5Hjq>W0}HMKFQ*V(gB|ZhE=yWB;3+|4Ia!|7LEmrKqX= z9d+Skyk&PSYAO>@9hi*TD_2m*G{X_a`ZK^k@-=9Npf&v$)${Z(%+%*V-SuTr=eQ=S zL!+@I9<=_0+5^#l8DlY!cpD7C;aDEmpqBU%>YhmZlJj4hz;FV+@gVA06ntg=j@C%5 zO#BJz>WqAC*19!nWc^Sh8jiYv#-Y9s9JJoVM8rR!_RJU5OlN;%mOSJQ=RY3_#YxbE zc+^aEx4LcmbQ_@hoBsz>Q3z@(3uA7qkNW)o7B%(LP#sx}!MF-FlP6J2 z`UX{h;*Vx2av&XWyXu;Ns~M_??NG<5H);gKP!&u;T_j6T4edb9%wC&*2DQoVpqA<@ zYG4IFnR+{*J{$U4Ct!Ac{x2cm$AkT-O>zZwAtnE8D)7fx;&o8Ra6ZQ2Mbr#Le=+52 zpgI(fq4=$JsZBqDn)>S)fuAwG&VSffbF4~W9pZISr(zjubDgvCH&~E(;J;>R>Y*BJ zVeN+MxEu9hG!u0iUZVC&Dt^AwsR^>?LARzdf`Bp@_Z)Ty|O+N3GGz0JR&P|(|CD1}<1TG#^Hq4vNb z)Mh+qpI<{Y^r!VL1`+>^l`v-_)A9DG)71wx^~10#E=PSlKS|^^J*}A7+q3KYqIx#l z#t)#T@D@hlKd8-^H;K1r6P7|fuYfuotxzK!jQV~s1vP`~QRVhxIG#pr^0#gR@dR8+ zy*=Mvzd?NnEkuocKla7bsDkB^nWaiV&sw8S#Y|KKYfugEMlIDZsB?bT`UEw@uTe|p zPL|vxWJaw`UesP_U`;@c$c_4(pMe_DI#dOFP$NH%%J&DV;diK+NtD72Bqyp|epCm_ zAnmwa^$BS0I-v?qL~Y8sHogQk!i}ii`va=tpHMS&2UYP4)cOC4DxV{znYrB9kNAAl zW=xmL3@|gs==?``0$h=(8*3}-T;D*=$ZOP;`lmLVuo&t}jlqgo88z|=sF5v1mD^_H z*X{Ecs3miyF*E6dsdfJI5>U^J;ZSUhn%c{_81LEm@U*4_Q?WYf^H5jnebg@hj7>3F zI6W54;}&d$JFy9-$m;F+fg}!9?t4@R6Zv_2KDNtYQQ~7! zGjh;PKpAghB@D~v?fKN|hFa6*s5RV#>cBqKRG&qi_a~^C`-nOP$^6YoeNi)&7qywo zp=P!T>f^Z!mPGe70vge2)RbID&A{KNsr!POvh3N-+U7!atQ6`7tAbjZ`j{6xVKh3Z zB|3qP@gnNS`LG=3LTZN$i2wedfYxRxYEw-|^>nSt;M$Ms*g4eNKC$U(bD9wbqK;b; zR0mq41~36Nuo2**`HVm~lMxz>@fm)K~sQNdeyFG!O1eDP?xA|Dijq1=a zY=!eso9P|KVyX}`V~wyi@s?N|_oHsax2XDx=P{eMGOBzNR0q1EX0U%A&c7~*^(3gk zX4LW6hZ?~v)Ed4=Rgg5)G~kc=%xHu90cHehDGs6b&SzBl^kHU`W&Uu9eg`$xUs0PbQM8F?M8$nkQ=bPtpZ^62sE4Ic$EXShq8oK%EkiBE9$b&dQ6JAe z3!97S7YrqyxQMssw`2KG`TJo@9EH(%7uA7GMa}65M$fo5%3;UEdBb$Tj$R5x-f`X=zWK^B+qquZ%~Te{K;mUld#4R*Ci|oE4?+!Wj&(W4(7tOE0cCuFT9enPUHt*|*^s1)S-bM6 zkyo?vcvMHbp*GW4REM{sI(is2BR`{-_!`FIL)1lAuqx+YBa0!R2FIf|$t+Yy7NIIy ziM4PWYNo!TmLzpGvq=L`9j$ER!%?SV4VJ=Fs2NBSYi2A6^}KQ{=U<=Gok&oF-BA}# zKh!RrgxV9UQ4R0Hf_M~F?ydDB1`u~uHzNx~#iLO5) z4h}#qiF+aeP4OE0;Cs{zoJ95T3To>AKy8}WsF5bBYo<0e>bVbU=aO)sf0r z9~+_e!a7uYTRm~k-(dpU%_mU}-o&5r57ZUAv%YzL26dC&Ms+kx1M{g@3RPhj)Lt2i zIt}wsBmM;&;Vt_-x}o`)uZ=l%{>RybHA*0U$NCj@!Q^P!<;wXlfb=!|KEf+4xY@fX1Q9Z*0o>*OZ?kAqX#_I`S6FVWMW{bX2sq zM~z?(@lB=!x<`a$@U@O!qNkH8f z?m+~!rgu?mk~z*~j7II|a;S=$qpsXIYe&>nc0*k>qfz;mpr&>;YDRXVenvcE4Qgk; z;tfZZ-t9U`Kx=sswT8D*6~9NVS=#nybLB*Bp4zD6)*F>?G^+eURD>_$G@@mKs7i3i{miV9@vc<=u!0i{{I{Sebu^bA3R1?^cr>CKB1=4x04xZ7;1`Z zqP{aWK$UNbD%Ta&a6i-@8jP)Q4yprhQA^@V;QT8gSAv<60@$2*S?q-KQ9bqUYzn4E zHJlao9WMYoV`0=%Ek*5#UAPg?qGonL7c+q2sOK}VKd$S-`5#3fpsV@)-%8Y-pQW3z z0O}s7g3Yi!4#R`k9!qyOduJKuCB7Mz|5sGU|3=Nszo?n?>0$CmqS8yd38?3FQ6Dbf zpr&vMY6{n)HqmC($bUrb-V>-z^uVV7jcV{SYDSaxH2E^3(hH(aM@dx2WAPZeHxtn2 z>eI`Ncn)fcwxD`^3=`q+sE$2A?S&T@hX0}(4C`&47e>us8H~V2r~!^ZbzrW2z6KeP z+jWS5Dm;d|IIf}!{9*lwnt}9v%nSshI+z#LPz-95HACg=i<+5n=xGpjudG3J^arel zXVCNae>3$ppV!$?BW;ALpqVuRwb=%uW?(An0-B4Ox%H_0XHgf?Z#Mn})qxLKACvbp zOVI+A9*?zk{`(TBfJd!K`rSuAQv>S7CwL(RZJ)J=8?)qz{6at}~T_7+tx_Tn`iK)Tewf+BFHw8sE9!ZA+6l$MsPB#|QA>ByO`sEjJN7}f;pQt;H|$3GWYnhn zh}!LmMwm}Sf7DXdK+RBn)K%OQ1F;`!DdwOy=UUW&cBAs0LoK2E5&=!w4b*v0J<|Mc zHVn1dTA+H`2~(gOb=)SPj_WG>d9ef|}55>GtJlh5r6CXkR!2r zD*q6b{{^Pi`A;;#OjSnI$6^qwBNb6o+6cAzTA-$G3~I?%VIW?`NPLevMWGW-dJC*X zdecP1mdTg4~wa&E@#1 z8E2UvKx$%J;*(KV^mB~Eg0syRh?!WCc#1jR{G-DB794wH=v*^{3s9T(DRxEwd1fZZ zqh{o$n?Owhx#ycH?S)#BV^|2EU@6SL!2AHx6blgFh2`)MJczj$n!RxkH2|+gW~xhJ zUE(89Gjz$u-=YTOuDsZs&+({DvK)1;|3RICq)W^$PKWu3=R*~2hB|hOP*b}TwN$sU zC?;KMmb46Ni4(8}&P470+ekfb*Bb)rVbNvYp8vFJ9L5v>7d?0Sax()~bZxN;@vEp~m}9M3x>{J0_;A!x?MK}YpU@8*uj7y9Y2Ve8fGVuF z-rF@BCt?u{++Zqbj2DT|Kpm_08_gQ`NA3P?I0yei&D_{cX0883Em7Ld<~|6)5aLyE zFm^?^HrHbUxiI$@Q(;vMBt90k3D=^o=o_fbnS3kXTreN%LuoKpMF)%FP1JWkpKWGl z%b{kd1&+cM*c$U}=lrYSnC+&(IgBO#0d>AB?l5*jT~Jd{Q+Wo}P^z6~%`2itw#<4Q z)xkee7gnk7%rB$oqdts2pz6=K%WbBr*e=t7W~kjf2DNFnp$fb~o#WKsn_XT8wMXJn zYdjSj;3-UxId+?R3!rAWF80I8sG0WOV?MS++ypd|im1&o7(>N1LkHMjRC|TVtq_{ z&@|W#XAr-N{@Ce|nex%7&AS1Wejhc1|Dujz-XF~KIP@XD05tB?aa;%!lcyKT# zc=2(J=XL&T9%Bkg$bQ`0HIj_gPnaK(&S4(nQ76rkG)2u!H`GNk1$8VBV|H{-nW^1| z%J%~6VA|7WZ?#4p--(zR7h@ILckLvg5q`wRnE8yit2}l^71)fLksmP-Z=;UWzo@CK za@K6Z1RPI%6}HFx=gfD#8K@g`4r)NFQ5`&sZtd1T322vpL4E9I`PrP$7N`dHp{DQ_ z>ikweZ#wuhYSX2=U~aSu_?UQ0RK1linh&?es0LSJ5FWKYxXAg}$dX+$cX9}7_xHhZ zI39g5{V!(ZVW=-8u~-m?VH9pfeK`G&(=hF2a}zE>ef}rDVm5aH)YMPMj=1KE+uZ4C zuX=m_rBgSyH1=7(#N5W>nzkv zUO;^YlyP4-Uk;m~K6YDRNj75ws^F>{=6r8Q-Q{;M9lpcFnDnN($x@*@RuEHSIh$S` zwYPd;5}b%?cslBMx;GHu9J+o-RqXqlnW9kCW+{Wg*Z~7^JZdJ^qZ-GxW};C;y##Xy4^aKpBEj$1MtVl{U2Yv`$8i zY#nMB|A<<$tEe@8h=bAVp4ntWu_E!OsJp(vee+o|9+m$W^!)ojF9u+vPWs3c@I&1Xxlx<30tR9NdUi8vvrWfAcpRHx%wzN6H6L~1{E1q^v`>tosPytr z+@_&+Bxq{8p*GtX)KW}EZL;mCV{;5O;ybA0`OrRpgQ_suQ*+mcqdpZIp$0Y;wRu;f zmf}0qXGU80GxND0f!ai4Q8(Ng)W~k)P|WbB>DV;XDVc{lH7jrmzC}&($mjM{pgO$V zx*tP{U%^E91@oiZ>xG%(NQ@w%7AnI))Ch;7PRB&7j?+*}bOZI}^EsBpe1DmHq9bba zPQn;mi?#3xY6*+IH1|MjETHp0gFs#${D_*OXQ&E3qt12KS7vGxP{(c(s$+9en`@Pg zZ$j;fy{Oai18S+RpqBJE)Ic6spL*o{{Y5}i`W98-D{9S?yfzK_q4q`|R0qqV^3_3o zxHLvh{cu#rCZY1pLmkic*1b0U6sn^)(DV0y?kYgSbJQ{Vh-x798&k0lYUDXl`SPMJ zm|`|w1vSD3sC%R(Dt~92-XAqnZdCbksQPE2TLl&p(B@l@8}XEl_j_yZgV`8N`a3Ly z+5R@0sTLL_-VY;i4eCSXl1)$X&g3hJc}Q=EIwccOn{(qk&i^_B$4F3*yT3O*9E7@| z#-Y}7g>?_A=Rc#S@Cs^*Z=#mq8S3hOhZ@)iYqEdLCeMsYk47zd%s-reeHzuU34_sd z{;?zJQ&A1RLofV-n!Uv$`S4rR60AbafcrQB zP5lMb2!6vre1iEgdur!k-00|dmNdTr~t3yywj3?o#%yk z_P?(bq;IroZ<4m*SD|ETO5%SnUB7z${Xc10seBaiy|&;)dT^bcR?x;5@VugJyd>eN zw(Kv?>Y)){JDrO|1N^qCv%IJ94%05>m4UofofN}LWyo$z)Uvg#cNz@~NKt|MwcP2P zp~H&R8%eC7eLkHY%pjb{mg`Qgxx72^{+0B0qz@oZJY}|%HpQ09VtZVMUNmx&xP#O5 zCuamXkMX3dQ^Xw{)sxUKJlE?8PZ!zVhEc~5o`uruqqbe;8RblHmrJvPC-rSBYn&_Y zXs>)uis8XtJ)Hc*{rxKP^bK_;@Yc~zLVPOq?04dZ2j_omTg$1|sKbl?oFuI%`q(@T3*zPPb}9V z;^ld^%GRTFFVZ&go~?A1A#F3yA5w2~;tzP=NbGV#N2c-G;S?DenLio1f3~eIC71EUvB{=p7GAW+w)=?9+NXUekCCXHC*AD+xClZMV?nqp6fM< z_$6DmDS1vgUq%LdZFPc1MW-1?s||S8g!g+VZj^84lH^!LY$NaW^s^l;opYv)iuC&A z9315vzLyd!dH-T-uR?xZEvI=`rc67^ROQ(U=gTPn%nf+@z>YSY@L)=&ck+)8^&3m< z1hF>MUz8kID3gcxQm5PK;3$7;^5(5qK2isgQ?C|ym-jB-MR-1sXC0`ajB|Ljulorp zTS?)+_w>B(^W;}@2GZ6yn2UBQ@?gIm31yxT??j%0w%jgmVzM_meVSFuf<+I%`M#kzqd`F{MonB)?GhQO4ynULT;;y95hA}zgije8Q zS0=*y?E3Yi;ApZhu@CPPFG{h-D$45>)#){!cxv)Fww_702|e3MT>(z`*x+7_2)8HqX5_1^YZNWi;MqvRdYvFVoA)^KRx?SS|2;#QRMa(q{M88$C;w@l?)jh8XVj6K`tMT5E5e0rNr(7xCum$iithga9fZ5H7s^y+Wt)Oi26+0=HA@=GMOdy)GhPjh1x(odQuJpb!M+DYF3lJ~z? z1mQ8f*OB)c?^8TTPYe9m<_ac#q*Hl9bcjP}3$@Q8^;>HAiT5CKJ?A}ycWvHzoy8MI zB?%@p)d`tc%qz3gYGP>kYDxz1?o0Y)YA8?1AmV!Ii{&`_s#g|g^TgnK#mQBQ9L-5x zNpJKzMD9nt=a4?c&cP^5MA~ffpQBd2CfHh6Q}!V5V>~yoWpClLL~>BsAEmH90i=BxQaj|2y1HzCU@=iZb(T z|5}i~fp|-2@#J#uhBnoYRwk0WGfy`YZovD$*K2C%L5bZqZ!r00kWa6igd@q@!bCk^ z_BPmODe)ffgS`2!@A?+=kbe;M=@p}&6H1c!8WCUS~@xsXFC4GsqpzjHwOMj3Ts;r*%p7b6!pL%}|QiZ}jEA*UygMv;eOw zPKjyJB^vUqkA3j+f9h1yduqr=xn-oUAgotrd_meAXZ5sT_g_4jN_+bC!+G06YT^gz z>j0kpP1+Djd`I}HofU7MjUdkp8&|EFc&^uN^6FP6de!A!Q|Y8N;=P;j@7RN~ji`4) z5`Hv)O=3L~Tai$lNjgKNQ%IXnBfClamGBk988L|WTk2a)zRAvr>HcN@p`>1=$&rhv z=_q~IcB>D~^q__m#MhATN1OMseLmE=K0P#UIJp+{WCgX1p%%R&sc9Wf=G{uAd8Z?v zUQNimov=4v=ADeUUY%*_5#{)~#N|g=udzHk?ZnLp_B%?6o;-OQf3gfwsEF7zJ4xSt7^JT zs$P4@wZ}Q=_8SOPP3f4`qN8(>~hs{VrKdH6{l<)TSn!|k|UH>7CGH! zg@!*QR9>Sc$9KGU5}rxT*QrCVUZl;Tu8PjVS-yTZd8*f1O4TALZ+PEF_etk9tI zv^1R5E1AyugJGx@9YEShI6iI*Y& zB;K0%JA$YW%as5J>L=k z?{$&K#SmbHYc->+Pgi7?C5+<_xm6Cgw>j@1JO?uTyVfME>rCx>M%>a)#pv zp8D|qp8AsD1nMhiYf0>^Us$!sbe{Y|eLW$jyf08nuV;9M_#`J} zQGi#7Q+ZK@R~x6-qKJ@Fq)t#fsFxqL==GKo-LM_+8_wZH{$BH)TZ;lR#M*qN$=8JU zIVa8HV)QL}c#36aDF|UcXVN zUI(1zOZ>f3IR}?SG#g6VUeX3r%MkLd@#NsHB7Fii{!7|E{NLAAo-HA*nC-z}wMg0t zGF2!4I^r9gn5Djc^=yt6q$VO&uaUfebb2lIjlW2l%Jf*Tn>-yxowa!%Aa^R>yXeze z;{3xit`X$fqI}fY7$@4A7gKHz?|+E%Z-BW*P-hCt>2;pEIcrOOQ@pad3pi<(`6p>Y zoz0#6%ly5fo!Dii%50;|1Dm54WoGdFGIjJJtv2-x#-jE)zo&F<;(dg+Dw8MJIlRm_ zybezfQ))Et|6aX#I+1u@JHo>}IO=#U_w|Z#{FXQ{?;b^M>!ZjoNV#+%blSL$15>n!Z_TH)j6>x@}ZG4nW{=@sbtU-Li9oLeh={igAx zIqe;w-AR=EO8hJB=6BMp^z~ZrgshD4n&s46>F=&fJ12PBllOXZOs7O~-XT%)dHLT^@-OF|VAGlr4x)v_hWXdj@0Es~PDP^$#5_ zr=so7tCaz@R@eU-_lYW+BdL6OV=y%(Cb+OGCrt1X>FLqk33JCf_ zs4*oHQFCodd{0~X$T5uc4EV3Jc$IICnZ#ZaYe5@*$u)woUOx~Y<6K-7?Dfw1dsTqf zXeaaP;2<|S%2THoPYY8rFYiA{i>1VR-Wi={tNoLdrNxKNz||3c^$FD^y)5~Ts1@FO z2yb)_t`1H!fskI==vjpGe6??m#pHiZ{Z&z~@z|OA-_l-wCumKiR~o0@8vm%tr2R?S zH`2Xv)<$LrQ7}w{g?f+jfZTwgBpoH!T|6gsw(X|QP nJH!Wei2rG6Lf63l@qt}>^c)!1HLiPHx41#On@sc`-|PPX?+R|k delta 38003 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
kr)X@bLV&Y{`9r(_A5K9wxcQxOb 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 diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po index 645dcc6d..aed2db29 100644 --- a/locale/tr/LC_MESSAGES/django.po +++ b/locale/tr/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-07 13:45+0000\n" +"POT-Creation-Date: 2026-11-07 19:47+0000\n" "PO-Revision-Date: 2020-11-04 12:00+0000\n" "Last-Translator: catborise , 2020\n" "Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/tr/)\n" @@ -914,7 +914,7 @@ msgid "IP" msgstr "IP" #: admin/templates/admin/logs.html:56 admin/views.py:288 instances/states.py:19 -#: instances/views.py:430 instances/views.py:432 logs/views.py:17 +#: instances/views.py:424 instances/views.py:426 logs/views.py:17 msgid "Unknown" msgstr "Bilinmeyen" @@ -2656,7 +2656,7 @@ msgstr "" "VNC olarak değiştirin." #: instances/api/viewsets.py:148 instances/api/viewsets.py:166 -#: instances/views.py:803 instances/views.py:818 +#: instances/views.py:797 instances/views.py:812 msgid "Templates cannot be started." msgstr "Şablon makineler başlatılamaz." @@ -2729,57 +2729,57 @@ msgstr "" msgid "The name of the virtual machine must not contain any special characters" msgstr "Sanal makine adı özel karakterler içeremez" -#: instances/jobs.py:72 +#: instances/jobs.py:71 msgid "The VM moved to another compute after the job was queued" msgstr "İş kuyruğa alındıktan sonra sanal makine başka bir sunucuya taşındı" -#: instances/jobs.py:140 +#: instances/jobs.py:139 msgid "Enter a whole number of vCPUs for the clone" msgstr "Klon için vCPU sayısını tam sayı olarak girin" -#: instances/jobs.py:142 +#: instances/jobs.py:141 msgid "Enter a whole number of memory (MiB) for the clone" msgstr "Klon için belleği (MiB) tam sayı olarak girin" -#: instances/jobs.py:169 +#: instances/jobs.py:168 msgid "Choose the clone's name from the list of free names" msgstr "Klonun adını boş adlar listesinden seçin" -#: instances/jobs.py:197 +#: instances/jobs.py:196 #, python-format msgid "%(quota)s: cannot create '%(clone_name)s'." msgstr "%(quota)s: '%(clone_name)s' oluşturulamıyor." -#: instances/jobs.py:200 instances/jobs.py:586 +#: instances/jobs.py:199 instances/jobs.py:585 #, python-format msgid "Instance '%(clone_name)s' already exists!" msgstr "'%(clone_name)s' sanal makinesi zaten mevcut!" -#: instances/jobs.py:202 +#: instances/jobs.py:201 #, python-format msgid "Instance name '%(clone_name)s' contains invalid characters!" msgstr "Sanal makine adı '%(clone_name)s' geçersiz karakterler içermektedir!" -#: instances/jobs.py:205 +#: instances/jobs.py:204 #, python-format msgid "Instance MAC '%(clone_mac)s' invalid format!" msgstr "Sanal makine MAC adresi '%(clone_mac)s' geçersiz biçemde belirtilmiş!" -#: instances/jobs.py:207 +#: instances/jobs.py:206 #, python-format msgid "Disk name '%(disk_name)s' contains invalid characters!" msgstr "Disk adı '%(disk_name)s' geçersiz karakterler içeriyor!" -#: instances/jobs.py:227 +#: instances/jobs.py:226 #, python-format msgid "The clone is made, but not as asked: %(error)s" msgstr "Klon oluşturuldu, ama istendiği gibi değil: %(error)s" -#: instances/jobs.py:285 +#: instances/jobs.py:284 msgid "The VM was not defined and no volume of it was left." msgstr "Sanal makine tanımlanmadı ve ondan geriye birim kalmadı." -#: instances/jobs.py:287 +#: instances/jobs.py:286 #, python-format msgid "" "The VM was not defined; check these volumes, then resolve this job: " @@ -2788,28 +2788,28 @@ msgstr "" "Sanal makine tanımlanmadı; şu birimleri kontrol edin, sonra bu işi çözün: " "%(volumes)s" -#: instances/jobs.py:308 +#: instances/jobs.py:307 msgid "Delete snapshot" msgstr "Anlık görüntüyü sil" -#: instances/jobs.py:318 vrtManager/instance.py:2283 +#: instances/jobs.py:317 vrtManager/instance.py:2297 #, python-format msgid "The VM has no external snapshot named %(name)s" msgstr "Sanal makinede %(name)s adında harici anlık görüntü yok" -#: instances/jobs.py:331 +#: instances/jobs.py:330 msgid "Merging the snapshot" msgstr "Anlık görüntü birleştiriliyor" -#: instances/jobs.py:350 +#: instances/jobs.py:349 msgid "The VM is no longer on its compute" msgstr "Sanal makine artık kendi sunucusunda değil" -#: instances/jobs.py:353 +#: instances/jobs.py:352 msgid "libvirt is still merging the snapshot" msgstr "libvirt anlık görüntüyü hâlâ birleştiriyor" -#: instances/jobs.py:361 +#: instances/jobs.py:360 msgid "" "The snapshot is still listed and no merge runs. It cannot be told whether the" " disks changed; check the VM before deleting the snapshot again or reverting " @@ -2819,32 +2819,32 @@ msgstr "" "değişmediği bilinemiyor; anlık görüntüyü yeniden silmeden ya da ona dönmeden " "önce sanal makineyi kontrol edin." -#: instances/jobs.py:368 +#: instances/jobs.py:367 msgid "The VM is no longer on the compute the job ran on" msgstr "Sanal makine artık işin çalıştığı sunucuda değil" -#: instances/jobs.py:374 +#: instances/jobs.py:373 msgid "Take snapshot" msgstr "Anlık görüntü al" -#: instances/jobs.py:386 instances/jobs.py:395 vrtManager/instance.py:1879 +#: instances/jobs.py:385 instances/jobs.py:394 vrtManager/instance.py:1893 #, python-format msgid "A snapshot named %(name)s already exists" msgstr "%(name)s adında bir anlık görüntü zaten var" -#: instances/jobs.py:401 +#: instances/jobs.py:400 msgid "Taking the snapshot" msgstr "Anlık görüntü alınıyor" -#: instances/jobs.py:414 +#: instances/jobs.py:413 msgid "libvirt is still taking the snapshot" msgstr "libvirt anlık görüntüyü hâlâ alıyor" -#: instances/jobs.py:417 +#: instances/jobs.py:416 msgid "The snapshot was not taken" msgstr "Anlık görüntü alınmadı" -#: instances/jobs.py:445 +#: instances/jobs.py:444 #, python-format msgid "" "Snapshot %(name)s does not record the VM's vCPUs and memory: the quota cannot" @@ -2853,24 +2853,24 @@ msgstr "" "%(name)s anlık görüntüsü sanal makinenin vCPU ve bellek değerlerini " "içermiyor: kota denetlenemiyor." -#: instances/jobs.py:455 +#: instances/jobs.py:454 #, python-format msgid "%(quota)s: cannot revert to snapshot %(name)s." msgstr "%(quota)s: %(name)s anlık görüntüsüne dönülemiyor." -#: instances/jobs.py:462 +#: instances/jobs.py:461 msgid "Revert snapshot" msgstr "Snapshota dön" -#: instances/jobs.py:503 +#: instances/jobs.py:502 msgid "Reverting the VM" msgstr "Sanal makine geri döndürülüyor" -#: instances/jobs.py:514 +#: instances/jobs.py:513 msgid "libvirt is still reverting the VM" msgstr "libvirt sanal makineyi hâlâ geri döndürüyor" -#: instances/jobs.py:518 +#: instances/jobs.py:517 msgid "" "It cannot be told whether the VM was reverted; check it, then revert again or" " resolve this job." @@ -2878,12 +2878,12 @@ msgstr "" "Sanal makinenin geri döndürülüp döndürülmediği bilinemiyor; kontrol edin, " "sonra yeniden geri döndürün ya da bu işi çözün." -#: instances/jobs.py:535 +#: instances/jobs.py:534 msgid "The VM must be running, paused or shut off to be cloned" msgstr "" "Klonlanmak için sanal makine çalışıyor, duraklatılmış ya da kapalı olmalı" -#: instances/jobs.py:536 +#: instances/jobs.py:535 #, python-format msgid "" "The guest's file systems could not be thawed (%(error)s); thaw them with: " @@ -2892,19 +2892,19 @@ msgstr "" "Konuğun dosya sistemleri çözülemedi (%(error)s); şununla çözün: virsh " "domfsthaw %(vm)s" -#: instances/jobs.py:555 +#: instances/jobs.py:554 msgid "Clone VM" msgstr "Sanal makineyi klonla" -#: instances/jobs.py:596 instances/jobs.py:603 instances/jobs.py:881 +#: instances/jobs.py:595 instances/jobs.py:602 instances/jobs.py:880 msgid "Copying disks" msgstr "Diskler kopyalanıyor" -#: instances/jobs.py:655 +#: instances/jobs.py:654 msgid "libvirt has no result of the copy" msgstr "libvirt'te kopyanın sonucu yok" -#: instances/jobs.py:666 +#: instances/jobs.py:665 #, python-format msgid "" "The copy failed: %(error)s. The guest's file systems could not be thawed " @@ -2913,11 +2913,11 @@ msgstr "" "Kopyalama başarısız oldu: %(error)s. Konuğun dosya sistemleri çözülemedi " "(%(thaw)s); şununla çözün: virsh domfsthaw %(vm)s" -#: instances/jobs.py:669 instances/jobs.py:756 +#: instances/jobs.py:668 instances/jobs.py:755 msgid "The copy failed" msgstr "Kopyalama başarısız oldu" -#: instances/jobs.py:694 +#: instances/jobs.py:693 #, python-format msgid "" "The VM is no longer on the compute the job ran on; check these volumes, then " @@ -2926,7 +2926,7 @@ msgstr "" "Sanal makine artık işin çalıştığı sunucuda değil; şu birimleri kontrol edin, " "sonra bu işi çözün: %(volumes)s" -#: instances/jobs.py:732 +#: instances/jobs.py:731 #, python-format msgid "" "A volume of the clone was being created; check these volumes, then resolve " @@ -2935,15 +2935,15 @@ msgstr "" "Klonun bir birimi oluşturuluyordu; şu birimleri kontrol edin, sonra bu işi " "çözün: %(volumes)s" -#: instances/jobs.py:736 +#: instances/jobs.py:735 msgid "The job stopped before the copy started" msgstr "İş, kopyalama başlamadan durdu" -#: instances/jobs.py:743 +#: instances/jobs.py:742 msgid "libvirt is still copying the disks" msgstr "libvirt diskleri hâlâ kopyalıyor" -#: instances/jobs.py:746 +#: instances/jobs.py:745 #, python-format msgid "" "Another backup runs on the VM; check these volumes, then resolve this job: " @@ -2952,7 +2952,7 @@ msgstr "" "Sanal makinede başka bir yedekleme çalışıyor; şu birimleri kontrol edin, " "sonra bu işi çözün: %(volumes)s" -#: instances/jobs.py:751 +#: instances/jobs.py:750 #, python-format msgid "" "libvirt has no result of the copy; check these volumes, then resolve this " @@ -2961,7 +2961,7 @@ msgstr "" "libvirt'te kopyanın sonucu yok; şu birimleri kontrol edin, sonra bu işi " "çözün: %(volumes)s" -#: instances/jobs.py:763 +#: instances/jobs.py:762 #, python-format msgid "" "The disks were copied, but the clone could not be defined: %(error)s; check " @@ -2970,74 +2970,74 @@ msgstr "" "Diskler kopyalandı, ancak klon tanımlanamadı: %(error)s; şu birimleri kontrol" " edin, sonra bu işi çözün: %(volumes)s" -#: instances/jobs.py:786 instances/templates/create_instance_w1.html:60 +#: instances/jobs.py:785 instances/templates/create_instance_w1.html:60 #: instances/templates/create_instance_w2.html:356 msgid "Create VM" msgstr "Sanal makine oluştur" -#: instances/jobs.py:810 instances/jobs.py:855 instances/views.py:2474 +#: instances/jobs.py:809 instances/jobs.py:854 instances/views.py:2468 msgid "A virtual machine with this name already exists" msgstr "Bu isimde bir sanal makine mevcut" -#: instances/jobs.py:812 instances/jobs.py:852 +#: instances/jobs.py:811 instances/jobs.py:851 msgid "There is an instance with same name. Remove it and try again!" msgstr "Aynı isimde başka bir sanal makine var. Onu silip yeniden deneyin!" -#: instances/jobs.py:815 +#: instances/jobs.py:814 msgid "First you need to create or select an image" msgstr "Öncelikle bir imaj oluşturun ya da mevcut bir imajı seçin" -#: instances/jobs.py:817 +#: instances/jobs.py:816 msgid "Choose one disk source: a new disk, existing volumes or a template" msgstr "" "Tek bir disk kaynağı seçin: yeni bir disk, mevcut birimler ya da bir şablon" -#: instances/jobs.py:819 +#: instances/jobs.py:818 msgid "Image has already exist. Please check volumes or change instance name" msgstr "" "İmaj zaten mevcut. Lütfen ya makine adını değişin ya da disk alanlarını " "kontrol edin" -#: instances/jobs.py:821 +#: instances/jobs.py:820 msgid "Invalid cache mode" msgstr "Geçersiz önbellek modu" -#: instances/jobs.py:823 +#: instances/jobs.py:822 #, python-format msgid "This host offers no CPU mode or model %(mode)s" msgstr "Bu sunucu %(mode)s CPU modunu veya modelini sunmuyor" -#: instances/jobs.py:825 +#: instances/jobs.py:824 #, python-format msgid "A CD-ROM cannot use the %(bus)s bus" msgstr "CD-ROM %(bus)s veri yolunu kullanamaz" -#: instances/jobs.py:828 +#: instances/jobs.py:827 msgid "The cloud-init seed is read from a CD-ROM: choose its bus" msgstr "cloud-init tohumu bir CD-ROM'dan okunur: veri yolunu seçin" -#: instances/jobs.py:831 +#: instances/jobs.py:830 msgid "The cloud-init seed needs a directory storage pool for the disk" msgstr "cloud-init tohumu, disk için bir dizin depolama havuzu gerektirir" -#: instances/jobs.py:837 +#: instances/jobs.py:836 #, python-format msgid "This host offers no firmware %(firmware)s" msgstr "Bu sunucu %(firmware)s firmware'ini sunmuyor" -#: instances/jobs.py:839 vrtManager/instance.py:3015 +#: instances/jobs.py:838 vrtManager/instance.py:3029 msgid "This host offers no TPM 2.0: install swtpm on it" msgstr "Bu sunucu TPM 2.0 sunmuyor: üzerine swtpm kurun" -#: instances/jobs.py:900 +#: instances/jobs.py:899 msgid "Writing the cloud-init seed" msgstr "cloud-init tohumu yazılıyor" -#: instances/jobs.py:907 +#: instances/jobs.py:906 msgid "Defining the VM" msgstr "Sanal makine tanımlanıyor" -#: instances/jobs.py:940 +#: instances/jobs.py:939 #, python-format msgid "" "The panel failed unexpectedly; its log has the details. Remove these volumes " @@ -3046,114 +3046,114 @@ msgstr "" "Panel beklenmedik bir hatayla karşılaştı; ayrıntılar panelin günlüğünde. Bu " "birimleri elle kaldırın: %(volumes)s" -#: instances/jobs.py:944 +#: instances/jobs.py:943 #, python-format msgid "%(error)s. Remove these volumes by hand: %(volumes)s" msgstr "%(error)s. Şu birimleri elle silin: %(volumes)s" -#: instances/jobs.py:969 +#: instances/jobs.py:968 #, python-format msgid "The instance is already on %(compute)s" msgstr "Sanal makine zaten %(compute)s üzerinde" -#: instances/jobs.py:971 +#: instances/jobs.py:970 #, python-format msgid "%(compute)s is not reachable" msgstr "%(compute)s sunucusuna ulaşılamıyor" -#: instances/jobs.py:973 +#: instances/jobs.py:972 #, python-format msgid "%(compute)s is the VM's own host under another name" msgstr "%(compute)s, sanal makinenin kendi sunucusunun başka bir adı" -#: instances/jobs.py:1013 +#: instances/jobs.py:1031 #, python-format msgid "" "The VM migrated, but autostart could not be set on the destination: %(error)s" msgstr "" "Sanal makine taşındı, ancak hedefte otomatik başlatma ayarlanamadı: %(error)s" -#: instances/jobs.py:1020 +#: instances/jobs.py:1038 #, python-format msgid "The VM migrated, but its NVRAM file stays on the source: %(error)s" msgstr "Sanal makine taşındı, ancak NVRAM dosyası kaynakta kaldı: %(error)s" -#: instances/jobs.py:1028 +#: instances/jobs.py:1046 msgid "Migrate VM" msgstr "Sanal makineyi taşı" -#: instances/jobs.py:1075 +#: instances/jobs.py:1093 msgid "Migrating the VM" msgstr "Sanal makine taşınıyor" -#: instances/jobs.py:1125 +#: instances/jobs.py:1142 msgid "libvirt is still migrating the VM" msgstr "libvirt sanal makineyi hâlâ taşıyor" -#: instances/jobs.py:1136 +#: instances/jobs.py:1154 msgid "The VM stayed on the source host" msgstr "Sanal makine kaynak sunucuda kaldı" -#: instances/jobs.py:1138 +#: instances/jobs.py:1156 msgid "" "The VM is on both computes or on neither; check them, then resolve this job." msgstr "" "Sanal makine ya iki sunucuda da var ya da hiçbirinde yok; kontrol edin, sonra" " bu işi çözün." -#: instances/jobs.py:1186 +#: instances/jobs.py:1175 msgid "Move disk" msgstr "Diski taşı" -#: instances/jobs.py:1193 +#: instances/jobs.py:1182 msgid "Choose a disk of the VM" msgstr "Sanal makinenin bir diskini seçin" -#: instances/jobs.py:1217 +#: instances/jobs.py:1206 msgid "Copying the disk" msgstr "Disk kopyalanıyor" -#: instances/jobs.py:1260 +#: instances/jobs.py:1249 #, python-format msgid "Another block job runs on %(dev)s; check the VM" msgstr "" "%(dev)s üzerinde başka bir blok işi çalışıyor; sanal makineyi kontrol edin" -#: instances/jobs.py:1266 +#: instances/jobs.py:1255 #, python-format msgid "The disk stayed in %(path)s; remove %(dest)s if it is there" msgstr "Disk %(path)s içinde kaldı; varsa %(dest)s dosyasını silin" -#: instances/jobs.py:1268 +#: instances/jobs.py:1257 #, python-format msgid "The definitions of %(dev)s name %(paths)s; check the VM" msgstr "%(dev)s tanımları %(paths)s gösteriyor; sanal makineyi kontrol edin" -#: instances/jobs.py:1275 +#: instances/jobs.py:1264 #, python-format msgid "Disk %(path)s was kept: a disk file that stays needs it" msgstr "%(path)s diski korundu: kalan bir disk dosyası ona ihtiyaç duyuyor" -#: instances/jobs.py:1276 +#: instances/jobs.py:1265 #, python-format msgid "The VM is removed, but disk %(path)s was not deleted: %(err)s" msgstr "Sanal makine kaldırıldı, ancak %(path)s diski silinmedi: %(err)s" -#: instances/jobs.py:1277 +#: instances/jobs.py:1266 #, python-format msgid "Disk %(path)s is used by another VM and was kept" msgstr "" "%(path)s diski başka bir sanal makine tarafından kullanılıyor ve korundu" -#: instances/jobs.py:1331 +#: instances/jobs.py:1320 msgid "Delete VM" msgstr "Sanal makineyi sil" -#: instances/jobs.py:1361 +#: instances/jobs.py:1350 msgid "Deleting the VM" msgstr "Sanal makine siliniyor" -#: instances/jobs.py:1373 +#: instances/jobs.py:1362 msgid "The VM was not deleted; it may have been shut off" msgstr "Sanal makine silinmedi; kapatılmış olabilir" @@ -3340,7 +3340,7 @@ msgid "Disk source" msgstr "Disk kaynağı" #: instances/templates/add_instance_volume.html:21 -#: instances/templates/create_instance_w2.html:134 instances/views.py:2493 +#: instances/templates/create_instance_w2.html:134 instances/views.py:2487 msgid "New disk" msgstr "Yeni disk" @@ -3726,7 +3726,7 @@ msgstr "Özel CPU modelleri" msgid "Size (GiB)" msgstr "Boyut (GiB)" -#: instances/templates/create_instance_w2.html:161 instances/views.py:2494 +#: instances/templates/create_instance_w2.html:161 instances/views.py:2488 msgid "Existing volumes" msgstr "Mevcut birimler" @@ -3762,7 +3762,7 @@ msgstr "Aygıt" msgid "Remove" msgstr "Kaldır" -#: instances/templates/create_instance_w2.html:194 instances/views.py:2495 +#: instances/templates/create_instance_w2.html:194 instances/views.py:2489 msgid "Clone from template" msgstr "Şablondan klonla" @@ -5880,12 +5880,12 @@ msgstr "En son satırlar, en yenisi önce." msgid "All of this VM's logs" msgstr "Bu sanal makinenin tüm logları" -#: instances/utils.py:68 +#: instances/utils.py:69 #, python-format msgid "The disk files cannot be checked on %(host)s: %(err)s" msgstr "Disk dosyaları %(host)s üzerinde denetlenemiyor: %(err)s" -#: instances/utils.py:81 +#: instances/utils.py:111 msgid "" "The quota cannot be checked: a host of your virtual machines cannot be " "reached, or the size of one of their disks cannot be read. Nothing was " @@ -5894,81 +5894,81 @@ msgstr "" "Kota denetlenemiyor: sanal makinelerinizin bir sunucusuna erişilemiyor ya da " "disklerinden birinin boyutu okunamıyor. Hiçbir şey değiştirilmedi." -#: instances/utils.py:88 +#: instances/utils.py:118 msgid "The quota of virtual machines is reached" msgstr "Sanal makine kotası doldu" -#: instances/utils.py:89 +#: instances/utils.py:119 msgid "The vCPU quota is reached" msgstr "vCPU kotası doldu" -#: instances/utils.py:90 +#: instances/utils.py:120 msgid "The memory quota is reached" msgstr "Bellek kotası doldu" -#: instances/utils.py:91 +#: instances/utils.py:121 msgid "The disk quota is reached" msgstr "Disk kotası doldu" -#: instances/utils.py:100 +#: instances/utils.py:130 #, python-format msgid "%(quota)s (%(total)s > %(limit)s)" msgstr "%(quota)s (%(total)s > %(limit)s)" -#: instances/utils.py:199 +#: instances/utils.py:229 msgid "None available device name" msgstr "Hiçbiri uygun aygıt adı değil" -#: instances/utils.py:406 +#: instances/utils.py:434 #, python-format msgid "%(hostname)s via %(address)s" msgstr "%(address)s üzerinden %(hostname)s" -#: instances/utils.py:445 +#: instances/utils.py:473 msgid "Invalid MAC address" msgstr "Geçersiz MAC adresi" -#: instances/utils.py:447 +#: instances/utils.py:475 msgid "More MAC addresses than networks" msgstr "Ağlardan daha fazla MAC adresi" -#: instances/views.py:173 +#: instances/views.py:167 msgid "Enter an IP address, a network such as 192.0.2.0/24, or a MAC address." msgstr "Bir IP adresi, 192.0.2.0/24 gibi bir ağ ya da bir MAC adresi girin." -#: instances/views.py:179 instances/views.py:213 +#: instances/views.py:173 instances/views.py:207 msgid "Too many searches are still running; try again shortly." msgstr "Çok fazla arama hâlâ çalışıyor; birazdan yeniden deneyin." -#: instances/views.py:261 +#: instances/views.py:255 #, python-format msgid "The host %(host)s of '%(name)s' cannot be reached: %(error)s" msgstr "'%(name)s' sanal makinesinin sunucusu %(host)s erişilemiyor: %(error)s" -#: instances/views.py:267 +#: instances/views.py:261 #, python-format msgid "The host of '%(name)s' cannot be reached right now." msgstr "'%(name)s' sanal makinesinin sunucusuna şu anda erişilemiyor." -#: instances/views.py:268 +#: instances/views.py:262 msgid " Jobs on it can be followed under Jobs in the menu." msgstr " Üzerindeki işler menüdeki İşler bölümünden izlenebilir." -#: instances/views.py:276 +#: instances/views.py:270 #, python-format msgid "'%(name)s' is no longer on its host." msgstr "'%(name)s' artık sunucusunda yok." -#: instances/views.py:373 +#: instances/views.py:367 msgid "There is no other host to migrate to." msgstr "Taşınacak başka bir sunucu yok." -#: instances/views.py:375 +#: instances/views.py:369 msgid "A VM migrates when it is running, paused or shut off." msgstr "" "Sanal makine çalışırken, duraklatılmışken ya da kapalıyken taşınabilir." -#: instances/views.py:377 +#: instances/views.py:371 msgid "" "A VM with snapshots cannot be migrated: its snapshots stay on this host. " "Delete them first." @@ -5976,7 +5976,7 @@ msgstr "" "Anlık görüntüsü olan bir sanal makine taşınamaz: anlık görüntüleri bu " "sunucuda kalır. Önce onları silin." -#: instances/views.py:379 +#: instances/views.py:373 msgid "" "A VM with host devices cannot be migrated: the destination may not have them." " Remove them first." @@ -5984,11 +5984,11 @@ msgstr "" "Sunucu aygıtları olan bir sanal makine taşınamaz: hedefte bu aygıtlar " "olmayabilir. Önce onları kaldırın." -#: instances/views.py:654 instances/views.py:655 +#: instances/views.py:648 instances/views.py:649 msgid "The VM was moved meanwhile; try again." msgstr "Sanal makine bu arada taşındı; yeniden deneyin." -#: instances/views.py:771 +#: instances/views.py:765 msgid "" "The running VM has no free PCI slot for another disk on this bus: choose the " "scsi bus if the VM has a SCSI controller, or shut the VM down and add the " @@ -6001,7 +6001,7 @@ msgstr "" "yuvaları ekle, sonraki başlatmadan itibaren ona boş yuvalar verir. Yeni bir " "birim havuzunda kalır, mevcut birim olarak eklenebilir." -#: instances/views.py:775 +#: instances/views.py:769 msgid "" "The running VM has no free PCI slot for the SCSI controller the disk needs: " "shut the VM down and add the disk then; Add PCIe slots on the Disks tab gives" @@ -6013,171 +6013,171 @@ msgstr "" "PCIe yuvaları ekle, sonraki başlatmadan itibaren ona boş yuvalar verir. Yeni " "bir birim havuzunda kalır, mevcut birim olarak eklenebilir." -#: instances/views.py:793 +#: instances/views.py:787 #, python-format msgid "Invalid disk options: %(options)s" msgstr "Geçersiz disk seçenekleri: %(options)s" -#: instances/views.py:1010 +#: instances/views.py:1004 #, python-format msgid "Set the gstfsd key of %(compute)s first (Computes, edit the host)" msgstr "" "Önce %(compute)s sunucusunun gstfsd anahtarını ayarlayın (Sunucular, sunucuyu" " düzenle)" -#: instances/views.py:1017 instances/views.py:1035 instances/views.py:1044 +#: instances/views.py:1011 instances/views.py:1029 instances/views.py:1038 #, python-format msgid "gstfsd error: %(err)s" msgstr "gstfsd hatası: %(err)s" -#: instances/views.py:1045 +#: instances/views.py:1039 msgid "the reply is not signed with the key" msgstr "yanıt anahtarla imzalanmamış" -#: instances/views.py:1053 +#: instances/views.py:1047 msgid "Shut the VM down, or start its QEMU guest agent, and try again" msgstr "" "Sanal makineyi kapatın ya da QEMU konuk ajanını başlatın ve yeniden deneyin" -#: instances/views.py:1066 +#: instances/views.py:1060 msgid "The change may still be made when the agent answers again." msgstr "Ajan yeniden yanıt verdiğinde değişiklik yine de yapılabilir." -#: instances/views.py:1094 +#: instances/views.py:1088 msgid "Reset root password" msgstr "Root parolasını sıfırla" -#: instances/views.py:1098 +#: instances/views.py:1092 msgid "Enter a password" msgstr "Bir parola girin" -#: instances/views.py:1112 +#: instances/views.py:1106 msgid "Select an SSH public key" msgstr "Bir SSH açık anahtarı seçin" -#: instances/views.py:1134 +#: instances/views.py:1128 #, python-format msgid "Installed new SSH public key %(keyname)s" msgstr "Yeni %(keyname)s SSH açık anahtarı yüklendi" -#: instances/views.py:1154 +#: instances/views.py:1148 msgid "Enter a whole number of vCPUs" msgstr "vCPU sayısı için bir tam sayı girin" -#: instances/views.py:1158 +#: instances/views.py:1152 msgid "Shut off the VM to change its vCPUs" msgstr "vCPU'larını değiştirmek için sanal makineyi kapatın" -#: instances/views.py:1161 +#: instances/views.py:1155 msgid "The current vCPUs cannot be more than the maximum" msgstr "Geçerli vCPU sayısı en fazla değerden büyük olamaz" -#: instances/views.py:1168 +#: instances/views.py:1162 #, python-format msgid "%(quota)s: cannot resize the CPU of '%(instance_name)s'." msgstr "%(quota)s: '%(instance_name)s' CPU'su yeniden boyutlandırılamıyor." -#: instances/views.py:1176 +#: instances/views.py:1170 #, python-format msgid "vCPUs set to %(cur)s (maximum %(max)s)" msgstr "vCPU sayısı %(cur)s olarak ayarlandı (en fazla %(max)s)" -#: instances/views.py:1195 +#: instances/views.py:1189 msgid "Enter a whole number for memory" msgstr "Bellek için bir tam sayı girin" -#: instances/views.py:1198 +#: instances/views.py:1192 msgid "The current memory cannot be more than the maximum" msgstr "Geçerli bellek en fazla değerden büyük olamaz" -#: instances/views.py:1202 +#: instances/views.py:1196 #, python-format msgid "%(quota)s: cannot resize the memory of '%(instance_name)s'." msgstr "%(quota)s: '%(instance_name)s' belleği yeniden boyutlandırılamıyor." -#: instances/views.py:1208 +#: instances/views.py:1202 #, python-format msgid "Memory set to %(cur)s MiB (maximum %(max)s MiB)" msgstr "Bellek %(cur)s MiB olarak ayarlandı (en fazla %(max)s MiB)" -#: instances/views.py:1228 +#: instances/views.py:1222 msgid "Enter disk sizes as whole GiB" msgstr "Disk boyutlarını tam GiB olarak girin" -#: instances/views.py:1232 +#: instances/views.py:1226 #, python-format msgid "%(dev)s is %(size)s: a disk cannot shrink" msgstr "%(dev)s boyutu %(size)s: disk küçültülemez" -#: instances/views.py:1240 +#: instances/views.py:1234 msgid "No disks were selected or valid for resizing." msgstr "Boyutlandırma için seçilmiş ya da geçerli disk yok." -#: instances/views.py:1249 +#: instances/views.py:1243 #, python-format msgid "%(quota)s: cannot resize the disks of '%(instance_name)s'." msgstr "%(quota)s: '%(instance_name)s' diskleri yeniden boyutlandırılamıyor." -#: instances/views.py:1261 +#: instances/views.py:1255 #, python-format msgid "The storage pool of %(dev)s cannot resize its volumes" msgstr "%(dev)s diskinin depolama havuzu birimlerini boyutlandıramaz" -#: instances/views.py:1263 +#: instances/views.py:1257 #, python-format msgid "Disk is resized: %(dev)s" msgstr "Disk boyutu değiştirildi: %(dev)s" -#: instances/views.py:1357 +#: instances/views.py:1351 msgid "The VM's machine has no PCIe slots to add" msgstr "Sanal makinenin makine tipinde eklenecek PCIe yuvası yok" -#: instances/views.py:1362 +#: instances/views.py:1356 #, python-format msgid "%(count)s PCIe slots added" msgstr "%(count)s PCIe yuvası eklendi" -#: instances/views.py:1364 +#: instances/views.py:1358 #, python-format msgid "%(count)s PCIe slots added: the VM gets them at its next start" msgstr "" "%(count)s PCIe yuvası eklendi: sanal makine bunları sonraki başlatmasında " "alır" -#: instances/views.py:1410 +#: instances/views.py:1404 #, python-format msgid "%(volume)s is already a disk of this VM" msgstr "%(volume)s zaten bu sanal makinenin bir diski" -#: instances/views.py:1500 +#: instances/views.py:1494 msgid "Volume changes are applied. But it will be activated after shutdown" msgstr "" "Birim değişiklikleri uygulandı. Ama yeniden başlatıldıktan sonra uygulanacak" -#: instances/views.py:1505 +#: instances/views.py:1499 msgid "Volume is changed successfully." msgstr "Birim başarıyla değiştirildi." -#: instances/views.py:1523 +#: instances/views.py:1517 #, python-format msgid "Disk %(dev)s is not a storage volume of this instance" msgstr "%(dev)s diski bu sanal makinenin bir depolama birimi değil" -#: instances/views.py:1530 +#: instances/views.py:1524 #, python-format msgid "Disk %(dev)s has a pending change; delete it once the VM is shut down" msgstr "" "%(dev)s diskinin bekleyen bir değişikliği var; sanal makine kapatıldığında " "silin" -#: instances/views.py:1545 +#: instances/views.py:1539 #, python-format msgid "Volume %(vol)s is used by another VM; detach it instead" msgstr "" "%(vol)s birimi başka bir sanal makine tarafından kullanılıyor; onun yerine " "ayırın" -#: instances/views.py:1557 +#: instances/views.py:1551 #, python-format msgid "" "The guest has not released disk %(dev)s yet; volume %(vol)s was kept. Delete " @@ -6186,62 +6186,62 @@ msgstr "" "Konuk sistem %(dev)s diskini henüz bırakmadı; %(vol)s birimi korundu. Sanal " "makine kapatıldığında depolama havuzundan silin." -#: instances/views.py:1568 +#: instances/views.py:1562 #, python-format msgid "Disk %(dev)s was detached, but its volume was kept: %(err)s" msgstr "%(dev)s diski ayrıldı, ancak birimi korundu: %(err)s" -#: instances/views.py:1594 +#: instances/views.py:1588 #, python-format msgid "This VM cannot take a CD-ROM on the %(bus)s bus now" msgstr "Bu sanal makineye şu anda %(bus)s veri yolunda CD-ROM eklenemez" -#: instances/views.py:1597 +#: instances/views.py:1591 msgid "A USB CD-ROM needs an ISO image: libvirt has no empty USB drive" msgstr "USB CD-ROM bir ISO imajı ister: libvirt boş USB sürücü desteklemiyor" -#: instances/views.py:1602 +#: instances/views.py:1596 #, python-format msgid "%(image)s is already in a CD-ROM of this VM" msgstr "%(image)s bu sanal makinenin bir CD-ROM'unda zaten takılı" -#: instances/views.py:1683 +#: instances/views.py:1677 #, python-format msgid "Pool %(pool)s was not read again: %(err)s" msgstr "%(pool)s havuzu yeniden okunamadı: %(err)s" -#: instances/views.py:1704 +#: instances/views.py:1698 #, python-format msgid "Snapshot was not deleted: %(err)s" msgstr "Anlık görüntü silinmedi: %(err)s" -#: instances/views.py:1819 +#: instances/views.py:1813 msgid "Add at least one device to the boot order." msgstr "Ön yükleme sırasına en az bir aygıt ekleyin." -#: instances/views.py:1833 +#: instances/views.py:1827 msgid "Boot order changed. It applies at the next start." msgstr "Ön yükleme sırası değiştirildi. Sonraki başlatmada uygulanır." -#: instances/views.py:1835 +#: instances/views.py:1829 msgid "Boot order changed successfully." msgstr "Ön yükleme sırası başarıyla değiştirildi." -#: instances/views.py:1855 +#: instances/views.py:1849 msgid "The XML is empty" msgstr "XML boş" -#: instances/views.py:1859 instances/views.py:2484 +#: instances/views.py:1853 instances/views.py:2478 #, python-format msgid "The XML is not well-formed: %(error)s" msgstr "XML düzgün biçimlendirilmemiş: %(error)s" -#: instances/views.py:1861 +#: instances/views.py:1855 #, python-format msgid "The XML must keep the VM's UUID %(uuid)s." msgstr "XML, sanal makinenin %(uuid)s UUID'sini korumalıdır." -#: instances/views.py:1865 +#: instances/views.py:1859 msgid "" "The definition has changed since the editor was opened. Reload the page to " "edit the current one." @@ -6249,40 +6249,40 @@ msgstr "" "Düzenleyici açıldığından beri tanım değişti. Geçerli tanımı düzenlemek için " "sayfayı yeniden yükleyin." -#: instances/views.py:1877 +#: instances/views.py:1871 msgid "The XML definition was saved." msgstr "XML tanımı kaydedildi." -#: instances/views.py:1879 +#: instances/views.py:1873 msgid "The XML definition was saved; the VM uses it from its next start." msgstr "" "XML tanımı kaydedildi; sanal makine onu sonraki başlatmasından itibaren " "kullanır." -#: instances/views.py:1960 +#: instances/views.py:1954 msgid "Select one network interface to change" msgstr "Değiştirilecek bir ağ arabirimi seçin" -#: instances/views.py:1998 +#: instances/views.py:1992 msgid "Network Device Config is changed. Please shutdown instance to activate." msgstr "" "Ağ aygıtı yapılandırması değiştirildi. Aktifleştirmek için lütfen sanal " "makineyi kapatın." -#: instances/views.py:2000 +#: instances/views.py:1994 msgid "Network device changed" msgstr "Ağ aygıtı değiştirildi" -#: instances/views.py:2012 +#: instances/views.py:2006 msgid "No network selected" msgstr "Ağ seçilmedi" -#: instances/views.py:2017 +#: instances/views.py:2011 #, python-format msgid "The VM already has a network device with MAC %(mac)s" msgstr "Sanal makinede %(mac)s MAC adresli bir ağ aygıtı zaten var" -#: instances/views.py:2036 +#: instances/views.py:2030 msgid "" "The running VM has no free PCI slot for another network device: shut it down " "and add the device then; Add PCIe slots on the Disks tab gives it free ones " @@ -6292,21 +6292,21 @@ msgstr "" "aygıtı sonra ekleyin; Diskler sekmesindeki PCIe yuvaları ekle, sonraki " "başlatmadan itibaren ona boş yuvalar verir." -#: instances/views.py:2077 instances/views.py:2083 +#: instances/views.py:2071 instances/views.py:2077 msgid "The VM has it" msgstr "Sanal makinede var" -#: instances/views.py:2114 +#: instances/views.py:2108 #, python-format msgid "The host has no USB device %(device)s" msgstr "Sunucuda %(device)s USB aygıtı yok" -#: instances/views.py:2135 +#: instances/views.py:2129 #, python-format msgid "The host has no PCI device %(device)s" msgstr "Sunucuda %(device)s PCI aygıtı yok" -#: instances/views.py:2153 +#: instances/views.py:2147 #, python-format msgid "" "Removal of PCI device %(address)s requested: the guest has not let it go yet;" @@ -6316,20 +6316,20 @@ msgstr "" "bırakmadı; bırakana ya da sanal makine durana kadar çalışan sanal makinede " "kalır." -#: instances/views.py:2198 instances/views.py:2228 +#: instances/views.py:2192 instances/views.py:2222 msgid "Select a network interface and a QoS direction" msgstr "Bir ağ arabirimi ve bir QoS yönü seçin" -#: instances/views.py:2201 vrtManager/network.py:454 +#: instances/views.py:2195 vrtManager/network.py:454 msgid "QoS rates must be whole numbers" msgstr "QoS hızları tam sayı olmalıdır" -#: instances/views.py:2208 networks/views.py:230 +#: instances/views.py:2202 networks/views.py:230 #, python-format msgid "%(qos_dir)s QoS is set" msgstr "%(qos_dir)s QoS ayarlandı" -#: instances/views.py:2213 +#: instances/views.py:2207 #, python-format msgid "" "%(qos_dir)s QoS is set. A running VM gets it after it is powered off and on." @@ -6337,12 +6337,12 @@ msgstr "" "%(qos_dir)s QoS ayarlandı. Çalışan bir sanal makine, kapatılıp açıldıktan " "sonra bunu alır." -#: instances/views.py:2235 networks/views.py:256 +#: instances/views.py:2229 networks/views.py:256 #, python-format msgid "%(qos_dir)s QoS is deleted" msgstr "%(qos_dir)s QoS silindi" -#: instances/views.py:2240 +#: instances/views.py:2234 #, python-format msgid "" "%(qos_dir)s QoS is deleted. A running VM keeps the old limit until it is " @@ -6351,21 +6351,21 @@ msgstr "" "%(qos_dir)s QoS silindi. Çalışan bir sanal makine, kapatılıp açılana kadar " "eski sınırı korur." -#: instances/views.py:2268 +#: instances/views.py:2262 msgid "Only one owner is allowed and the one already added" msgstr "Sadece bir sahibe izin verilmiştir ve bir sahip zaten eklenmiş" -#: instances/views.py:2270 +#: instances/views.py:2264 #, python-format msgid "%(user)s is already an owner" msgstr "%(user)s zaten bir sahip" -#: instances/views.py:2315 +#: instances/views.py:2309 #, python-format msgid "Console settings were not saved: %(errors)s" msgstr "Konsol ayarları kaydedilmedi: %(errors)s" -#: instances/views.py:2337 +#: instances/views.py:2331 msgid "" "Error setting console password. You should check that your instance have an " "graphic device." @@ -6373,37 +6373,37 @@ msgstr "" "Konsol parolası ayarlanırken hata oluştu. Sanal makinenin bir grafik aygıtına" " sahip olduğundan emin olunuz." -#: instances/views.py:2384 +#: instances/views.py:2378 msgid "Shut the VM down to change whether it is a template." msgstr "Şablon olup olmadığını değiştirmek için sanal makineyi kapatın." -#: instances/views.py:2390 +#: instances/views.py:2384 #, python-format msgid "%(quota)s: '%(instance_name)s' stays a template." msgstr "%(quota)s: '%(instance_name)s' şablon olarak kalıyor." -#: instances/views.py:2472 +#: instances/views.py:2466 msgid "The XML has no name" msgstr "XML'de ad yok" -#: instances/views.py:2486 webvirtcloud/middleware.py:156 +#: instances/views.py:2480 webvirtcloud/middleware.py:156 #, python-format msgid "libvirt Error - %(exception)s" msgstr "libvirt Hatası - %(exception)s" -#: instances/views.py:2493 +#: instances/views.py:2487 msgid "An empty disk of the size you set" msgstr "Belirlediğiniz boyutta boş bir disk" -#: instances/views.py:2494 +#: instances/views.py:2488 msgid "Volumes already in a pool" msgstr "Bir havuzda zaten bulunan birimler" -#: instances/views.py:2495 +#: instances/views.py:2489 msgid "A copy of a template volume" msgstr "Bir şablon biriminin kopyası" -#: instances/views.py:2584 +#: instances/views.py:2578 msgid "" "This host has no running storage pool for the VM's disks: add or start one on" " its Storage page." @@ -6411,24 +6411,24 @@ msgstr "" "Bu sunucuda sanal makinenin diskleri için çalışan bir depolama havuzu yok: " "Depolama sayfasından bir tane ekleyin ya da başlatın." -#: instances/views.py:2586 +#: instances/views.py:2580 msgid "This host has no network for the VM: add one on its Networks page." msgstr "" "Bu sunucuda sanal makine için ağ yok: Ağlar sayfasından bir tane ekleyin." -#: instances/views.py:2649 +#: instances/views.py:2643 msgid "Flavor Created" msgstr "Flavor Oluşturuldu" -#: instances/views.py:2657 +#: instances/views.py:2651 msgid "Create Flavor" msgstr "Kullanıcı Oluştur" -#: instances/views.py:2669 +#: instances/views.py:2663 msgid "Flavor Deleted" msgstr "Flavor Silindi" -#: instances/views.py:2675 +#: instances/views.py:2669 msgid "Only the size template goes; VMs made from it keep their size." msgstr "" "Yalnızca boyut şablonu silinir; ondan oluşturulan sanal makineler boyutlarını" @@ -8927,61 +8927,61 @@ msgstr "Bağlantı başarısız: %(host)s bağlı değil" msgid "This host has no architecture %(arch)s" msgstr "Bu sunucuda %(arch)s mimarisi yok" -#: vrtManager/instance.py:138 +#: vrtManager/instance.py:140 msgid "A running or paused VM cannot be migrated offline" msgstr "Çalışan veya duraklatılmış bir sanal makine çevrimdışı taşınamaz" -#: vrtManager/instance.py:141 +#: vrtManager/instance.py:143 msgid "The VM can be migrated when it is running, paused or shut off" msgstr "Sanal makine çalışırken, duraklatılmışken veya kapalıyken taşınabilir" -#: vrtManager/instance.py:164 +#: vrtManager/instance.py:166 msgid "A VM with snapshots cannot be migrated" msgstr "Anlık görüntüleri olan bir sanal makine taşınamaz" -#: vrtManager/instance.py:167 +#: vrtManager/instance.py:169 msgid "A VM with a saved state cannot be migrated" msgstr "Kaydedilmiş durumu olan bir sanal makine taşınamaz" -#: vrtManager/instance.py:174 +#: vrtManager/instance.py:176 msgid "A VM with host devices cannot be migrated; remove them first" msgstr "Sunucu aygıtları olan bir sanal makine taşınamaz; önce onları kaldırın" -#: vrtManager/instance.py:180 +#: vrtManager/instance.py:182 #, python-format msgid "The destination host does not have these disks of the VM: %(disks)s" msgstr "Hedef sunucuda sanal makinenin şu diskleri yok: %(disks)s" -#: vrtManager/instance.py:181 +#: vrtManager/instance.py:183 #, python-format msgid "%(target)s (%(source)s)" msgstr "%(target)s (%(source)s)" -#: vrtManager/instance.py:189 +#: vrtManager/instance.py:191 msgid "Destination host emulator is different. Cannot be migrated" msgstr "Hedef sunucunun emülatörü farklı. Taşınamaz" -#: vrtManager/instance.py:320 +#: vrtManager/instance.py:325 msgid "an image is not copied; eject it first" msgstr "bir imaj kopyalanmaz; önce onu çıkarın" -#: vrtManager/instance.py:323 +#: vrtManager/instance.py:328 msgid "a read-only or encrypted disk is not copied" msgstr "salt okunur veya şifreli bir disk kopyalanmaz" -#: vrtManager/instance.py:326 +#: vrtManager/instance.py:331 msgid "only raw and qcow2 disks are copied" msgstr "yalnızca raw ve qcow2 diskler kopyalanır" -#: vrtManager/instance.py:328 +#: vrtManager/instance.py:333 msgid "no storage pool of the source host has it" msgstr "kaynak sunucunun hiçbir depolama havuzunda yok" -#: vrtManager/instance.py:330 +#: vrtManager/instance.py:335 msgid "a disk with a backing file is not copied" msgstr "temel (backing) dosyası olan bir disk kopyalanmaz" -#: vrtManager/instance.py:350 +#: vrtManager/instance.py:355 #, python-format msgid "" "%(target)s (%(path)s): the destination host does not share it; choose a pool " @@ -8990,12 +8990,12 @@ msgstr "" "%(target)s (%(path)s): hedef sunucu bunu paylaşmıyor; kopyalanacağı bir havuz" " seçin" -#: vrtManager/instance.py:354 +#: vrtManager/instance.py:359 #, python-format msgid "%(target)s (%(path)s): %(refusal)s" msgstr "%(target)s (%(path)s): %(refusal)s" -#: vrtManager/instance.py:359 +#: vrtManager/instance.py:364 #, python-format msgid "" "%(target)s (%(path)s): the destination host has no pool %(pool)s for disk " @@ -9003,7 +9003,7 @@ msgid "" msgstr "" "%(target)s (%(path)s): hedef sunucuda disk dosyaları için %(pool)s havuzu yok" -#: vrtManager/instance.py:366 +#: vrtManager/instance.py:371 #, python-format msgid "" "%(target)s (%(path)s): pool %(pool)s of the destination host already has a " @@ -9012,17 +9012,17 @@ msgstr "" "%(target)s (%(path)s): hedef sunucunun %(pool)s havuzunda zaten %(file)s " "dosyası var" -#: vrtManager/instance.py:370 +#: vrtManager/instance.py:375 #, python-format msgid "%(target)s (%(path)s): another disk is copied to %(dest)s" msgstr "%(target)s (%(path)s): başka bir disk %(dest)s konumuna kopyalanıyor" -#: vrtManager/instance.py:375 +#: vrtManager/instance.py:380 #, python-format msgid "%(target)s: the VM has no disk file to copy" msgstr "%(target)s: sanal makinenin kopyalanacak disk dosyası yok" -#: vrtManager/instance.py:379 +#: vrtManager/instance.py:384 #, python-format msgid "" "%(target)s (%(path)s) of the next start: the destination host does not share " @@ -9031,12 +9031,12 @@ msgstr "" "Sonraki başlatmanın %(target)s (%(path)s) diski: hedef sunucu bunu " "paylaşmıyor" -#: vrtManager/instance.py:383 +#: vrtManager/instance.py:388 #, python-format msgid "The disks cannot be migrated: %(problems)s" msgstr "Diskler taşınamaz: %(problems)s" -#: vrtManager/instance.py:396 +#: vrtManager/instance.py:401 #, python-format msgid "" "%(error)s; remove the partial disk copies from the destination host: " @@ -9044,33 +9044,42 @@ msgid "" msgstr "" "%(error)s; yarım kalan disk kopyalarını hedef sunucudan kaldırın: %(copies)s" -#: vrtManager/instance.py:413 +#: vrtManager/instance.py:418 #, python-format msgid "" "%(error)s; remove the partial disk copies from the destination host: %(left)s" msgstr "" "%(error)s; yarım kalan disk kopyalarını hedef sunucudan kaldırın: %(left)s" -#: vrtManager/instance.py:430 +#: vrtManager/instance.py:432 +#, python-format +msgid "" +"The NVRAM file %(path)s is not in libvirt's NVRAM directory %(dir)s and " +"cannot be copied" +msgstr "" +"%(path)s NVRAM dosyası libvirt'in NVRAM dizini %(dir)s içinde değil ve " +"kopyalanamaz" + +#: vrtManager/instance.py:441 #, python-format msgid "The destination host cannot see the NVRAM file %(path)s" msgstr "Hedef sunucu %(path)s NVRAM dosyasını göremiyor" -#: vrtManager/instance.py:503 +#: vrtManager/instance.py:517 #, python-format msgid "%(type)s disk, cannot be checked" msgstr "%(type)s disk, kontrol edilemiyor" -#: vrtManager/instance.py:543 +#: vrtManager/instance.py:557 #, python-format msgid "The destination host already has a VM %(key)s" msgstr "Hedef sunucuda zaten %(key)s sanal makinesi var" -#: vrtManager/instance.py:565 +#: vrtManager/instance.py:579 msgid "The VM was started on the source host during the migration" msgstr "Sanal makine taşıma sırasında kaynak sunucuda başlatıldı" -#: vrtManager/instance.py:581 +#: vrtManager/instance.py:595 #, python-format msgid "" "%(error)s; the VM may now be defined only on the destination host: check both" @@ -9079,7 +9088,7 @@ msgstr "" "%(error)s; sanal makine artık yalnızca hedef sunucuda tanımlı olabilir: iki " "sunucuyu da kontrol edin" -#: vrtManager/instance.py:587 +#: vrtManager/instance.py:601 #, python-format msgid "" "%(error)s; the VM is now defined on both hosts, remove it from the " @@ -9088,7 +9097,7 @@ msgstr "" "%(error)s; sanal makine artık iki sunucuda da tanımlı, hedeften kaldırın: " "%(undo_error)s" -#: vrtManager/instance.py:593 +#: vrtManager/instance.py:607 msgid "" "Snapshot names are 1-64 letters, digits, '.', '_' or '-' and do not start " "with '.'" @@ -9096,7 +9105,7 @@ msgstr "" "Anlık görüntü adları 1-64 harf, rakam, '.', '_' veya '-' karakterinden oluşur" " ve '.' ile başlamaz" -#: vrtManager/instance.py:1081 +#: vrtManager/instance.py:1095 msgid "" "A device other than a disk or NIC is in the boot order: change it in the XML " "editor" @@ -9104,104 +9113,104 @@ msgstr "" "Önyükleme sırasında disk veya NIC dışında bir aygıt var: bunu XML " "düzenleyicide değiştirin" -#: vrtManager/instance.py:1093 +#: vrtManager/instance.py:1107 msgid "Invalid Device Type for boot order" msgstr "Ön yükleme sırası için geçersiz aygıt türü" -#: vrtManager/instance.py:1096 +#: vrtManager/instance.py:1110 #, python-format msgid "Boot device %(dev)s is not in the definition" msgstr "Ön yükleme aygıtı %(dev)s tanımda yok" -#: vrtManager/instance.py:1116 +#: vrtManager/instance.py:1130 #, python-format msgid "CD-ROM %(dev)s is not in the running definition" msgstr "CD-ROM %(dev)s çalışan tanımda yok" -#: vrtManager/instance.py:1117 +#: vrtManager/instance.py:1131 #, python-format msgid "CD-ROM %(dev)s is not in the persistent definition" msgstr "CD-ROM %(dev)s kalıcı tanımda yok" -#: vrtManager/instance.py:1129 +#: vrtManager/instance.py:1143 #, python-format msgid "Media of %(dev)s changed in the running VM only: %(err)s" msgstr "%(dev)s ortamı yalnızca çalışan sanal makinede değişti: %(err)s" -#: vrtManager/instance.py:1140 +#: vrtManager/instance.py:1154 #, python-format msgid "ISO image %(image)s was not found" msgstr "ISO imajı %(image)s bulunamadı" -#: vrtManager/instance.py:1142 +#: vrtManager/instance.py:1156 #, python-format msgid "ISO image %(image)s is in more than one storage pool" msgstr "ISO imajı %(image)s birden fazla depolama havuzunda var" -#: vrtManager/instance.py:1249 +#: vrtManager/instance.py:1263 #, python-format msgid "Disk %(target_dev)s is not in the VM's definition" msgstr "Disk %(target_dev)s sanal makinenin tanımında yok" -#: vrtManager/instance.py:1377 +#: vrtManager/instance.py:1391 msgid "Please shutdown the instance then try to enable vCPU hotplug" msgstr "" "vCPU hotplug özelliğini etkinleştirmek için önce sanal makineyi kapatın" -#: vrtManager/instance.py:1664 +#: vrtManager/instance.py:1678 msgid "The VM has no video card" msgstr "Sanal makinede ekran kartı yok" -#: vrtManager/instance.py:1838 +#: vrtManager/instance.py:1852 msgid "" "The VM has external snapshots; internal snapshots cannot be mixed with them" msgstr "" "Sanal makinenin harici anlık görüntüleri var; dahili anlık görüntüler " "bunlarla karıştırılamaz" -#: vrtManager/instance.py:1870 +#: vrtManager/instance.py:1884 msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgstr "" "Bellekli bir anlık görüntüde dosya sistemleri dondurulmaz; tüm konuk durumunu" " saklar" -#: vrtManager/instance.py:1872 +#: vrtManager/instance.py:1886 msgid "Only a running VM's file systems can be frozen" msgstr "Yalnızca çalışan bir sanal makinenin dosya sistemleri dondurulabilir" -#: vrtManager/instance.py:1874 +#: vrtManager/instance.py:1888 msgid "The QEMU guest agent is not connected; it freezes the file systems" msgstr "QEMU konuk aracısı bağlı değil; dosya sistemlerini o dondurur" -#: vrtManager/instance.py:1877 +#: vrtManager/instance.py:1891 msgid "" "The VM has internal snapshots; external snapshots cannot be mixed with them" msgstr "" "Sanal makinenin dahili anlık görüntüleri var; harici anlık görüntüler " "bunlarla karıştırılamaz" -#: vrtManager/instance.py:1882 +#: vrtManager/instance.py:1896 msgid "Newer snapshots exist after the last revert; delete them first" msgstr "" "Son geri dönüşten sonra daha yeni anlık görüntüler var; önce onları silin" -#: vrtManager/instance.py:1885 +#: vrtManager/instance.py:1899 msgid "No snapshot is current; revert to a snapshot first" msgstr "Geçerli anlık görüntü yok; önce bir anlık görüntüye geri dönün" -#: vrtManager/instance.py:1891 +#: vrtManager/instance.py:1905 #, python-format msgid "Eject the media from %(dev)s first" msgstr "Önce %(dev)s içindeki ortamı çıkarın" -#: vrtManager/instance.py:1893 +#: vrtManager/instance.py:1907 #, python-format msgid "Disk %(dev)s is not a file; external snapshots need file disks" msgstr "" "Disk %(dev)s bir dosya değil; harici anlık görüntüler dosya diskleri " "gerektirir" -#: vrtManager/instance.py:1901 +#: vrtManager/instance.py:1915 #, python-format msgid "" "The storage pools could not be refreshed, so their free space is unknown: " @@ -9209,21 +9218,21 @@ msgid "" msgstr "" "Depolama havuzları yenilenemedi, bu yüzden boş alanları bilinmiyor: %(err)s" -#: vrtManager/instance.py:1922 +#: vrtManager/instance.py:1936 msgid "Memory is saved only from a running VM" msgstr "Bellek yalnızca çalışan bir sanal makineden kaydedilir" -#: vrtManager/instance.py:1924 +#: vrtManager/instance.py:1938 msgid "The VM has no disk to keep its memory next to" msgstr "Sanal makinenin, belleğinin yanına kaydedileceği bir diski yok" -#: vrtManager/instance.py:1928 +#: vrtManager/instance.py:1942 #, python-format msgid "%(disk)s is not in a storage pool; memory is saved only into one" msgstr "" "%(disk)s bir depolama havuzunda değil; bellek yalnızca bir havuza kaydedilir" -#: vrtManager/instance.py:1959 +#: vrtManager/instance.py:1973 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " @@ -9234,7 +9243,7 @@ msgstr "" "%(size).1f GiB gerektiriyor (sanal makinenin oradaki disklerinin " "%%%(percent)g kadarı, en az %(minimum)g GiB, ve kaydediliyorsa bellek)" -#: vrtManager/instance.py:1977 +#: vrtManager/instance.py:1991 msgid "" "This snapshot was taken by an older version on a UEFI VM and cannot be " "reverted; delete it instead" @@ -9242,7 +9251,7 @@ msgstr "" "Bu anlık görüntü UEFI bir sanal makinede eski bir sürümle alındı ve geri " "dönülemez; bunun yerine silin" -#: vrtManager/instance.py:2007 +#: vrtManager/instance.py:2021 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is " @@ -9251,7 +9260,7 @@ msgstr "" "Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). " "Sanal makine çalışıyor." -#: vrtManager/instance.py:2009 +#: vrtManager/instance.py:2023 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is shut " @@ -9260,13 +9269,13 @@ msgstr "" "Geri dönüş iki kez başarısız oldu; biraz sonra tekrar deneyin (%(error)s). " "Sanal makine kapalı." -#: vrtManager/instance.py:2172 +#: vrtManager/instance.py:2186 msgid "A disk moves when its VM is defined and running, paused or shut off" msgstr "" "Bir disk, sanal makinesi tanımlıyken ve çalışırken, duraklatılmışken veya " "kapalıyken taşınır" -#: vrtManager/instance.py:2174 +#: vrtManager/instance.py:2188 msgid "" "A disk of a VM with snapshots, a saved state or a running block job does not " "move" @@ -9274,7 +9283,7 @@ msgstr "" "Anlık görüntüleri, kaydedilmiş durumu veya çalışan bir blok işi olan sanal " "makinenin diski taşınmaz" -#: vrtManager/instance.py:2182 +#: vrtManager/instance.py:2196 #, python-format msgid "" "%(dev)s is not a disk file of the VM, the same in its running and next " @@ -9283,132 +9292,132 @@ msgstr "" "%(dev)s, sanal makinenin çalışan ve sonraki başlatma tanımlarında aynı olan " "bir disk dosyası değil" -#: vrtManager/instance.py:2187 +#: vrtManager/instance.py:2201 #, python-format msgid "%(dev)s does not move: only writable raw and qcow2 disks do" msgstr "%(dev)s taşınmaz: yalnızca yazılabilir raw ve qcow2 diskler taşınır" -#: vrtManager/instance.py:2194 +#: vrtManager/instance.py:2208 #, python-format msgid "%(dev)s does not move: no storage pool has %(path)s" msgstr "%(dev)s taşınmaz: hiçbir depolama havuzunda %(path)s yok" -#: vrtManager/instance.py:2196 +#: vrtManager/instance.py:2210 #, python-format msgid "%(dev)s does not move: it has a backing file" msgstr "%(dev)s taşınmaz: temel (backing) dosyası var" -#: vrtManager/instance.py:2199 +#: vrtManager/instance.py:2213 #, python-format msgid "%(pool_name)s is not an active pool of disk files of this host" msgstr "%(pool_name)s bu sunucunun etkin bir disk dosyası havuzu değil" -#: vrtManager/instance.py:2202 +#: vrtManager/instance.py:2216 #, python-format msgid "%(dev)s is in pool %(pool_name)s already" msgstr "%(dev)s zaten %(pool_name)s havuzunda" -#: vrtManager/instance.py:2206 +#: vrtManager/instance.py:2220 #, python-format msgid "Pool %(pool_name)s already has a file %(name)s" msgstr "%(pool_name)s havuzunda zaten %(name)s dosyası var" -#: vrtManager/instance.py:2230 +#: vrtManager/instance.py:2244 #, python-format msgid "The copy of %(dev)s ended before it was complete" msgstr "%(dev)s kopyası tamamlanmadan sona erdi" -#: vrtManager/instance.py:2275 +#: vrtManager/instance.py:2289 #, python-format msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s" msgstr "%(error)s; varsa %(dest)s dosyasını kaldırın: %(cleanup_error)s" -#: vrtManager/instance.py:2277 +#: vrtManager/instance.py:2291 #, python-format msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s" msgstr "" "%(error)s; sanal makine şu anda %(dest)s dosyasını kullanıyor olabilir: " "%(dev)s diskini kontrol edin" -#: vrtManager/instance.py:2284 +#: vrtManager/instance.py:2298 #, python-format msgid "The VM has no internal snapshot named %(name)s" msgstr "Sanal makinenin %(name)s adlı dahili anlık görüntüsü yok" -#: vrtManager/instance.py:2293 +#: vrtManager/instance.py:2307 msgid "The VM has a saved state; start it or remove the saved state first" msgstr "" "Sanal makinenin kaydedilmiş durumu var; önce başlatın veya kaydedilmiş durumu" " kaldırın" -#: vrtManager/instance.py:2295 +#: vrtManager/instance.py:2309 msgid "A snapshot job is still running on this VM; try again when it ends" msgstr "" "Bu sanal makinede hâlâ bir anlık görüntü işi çalışıyor; bittiğinde tekrar " "deneyin" -#: vrtManager/instance.py:2305 +#: vrtManager/instance.py:2319 msgid "Shut the VM down to revert to an internal snapshot" msgstr "Dahili bir anlık görüntüye geri dönmek için sanal makineyi kapatın" -#: vrtManager/instance.py:2403 +#: vrtManager/instance.py:2417 msgid "Cannot clone a VM whose NVRAM is not a file" msgstr "NVRAM'i dosya olmayan bir sanal makine klonlanamaz" -#: vrtManager/instance.py:2471 +#: vrtManager/instance.py:2485 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgstr "" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(path)s" -#: vrtManager/instance.py:2481 +#: vrtManager/instance.py:2495 msgid "Shut the VM down before cloning it" msgstr "Klonlamadan önce sanal makineyi kapatın" -#: vrtManager/instance.py:2535 +#: vrtManager/instance.py:2549 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgstr "" "Klonlama başarısız oldu (%(err)s); bu kopyaları elle kaldırın: %(leftovers)s" -#: vrtManager/instance.py:2546 +#: vrtManager/instance.py:2560 msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgstr "" "Canlı klonlama libvirt 11.10 veya sonrasını gerektirir; klonlamak için sanal " "makineyi kapatın" -#: vrtManager/instance.py:2549 +#: vrtManager/instance.py:2563 msgid "A VM with a TPM is cloned only shut down" msgstr "TPM'i olan bir sanal makine yalnızca kapalıyken klonlanır" -#: vrtManager/instance.py:2552 +#: vrtManager/instance.py:2566 #, python-format msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgstr "" "Disk %(dev)s yerel bir dosya değil; klonlamak için sanal makineyi kapatın" -#: vrtManager/instance.py:2554 +#: vrtManager/instance.py:2568 #, python-format msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgstr "Disk %(dev)s paylaşılabilir; klonlamak için sanal makineyi kapatın" -#: vrtManager/instance.py:2559 +#: vrtManager/instance.py:2573 #, python-format msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgstr "" "Disk %(dev)s sonraki başlatmada değişiyor; klonlamak için sanal makineyi " "kapatın" -#: vrtManager/instance.py:2561 +#: vrtManager/instance.py:2575 msgid "Another job is running on the VM; clone it when that ends" msgstr "Sanal makinede başka bir iş çalışıyor; o bittiğinde klonlayın" -#: vrtManager/instance.py:2574 +#: vrtManager/instance.py:2588 #, python-format msgid "Volume %(name)s already exists in storage pool %(pool)s" msgstr "%(name)s birimi %(pool)s depolama havuzunda zaten var" -#: vrtManager/instance.py:2593 +#: vrtManager/instance.py:2607 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" @@ -9418,20 +9427,20 @@ msgstr "" "gerektiriyor (kopyalanan diskler, artı bunların %%%(percent)g kadarı, en az " "%(minimum)g GiB)" -#: vrtManager/instance.py:2732 +#: vrtManager/instance.py:2746 msgid "A network interface that is a host device is removed in the XML editor" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide kaldırılır" -#: vrtManager/instance.py:2748 +#: vrtManager/instance.py:2762 #, python-format msgid "No network interface with MAC %(old_mac)s" msgstr "MAC adresi %(old_mac)s olan ağ arabirimi yok" -#: vrtManager/instance.py:2751 +#: vrtManager/instance.py:2765 msgid "A network interface that is a host device is changed in the XML editor" msgstr "Sunucu aygıtı olan bir ağ arabirimi XML düzenleyicide değiştirilir" -#: vrtManager/instance.py:2842 +#: vrtManager/instance.py:2856 msgid "" "A VM changes its PCI devices while it runs, or is shut off without a saved " "state" @@ -9439,14 +9448,14 @@ msgstr "" "Sanal makine PCI aygıtlarını çalışırken veya kaydedilmiş durumu olmadan " "kapalıyken değiştirir" -#: vrtManager/instance.py:2854 +#: vrtManager/instance.py:2868 #, python-format msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgstr "" "%(err)s; sanal makinede şu anda %(address)s PCI aygıtının olup olmadığı " "bilinmiyor" -#: vrtManager/instance.py:2856 +#: vrtManager/instance.py:2870 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it" @@ -9454,7 +9463,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "var" -#: vrtManager/instance.py:2858 +#: vrtManager/instance.py:2872 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start does " @@ -9463,7 +9472,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: sanal makine çalışmıyor, sonraki başlatmada " "yok" -#: vrtManager/instance.py:2859 +#: vrtManager/instance.py:2873 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it" @@ -9471,7 +9480,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "başlatmada var" -#: vrtManager/instance.py:2861 +#: vrtManager/instance.py:2875 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start does " @@ -9480,7 +9489,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede var, sonraki " "başlatmada yok" -#: vrtManager/instance.py:2863 +#: vrtManager/instance.py:2877 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " @@ -9489,7 +9498,7 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "başlatmada var" -#: vrtManager/instance.py:2865 +#: vrtManager/instance.py:2879 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " @@ -9498,34 +9507,34 @@ msgstr "" "%(err)s; PCI aygıtı %(address)s: çalışan sanal makinede yok, sonraki " "başlatmada yok" -#: vrtManager/instance.py:2899 +#: vrtManager/instance.py:2913 #, python-format msgid "The VM has no PCI device %(address)s" msgstr "Sanal makinede %(address)s PCI aygıtı yok" -#: vrtManager/instance.py:2917 +#: vrtManager/instance.py:2931 msgid "The VM has no USB controller" msgstr "Sanal makinede USB denetleyicisi yok" -#: vrtManager/instance.py:2936 +#: vrtManager/instance.py:2950 msgid "The VM has no such USB device" msgstr "Sanal makinede böyle bir USB aygıtı yok" -#: vrtManager/instance.py:2950 +#: vrtManager/instance.py:2964 #, python-format msgid "The VM has no network interface %(mac)s" msgstr "Sanal makinede %(mac)s ağ arabirimi yok" -#: vrtManager/instance.py:2981 +#: vrtManager/instance.py:2995 msgid "The VM has its own RNG device: change it in the XML editor" msgstr "" "Sanal makinenin kendi RNG aygıtı var: bunu XML düzenleyicide değiştirin" -#: vrtManager/instance.py:3008 +#: vrtManager/instance.py:3022 msgid "The VM has its own TPM: change it in the XML editor" msgstr "Sanal makinenin kendi TPM'i var: bunu XML düzenleyicide değiştirin" -#: vrtManager/instance.py:3027 +#: vrtManager/instance.py:3041 #, python-format msgid "Unknown crash action %(action)s" msgstr "Bilinmeyen çökme eylemi %(action)s" diff --git a/locale/zh/LC_MESSAGES/django.mo b/locale/zh/LC_MESSAGES/django.mo index f976d9ab781922a09f7ca529e63affd32e28250b..64d26c988e95aee403b28c33e6e8841fe5fc7b07 100644 GIT binary patch delta 38150 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 delta 37998 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 epu5Yq %(limit)s)" msgstr "%(quota)s(%(total)s > %(limit)s)" -#: instances/utils.py:199 +#: instances/utils.py:229 msgid "None available device name" msgstr "没有可用的设备名称" -#: instances/utils.py:406 +#: instances/utils.py:434 #, python-format msgid "%(hostname)s via %(address)s" msgstr "%(hostname)s,经由 %(address)s" -#: instances/utils.py:445 +#: instances/utils.py:473 msgid "Invalid MAC address" msgstr "无效的 MAC 地址" -#: instances/utils.py:447 +#: instances/utils.py:475 msgid "More MAC addresses than networks" msgstr "MAC 地址数量多于网络数量" -#: instances/views.py:173 +#: instances/views.py:167 msgid "Enter an IP address, a network such as 192.0.2.0/24, or a MAC address." msgstr "请输入 IP 地址、网络(如 192.0.2.0/24)或 MAC 地址。" -#: instances/views.py:179 instances/views.py:213 +#: instances/views.py:173 instances/views.py:207 msgid "Too many searches are still running; try again shortly." msgstr "仍在运行的搜索过多;请稍后再试。" -#: instances/views.py:261 +#: instances/views.py:255 #, python-format msgid "The host %(host)s of '%(name)s' cannot be reached: %(error)s" msgstr "无法连接“%(name)s”所在的主机 %(host)s:%(error)s" -#: instances/views.py:267 +#: instances/views.py:261 #, python-format msgid "The host of '%(name)s' cannot be reached right now." msgstr "目前无法连接“%(name)s”所在的主机。" -#: instances/views.py:268 +#: instances/views.py:262 msgid " Jobs on it can be followed under Jobs in the menu." msgstr " 其上的任务可在菜单的“任务”中跟踪。" -#: instances/views.py:276 +#: instances/views.py:270 #, python-format msgid "'%(name)s' is no longer on its host." msgstr "“%(name)s”已不在其主机上。" -#: instances/views.py:373 +#: instances/views.py:367 msgid "There is no other host to migrate to." msgstr "没有其他可迁移到的主机。" -#: instances/views.py:375 +#: instances/views.py:369 msgid "A VM migrates when it is running, paused or shut off." msgstr "虚拟机在运行、暂停或关机状态下均可迁移。" -#: instances/views.py:377 +#: instances/views.py:371 msgid "" "A VM with snapshots cannot be migrated: its snapshots stay on this host. " "Delete them first." msgstr "有快照的虚拟机无法迁移:其快照保留在本主机上。请先删除快照。" -#: instances/views.py:379 +#: instances/views.py:373 msgid "" "A VM with host devices cannot be migrated: the destination may not have them." " Remove them first." msgstr "有主机设备的虚拟机无法迁移:目标主机可能没有这些设备。请先移除它们。" -#: instances/views.py:654 instances/views.py:655 +#: instances/views.py:648 instances/views.py:649 msgid "The VM was moved meanwhile; try again." msgstr "该虚拟机在此期间已被移动;请重试。" -#: instances/views.py:771 +#: instances/views.py:765 msgid "" "The running VM has no free PCI slot for another disk on this bus: choose the " "scsi bus if the VM has a SCSI controller, or shut the VM down and add the " @@ -5689,7 +5689,7 @@ msgstr "" "运行中的虚拟机在此总线上没有可用 PCI 插槽来添加磁盘:如果虚拟机有 SCSI 控制器,请选择 scsi " "总线;或关闭虚拟机后再添加磁盘。“磁盘”选项卡上的“添加 PCIe 插槽”可使其从下次启动起获得可用插槽。新卷会保留在其存储池中,可作为现有卷挂载。" -#: instances/views.py:775 +#: instances/views.py:769 msgid "" "The running VM has no free PCI slot for the SCSI controller the disk needs: " "shut the VM down and add the disk then; Add PCIe slots on the Disks tab gives" @@ -5699,258 +5699,258 @@ msgstr "" "运行中的虚拟机没有可用 PCI 插槽来添加磁盘所需的 SCSI 控制器:请关闭虚拟机后再添加磁盘。“磁盘”选项卡上的“添加 PCIe " "插槽”可使其从下次启动起获得可用插槽。新卷会保留在其存储池中,可作为现有卷挂载。" -#: instances/views.py:793 +#: instances/views.py:787 #, python-format msgid "Invalid disk options: %(options)s" msgstr "无效的磁盘选项:%(options)s" -#: instances/views.py:1010 +#: instances/views.py:1004 #, python-format msgid "Set the gstfsd key of %(compute)s first (Computes, edit the host)" msgstr "请先设置 %(compute)s 的 gstfsd 密钥(计算节点,编辑该主机)" -#: instances/views.py:1017 instances/views.py:1035 instances/views.py:1044 +#: instances/views.py:1011 instances/views.py:1029 instances/views.py:1038 #, python-format msgid "gstfsd error: %(err)s" msgstr "gstfsd 错误:%(err)s" -#: instances/views.py:1045 +#: instances/views.py:1039 msgid "the reply is not signed with the key" msgstr "回复未使用该密钥签名" -#: instances/views.py:1053 +#: instances/views.py:1047 msgid "Shut the VM down, or start its QEMU guest agent, and try again" msgstr "请关闭虚拟机,或启动其 QEMU 客户机代理,然后重试" -#: instances/views.py:1066 +#: instances/views.py:1060 msgid "The change may still be made when the agent answers again." msgstr "当代理再次响应时,此更改仍可能生效。" -#: instances/views.py:1094 +#: instances/views.py:1088 msgid "Reset root password" msgstr "重置 root 密码" -#: instances/views.py:1098 +#: instances/views.py:1092 msgid "Enter a password" msgstr "请输入密码" -#: instances/views.py:1112 +#: instances/views.py:1106 msgid "Select an SSH public key" msgstr "请选择 SSH 公钥" -#: instances/views.py:1134 +#: instances/views.py:1128 #, python-format msgid "Installed new SSH public key %(keyname)s" msgstr "已安装新的 SSH 公钥 %(keyname)s" -#: instances/views.py:1154 +#: instances/views.py:1148 msgid "Enter a whole number of vCPUs" msgstr "请输入整数个 vCPU" -#: instances/views.py:1158 +#: instances/views.py:1152 msgid "Shut off the VM to change its vCPUs" msgstr "请关闭虚拟机以更改其 vCPU" -#: instances/views.py:1161 +#: instances/views.py:1155 msgid "The current vCPUs cannot be more than the maximum" msgstr "当前 vCPU 数不能超过最大值" -#: instances/views.py:1168 +#: instances/views.py:1162 #, python-format msgid "%(quota)s: cannot resize the CPU of '%(instance_name)s'." msgstr "%(quota)s:无法调整“%(instance_name)s”的 CPU。" -#: instances/views.py:1176 +#: instances/views.py:1170 #, python-format msgid "vCPUs set to %(cur)s (maximum %(max)s)" msgstr "vCPU 已设为 %(cur)s(最大 %(max)s)" -#: instances/views.py:1195 +#: instances/views.py:1189 msgid "Enter a whole number for memory" msgstr "请输入整数内存值" -#: instances/views.py:1198 +#: instances/views.py:1192 msgid "The current memory cannot be more than the maximum" msgstr "当前内存不能超过最大值" -#: instances/views.py:1202 +#: instances/views.py:1196 #, python-format msgid "%(quota)s: cannot resize the memory of '%(instance_name)s'." msgstr "%(quota)s:无法调整“%(instance_name)s”的内存。" -#: instances/views.py:1208 +#: instances/views.py:1202 #, python-format msgid "Memory set to %(cur)s MiB (maximum %(max)s MiB)" msgstr "内存已设为 %(cur)s MiB(最大 %(max)s MiB)" -#: instances/views.py:1228 +#: instances/views.py:1222 msgid "Enter disk sizes as whole GiB" msgstr "请以整数 GiB 输入磁盘大小" -#: instances/views.py:1232 +#: instances/views.py:1226 #, python-format msgid "%(dev)s is %(size)s: a disk cannot shrink" msgstr "%(dev)s 为 %(size)s:磁盘不能缩小" -#: instances/views.py:1240 +#: instances/views.py:1234 msgid "No disks were selected or valid for resizing." msgstr "未选择磁盘或没有可调整大小的有效磁盘。" -#: instances/views.py:1249 +#: instances/views.py:1243 #, python-format msgid "%(quota)s: cannot resize the disks of '%(instance_name)s'." msgstr "%(quota)s:无法调整“%(instance_name)s”的磁盘。" -#: instances/views.py:1261 +#: instances/views.py:1255 #, python-format msgid "The storage pool of %(dev)s cannot resize its volumes" msgstr "%(dev)s 所在的存储池无法调整其卷的大小" -#: instances/views.py:1263 +#: instances/views.py:1257 #, python-format msgid "Disk is resized: %(dev)s" msgstr "磁盘已调整大小:%(dev)s" -#: instances/views.py:1357 +#: instances/views.py:1351 msgid "The VM's machine has no PCIe slots to add" msgstr "该虚拟机的机器类型没有可添加的 PCIe 插槽" -#: instances/views.py:1362 +#: instances/views.py:1356 #, python-format msgid "%(count)s PCIe slots added" msgstr "已添加 %(count)s 个 PCIe 插槽" -#: instances/views.py:1364 +#: instances/views.py:1358 #, python-format msgid "%(count)s PCIe slots added: the VM gets them at its next start" msgstr "已添加 %(count)s 个 PCIe 插槽:虚拟机在下次启动时获得它们" -#: instances/views.py:1410 +#: instances/views.py:1404 #, python-format msgid "%(volume)s is already a disk of this VM" msgstr "%(volume)s 已是此虚拟机的磁盘" -#: instances/views.py:1500 +#: instances/views.py:1494 msgid "Volume changes are applied. But it will be activated after shutdown" msgstr "卷更改已应用,但将在关机后生效" -#: instances/views.py:1505 +#: instances/views.py:1499 msgid "Volume is changed successfully." msgstr "卷已成功更改。" -#: instances/views.py:1523 +#: instances/views.py:1517 #, python-format msgid "Disk %(dev)s is not a storage volume of this instance" msgstr "磁盘 %(dev)s 不是此虚拟机的存储卷" -#: instances/views.py:1530 +#: instances/views.py:1524 #, python-format msgid "Disk %(dev)s has a pending change; delete it once the VM is shut down" msgstr "磁盘 %(dev)s 有待生效的更改;请在虚拟机关机后删除它" -#: instances/views.py:1545 +#: instances/views.py:1539 #, python-format msgid "Volume %(vol)s is used by another VM; detach it instead" msgstr "卷 %(vol)s 正被另一台虚拟机使用;请改为分离它" -#: instances/views.py:1557 +#: instances/views.py:1551 #, python-format msgid "" "The guest has not released disk %(dev)s yet; volume %(vol)s was kept. Delete " "it from the storage pool once the VM is shut down." msgstr "客户机尚未释放磁盘 %(dev)s;卷 %(vol)s 已保留。请在虚拟机关机后从存储池中删除它。" -#: instances/views.py:1568 +#: instances/views.py:1562 #, python-format msgid "Disk %(dev)s was detached, but its volume was kept: %(err)s" msgstr "磁盘 %(dev)s 已分离,但其卷已保留:%(err)s" -#: instances/views.py:1594 +#: instances/views.py:1588 #, python-format msgid "This VM cannot take a CD-ROM on the %(bus)s bus now" msgstr "该虚拟机现在无法在 %(bus)s 总线上添加 CD-ROM" -#: instances/views.py:1597 +#: instances/views.py:1591 msgid "A USB CD-ROM needs an ISO image: libvirt has no empty USB drive" msgstr "USB CD-ROM 需要 ISO 镜像:libvirt 不支持空的 USB 驱动器" -#: instances/views.py:1602 +#: instances/views.py:1596 #, python-format msgid "%(image)s is already in a CD-ROM of this VM" msgstr "%(image)s 已在此虚拟机的某个光驱中" -#: instances/views.py:1683 +#: instances/views.py:1677 #, python-format msgid "Pool %(pool)s was not read again: %(err)s" msgstr "未重新读取存储池 %(pool)s:%(err)s" -#: instances/views.py:1704 +#: instances/views.py:1698 #, python-format msgid "Snapshot was not deleted: %(err)s" msgstr "快照未删除:%(err)s" -#: instances/views.py:1819 +#: instances/views.py:1813 msgid "Add at least one device to the boot order." msgstr "请至少向启动顺序中添加一个设备。" -#: instances/views.py:1833 +#: instances/views.py:1827 msgid "Boot order changed. It applies at the next start." msgstr "启动顺序已更改,将在下次启动时生效。" -#: instances/views.py:1835 +#: instances/views.py:1829 msgid "Boot order changed successfully." msgstr "启动顺序已成功更改。" -#: instances/views.py:1855 +#: instances/views.py:1849 msgid "The XML is empty" msgstr "XML 为空" -#: instances/views.py:1859 instances/views.py:2484 +#: instances/views.py:1853 instances/views.py:2478 #, python-format msgid "The XML is not well-formed: %(error)s" msgstr "XML 格式不正确:%(error)s" -#: instances/views.py:1861 +#: instances/views.py:1855 #, python-format msgid "The XML must keep the VM's UUID %(uuid)s." msgstr "XML 必须保留虚拟机的 UUID %(uuid)s。" -#: instances/views.py:1865 +#: instances/views.py:1859 msgid "" "The definition has changed since the editor was opened. Reload the page to " "edit the current one." msgstr "自打开编辑器以来定义已被更改。请重新加载页面以编辑当前定义。" -#: instances/views.py:1877 +#: instances/views.py:1871 msgid "The XML definition was saved." msgstr "XML 定义已保存。" -#: instances/views.py:1879 +#: instances/views.py:1873 msgid "The XML definition was saved; the VM uses it from its next start." msgstr "XML 定义已保存;虚拟机从下次启动起使用它。" -#: instances/views.py:1960 +#: instances/views.py:1954 msgid "Select one network interface to change" msgstr "请选择一个要更改的网络接口" -#: instances/views.py:1998 +#: instances/views.py:1992 msgid "Network Device Config is changed. Please shutdown instance to activate." msgstr "网络设备配置已更改。请关闭虚拟机以使其生效。" -#: instances/views.py:2000 +#: instances/views.py:1994 msgid "Network device changed" msgstr "网络设备已更改" -#: instances/views.py:2012 +#: instances/views.py:2006 msgid "No network selected" msgstr "未选择网络" -#: instances/views.py:2017 +#: instances/views.py:2011 #, python-format msgid "The VM already has a network device with MAC %(mac)s" msgstr "虚拟机已有 MAC 地址为 %(mac)s 的网络设备" -#: instances/views.py:2036 +#: instances/views.py:2030 msgid "" "The running VM has no free PCI slot for another network device: shut it down " "and add the device then; Add PCIe slots on the Disks tab gives it free ones " @@ -5958,131 +5958,131 @@ msgid "" msgstr "" "运行中的虚拟机没有可用 PCI 插槽来添加网络设备:请关机后再添加设备。“磁盘”选项卡上的“添加 PCIe 插槽”可使其从下次启动起获得可用插槽。" -#: instances/views.py:2077 instances/views.py:2083 +#: instances/views.py:2071 instances/views.py:2077 msgid "The VM has it" msgstr "虚拟机已有此设备" -#: instances/views.py:2114 +#: instances/views.py:2108 #, python-format msgid "The host has no USB device %(device)s" msgstr "主机上没有 USB 设备 %(device)s" -#: instances/views.py:2135 +#: instances/views.py:2129 #, python-format msgid "The host has no PCI device %(device)s" msgstr "主机上没有 PCI 设备 %(device)s" -#: instances/views.py:2153 +#: instances/views.py:2147 #, python-format msgid "" "Removal of PCI device %(address)s requested: the guest has not let it go yet;" " it stays in the running VM until it does or the VM stops." msgstr "已请求移除 PCI 设备 %(address)s:客户机尚未释放它;在客户机释放或虚拟机停止之前,它仍保留在运行中的虚拟机中。" -#: instances/views.py:2198 instances/views.py:2228 +#: instances/views.py:2192 instances/views.py:2222 msgid "Select a network interface and a QoS direction" msgstr "请选择网络接口和 QoS 方向" -#: instances/views.py:2201 vrtManager/network.py:454 +#: instances/views.py:2195 vrtManager/network.py:454 msgid "QoS rates must be whole numbers" msgstr "QoS 速率必须为整数" -#: instances/views.py:2208 networks/views.py:230 +#: instances/views.py:2202 networks/views.py:230 #, python-format msgid "%(qos_dir)s QoS is set" msgstr "%(qos_dir)s QoS 已设置" -#: instances/views.py:2213 +#: instances/views.py:2207 #, python-format msgid "" "%(qos_dir)s QoS is set. A running VM gets it after it is powered off and on." msgstr "%(qos_dir)s QoS 已设置。运行中的虚拟机需关机再开机后才能生效。" -#: instances/views.py:2235 networks/views.py:256 +#: instances/views.py:2229 networks/views.py:256 #, python-format msgid "%(qos_dir)s QoS is deleted" msgstr "%(qos_dir)s QoS 已删除" -#: instances/views.py:2240 +#: instances/views.py:2234 #, python-format msgid "" "%(qos_dir)s QoS is deleted. A running VM keeps the old limit until it is " "powered off and on." msgstr "%(qos_dir)s QoS 已删除。运行中的虚拟机在关机再开机之前保留旧的限制。" -#: instances/views.py:2268 +#: instances/views.py:2262 msgid "Only one owner is allowed and the one already added" msgstr "只允许一个所有者,且已添加" -#: instances/views.py:2270 +#: instances/views.py:2264 #, python-format msgid "%(user)s is already an owner" msgstr "%(user)s 已是所有者" -#: instances/views.py:2315 +#: instances/views.py:2309 #, python-format msgid "Console settings were not saved: %(errors)s" msgstr "控制台设置未保存:%(errors)s" -#: instances/views.py:2337 +#: instances/views.py:2331 msgid "" "Error setting console password. You should check that your instance have an " "graphic device." msgstr "设置控制台密码出错。请检查虚拟机是否有图形设备。" -#: instances/views.py:2384 +#: instances/views.py:2378 msgid "Shut the VM down to change whether it is a template." msgstr "请关闭虚拟机以更改其是否为模板。" -#: instances/views.py:2390 +#: instances/views.py:2384 #, python-format msgid "%(quota)s: '%(instance_name)s' stays a template." msgstr "%(quota)s:“%(instance_name)s”仍为模板。" -#: instances/views.py:2472 +#: instances/views.py:2466 msgid "The XML has no name" msgstr "XML 中没有名称" -#: instances/views.py:2486 webvirtcloud/middleware.py:156 +#: instances/views.py:2480 webvirtcloud/middleware.py:156 #, python-format msgid "libvirt Error - %(exception)s" msgstr "libvirt 错误 - %(exception)s" -#: instances/views.py:2493 +#: instances/views.py:2487 msgid "An empty disk of the size you set" msgstr "按设定大小创建的空磁盘" -#: instances/views.py:2494 +#: instances/views.py:2488 msgid "Volumes already in a pool" msgstr "存储池中已有的卷" -#: instances/views.py:2495 +#: instances/views.py:2489 msgid "A copy of a template volume" msgstr "模板卷的副本" -#: instances/views.py:2584 +#: instances/views.py:2578 msgid "" "This host has no running storage pool for the VM's disks: add or start one on" " its Storage page." msgstr "此主机没有可用于虚拟机磁盘的运行中存储池:请在其“存储”页面添加或启动一个。" -#: instances/views.py:2586 +#: instances/views.py:2580 msgid "This host has no network for the VM: add one on its Networks page." msgstr "此主机没有可供虚拟机使用的网络:请在其“网络”页面添加一个。" -#: instances/views.py:2649 +#: instances/views.py:2643 msgid "Flavor Created" msgstr "规格已创建" -#: instances/views.py:2657 +#: instances/views.py:2651 msgid "Create Flavor" msgstr "创建规格" -#: instances/views.py:2669 +#: instances/views.py:2663 msgid "Flavor Deleted" msgstr "规格已删除" -#: instances/views.py:2675 +#: instances/views.py:2669 msgid "Only the size template goes; VMs made from it keep their size." msgstr "仅删除此规格;由它创建的虚拟机保持其大小。" @@ -8456,274 +8456,281 @@ msgstr "连接失败:%(host)s 未连接" msgid "This host has no architecture %(arch)s" msgstr "此主机没有 %(arch)s 架构" -#: vrtManager/instance.py:138 +#: vrtManager/instance.py:140 msgid "A running or paused VM cannot be migrated offline" msgstr "运行中或已暂停的虚拟机不能离线迁移" -#: vrtManager/instance.py:141 +#: vrtManager/instance.py:143 msgid "The VM can be migrated when it is running, paused or shut off" msgstr "虚拟机在运行、暂停或关机时可以迁移" -#: vrtManager/instance.py:164 +#: vrtManager/instance.py:166 msgid "A VM with snapshots cannot be migrated" msgstr "有快照的虚拟机不能迁移" -#: vrtManager/instance.py:167 +#: vrtManager/instance.py:169 msgid "A VM with a saved state cannot be migrated" msgstr "有保存的状态的虚拟机不能迁移" -#: vrtManager/instance.py:174 +#: vrtManager/instance.py:176 msgid "A VM with host devices cannot be migrated; remove them first" msgstr "有主机设备的虚拟机不能迁移;请先移除它们" -#: vrtManager/instance.py:180 +#: vrtManager/instance.py:182 #, python-format msgid "The destination host does not have these disks of the VM: %(disks)s" msgstr "目标主机没有该虚拟机的这些磁盘:%(disks)s" -#: vrtManager/instance.py:181 +#: vrtManager/instance.py:183 #, python-format msgid "%(target)s (%(source)s)" msgstr "%(target)s(%(source)s)" -#: vrtManager/instance.py:189 +#: vrtManager/instance.py:191 msgid "Destination host emulator is different. Cannot be migrated" msgstr "目标主机的模拟器不同,无法迁移" -#: vrtManager/instance.py:320 +#: vrtManager/instance.py:325 msgid "an image is not copied; eject it first" msgstr "镜像不会被复制;请先弹出它" -#: vrtManager/instance.py:323 +#: vrtManager/instance.py:328 msgid "a read-only or encrypted disk is not copied" msgstr "只读或加密的磁盘不会被复制" -#: vrtManager/instance.py:326 +#: vrtManager/instance.py:331 msgid "only raw and qcow2 disks are copied" msgstr "只复制 raw 和 qcow2 磁盘" -#: vrtManager/instance.py:328 +#: vrtManager/instance.py:333 msgid "no storage pool of the source host has it" msgstr "源主机的任何存储池中都没有它" -#: vrtManager/instance.py:330 +#: vrtManager/instance.py:335 msgid "a disk with a backing file is not copied" msgstr "有后备文件的磁盘不会被复制" -#: vrtManager/instance.py:350 +#: vrtManager/instance.py:355 #, python-format msgid "" "%(target)s (%(path)s): the destination host does not share it; choose a pool " "to copy it to" msgstr "%(target)s (%(path)s):目标主机不共享它;请选择要复制到的存储池" -#: vrtManager/instance.py:354 +#: vrtManager/instance.py:359 #, python-format msgid "%(target)s (%(path)s): %(refusal)s" msgstr "%(target)s (%(path)s):%(refusal)s" -#: vrtManager/instance.py:359 +#: vrtManager/instance.py:364 #, python-format msgid "" "%(target)s (%(path)s): the destination host has no pool %(pool)s for disk " "files" msgstr "%(target)s (%(path)s):目标主机没有用于磁盘文件的存储池 %(pool)s" -#: vrtManager/instance.py:366 +#: vrtManager/instance.py:371 #, python-format msgid "" "%(target)s (%(path)s): pool %(pool)s of the destination host already has a " "file %(file)s" msgstr "%(target)s (%(path)s):目标主机的存储池 %(pool)s 中已有文件 %(file)s" -#: vrtManager/instance.py:370 +#: vrtManager/instance.py:375 #, python-format msgid "%(target)s (%(path)s): another disk is copied to %(dest)s" msgstr "%(target)s (%(path)s):另一个磁盘已复制到 %(dest)s" -#: vrtManager/instance.py:375 +#: vrtManager/instance.py:380 #, python-format msgid "%(target)s: the VM has no disk file to copy" msgstr "%(target)s:虚拟机没有可复制的磁盘文件" -#: vrtManager/instance.py:379 +#: vrtManager/instance.py:384 #, python-format msgid "" "%(target)s (%(path)s) of the next start: the destination host does not share " "it" msgstr "下次启动的 %(target)s (%(path)s):目标主机不共享它" -#: vrtManager/instance.py:383 +#: vrtManager/instance.py:388 #, python-format msgid "The disks cannot be migrated: %(problems)s" msgstr "磁盘无法迁移:%(problems)s" -#: vrtManager/instance.py:396 +#: vrtManager/instance.py:401 #, python-format msgid "" "%(error)s; remove the partial disk copies from the destination host: " "%(copies)s" msgstr "%(error)s;请从目标主机删除不完整的磁盘副本:%(copies)s" -#: vrtManager/instance.py:413 +#: vrtManager/instance.py:418 #, python-format msgid "" "%(error)s; remove the partial disk copies from the destination host: %(left)s" msgstr "%(error)s;请从目标主机删除不完整的磁盘副本:%(left)s" -#: vrtManager/instance.py:430 +#: vrtManager/instance.py:432 +#, python-format +msgid "" +"The NVRAM file %(path)s is not in libvirt's NVRAM directory %(dir)s and " +"cannot be copied" +msgstr "NVRAM 文件 %(path)s 不在 libvirt 的 NVRAM 目录 %(dir)s 中,无法复制" + +#: vrtManager/instance.py:441 #, python-format msgid "The destination host cannot see the NVRAM file %(path)s" msgstr "目标主机看不到 NVRAM 文件 %(path)s" -#: vrtManager/instance.py:503 +#: vrtManager/instance.py:517 #, python-format msgid "%(type)s disk, cannot be checked" msgstr "%(type)s 磁盘,无法检查" -#: vrtManager/instance.py:543 +#: vrtManager/instance.py:557 #, python-format msgid "The destination host already has a VM %(key)s" msgstr "目标主机上已有虚拟机 %(key)s" -#: vrtManager/instance.py:565 +#: vrtManager/instance.py:579 msgid "The VM was started on the source host during the migration" msgstr "迁移期间虚拟机在源主机上被启动" -#: vrtManager/instance.py:581 +#: vrtManager/instance.py:595 #, python-format msgid "" "%(error)s; the VM may now be defined only on the destination host: check both" " hosts" msgstr "%(error)s;虚拟机现在可能只在目标主机上定义:请检查两台主机" -#: vrtManager/instance.py:587 +#: vrtManager/instance.py:601 #, python-format msgid "" "%(error)s; the VM is now defined on both hosts, remove it from the " "destination: %(undo_error)s" msgstr "%(error)s;虚拟机现在在两台主机上都有定义,请从目标主机删除它:%(undo_error)s" -#: vrtManager/instance.py:593 +#: vrtManager/instance.py:607 msgid "" "Snapshot names are 1-64 letters, digits, '.', '_' or '-' and do not start " "with '.'" msgstr "快照名称为 1-64 个字母、数字、'.'、'_' 或 '-',且不能以 '.' 开头" -#: vrtManager/instance.py:1081 +#: vrtManager/instance.py:1095 msgid "" "A device other than a disk or NIC is in the boot order: change it in the XML " "editor" msgstr "启动顺序中有磁盘或网卡以外的设备:请在 XML 编辑器中修改" -#: vrtManager/instance.py:1093 +#: vrtManager/instance.py:1107 msgid "Invalid Device Type for boot order" msgstr "启动顺序的设备类型无效" -#: vrtManager/instance.py:1096 +#: vrtManager/instance.py:1110 #, python-format msgid "Boot device %(dev)s is not in the definition" msgstr "启动设备 %(dev)s 不在定义中" -#: vrtManager/instance.py:1116 +#: vrtManager/instance.py:1130 #, python-format msgid "CD-ROM %(dev)s is not in the running definition" msgstr "CD-ROM %(dev)s 不在运行中的定义中" -#: vrtManager/instance.py:1117 +#: vrtManager/instance.py:1131 #, python-format msgid "CD-ROM %(dev)s is not in the persistent definition" msgstr "CD-ROM %(dev)s 不在持久定义中" -#: vrtManager/instance.py:1129 +#: vrtManager/instance.py:1143 #, python-format msgid "Media of %(dev)s changed in the running VM only: %(err)s" msgstr "%(dev)s 的介质仅在运行中的虚拟机中更改:%(err)s" -#: vrtManager/instance.py:1140 +#: vrtManager/instance.py:1154 #, python-format msgid "ISO image %(image)s was not found" msgstr "未找到 ISO 镜像 %(image)s" -#: vrtManager/instance.py:1142 +#: vrtManager/instance.py:1156 #, python-format msgid "ISO image %(image)s is in more than one storage pool" msgstr "ISO 镜像 %(image)s 位于多个存储池中" -#: vrtManager/instance.py:1249 +#: vrtManager/instance.py:1263 #, python-format msgid "Disk %(target_dev)s is not in the VM's definition" msgstr "磁盘 %(target_dev)s 不在虚拟机的定义中" -#: vrtManager/instance.py:1377 +#: vrtManager/instance.py:1391 msgid "Please shutdown the instance then try to enable vCPU hotplug" msgstr "请先关闭虚拟机,再启用 vCPU 热插拔" -#: vrtManager/instance.py:1664 +#: vrtManager/instance.py:1678 msgid "The VM has no video card" msgstr "虚拟机没有显卡" -#: vrtManager/instance.py:1838 +#: vrtManager/instance.py:1852 msgid "" "The VM has external snapshots; internal snapshots cannot be mixed with them" msgstr "虚拟机有外部快照;内部快照不能与其混用" -#: vrtManager/instance.py:1870 +#: vrtManager/instance.py:1884 msgid "A snapshot with memory is not quiesced; it keeps the whole guest state" msgstr "含内存的快照不会静默文件系统;它保存整个客户机状态" -#: vrtManager/instance.py:1872 +#: vrtManager/instance.py:1886 msgid "Only a running VM's file systems can be frozen" msgstr "只有运行中的虚拟机的文件系统可以冻结" -#: vrtManager/instance.py:1874 +#: vrtManager/instance.py:1888 msgid "The QEMU guest agent is not connected; it freezes the file systems" msgstr "QEMU 客户机代理未连接;文件系统由它冻结" -#: vrtManager/instance.py:1877 +#: vrtManager/instance.py:1891 msgid "" "The VM has internal snapshots; external snapshots cannot be mixed with them" msgstr "虚拟机有内部快照;外部快照不能与其混用" -#: vrtManager/instance.py:1882 +#: vrtManager/instance.py:1896 msgid "Newer snapshots exist after the last revert; delete them first" msgstr "上次还原后存在更新的快照;请先删除它们" -#: vrtManager/instance.py:1885 +#: vrtManager/instance.py:1899 msgid "No snapshot is current; revert to a snapshot first" msgstr "没有当前快照;请先还原到某个快照" -#: vrtManager/instance.py:1891 +#: vrtManager/instance.py:1905 #, python-format msgid "Eject the media from %(dev)s first" msgstr "请先弹出 %(dev)s 中的介质" -#: vrtManager/instance.py:1893 +#: vrtManager/instance.py:1907 #, python-format msgid "Disk %(dev)s is not a file; external snapshots need file disks" msgstr "磁盘 %(dev)s 不是文件;外部快照需要文件磁盘" -#: vrtManager/instance.py:1901 +#: vrtManager/instance.py:1915 #, python-format msgid "" "The storage pools could not be refreshed, so their free space is unknown: " "%(err)s" msgstr "无法刷新存储池,其可用空间未知:%(err)s" -#: vrtManager/instance.py:1922 +#: vrtManager/instance.py:1936 msgid "Memory is saved only from a running VM" msgstr "只能保存运行中的虚拟机的内存" -#: vrtManager/instance.py:1924 +#: vrtManager/instance.py:1938 msgid "The VM has no disk to keep its memory next to" msgstr "虚拟机没有可存放其内存的磁盘" -#: vrtManager/instance.py:1928 +#: vrtManager/instance.py:1942 #, python-format msgid "%(disk)s is not in a storage pool; memory is saved only into one" msgstr "%(disk)s 不在存储池中;内存只能保存到存储池中" -#: vrtManager/instance.py:1959 +#: vrtManager/instance.py:1973 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the snapshot needs %(size).1f " @@ -8733,156 +8740,156 @@ msgstr "" "存储池 %(pool)s 可用 %(free).1f GiB;快照需要 %(size).1f GiB(其中虚拟机磁盘的 %(percent)g%%,至少 " "%(minimum)g GiB,若保存内存则另加内存)" -#: vrtManager/instance.py:1977 +#: vrtManager/instance.py:1991 msgid "" "This snapshot was taken by an older version on a UEFI VM and cannot be " "reverted; delete it instead" msgstr "此快照由旧版本在 UEFI 虚拟机上创建,无法还原;请将其删除" -#: vrtManager/instance.py:2007 +#: vrtManager/instance.py:2021 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is " "running." msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机正在运行。" -#: vrtManager/instance.py:2009 +#: vrtManager/instance.py:2023 #, python-format msgid "" "The revert failed twice; try again in a moment (%(error)s). The VM is shut " "off." msgstr "还原两次失败;请稍后重试(%(error)s)。虚拟机已关机。" -#: vrtManager/instance.py:2172 +#: vrtManager/instance.py:2186 msgid "A disk moves when its VM is defined and running, paused or shut off" msgstr "仅当虚拟机已定义且处于运行、暂停或关机状态时才能移动磁盘" -#: vrtManager/instance.py:2174 +#: vrtManager/instance.py:2188 msgid "" "A disk of a VM with snapshots, a saved state or a running block job does not " "move" msgstr "有快照、保存的状态或正在运行块任务的虚拟机的磁盘不能移动" -#: vrtManager/instance.py:2182 +#: vrtManager/instance.py:2196 #, python-format msgid "" "%(dev)s is not a disk file of the VM, the same in its running and next " "start's definition" msgstr "%(dev)s 不是该虚拟机在运行中的定义和下次启动定义中相同的磁盘文件" -#: vrtManager/instance.py:2187 +#: vrtManager/instance.py:2201 #, python-format msgid "%(dev)s does not move: only writable raw and qcow2 disks do" msgstr "%(dev)s 不能移动:只能移动可写的 raw 和 qcow2 磁盘" -#: vrtManager/instance.py:2194 +#: vrtManager/instance.py:2208 #, python-format msgid "%(dev)s does not move: no storage pool has %(path)s" msgstr "%(dev)s 不能移动:没有存储池包含 %(path)s" -#: vrtManager/instance.py:2196 +#: vrtManager/instance.py:2210 #, python-format msgid "%(dev)s does not move: it has a backing file" msgstr "%(dev)s 不能移动:它有后备文件" -#: vrtManager/instance.py:2199 +#: vrtManager/instance.py:2213 #, python-format msgid "%(pool_name)s is not an active pool of disk files of this host" msgstr "%(pool_name)s 不是此主机上活动的磁盘文件存储池" -#: vrtManager/instance.py:2202 +#: vrtManager/instance.py:2216 #, python-format msgid "%(dev)s is in pool %(pool_name)s already" msgstr "%(dev)s 已在存储池 %(pool_name)s 中" -#: vrtManager/instance.py:2206 +#: vrtManager/instance.py:2220 #, python-format msgid "Pool %(pool_name)s already has a file %(name)s" msgstr "存储池 %(pool_name)s 中已有文件 %(name)s" -#: vrtManager/instance.py:2230 +#: vrtManager/instance.py:2244 #, python-format msgid "The copy of %(dev)s ended before it was complete" msgstr "%(dev)s 的复制在完成前结束" -#: vrtManager/instance.py:2275 +#: vrtManager/instance.py:2289 #, python-format msgid "%(error)s; remove %(dest)s if it is there: %(cleanup_error)s" msgstr "%(error)s;如果 %(dest)s 存在请将其删除:%(cleanup_error)s" -#: vrtManager/instance.py:2277 +#: vrtManager/instance.py:2291 #, python-format msgid "%(error)s; the VM may use %(dest)s now: check its disk %(dev)s" msgstr "%(error)s;虚拟机现在可能在使用 %(dest)s:请检查其磁盘 %(dev)s" -#: vrtManager/instance.py:2284 +#: vrtManager/instance.py:2298 #, python-format msgid "The VM has no internal snapshot named %(name)s" msgstr "虚拟机没有名为 %(name)s 的内部快照" -#: vrtManager/instance.py:2293 +#: vrtManager/instance.py:2307 msgid "The VM has a saved state; start it or remove the saved state first" msgstr "虚拟机有保存的状态;请先启动它或删除保存的状态" -#: vrtManager/instance.py:2295 +#: vrtManager/instance.py:2309 msgid "A snapshot job is still running on this VM; try again when it ends" msgstr "此虚拟机上仍有快照任务在运行;请在其结束后重试" -#: vrtManager/instance.py:2305 +#: vrtManager/instance.py:2319 msgid "Shut the VM down to revert to an internal snapshot" msgstr "请关闭虚拟机后再还原到内部快照" -#: vrtManager/instance.py:2403 +#: vrtManager/instance.py:2417 msgid "Cannot clone a VM whose NVRAM is not a file" msgstr "NVRAM 不是文件的虚拟机无法克隆" -#: vrtManager/instance.py:2471 +#: vrtManager/instance.py:2485 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(path)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(path)s" -#: vrtManager/instance.py:2481 +#: vrtManager/instance.py:2495 msgid "Shut the VM down before cloning it" msgstr "请先关闭虚拟机再克隆" -#: vrtManager/instance.py:2535 +#: vrtManager/instance.py:2549 #, python-format msgid "Clone failed (%(err)s); remove these copies by hand: %(leftovers)s" msgstr "克隆失败(%(err)s);请手动删除这些副本:%(leftovers)s" -#: vrtManager/instance.py:2546 +#: vrtManager/instance.py:2560 msgid "Live clone needs libvirt 11.10 or later; shut the VM down to clone it" msgstr "在线克隆需要 libvirt 11.10 或更高版本;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2549 +#: vrtManager/instance.py:2563 msgid "A VM with a TPM is cloned only shut down" msgstr "带 TPM 的虚拟机只能在关机时克隆" -#: vrtManager/instance.py:2552 +#: vrtManager/instance.py:2566 #, python-format msgid "Disk %(dev)s is not a local file; shut the VM down to clone it" msgstr "磁盘 %(dev)s 不是本地文件;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2554 +#: vrtManager/instance.py:2568 #, python-format msgid "Disk %(dev)s is shareable; shut the VM down to clone it" msgstr "磁盘 %(dev)s 是可共享的;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2559 +#: vrtManager/instance.py:2573 #, python-format msgid "Disk %(dev)s changes at the next start; shut the VM down to clone it" msgstr "磁盘 %(dev)s 在下次启动时会改变;请关闭虚拟机后再克隆" -#: vrtManager/instance.py:2561 +#: vrtManager/instance.py:2575 msgid "Another job is running on the VM; clone it when that ends" msgstr "虚拟机上有另一个任务正在运行;请在其结束后再克隆" -#: vrtManager/instance.py:2574 +#: vrtManager/instance.py:2588 #, python-format msgid "Volume %(name)s already exists in storage pool %(pool)s" msgstr "卷 %(name)s 已存在于存储池 %(pool)s 中" -#: vrtManager/instance.py:2593 +#: vrtManager/instance.py:2607 #, python-format msgid "" "Storage pool %(pool)s has %(free).1f GiB free; the clone needs %(size).1f GiB" @@ -8891,97 +8898,97 @@ msgstr "" "存储池 %(pool)s 可用 %(free).1f GiB;克隆需要 %(size).1f GiB(复制的磁盘,再加其 %(percent)g%%,至少" " %(minimum)g GiB)" -#: vrtManager/instance.py:2732 +#: vrtManager/instance.py:2746 msgid "A network interface that is a host device is removed in the XML editor" msgstr "作为主机设备的网络接口需在 XML 编辑器中删除" -#: vrtManager/instance.py:2748 +#: vrtManager/instance.py:2762 #, python-format msgid "No network interface with MAC %(old_mac)s" msgstr "没有 MAC 为 %(old_mac)s 的网络接口" -#: vrtManager/instance.py:2751 +#: vrtManager/instance.py:2765 msgid "A network interface that is a host device is changed in the XML editor" msgstr "作为主机设备的网络接口需在 XML 编辑器中修改" -#: vrtManager/instance.py:2842 +#: vrtManager/instance.py:2856 msgid "" "A VM changes its PCI devices while it runs, or is shut off without a saved " "state" msgstr "虚拟机只能在运行时或无保存的状态的关机时更改其 PCI 设备" -#: vrtManager/instance.py:2854 +#: vrtManager/instance.py:2868 #, python-format msgid "%(err)s; whether the VM has PCI device %(address)s now is not known" msgstr "%(err)s;虚拟机现在是否有 PCI 设备 %(address)s 未知" -#: vrtManager/instance.py:2856 +#: vrtManager/instance.py:2870 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start has it" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时有它" -#: vrtManager/instance.py:2858 +#: vrtManager/instance.py:2872 #, python-format msgid "" "%(err)s; PCI device %(address)s: the VM is not running, its next start does " "not have it" msgstr "%(err)s;PCI 设备 %(address)s:虚拟机未运行,下次启动时没有它" -#: vrtManager/instance.py:2859 +#: vrtManager/instance.py:2873 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start has it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时有它" -#: vrtManager/instance.py:2861 +#: vrtManager/instance.py:2875 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM has it, its next start does " "not have it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机有它,下次启动时没有它" -#: vrtManager/instance.py:2863 +#: vrtManager/instance.py:2877 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " "start has it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时有它" -#: vrtManager/instance.py:2865 +#: vrtManager/instance.py:2879 #, python-format msgid "" "%(err)s; PCI device %(address)s: the running VM does not have it, its next " "start does not have it" msgstr "%(err)s;PCI 设备 %(address)s:运行中的虚拟机没有它,下次启动时没有它" -#: vrtManager/instance.py:2899 +#: vrtManager/instance.py:2913 #, python-format msgid "The VM has no PCI device %(address)s" msgstr "虚拟机没有 PCI 设备 %(address)s" -#: vrtManager/instance.py:2917 +#: vrtManager/instance.py:2931 msgid "The VM has no USB controller" msgstr "虚拟机没有 USB 控制器" -#: vrtManager/instance.py:2936 +#: vrtManager/instance.py:2950 msgid "The VM has no such USB device" msgstr "虚拟机没有此 USB 设备" -#: vrtManager/instance.py:2950 +#: vrtManager/instance.py:2964 #, python-format msgid "The VM has no network interface %(mac)s" msgstr "虚拟机没有网络接口 %(mac)s" -#: vrtManager/instance.py:2981 +#: vrtManager/instance.py:2995 msgid "The VM has its own RNG device: change it in the XML editor" msgstr "虚拟机有自己的 RNG 设备:请在 XML 编辑器中修改" -#: vrtManager/instance.py:3008 +#: vrtManager/instance.py:3022 msgid "The VM has its own TPM: change it in the XML editor" msgstr "虚拟机有自己的 TPM:请在 XML 编辑器中修改" -#: vrtManager/instance.py:3027 +#: vrtManager/instance.py:3041 #, python-format msgid "Unknown crash action %(action)s" msgstr "未知的崩溃操作 %(action)s" diff --git a/vrtManager/instance.py b/vrtManager/instance.py index aab376b9..1ce4ee5c 100644 --- a/vrtManager/instance.py +++ b/vrtManager/instance.py @@ -424,10 +424,16 @@ class wvmInstances(wvmConnect): def copy_nvram(self, conn): """Copies the UEFI variables file of the shut-off VM of conn (on the source) from libvirt's NVRAM directory there to the same path here, - unless both hosts share that directory. Returns the copy's name.""" + unless both hosts share that directory. Returns the copy's name. A + file elsewhere is refused: it would stay behind, and the VM start + here from the firmware's template.""" path = conn.get_nvram() - if not path or os.path.dirname(path) != NVRAM_DIR: + if not path: return None + if os.path.dirname(path) != NVRAM_DIR: + raise util.OperationError(gettext_noop( + "The NVRAM file %(path)s is not in libvirt's NVRAM directory %(dir)s and cannot be copied"), + path=path, dir=NVRAM_DIR) name = os.path.basename(path) with conn._nvram_pool() as source, self._nvram_pool() as target: vol = self._find_volume(source, name) diff --git a/vrtManager/tests/test_migration.py b/vrtManager/tests/test_migration.py index 92fd6782..0b3b81bb 100644 --- a/vrtManager/tests/test_migration.py +++ b/vrtManager/tests/test_migration.py @@ -296,6 +296,12 @@ class NvramCopyTestCase(unittest.TestCase): copy.upload.assert_called_once_with(self.dest.wvm.newStream.return_value, 0, 4, 0) self.assertEqual(self.host.defined, ["vm"]) + def test_a_file_outside_libvirt_s_directory_stops_the_move(self): + self.source.nvram = "/srv/vms/vm_VARS.fd" + with self.assertRaisesRegex(util.OperationError, "/srv/vms/vm_VARS.fd is not in libvirt's NVRAM directory"): + self.move() + self.assertEqual(self.host.defined, []) + def test_a_failed_download_aborts_its_stream(self): stream = self.source.wvm.newStream.return_value stream.recvAll.side_effect = libvirt.libvirtError("download failed")