From bdf922443df77dd2e90a1da632f8cee8bb3d72ad Mon Sep 17 00:00:00 2001 From: Le Tan Date: Fri, 9 Jul 2021 05:54:44 -0700 Subject: [PATCH] release v3.4.0 (#1809) --- .github/workflows/ci-linux.yml | 2 +- .github/workflows/ci-macos.yml | 2 +- .github/workflows/ci-win.yml | 2 +- changes.md | 8 + src/data/core/translations/vnote_zh_CN.qm | Bin 64322 -> 71635 bytes src/data/core/translations/vnote_zh_CN.ts | 794 ++++++++++++++++------ src/data/core/vnotex.json | 2 +- src/widgets/lineeditwithsnippet.cpp | 2 +- src/widgets/textviewwindowhelper.h | 8 +- src/widgets/toolbarhelper.cpp | 6 + 10 files changed, 621 insertions(+), 205 deletions(-) diff --git a/.github/workflows/ci-linux.yml b/.github/workflows/ci-linux.yml index 66aba01b..e99908d2 100644 --- a/.github/workflows/ci-linux.yml +++ b/.github/workflows/ci-linux.yml @@ -10,7 +10,7 @@ on: workflow_dispatch: env: - VNOTE_VER: 3.3.0 + VNOTE_VER: 3.4.0 jobs: build-linux: diff --git a/.github/workflows/ci-macos.yml b/.github/workflows/ci-macos.yml index e8791471..0148b2dd 100644 --- a/.github/workflows/ci-macos.yml +++ b/.github/workflows/ci-macos.yml @@ -10,7 +10,7 @@ on: workflow_dispatch: env: - VNOTE_VER: 3.3.0 + VNOTE_VER: 3.4.0 jobs: build-linux: diff --git a/.github/workflows/ci-win.yml b/.github/workflows/ci-win.yml index 73ee8068..28632c1a 100644 --- a/.github/workflows/ci-win.yml +++ b/.github/workflows/ci-win.yml @@ -10,7 +10,7 @@ on: workflow_dispatch: env: - VNOTE_VER: 3.3.0 + VNOTE_VER: 3.4.0 jobs: build: diff --git a/changes.md b/changes.md index 1f1f671a..451eea04 100644 --- a/changes.md +++ b/changes.md @@ -1,4 +1,12 @@ # Changes +## v3.4.0 +* Support Snippet + * `Ctrl+G S` to insert a snippet + * `%snippet_name%` to insert a snippet (the legacy Magic Word) + * Snippet is supported in some dialogs (such as creating a new note) +* Support note template (snippet is supported) +* Remove `'` and `"` from auot-brackets + ## v3.3.0 * Editor: support auto indent, auto list * Support opening notes with external programs diff --git a/src/data/core/translations/vnote_zh_CN.qm b/src/data/core/translations/vnote_zh_CN.qm index 7f6b6abb2a118175c69976979b8076a465a68e0d..efbaf61d0e4db578245e1194742effc234a84976 100644 GIT binary patch delta 11693 zcmb7I30#c%8-M1$XC%2+HKL@FDYD7Bg{+dwRgR{5%aAFZ2;+$4%I?S_axB&@QmA#V zUFTX?cCB5Du&kTh*Z=#@n^YV2@AJubX5QcXd!Fa}oWI|JCxSCugr+ZcM%6!hZ%Ovg zjT`L^U$OhoE=2WpM528}8T)}pi2j;QMw(}`@_5rw7_ z?KTjxMUsCo=GG$tzJ!ZheyI< zAyMQb4)5iX@T4PAw*wsR$RXkRMnu*-NO&8{bw5hNmw3KcOCr~^M86f1Nast`;VJM- zqQ^~0ZL3;>I!}=|&Da4&v~~-%0e#AyDT=lK!iS#y>I7;n|rs)Fr3*0HW`Yk;|H~ zM2oG+rSKvcw8oh@|>&0QtMRH~J8Q7Ct*UTqcYD2DvUw|kvxn0EX+n1C3 zPs54UHJ~mddJ?@1rXCBhZeTj_AW`Rb)XNoKcT!uh33d39`{DK}>eVKj$ibJx;NBdT zJ~#XG>zRtE&zgor*^w0Zc?r>@gA~{u^j(dhz{OE;{0$13I+MumB8StjaF~6a!-IcQ z$ngV2f7YdeKf(HE-_pR>WuVW2LTlkY`#}^s?02F?hbc4>X5Y-G(6NqCe-4G-hF?vk zU(jGN7A|Vd;ZL<_$exKrPktc%Rq*!9Vv6_Dts@JPI9SPU||#!0Sv4TGOf9 zwDGPQnzy6f;b~ad)!a|u6j2J%o`Z;vd`B1NG$H!uB>hzzdj9Ym{bQR+wDl{xz3DvB zp#XZ&HUe?-kY2iOS%+&_S~^jilcZZt19B7~?;3~$8&PW-l{@~ z-8+l7GVj2CnaT4$B zB~PL^hjKMwOd z@}4*sAdhD9o~u!9)KmDvXW%_;I)^h(^5vuV5Pd7-%V(Y@`qG16tK=fl=L`8(OCpK3 zZ0B2T8iDvE|_U{ddPM+c4aq&Q{>&JgM z2OGas@Lz5NBcsdsZ=G60QMo`=Zz5u2tw3at5RADY5U0SBGg$)ZiOodKCJAcABZ4>f z6W9!d%ii`B)c0+QhR|MMw+1nCK1|@*;3CnEPJ%X*1BkxL6_`3+R1@ur6?9VGCA!r> z&`S!+?ZO0KZt#V`TY>;vgGU+fhuyVMvA4>So@75+nX z@sMDBu?CiS3iA4w5M8Mw*m?!jHOv$oCMafmOmO5WLp1lS;FJTN*S;z!@dMSj297TcNn6$z~)AAo@V!bW8vRW zv6qGIebG+)gbDp0o*^1uAPmd`M$Qz*owXyHmd4>ZgD~MFJU)K6aLlbA&`W+5n!6&| zJR&*lktkf~_dT+*;F9G7?Vl}NWXwjEz2?yIB!?Zkb7;OUToQ`%`|A_os_sDX4Gzz~ z5U$q49`8mRezBdyN&j#-b+2&st0W@TRpHt&gvg&agc~;uLGsNMZW;0hSvlpJF#j4X z?=BbaI(iNL{JyYQfifq5BRtGUFz?wWJlg(OxU{$Mmz4SNh>^ptqlKrUgP_P-4*hI7 z9J@kz=9oL`y_4{q3l!Zc7oM904`n-Wc(9T1@=tsWFe+i`K+|{#UL?HLQcmQuLs;gl zCc0lJe3IsaiN_#(zL|%@c1QU74g{xm5J?Qyp#FkLKIIWn*+Y@djgzpbm#FU2x0rf# zqK1#~Jy0$BY~UWESL;RY9pJi#e~8>mkVJ#RMDDlKkptI6t&P~{nzhK=)B`b=79{F6 zbuQ7qHH{5cM}hu|M-gBldM5>bg=i;Jy7zKcmEM>Ma<1PNKWRVEB?q4o~Nbp8f;aT{h-Z=?Z9i|ZmM4B(EY`|`agyTr;3A)2NP{d6^Gir zA>!wWL-+rVPP;@rWEbo_Qb!!?x}L}_Q*3O5YE$dBIEiNud)tV|WndroX5ut4u;`*V ztwf0G(o$@W#`@n^iNC4U1r8V>Ui^3_%507}XKE5+yKXP>(mAl`V77R}SEw4jY&o1Q zoJ($$>;~@iCnZTHFi{^V)G(Y|Y`* zp5kM}P&F>k6(2u`vS{BBXu=2QhvE~pP>|i1i7m;n#an!ZU7$@AU-N+Ht@er^c4&nT zQAhlA&~r5VQi-4iEb~v7NEX_mS0_r8&xV4rB8m3R9!%?_IXwM9;<#2ol(JatRONN;|Hxp&PltlY`;V7Vz#OH%5(RxWjJ!Ibktz^6N zmnfY~sYj*D9zTSYWzyvh-LZd=bbU|A@nSffoFUyb5dJ?|U%KP_k(l9kN{iUD!0N*s zo_Q_ZJsa#?`9-?_&OxGmze^7_1N}{&Nsq3@_kbUze<}OHpG&1zd&1sXcG8>a@ON;A z^nQ0Qq}Wwg>HXb9@xn?Di&LaeHs3_am?M3g3q^W6$mFm8ApDcrI(5TPy-sE~@jK+U zR_2`3foRQFGLJMgYCC&bt4P>sS}$vz>5HReTbWntEcDZpvW}P1k!rEBz?BRJgGn;R z73+9SWy4E5n9r+fn>vq_jrnXY>h5^i_@ZRk5+Ivs>xtGlT9&^34F=KXvY9)2K}0Tx z(;3;UN3bz!nJj0Y5WXKRTTuWTea~>X%}%z)y97hbb=ejx_?Dk4+ir~<={8ojy`cz6 zrjr%h|9}&#lk9uHTyU`3Q}+GwGjQ?-+3t+H7-aj&j=O`C)`_w|mSQq~E0@=w)|zO) zm%Jekee`p>{Ih-yiSkL_bnkrh>~O4_DvE13s5h44#+%<0rf^n@ppaqia zi9jCM2SJ+>DGwHTVJOO%4_vE8naR@2Lwnc}`RL@~0$BEwSsr;1LG{}NIkOSjSXf&g zn~CVG?{6Nt{8moGB<7ZA0$E?-%C1>W(Lubl!5gG=S>#;k)P59J%( zrlB4^=5TQ^ho>XtTjye==k1mkrd&nY36bw&&u|&_%@Z_srUet^B?+0xsv!A=Z8UP~wd6oXzf7`*Kjp#zOLBJNT| zvK{PRcg6TwgE0U0R!nX1oM@T9V#Ydz&IKpM9KmB8O?ZlV;UIW!8^zZfZHPwXDwe)- zheua!R4gli=If#qE5}_VdTmmCyBi+vlBM|e4~&^ka}^u1@xr`NML`-E_{UChkPVfs zT@{D@@m+mbag-f9DNJ!Z#0wr@r8qHEk6C7g;(7)=KH-_-ReD2=8uJuy8f2s8)>6Fr z-VtZa(@Nn~Q$9M@V5M-eFAB7L<(z=a7_P=C=O1GbBeBZt;A@EWfgGk?S7v8g zqk42xF6#%y2W?TB*0jh)&_7dtcl0z$y{)py2u(+dl*PP6qI$n@*vFZ}{bd}M9#-y- zUxr{juH2s+fx}sd@<nwdBJNNVj^F8 zdu0g9$}E%e{+g*cjP+1H$V605yQ+LD=!nDC4&`(9ur^|l@-5q|9`sZ3ULdIEtyl4{ z1Q4whsuUCKaX&Cwr5-f`b7pH*t^QURA6uww?nCkGgH-j|pljTl!|k% zhrt~Wsa(@VsGA;5Rb5h#5w)41^1UfQ58t5bzD|mZp)gf|T?f?cSE`^%2(q1zRD*WA z13Q>)t?f*EK2wckm-jQO#m`D>&W79tn=W~fC$b~rn&Q_Bv`ML9jBRxP@U zve8SeTGAAurBc_eH4$0srcvAP$;DYmrFOQ%2KNW3ofGgqy@bP(S8Cme6KLYO>Q))W z2r(0f7c)@e>9B#j?_V??DMsYwLcn?F5_6>*2mT`FPg1UcS6+(1~ zdO!~o>gTUJ)q{(Rh+0loM~!}iG45yeh#?SEI8B`3(rvc+&sY%mf2$E=Jj>a=K8T%z`eAo+xTW2-xoS;}cou*w|81Rjqrv2ct zh;^Z+V@NhGGV(RUI$gqxcilBT|AKF>FVXZZw85OgXhJh^WzslT!(2eHwCJOm{s5X^ zKA|zEVV;_QTC?!QU7|@-G&zAnDEL^j;$|+cUcS++9E9ed7pGb8)fzEmZT{KDuH~`^ znxCfyW3V@A{=9)@J#T1k6cnKFkJdar)dcmrQ1g}_fIF#`2;{e!`3>t1Y;V#sEhBmJ z8fG0LEjf^5h$?IVIpUMHk15$Xp~uJqUn zz1G3es2{~RI=~t9S&A_(i5cVL)7xNVe4`9W0}M&S%irW70ZGkd#JG_&IZ+5Tr~FC5 zJ9v%d5a~hMfOZR$E5s=sJ+wXJMlsqzeGFrsJg`yz=lyJI)vcnEw0z@4%kwXpb7HgO zf&g=JY?J)Pu~|*(IWU)EOM;eXO&HNQ#smYMEpnQh9~9a&cId7*#KM52IBjg49>|P} zkJTqJT4zU(=J?OkoR!tsMwqrDNnD|m*k5mCwfQP*m$~ja8*_HnXO0bLJq_?lt1~Mv zQWCZ}fC5}%WK2(%MjgN6z2@f2{`Jh`=Xo>~TQu>hcp?ia7wdyf?ejOyi|d8c!8ch(2>-}xYbNiAonn?WBN7h`ci9ag!J*+U-2$XEe= zw~d=zNmWPlrNy?U@_qlqZc-+1=!+^&Q9!D;TAsA z$xKGTlZt)o1~aitWRkXftUhtLB{;R+4YB5-2OaWn{MbNk(y=j+>>Mz6fF*tUP7B)= z(1JB?=zK1rLezczhD-YRn~W*x!zHuwDs~R)tR1CK7^yWFwMoO73g1S?8Iu?z(#{xV zh}0(;j4_tSk;w^(aS7V^xI{yeAIV##0=x0=fOf2nM;l!$jaCk@vpX;TfcvDyemo4_E! zB9U^bC<&a27An~!WX2?6NpxHSV|noZSs-RfCN8NMwp2;Ga-8}62lM5uH&{QEZ@|8< z?8=eLx}(ND%x%BZnLfd*FlcQ!ufn;KZevj-4Uzvrqgny#G`9en(K|#rk});Ux=^u6 z9Y13f8w&bFZM30LLSm9O7FD*UEzPgLYu@m~3Yx9XH8Is34szDj)%ehGG0%qC2Pvr* zRnlR%B2%;7E0HP-9*&j~nVeM4Xua}AQC*F%``Om2uDSWk4b4Brx0=FYSH#GI?$uyv1ONYofGz$jJB0`_YXxZ+kjf>VIB@6>hm$Ai@aI7- zEZ72{TT?hSuMlM&W$8)bo;s7KM+=>23(wZ!%|EueH@i9WB)jY*0)|0g8}cD9ppQjx zWs!~+k$NN2(g4GpA)6I#Vr38WXyfDM;iL2XxDv{D46@a{!j?M!FHucR&HFA&N$2P? zp?$ySi)F1kSB=@SsgHlwXuvoitTCRn1ndQn$Clxr@VMj;5~1UW@N5;XWl|WU)?^{9vwzD#e{GZ@5xsQmM+<>VWrC`x^22^MW1V~^8Gg>vlo%6SI<>2p@U*f@mCM>7n8R*_`v=a2HF;}k-M z{VTy@r0>-UHX+9>KfI6XFKSSy#`H?oCzNZ16l2)%|F}-h?*l4GTpmuQs`2DSZL7pn z3s#p=24gb1(g#wjJfghXenNQVz^M?gGri{mjiajYmeqt;jhw21^C|I_N(}3hiV|b0 zUSmAa04iscC9^sD|7(@;_(UJ`tVD$=y|Ox7Q>aq&s_SFv3N`6dBRl1_=EEA9xZ$Ky zXpB8wW2LF?97|**GMLHBNAG{tIo*GW3^xCqEAf$DNqj}p)*Km?gx6^Me-V#6G;*-i zg!etCa-H|8R$pz|kW6Kmk?;DAb9gz$UadYJ|F!yG=;P1Cr=$-};=+#`U|9R@*iFYW z`UJ}e&KB<|LyQ3vpQWWGerzst3usz(*BX7-wpwDjy%%Uo)F!3IRTaoK%yRPDej=;w zD$Rr+oBpiIhrWLedLi7sPWib0t_|0=T&XxB6}1$G&#fv=-ZDoIM^9~-V=K$FU8mZ# z9jG@lv1ZSZmOaY1wESQhz?JOL({e}DxzZ>scIu3S?O2xNn)gz-X=YRNll09UKJeu0 zJU3H~?^qP69qS$78>C$jm32NKhrOkEYhN+VI&{P76~z`F!Wkfun@$q7@l3)fSY}L$ z9ozAPs#-SZZl|;hG*Rr%mT+LN!7SHP?VG&6=t*Ek#idk8sJNfv?s{s}-F$P$#=bQ^ zu?YV3olTAJnt8U(Kf=|AE@1)_;=oCgfw82Aef21)cv|U-%EC-^8IxC)7*J#`E3EBZ ziJRnj%Zy*nel>2Y%QA0VtgXXtS<{_Yqw+m0cV7Q`)2>5Z>ARaMvqw%n?sm%YWA9Yh zo&Weu4=Xoy{}*A4gLK1g&9k4iH~Vfy7+DA6z9%G3+c((|Ia1p>GLlJ5%x`?{o|RV0 zp2S&oE7q#Z@1BA!!DjyIwymlzd&LWk9v3eKS~~!PHv!$Z0pfcgY!Tqp4v3fr9BKe< z;ZUyY2cc6S*IkD==pnEq7h+Tiu-*^in#RE8`Vcql019|)%gEq~5{QK&FnqI$*M>p7 z;0^@UR57P7#2fVh$9#xSn*-hILHx+;1=k^YUjdFBh19$&5V(lg3%L0QB)=uVEhpl3 zq8(EEen4pkq>grAT0KZTe1UBm*#7&II}TERK0scoqIbHABQL3VD&9$jw3LqYPJ^^&Cvda?QtCD`56dXP7_0(TNsYXQK9JBT#o08pjj^KfA(XLI`j$9$uLgu3URyYPPK^XI8ldy&9<=l& zy078F0WFCoK*we1>Ae8(u&5XqrsCz*=-DO(XxLT7&@n2O3Fs}(1RBMn_Zk!6GZG=$ zG`N?7Z!_xvKaN44udf2XC8AF^M%-357Jb%_U@kWyEIt`ix2sSzbQUo1g?*XeVJkJ^=CVe>MLYg- zNdk7Q!;7}V8R%Sm^f^zCpVnymrvnK!HO|3r zmZ7$+vZJ%APK!<4Ui0*Mru15QP?oME3lJ@(1WbyI& z+EJ(DY`~_r+KFZ#pnZ^b+I|yo`lEK$TP`%YX;;^07J7Zsu8DgJ4CmUI88f#NK z4rW6*q}{r)FS8e^%?!$Cv=3^tyB}iRRcZGnR|4)q+Pq}4GPQ~JpyoO-bf>o97t%i< zOk1cM1uPY{M~2#}SeUJ}NB0~cJu|fBWey>>9yvemCGbPpC10?AjhBIE6Fh5B?Ntb#2W493Z%6u47rm z2rX;h2KK)f+RP6DmSqYZY_}~yZeyXNLW?in5_%dKI@d^{S5{YgyiN#lA+2*C2;rN! zZrddxvN;P?IUx*r$WTWe7KUBB0sOQ}7&&A&5LYRTOroJ*v=C;`VwrS&DL@hGM|hQ(&cf*;yw0MhXVX;aVe~UPye9}?ibV(0asOAQ7LYSU}HN1aa%W{?va==jQ0E0Q?dO473apQI6qv> z_;)g3ejsj-WX4NgirHCFtchfCPgE5!Z?2g0kdAd7Bpxb#$YJ?hER@-3OjY6;?E%(6 z!Dz8G;8$|=AMux|s~PY(6+530FUE$_fbA;w7_Z{=Z^g@HKEUiF;x#WCm~&jbHjjz; z(M!B{N=sSbELMci<_n*QPrfn%UisqdCKlk=8RFYn{y?o!;)mTDc9%Eer)M_4aLQB3 zwBQxTbFSp{=mI?mlfL}vGtl>2sm?1Nf7?u|8(s|D50-oanTk5MB%iC~ez;Ncd740q z{v@@Ia|Fs=q@eia?6k|IuI_&TwcAVm?KGsMNE&@K5a|3`8vWGH6xpP48I>IO!O}`w zfftZBOj`MzIzscWwC)i(TfSaeA4`w&XGv*`Q(4VM6+?nm%-^G8(KIRZ40Bmal(sJ` zAr?qG+xT+q-;j1+Fao=WOMCb8InAA=gGcFkPP|lbjJ2`hfOO1@>xMW=){?3bK-pdC z)ONOu(kb>`CJ)(KE$<8Lu<0UP$sz4t-B|CPK+_~$TpJdBjiRLt|% zW!ZT?YmRR3ZoX&vCEc;zH^|8oj=GW)42-q8jwA(s_(NCL+=+wXHx;wHsF+u#;%!-1 zHiT7sCRJB{ja{gI9Tl6rRB_>C-T4}9gFYK||8X{}qwaq7I=4x>hb@>nha{-%`fYdR?>6H zTff47lBqnYPwVytxl;3;e)G|PfEA3a7fnMa1v) zxed<%=bGB1%+5AJ|G3aZDLzjB{7`M`#Q^>5e7ZF;%OF{ZMmK}e_eUVR%JAj=MnKX_ zgZpHbh^4i`qbY0uR*<1{$`?%N3qzOYe^J^y7zV!njSLSr4E>GysrAedlXsUjf7%cm z@QS*z!Vvd_ZtnYJ7@r#kL3aWMO z<_m_RrS$sj4a2c#CBWfThSQ!5XQTIq((ODBaW>ph`Y}C!8y@taABi4@#|cbdXr|$L zH>Rn~*YLb(FxPMS4{gZzF?>$v3wupAnm*kEe?}LNAda~KM%TGNbLyNoHc1NvwyZO@ zn8i8mTHn|zn*Pk`Vr-q%m0OV|M&D^mIF;ra`)rBf_*`s^@#b|+W8=sQ-iM~f(N7*T zG1b1psX>aOB$4`Zg^RSy2=#yt*2Ea7R!1CFhLE@j38btG1bzp=3X z3E}%q8QN#2y8Y?^ zdkiMeZR`bM?xrS9-AT9yChxr)NTt1|kY=oiTc=EYz9r?RIGFlM4DsM$rts|+ZfQoD zBD%W*{>@F%C8WraL{m&QD`#J+X>1ayRm;~j&Svyy&1aYUwZ+UTh*~gSrF_+!&rfEsy6kv>}X-(lAps2#ME-n{n_J?Up#eJs0-?V)} zFvp74l-+b8d&C83EvG8g6q)j-K41?}O!`CBTZs5p_5cT0+p2}8oBPwaQ}04F#qa%c4Icw!=?0rjlbof#0MU-TeZL$^-lIoc*ubG$*s+#hJ&B%d$*F^cyV{xw}J!u z{Cc@fB_D90t^9SX3^vJ4a#&Jd4(!eHz)vyMjQ8b;@Hn>f>vDAUSh!}CXD=B@trsT8 z*Zu&c^^+IxV9Jj-mzN1|sHQdY%ApKga-h5_+ldBzBmeZT4@L0-d1EdO&KN6inR%OB ztZNt_CI!y z8M(Atk|9zq5A$VaL*?^>hfx9SkpD;U1AC=hRXc?lELOzzUD@q>Df(pF z9^mR|#qrfnE_kLm891m16emS4?3j9h8MarMe zVXTtU_aQ~=P8DaoR8o>0S?1Bo#(p$3JW9!Imd+0Vnaa; z?ia=O-=C0~>WQLk6-zHEMH4oXbSspzp?uMl5T)Fcp&jd^T!<>BTy;`$+GFL)%g)>` zPE&6B?q}|cl&4$5IIlvK=b7=q_&3UnB$99bXXTyHf%}Ie%7t{xEAYuU`2 ze@LFC`_0<>Awarfmgm&xJ~hZ}88@0_d}^-I-+|)FW_Ef`i_b-yYgLo0!8a=IDK)!P zPYh+6+3Rb1+M%}DJ3->c<&wGcv@)R09CO#l0iDL7< z^NaZW|q_#HP_v}Fj-N17{U z+~oP2=E^-)K)omC_b$bpHCxT^m(Jp5)YJUYcQr>vFY~8Wx4FB%ViEIlSiYGSDb$ra zh#eN=>FQnbew)R-?g7j2vBkWhF?X{UEML}`%MoI=)Gtn_@;6(WxbgwN*0D4neV(&4 z)6y!jkfds+;z_%uUG)xN`~*u-<_@OjrHXskS^E4=r9@cU3p>cafcB;mudYj z&xtC`(HfD+ZF_@sYfRux=D69n)6zql2&3^leQJxY$2AyMC4S!Fq0CUvk!F{rwS__3*bo%FSh?Y;Apau@O6M zvGubygx^1Ql7J7JPSnV&x}2@!S2VKstd#9{>?@34E_oN? zKda`Fz4oJ(&YDK{JL?>WF~*vD;Z gnDb$?vscd0^4gXh&%fI_ + + ViewWindow + + Snippet applied: %1 + 片段已应用: %1 + + + Snippet (%1) not found + 无法找到片段 (%1) + + + Snippet not available + 没有可用片段 + + + Select Snippet + 选择片段 + + vnotex::AppearancePage @@ -758,22 +777,22 @@ vnotex::FolderPropertiesDialog - + Properties 属性 - + Please specify a name for the folder. 请为文件夹指定一个名字。 - + Name conflicts with existing folder. 名字和已有文件夹冲突。 - + Failed to save folder (%1) in (%2) (%3). 无法保存笔记本 (%2) 中的文件夹 (%1) (%3)。 @@ -867,37 +886,37 @@ vnotex::ImageInsertDialog - + From: 源: - + &Browse 浏览(&B) - + Title: 标题: - + Alt text: 替换文本: - + Scaling width: 缩放宽度: - + Select Image To Insert 选择图片插入 - + Images (*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;All (*.*) 图片 (*.png *.xpm *.jpg *.bmp *.gif *.svg *.webp);;全部文件 (*.*) @@ -1046,6 +1065,14 @@ 无法导入笔记本 (%1)。 + + vnotex::LineEditWithSnippet + + + Snippet is supported via "%name%" + 支持通过 "%名字%" 使用片段 + + vnotex::LinkInsertDialog @@ -1085,12 +1112,12 @@ 文本 - + Clear 清空 - + %n Item(s) %n 项 @@ -1100,22 +1127,27 @@ vnotex::MainWindow - + Navigation 导航 - + Outline 大纲 - + Search 搜索 - + + Snippets + 片段 + + + Location List 位置列表 @@ -1124,23 +1156,23 @@ 笔记本 - + Do you want to minimize %1 to system tray instead of quitting when closed? 关闭时,是否将 %1 最小化到系统托盘而非退出? - + You could change the option in Settings later. 稍后可以在设置里面更改。 - + %1 is still running here. %1 仍然在此运行。 - - + + Global 全局 @@ -1353,17 +1385,22 @@ + %1 Home Page + %1 主页 + + + Feedback And Discussions 反馈和讨论 - + About 关于 - + <h3>%1</h3> <span>%2</span> @@ -1372,7 +1409,7 @@ - + About Qt 关于 Qt @@ -1415,7 +1452,7 @@ vnotex::ManageNotebooksDialog - + Close 关闭 @@ -1424,7 +1461,7 @@ 删除 - + Manage Notebooks 管理笔记本 @@ -1433,49 +1470,54 @@ 关闭笔记本 %1? - + Delete (DANGER) 删除(危险) - + + Please specify a name for the notebook. + 请为笔记本指定一个名字。 + + + Close notebook (%1)? 关闭笔记本 (%1)? - + The notebook could be imported again later. 稍后可以重新导入该笔记本。 - + Notebook location: %1 笔记本路径: %1 - + Failed to close notebook (%1) 无法关闭笔记本 (%1) - + Delete notebook (%1) from disk? 从磁盘中删除笔记本 (%1)? - + CALM DOWN! CALM DOWN! CALM DOWN! It will delete all files belonging to this notebook from disk. It is dangerous since it will bypass system's recycle bin! 冷静!冷静!冷静!这会从磁盘中删除该笔记本相关的全部文件。该操作会跳过系统的回收站,危险! - + Notebook location: %1 Use the "Close" button if you just want to remove it from %2. 笔记本位置: %1 如果仅要从 %2 中移除该该笔记本,请使用“关闭”按钮。 - + Failed to delete notebook (%1) 无法删除笔记本 (%1) @@ -1488,7 +1530,7 @@ Use the "Close" button if you just want to remove it from %2. 这会从磁盘中删除该笔记本相关的全部文件。该操作会跳过系统的回收站,危险! - + There are unsaved changes to current notebook. 当前笔记本有尚未保存的更改。 @@ -1603,22 +1645,22 @@ Use the "Close" button if you just want to remove it from %2. 解析为 Markodwn 并粘贴 - + Fetching images to local... 正在获取图片到本地... - + Abort 终止 - + Fetch Images To Local 获取图片到本地 - + Fetching image (%1) 正在获取图片 (%1) @@ -2007,22 +2049,22 @@ Use the "Close" button if you just want to remove it from %2. vnotex::NewFolderDialog - + New Folder 新建文件夹 - + Please specify a name for the folder. 请为文件夹指定一个名字。 - + Name conflicts with existing folder. 名字和已有文件夹冲突。 - + Failed to create folder under (%1) in (%2) (%3). 无法在笔记本 (%2) 中文件夹 (%1) 下创建文件夹 (%3)。 @@ -2030,70 +2072,94 @@ Use the "Close" button if you just want to remove it from %2. vnotex::NewNoteDialog - + New Note 新建笔记 - Please specify a name for the note. - 请为笔记指定一个名字。 + 请为笔记指定一个名字。 - + + Template: + 模板: + + + + Manage + 管理 + + + + Please specify a valid name for the note. + 请为笔记指定一个有效名字。 + + + Name conflicts with existing note. 名字和已有笔记冲突。 - + Failed to create note under (%1) in (%2) (%3). 无法在笔记本 (%2) 中文件夹 (%1) 下创建笔记 (%3)。 - + note 笔记 + + + None + + + + + Failed to load template (%1) (%2). + 无法加载模板 (%1) (%2)。 + vnotex::NewNotebookDialog - + New Notebook 新建笔记本 - + <br/>Both absolute and relative paths are supported. ~ and environment variable are not supported now. <br/>支持绝对路径和相对路径。~ 和环境变量暂时不支持。 - + Please specify a name for the notebook. 请为笔记本指定一个名字。 - + Please specify a valid root folder for the notebook. 请为笔记本指定一个有效的根文件夹。 - + Root folder of the notebook must be empty. If you want to import existing data, please try other operations. 笔记本根文件夹必须为空。如果需要导入已有数据,请尝试其他操作。 - + Root folder should be a directory. 根文件夹应该为一个目录。 - + There already exists a notebook (%1) with the same root folder. 已经存在一个使用相同根文件夹的笔记本 (%1)。 - + Failed to create notebook in (%1) (%2). 无法在 (%1) 创建笔记本 (%2)。 @@ -2131,35 +2197,58 @@ Use the "Close" button if you just want to remove it from %2. 无法在 (%1) 创建笔记本 (%2)。 + + vnotex::NewSnippetDialog + + + New Snippet + 新建片段 + + + + Failed to add snippet (%1) (%2). + 无法添加片段 (%1) (%2)。 + + + + Please specify a name for the snippet. + 请为片段指定一个名字。 + + + + Name conflicts with existing snippet. + 名字和已有片段冲突。 + + vnotex::NodeInfoWidget - + Notebook: 笔记本: - + Location: 路径: - + File type: 文件类型: - + Name: 名字: - + Created time: 创建时间: - + Modified time: 修改时间: @@ -2180,22 +2269,30 @@ Use the "Close" button if you just want to remove it from %2. vnotex::NotePropertiesDialog - Properties - 属性 + 属性 - Please specify a name for the note. - 请为笔记指定一个名字。 + 请为笔记指定一个名字。 - + + %1 Properties + %1 属性 + + + + Please specify a valid name for the note. + 请为笔记指定一个有效名字。 + + + Name conflicts with existing note. 名字和已有笔记冲突。 - + Failed to save note (%1) in (%2) (%3). 无法保存笔记本 (%2) 中的笔记 (%1) (%3)。 @@ -2218,96 +2315,96 @@ Use the "Close" button if you just want to remove it from %2. 该标题栏包含管理笔记本和笔记的按钮和菜单。 - + View 查看 - + Toggle Recycle Bin Node 显示/隐藏回收站节点 - + &Manage Notebooks 管理笔记本(&M) - + External Files 外部文件 - + Show External Files 显示外部文件 - + Import External Files When Activated 激活时自动导入外部文件 - - + + Could not create folder within Recycle Bin. 无法在回收站内创建文件夹。 - - + + Could not create note within Recycle Bin. 无法在回收站内创建笔记。 - + Please first create a notebook to hold your data. 请先创建一个笔记本来保存数据。 - + Select Files To Import 选择文件导入 - + Failed to add file (%1) as node (%2). 无法添加文件 (%1) 为节点 (%2)。 - + View By Configuration 按配置查看 - + View By Name 按名字查看 - + View By Name (Reversed) 按名字倒序查看 - + View By Created Time 按创建时间查看 - + View By Created Time (Reversed) 按创建时间倒序查看 - + View By Modified Time 按修改时间查看 - + View By Modified Time (Reversed) 按修改时间倒序查看 @@ -2315,130 +2412,130 @@ Use the "Close" button if you just want to remove it from %2. vnotex::NotebookInfoWidget - + Basic Information 基本信息 - + Type: 类型: - + Name of notebook 笔记本名字 - + Name: 名字: - + Icon: 图标: - + Description of notebook 笔记本描述 - + Description: 描述: - + Root folder: 根文件夹: - + Type of notebook 笔记本类型 - + Specify the type of notebook.<br/> 指定笔记本类型。<br/> - - - - + + + + <b>%1</b>: %2<br/> <b>%1</b>: %2<br/> - + Path of notebook root folder 笔记本根文件夹路径 - + <b>Notebook Root Folder</b> is the folder containing all data of one notebook in %1. <b>笔记本根文件夹</b>是在 %1 中包含一个笔记本的全部数据。 - + Browse 浏览 - + Select Notebook Root Folder 选择笔记本根文件夹 - + Advanced Information 高级信息 - + Configuration manager: 配置管理器: - + Version control: 版本管理: - + Backend: 后端: - + Configuration manager of notebook 笔记本的配置管理器 - + Specify configruation manager of notebook.<br/> 指定笔记本的配置管理器。<br/> - + Version control of notebook 笔记本的版本管理 - + Specify version control of notebook.<br/> 指定笔记本的版本管理。<br/> - + Backend of notebook 笔记本后端 - + Specify backend of notebook.<br/> 指定笔记本后端。<br/> @@ -2614,12 +2711,12 @@ Use the "Close" button if you just want to remove it from %2. 修改时间 - + Invalid node (%1). 无效的节点 (%1)。 - + Please check if the node exists on the disk. 请检查该节点在磁盘上是否存在。 @@ -2734,17 +2831,17 @@ Use the "Close" button if you just want to remove it from %2. 文件不会被改动,仅仅是从笔记本索引中移除。 - + Open &With 打开方式(&W) - + System Default Program 系统默认程序 - + Add External Program 添加外部程序 @@ -2780,17 +2877,17 @@ Description: %3 vnotex::OutlineViewer - + Decrease Expansion Level 减小扩展层级 - + Increase Expansion Level 增大扩展层级 - + Expansion level: %1 扩展层级: %1 @@ -2798,33 +2895,38 @@ Description: %3 vnotex::QuickAccessPage - - + + Quick Access 快速访问 - + Flash Page 灵犀页 - + Flash Page location (user could copy the path of one note and paste it here) 灵犀页位置(用户可以复制笔记的路径并粘贴在此) - + Flash Page: 灵犀页: - + + Select Flash Page File + 选择灵犀页文件 + + + Edit the files pinned to Quick Access (one file per line) 编辑固定到快速访问的文件(一行一个文件) - + Quick Access: 快速访问: @@ -3122,6 +3224,281 @@ Description: %3 输入以开始查找 + + vnotex::SnippetInfoWidget + + + Name: + 名字: + + + + Description: + 描述: + + + + Type: + 类型: + + + + Shortcut: + 快捷键: + + + + A mark in the snippet content indicating the cursor position after the application + 一个用于在片段内容中指定应用片段后光标位置的标记 + + + + Cursor mark: + 光标标记: + + + + A mark in the snippet content that will be replaced with the selected text before the application + 一个用于在片段内容中指代应用片段前所选择文本的标记 + + + + Selection mark: + 选择标记: + + + + Indent as first line + 与第一行同步缩进 + + + + Content: + 内容: + + + + Text + 文本 + + + + Dynamic + 动态 + + + + None + + + + + vnotex::SnippetMgr + + + the day as number without a leading zero (`1` to `31`) + 没有前导零的日期数字 (`1` 到 `31`) + + + + the day as number with a leading zero (`01` to `31`) + 带前导零的日期数字 (`01` 到 `31`) + + + + the abbreviated localized day name (e.g. `Mon` to `Sun`) + 缩写的本地化日期名字 (如 `一` 到 `日`) + + + + the long localized day name (e.g. `Monday` to `Sunday`) + 本地化日期名字 (如 `星期一` 到 `星期日`) + + + + the month as number without a leading zero (`1` to `12`) + 没有前导零的月份数字 (如 `1` 到 `12`) + + + + the month as number with a leading zero (`01` to `12`) + 带前导零的月份数字 (`01` 到 `12`) + + + + the abbreviated localized month name (e.g. `Jan` to `Dec`) + 缩写的本地化月份名字 (如 `一` 到 `十二`) + + + + the long localized month name (e.g. `January` to `December`) + 本地化月份名字 (如 `一月` 到 `十二月`) + + + + the year as two digit numbers (`00` to `99`) + 两位数的年份数字 (`00` 到 `99`) + + + + the year as four digit numbers + 四位数的年份数字 + + + + the week number (`1` to `53`) + 星期数字 (`1` 到 `53`) + + + + the hour without a leading zero (`0` to `23` even with AM/PM display) + 没有前导零的小时 (`0` 到 `23`) + + + + the hour with a leading zero (`00` to `23` even with AM/PM display) + 带前导零的小时 (`00` 到 `23`) + + + + the minute without a leading zero (`0` to `59`) + 没有前导零的分 (`0` 到 `59`) + + + + the minute with a leading zero (`00` to `59`) + 带前导零的分 (`00` 到 `59`) + + + + the second without a leading zero (`0` to `59`) + 没有前导零的秒 (`0` 到 `59`) + + + + the second with a leading zero (`00` to `59`) + 带前导零的秒 (`00` 到 `59`) + + + + date (`2021-02-24`) + 日期 (`2021-02-24`) + + + + the abbreviated date (`20210224`) + 缩写的日期 (`20210224`) + + + + time (`16:51:02`) + 时间 (`16:51:02`) + + + + date and time (`2021-02-24_16:51:02`) + 日期时间 (`2021-02-24_16:51:02`) + + + + name of current note + 当前笔记名字 + + + + + [Value Not Available] + [没有可用值] + + + + complete base name of current note + 当前笔记的完整基本名字 + + + + vnotex::SnippetPanel + + + New Snippet + 新建片段 + + + + Open Folder + 打开文件夹 + + + + %n Item(s) + + %n 项 + + + + + %1%2 [%3] + %1%2 [%3] + + + + &Apply + 应用(&A) + + + + &Delete + 删除(&D) + + + + &Properties (Rename) + 属性(重命名)(&P) + + + + Confirm Deletion + 确认删除 + + + + Delete these snippets permanently? + 永久删除这些片段? + + + + Files will be deleted permanently and could not be found even in operating system's recycle bin. + 文件将会被永久删除,即使在操作系统的回收站中也无法找回。 + + + + Failed to remove snippet (%1) (%2). + 无法删除片段 (%1) (%2)。 + + + + vnotex::SnippetPropertiesDialog + + + %1 Properties + %1 属性 + + + + Please specify a name for the snippet. + 请为片段指定一个名字。 + + + + Name conflicts with existing snippet. + 名字和已有片段冲突。 + + + + Failed to update snippet (%1) (%2). + 无法更新片段 (%1) (%2)。 + + vnotex::SortDialog @@ -3552,6 +3929,11 @@ Description: %3 Locate Node 定位节点 + + + Pin To Quick Access + 固定到快速访问 + vnotex::ViewWindow @@ -3563,39 +3945,39 @@ Description: %3 - - + + [No Buffer] [无缓冲区] - + Save changes before closing note (%1)? 关闭笔记 (%1) 前是否保存更改? - - + + Note path (%1). 笔记路径 (%1)。 - + Discard changes to note (%1)? 放弃对笔记 (%1) 的更改? - + Found backup file (%1) of file (%2). Do you want to recover from backup file? 发现文件 (%2) 的备份文件 (%1)。是否要从备份文件中恢复? - + 'Yes' to recover from backup file, 'No' to discard it, and 'Cancel' to exit. “是” 以从备份文件中恢复,“否” 以放弃该备份文件,“取消” 以退出。 - + It may be caused by crash while editing this file before. File last modified time: %1 @@ -3606,32 +3988,32 @@ Backup file last modified time: %2 备份文件最后修改时间: %2 - + Drag And Drop Files To Attach 拖拽文件以添加为附件 - + File is missing on disk (%1). 文件在磁盘中丢失 (%1)。 - + Do you want to force to save the buffer to the file? 是否强制保存缓冲区内容到文件? - + The file may be deleted from outside. Please choose to save the buffer to a new file or just discard it. 该文件可能已经被删除。请选择将缓冲区的内容保存为新文件或者放弃缓冲区。 - + File is changed from outside (%1). 文件被更改 (%1)。 - + Do you want to save the buffer to the file to override, or discard the buffer? 是否保存缓冲区覆盖到文件,或者放弃缓冲区? @@ -3640,238 +4022,258 @@ Backup file last modified time: %2 是否用缓冲区的内容覆盖该文件? - + The file is changed from outside. Please choose to save the buffer to the file or just discard the buffer and reload the file. 该文件已经被更改。请选择保存缓冲区到该文件或者放弃缓冲区并重新加载文件。 - + This is a read-only note (%1), on which modification is not allowed. 这是一个只读笔记 (%1),不支持修改。 - + Please save your changes to another note. 请保存更改到另一个笔记。 - + Failed to save note (%1). 无法保存笔记 (%1)。 - + Please check the file (%1) and try it again. 请检查文件 (%1) 并重试。 - + Maybe the file is occupied by another service temporarily. 可能该文件正在被第三方应用临时占用。 - + Zoomed: %1% 缩放: %1% - + Zoomed: %1%2 缩放: %1%2 - - + + Pattern not found: %1 无法找到模式: %1 - + Match found: %1/%2 找到匹配: %1/%2 - + Replaced %n match(es) 替换 %n 处匹配 - + Save 保存 - + Edit 编辑 - + Read 阅读 - + Discard 放弃 - + Heading 标题 - + Heading 1 标题1 - + Heading 2 标题2 - + Heading 3 标题3 - + Heading 4 标题4 - + Heading 5 标题5 - + Heading 6 标题6 - + Clear 清空 - + Bold 粗体 - + Italic 斜体 - + Strikethrough 删除线 - + Unordered List 无序列表 - + Ordered List 有序列表 - + Todo List 待办列表 - + Checked Todo List 已完成待办列表 - + Code 代码 - + Code Block 代码块 - + Math 数学公式 - + Math Block 数学公式块 - + Quote 引用块 - + Link 链接 - + Image 图片 - + Table 表格 - + Mark 标记 - + Attachments 附件 - + Outline 大纲 - + Find And Replace 查找替换 - + Section Number 小节序号 - + Follow Configuration 跟随配置 - + Enabled 启用 - + Disabled 禁用 + + + Snippet applied: %1 + 片段已应用: %1 + + + + Snippet (%1) not found + 无法找到片段 (%1) + + + + Snippet not available + 没有可用片段 + + + + Select Snippet + 选择片段 + vnotex::WebViewExporter diff --git a/src/data/core/vnotex.json b/src/data/core/vnotex.json index 7c3aa83c..ccbaef69 100644 --- a/src/data/core/vnotex.json +++ b/src/data/core/vnotex.json @@ -3,7 +3,7 @@ "metadata" : { "//comment": "When releasing new version, please go through the following configs to check if override is needed.", "//Comment": "markdown_editor#override_viewer_resource", - "version" : "3.3.0" + "version" : "3.4.0" }, "core" : { "theme" : "pure", diff --git a/src/widgets/lineeditwithsnippet.cpp b/src/widgets/lineeditwithsnippet.cpp index df0b0354..59dfa414 100644 --- a/src/widgets/lineeditwithsnippet.cpp +++ b/src/widgets/lineeditwithsnippet.cpp @@ -18,7 +18,7 @@ LineEditWithSnippet::LineEditWithSnippet(const QString &p_contents, QWidget *p_p void LineEditWithSnippet::setTips() { - const auto tips = tr("Snippet is supported via %name%"); + const auto tips = tr("Snippet is supported via \"%name%\""); setToolTip(tips); setPlaceholderText(tips); } diff --git a/src/widgets/textviewwindowhelper.h b/src/widgets/textviewwindowhelper.h index 3b8c6933..dd21b403 100644 --- a/src/widgets/textviewwindowhelper.h +++ b/src/widgets/textviewwindowhelper.h @@ -200,7 +200,7 @@ namespace vnotex p_win->m_editor->getTextEdit(), SnippetMgr::generateOverrides(p_win->getBuffer())); p_win->m_editor->enterInsertModeIfApplicable(); - p_win->showMessage(ViewWindow::tr("Snippet applied: %1").arg(p_name)); + p_win->showMessage(vnotex::ViewWindow::tr("Snippet applied: %1").arg(p_name)); } template @@ -227,7 +227,7 @@ namespace vnotex // Found one symbol under current cursor. snippetName = match.captured(1); if (!SnippetMgr::getInst().find(snippetName)) { - p_win->showMessage(ViewWindow::tr("Snippet (%1) not found").arg(snippetName)); + p_win->showMessage(vnotex::ViewWindow::tr("Snippet (%1) not found").arg(snippetName)); return; } @@ -254,7 +254,7 @@ namespace vnotex { const auto snippets = SnippetMgr::getInst().getSnippets(); if (snippets.isEmpty()) { - p_win->showMessage(ViewWindow::tr("Snippet not available")); + p_win->showMessage(vnotex::ViewWindow::tr("Snippet not available")); return QString(); } @@ -267,7 +267,7 @@ namespace vnotex } // Ownership will be transferred to showFloatingWidget(). - auto selector = new QuickSelector(ViewWindow::tr("Select Snippet"), + auto selector = new QuickSelector(vnotex::ViewWindow::tr("Select Snippet"), items, true, p_win); diff --git a/src/widgets/toolbarhelper.cpp b/src/widgets/toolbarhelper.cpp index 3dfece61..534c3a36 100644 --- a/src/widgets/toolbarhelper.cpp +++ b/src/widgets/toolbarhelper.cpp @@ -491,6 +491,12 @@ QToolBar *ToolBarHelper::setupSettingsToolBar(MainWindow *p_win, QToolBar *p_too menu->addSeparator(); + menu->addAction(MainWindow::tr("%1 Home Page").arg(qApp->applicationDisplayName()), + menu, + []() { + WidgetUtils::openUrlByDesktop(QUrl("https://vnotex.github.io/vnote")); + }); + menu->addAction(MainWindow::tr("Feedback And Discussions"), menu, []() {