From 2d50d519b5872a6bc2777c7d5789152e7160772e Mon Sep 17 00:00:00 2001 From: Andrea Zagli Date: Sat, 22 Oct 2011 11:02:13 +0200 Subject: [PATCH] Gettextized (closes #138). --- .anjuta/default.profile | 18 +++ .anjuta/session/anjuta.session | 29 ++++ .anjuta/session/dock-layout.xml | 2 + .anjuta_sym_db.db | Bin 0 -> 222208 bytes .gitignore | 8 ++ Makefile.am | 2 +- config.h.in | 21 +++ configure.ac | 27 ++-- libgdaex.anjuta | 47 +++++++ libgdaex.pc.in | 2 +- po/LINGUAS | 1 + po/POTFILES.in | 2 + po/it.po | 225 ++++++++++++++++++++++++++++++ src/Makefile.am | 1 + src/gdaex.c | 234 +++++++++++++++++++------------- tests/Makefile.am | 5 +- tests/select.c | 43 ++++++ 17 files changed, 560 insertions(+), 107 deletions(-) create mode 100644 .anjuta/default.profile create mode 100644 .anjuta/session/anjuta.session create mode 100644 .anjuta/session/dock-layout.xml create mode 100644 .anjuta_sym_db.db create mode 100644 libgdaex.anjuta create mode 100644 po/LINGUAS create mode 100644 po/POTFILES.in create mode 100644 po/it.po create mode 100644 tests/select.c diff --git a/.anjuta/default.profile b/.anjuta/default.profile new file mode 100644 index 0000000..cf999f6 --- /dev/null +++ b/.anjuta/default.profile @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/.anjuta/session/anjuta.session b/.anjuta/session/anjuta.session new file mode 100644 index 0000000..300bb0f --- /dev/null +++ b/.anjuta/session/anjuta.session @@ -0,0 +1,29 @@ + +[Anjuta] +Maximized=1 +Geometry=1366x716+0+30 + +[Project Manager] +Shortcut=libgdaex//libgdaex//src//libgdaex.la%%%libgdaex//libgdaex//tests//test_prefix%%%libgdaex//libgdaex//tests//grid%%%libgdaex//libgdaex//tests//query_editor +Expand=libgdaex + +[File Loader] +Files=file:///home/andreaz/files/c/libgdaex/src/queryeditor.c#15 + +[Document Manager] +bookmarks=\n\n + +[Execution] +Run in terminal=2 +Working directories=file:///home/andreaz/files/c/libgdaex + +[Build] +Configuration list=1:Default:%%%1:Debug:Debug%%%1:Profiling:Profiling%%%1:Optimized:Optimized +Selected Configuration=Default +BuildArgs/Default=--enable-maintainer-mode +BuildArgs/Debug=--enable-maintainer-mode 'CFLAGS=-g -O0' 'CXXFLAGS=-g -O0' 'JFLAGS=-g -O0' 'FFLAGS=-g -O0' +BuildArgs/Profiling=--enable-maintainer-mode 'CFLAGS=-g -pg' 'CXXFLAGS=-g -pg' 'JFLAGS=-g -pg' 'FFLAGS=-g -pg' +BuildArgs/Optimized=--enable-maintainer-mode 'CFLAGS=-O2' 'CXXFLAGS=-O2' 'JFLAGS=-O2' 'FFLAGS=-O2' + +[Debugger] +Stop at beginning=2 diff --git a/.anjuta/session/dock-layout.xml b/.anjuta/session/dock-layout.xml new file mode 100644 index 0000000..d8c025d --- /dev/null +++ b/.anjuta/session/dock-layout.xml @@ -0,0 +1,2 @@ + + diff --git a/.anjuta_sym_db.db b/.anjuta_sym_db.db new file mode 100644 index 0000000000000000000000000000000000000000..9be886ba38a0c31ee3dd8d11a4eac47841e2935b GIT binary patch literal 222208 zcmeEP2Yg&dnV)&HyOP|yEZeeHZYq{6%X06sEX#_EY)Q7`B+h0nt!2e(R&hyX?GQ*H z36O+P(>tV)Mgj>CI-!IT4iX^r;~*S0m*XhM{lA%4=DmGyca;Qwa7b~!C%yNz=`-Ja z^G(a{?VW>(=%L>J?)YG|hJ_gCY-2Ra7^DB6$N$#PMEt_7KRmx{uU)@JS>=yrgz+jY zenuan;!olg@mujr^`{Hh{G%i%lD}puXPrImi4y}yyP#eyJ~Y@X|BfB%>`KI{3Fe-T zhH~;}&g7Tp55^C6CHne%&rh@snvZZ@bA4@VeYCZ9)AstP`7&B+{u1kKk9PJ9COQ)R z(Ou1rJ8GNvN4M4QkJj#KZED;J(jE0XTPsFIeSa(-J@M{DbTDyZFxu0L|A)G|GEp2$ z^bd6Q_PB|n?TJJ2p{~JbN%f+|B|$8X_a7PPi?=0o&714D)Hm1ftgCN{9`7~3M@#Kr zfm#;CF5VOGIysPt4R#_8?eW1x5aLiz=h2~rlW~;j3M)TjW`fEBa;mH{9LcYp8B~^5 zMpm1@M0SZt{=$WPzbsF)=m!#z-_w@x{26kUujgZ_)Do0s$qt^AUsS|T7fPOX-q^nw zEjYxidQBYQ+Z52!hm_&_u{3w7? zc>sB#v4C7W%kXdHXCwzka^Rmk2da38t*eRmoIf-ekJ-Ih%p78tEUvDutX^EXWJz@K zs?|%Dt*%*4T>%$AX81SqGm--%Iq?542WE+NJg7(DW5q)(S6s<4C;y4~H*vT4ytq<4 zDQ@`xmklE+8p(lw&z@iFh+7w+|ZUFjWU-XKc2&=NVcl39*xAk@nb@wbv!6qBn$_0@K zo2z37;FW|UY`%?0gK7X`c__jbT8LI_3&5=q{;HwQ$tcrn*` zyXbIaf|zgqt@@nsWU)}aaQc>zAFDRuX4PhRShdOZe~A5xv0w3T8>5W_#<}br_%Gn+ z_1l{d5P;XOpN!P~|B>xr6#4-K0Chxt{EU&Wsk5m6&Bof?Mavm+W(3;pj;IhJqlM3}xz#RjcQ?WMOX3Fx_QNHAHgqr%vUU9hJ^4WF4me zb6hSh^d?$LP=s-ohD5LE z6m8;w*e7<2ZK7Um5UWIus1zllSj-etVS&gK!uX5v-^Oo^myDkp-#4B&zF~aX_?+>y z@loSZ;{oFy<2K{{4ejyz6TA95kHHsx1J7jxgZ)EogE9Se_^*FuD@RRW9EMFeE%KRo z;zvhW&vV$|$-V^q9rf2CP;SfvC2Yb(nU5z?Zmz9AGuBYw8pCvWFRTS?VKwcJxApg? zd=cP~oR~Y2aTu+W1yeaM!Y}ygAd^h2BQY4mytXgVKX`HlFKuW#NJkN(<-PJ*5$zbl zX#?__ml&9=Rzw^2#=GEHUw(`p_;XjhKi=KamuQQY_YL4tcC5FvJEcMUz6kQWk@GUr3r{<*+WHeH;}~T1Adhey zBGwo0A4v39Lr1Cv(Q=toNow@+<1E+=n?>f~7c;~4jfVZAH1bE}A z^8nv_>TJOGoN5KU;S}+|{?tamYfcf*x13r4c=@TBfTvH52TY#I0lefC06Uo^{wI>X zfP+agp${bY1NJ3b0DF?#0FNZ=0S_lP0(KHt<#R;*YFu&f54W)Z-mQh?IA041{l z=25Q99b*7aWt#!nz2ZgjxOlr55a)^##wErUV>4m zuHFuLvWGWJz{{^zhWGe08^8`xBG#Yi?mdR(>|mllZwHTo;#<|>v$+u){z0AK0s+*REu_+QjMM@7G?mZrB?>*jQYdy$&KzOP;d>}1hTO21=x@@ZRI90E% z<>7?ClGJ@5>*z4fz+k+)FLtQEw>ySIEqTT){!x(bn;EXL8xYxwWsh^LGjZIg+>7st zk}#T>nG*S3ZFt3~RkkPEI=kat13CLS&Gyco7p`~nGI86w;sXP*&YsRev5~6SwzBXJ zZkRnBw2Q~Od)tw!!QNQM;E}G*fk9auJolShfW3)ofDbm6lG2tsy4b&iLd4fxtXz2R=!8m*UGqx+}{wPGm9-NUJ?s3;Dv zBQ!aR?XHjQ+ltd*vDW>&>SNpMTUv5=^9o=sEDSHRu^LDa4S03iYg<|(W$cG?{m)Q` z_KI&X>U4a6#*E5&Q^}~D{DK00b(uPyB^?!&?P{#c>Ot>@h1}Z}Ej5i{ui;ppv{7N) z@9asm>t-YCY+h6|LAh*VL1*Mrk81^-(^A&4-hoaU%q;Ux0B+}iI>9LYH#6W4bawQ_ z2Z#FAA;SQM{Rv?7&;&u+<^r&!I64JFt(%5iC!^C+WJDvuF5p?<{Zv#crdHy{R;obs8qu&iA6vQt=!p-B zcWHDU>Z5KdcBm`fVJmE&+KDa>C?o4^rabK!^)!GA^`g(LmjOpK%c%Y5imMp>|9>dH zDL#jp{(a&`ycqcz$$^m^`1|I-_}maH=82x6?nHkaQ(ZPTC&UW*p`jkRP-3GaAy&Y< z6Ws?B{cLoY{!r^=J|+}mGdXp)=rq_U5n}mVu4LIbBgBfx`(G_1*;t$qEab=H{hf4Z zp3#gjSG=Ez_lpmT?}#VFPqE&AR{Z|&oA427BRMdV11UK$4u^o8-Tq)1f$(UY^f7yZP@XXR05KLve(WB=AU0O}m;OIF>`E+&*oXP8{2RtQjW3FivOW0k z)&EpYPPYq*WlZNF&LzdFt>306yC>ufZ@2vL7`YF7dakt^k#jO@nmEC`B9UKRlSg}& zHN35GiU=ZSf2p(DOwk-L_lMDIFpd>Uzb)OK;{`=_D61NqE;FqZOFsgc%8AL1<8tzg zi}|T-cHXG@E#a!)Ca2_&H5)c(!rlq)@G}X)E9B9&;LYlw6eE~L&G<-uLvheHwv!H( zY9(k2RigarYJNIwr`tUdCp!0=sVVv3{_dK(+hz7@GK1<3{kZwRn#@srkV$nDBl-KP z(`AxJ7`d8wGGLlq|BL@(_&4%1k^>_-@UM^qdD!|d=o>l+Q@q;$A8G&p3dKH>#*rM5 zIY0{r)%@lBA3^^{enxU&BnSQlbAZPGk@o*DSnwlB9?1dZ0ImN=+W$yZ7|DTu%^VmR z|Nk}1eI(T*IY2o;<9`l=Q)>^ul7G~AgYg05FQUTZ37FhHJtx1Ugr9;FD4Ygju|fE# zDlgo2*B`T8`zfwZ(NYkdDwrg}&u-!wm8bi$)bHF>A+0cRhj0CRT0! zQuw+x1H0|K`r@#50nOTMHAao0<@g%B%?ci6bSffGe1*D#PuS;w{$2b)yda(vUol=b zUc@<_JB=%i0i)TdHaPz+|2V&f$N3U&urITlST~Vo`LnoCunzb~Fnv~JaiHiWoJ$y#4zNX&1*=!|{`f_cYy@(rPh~iDqF~jE10ldM~Q(sbQPFnJ@CR*wm2yT0dh|ECg#*Qk@f3Xonw^2a#?|w&C~dl1+ebN-hQ5pPUBR zK+Sc{E`TM~0M&(t7|%uS8byRs)kZe|sg6Wfb4H1N-1(HI zx7Kn7GTEe7&MZ97!Y2If$fHyyfCXX?R;ZL#!}Vf6;)GU3D^2VI7^tl5x036^nWZhLFYi zqS`v`v!}j!f2@9UV{210yB^=p@fIuIHO>{=Or`WAVbtDG7M&N+RKA<$|6IJx@NeX2 zBnL)v;9npIMsXu&WB-@v=gZ3f=l5*Hvpgj`jg~M4Y z+vgnB@-)qw(_URuG?U#6B6E46YfrBMX84gcJs6XHSHp=Cqwl_48eaBW=8>EsYUEg{;x65P6yqzlHz1aSi_jPp~KP`XBx$xnNe#%!O0=sj0AUcXad>Fn1YOCL7>73YEia*Mua4GdIc^~ z!i$3hF3|;A8*^p*XDa== z+}O}i-;8U?T`18_^;?>n>!X|Nx7Xudb>tWkjl#QVeQn*=XmiuPQJd-;8h4J$Gf}oQ zH|?;pRmP_A=4y0Zw708$kyN6yea)!)otsbf6z0sVD&TJ{ltpSQYL+HcRlfx&>!78o ztG@XuOnYfAooTxKQ!xca;)nQo{4Czeck-=#6JN`h^ToWJ&*QWCbUulX;gPW5oLws6B@$jN;YAW& zDB%SXo|N!}gvTX3CgG5TgAxu%*e~Hx3Hv1Mm9R&`ZV9_2JR;%w5_U>>Si%ko4@sDi zuwBA72@gsbm+(9ZV-lV#;Q3AanQO~NxIY?N@TgbfmIk+5FE%@Wp0xJklV2{%f(LBjPCu9I-Bgli;RE#WE& zS4y}-!sQY!lW?hoH4-k7uv)^!5>`pLNWw}9DBH;oF=Sw(G!nqR8 zk+4|8sDwol&X%xH!dVi|lyHWG1rkn|FkixH5@PQUHE@cAlO>!a;Y0~1NH|`?aT1P| z5SM;}YP5u-B+QeLv6~|T`}6#JXx0~~UmIySZ;`*Vr|_#P-__Lqx%dTrd=igZaR|{n zM`PFjW5x~aw2?G6@;~zD`CUB8H?o^?ZtzEh>i#KT7s6D|J;Btbf;8*UCuNu$JCW|< zgA{b^*z{1rd_x5`X&5}x+Mh_YP^drtMtpqZx=>N4;h7@^&%Mm(fM%RQ-VYA<%nB7$ znIRIKofb3ND8*;|(8^FzEUgG_11maq=iI*aABGEQ9m|$N6!kM+9 zqN82}t>k0oM{T9MayOKQ3hO+TQ_nTI>)AQjm7t)OSIrF-uJS{6 zmP!NX0q@#Hp~5B)o|fW%gpGvH#NqhBVY!N{2gyfPgs>V8Y$SG8tM!tzt4c8v%a?`< z&km-wruD!qs|powGn|+qT5v#o{b*`N)BJx7+rTjD-+@tms_{i*KRkREvY#V*;UGSw z|EU>+D6fd%2`pYvg0PaD);Kb_Yc0<;8+3cT&JOk(;eTbTMuP~*ps|Qt{t~Y#{%@`s z{-iMO)vDNxIE*KLP#57jMr-J*)ab(PhL<}b z5~uwka6*928j4+vr_IR;k-Es_CpYS&J-|AyU%ZS_3~Hyh zik8#IGQ6ulQ9i~a$cF(5JTesmR~Q^O|ByA#N1!r>vHxc7ylLxcgPR?B>X`yZ2MJVI zBrG|03dR3MF^nZ~dQ5U#J-Dc`8$7b`&XdiQsVb19EBE_QuW?0KyQ$KsAeF$7^jSL@ zi7$pz7->`NNjy8Hg0+|D`EViXhDk)NTCj_n8s-V#7VIv2!Xrj!P6Q*f0T=o=;2psY z*v->vzr=aP1aP(nJXPzd!jTQ5!5;9o;IF2k!M>rvmO(^2@1{YobUX;nMp>XW$}JX^ zj1f+>Ios5lG@z|X|};%nlIm5~x&+!EQrH^81* zyvl$Jlo@uoDpJOa%jAou=FRoZv7ObCg}iv7_C~(XbLJ*QtZ*gdA4=s>yQAKhU?)EC z2i8QE@#1Bggx1KF|y`)82F*^d$&dEd2xLpk66p@?OE_4H2#6w$QoX}#+TR5rq&E> zfWhz5%Gs-KYf}aWtxf!c4Ut-2T?OX8C-^P=hy0I55xjmcGH!ys?yq7k?)mrv?)JD`Jf$j!y`|2fXwi{GX-ew9L>*6e)Xcl@K~2+yBuI+V(I@LGnc z0P*a)3UuQ63r!?DaJ-IazhpO5MXKm(6;(mBYgK|)=W`;(Jipjtj?nZGr^KX-E&JZ0 zNF~p&)KJXG^&Ui1-4_>24P5BbNjE12U-|C-W-U4xSQ$)}DLTIL>QxK_$V_R!-HZyA zU*|(?=SdI)8-cy-v>dvNM$-83x+mrZs>A6$2|?c=T2aRblnew^#i6d)~S?edHKL# z_n=%5O!3SvvtmzkyX4qHXjpIXBcx${Mh*Gr<#NHkvc@x`PMx$#^(JSf9_ceMOQ};f z*P{*@d{Vjd$KC3b$%(vNc$H7`2=(VcLSr)_6blL|R9{aJ35>AvtPZ~?Sky!xQ5GEu zI64CY)<6JmG$~x8WikoCjFnbg>S7@NZa*m~_BtD-e1eZO7ZVcMSpbo%AQDC=*!SoM zIOe@g`e7n|nMb0z5^tcBM&;vuWa-o-Dp@%l3$k@skX2)qP`FMLmU=viH=|CgwLX$G zm^gteqmX?11=U-9kfL!X5^3PK1_ok%e}8X3T0nxHWgVvNaGXcmRPm&*+W)_qiFae= zU%=0mrslsv>wmQ@lWXQ8KjX;H99T_YL8Tv6c$&eLs*beCn|Hq04noGCWr1$S!Q~xv zc}=w3p+auLo)Cqx*3)nmCt3`bbtp~+p1gFJ$g6F9Ma$Z-at^eQk@mD8#{DtbXm2@Z z7%#p?wPaWeEuTgoh%FkYPN3c|WV-(7FSoz+O zUA`-`iaI7~-0~XLr)7EhwCoe03#TL`iqL1xHTVwdvoHYI6-VxT8J$wSprHp>N0GtC zuJ+|qJ&H&sB!=ey)7d#VLBuX(?`5B0KjRVXjBn*V{09DM{!3#rcHuj)PyeLxA0h`Q z|5~vBe~)+$y9~2K#rRi--GwUF+FABjtkj5Nf zaWpSOaLBa2mMJXgBf%Q1fI!Vs2oeoSo~d!2imPX*9dXg+mKeb&nO_Q3pe z74n^)Oz~YW!%v78c?vlQv9%G#uBfL}e36^>z=FkRd-BB(6^=voaPs1Xs{O;z-_EXL zkFXce`fK<({Br&v{{d`(D~)#JZN?L5`;*y9Q6+X^kKj$>7V+hUA^5^thEnr{zH3jO zc1-0Ql|P+DhR8G)dotKo+$m2uMe$ZoTk}C{YUX=_a=|QDs%@LK zg_WV=h73A1+DR+TLXSq7wz4d8x3Q(Qwz;*1mt=(-+qq}^c3zc5=F;VMykb$PxG_V* z2+_=k%An?>m4&J9yqTfG61!?Q#5UJ&Y22yq)#LAvh6-yu8}SF@gKdXnrdvhh^biJX zt6ivh>cIr&nGJ;@Y(%&}I6Dgy3qsfo^nC5@?(Q5s0}ZXw`z7E8)#fFk!hIfGZLX#~ zjt5+x37e_?&t|v}b%CB2vf?#TSagD{zY=jnUEYD)ToV!#eu~e{gzudbrGmBF$&)=lp?! z@Iu!I$srH6$q&uOEryD};_CFvc~JTOEQDGjopC>peS_bUA1*N&+arD+`x?Kg5I1fr zfu6BGkA0Qj=pLKR*Op(VSBD z^89dvqiBF#v7(#W{|t69E>dOhV-K^hvR}a?wwmvS=j@IAll*6B{R@q4#`(rIxU2g+ zhz*8t2%-zV0*~Rgupfx`iI3ve;9uzq;U-dTXTY3j$Cm%EYA))jK&q|JLvq1O5{TXWa*S-~nxWw3QpM5X1Z>@-?T%JQmttDbRC#QEOT zoVSGU@#twbU2Phc+rk%lvPDC(CMmgR@cF@5cIKVUYdk5^c+nIlcN5bY^gF5D7=MasEX?oM77oR{XL zD|b6DNrxn7Te+>girW8ZzM1jOyc@pr&l|IhJ;r+w=ciosizhMTKZYAY9~9rft>BNj z_B;IRzP8igi@+zD8=>}OSnDgO@N%8?To4K`GPjt65M+hT%tx*{qUHv#FE7=`GH`0z zQwpz${1SJMq;F-J{Sf>9Qf%wz*SHZ?r{ROHKCmCSHg-%_<}Q`Kz2yGFezyr5*ZH+x zS$bdRE-QWONsfZ-_bcH`kiWuVq4#yUZfgA#pEy!ctS&{b-RA1t+=lk6a8`$%zQ);W z_cTpO_Uh@`5DK5A?ElM{*kJVXN7#R|W#|wx{Un!_!o0el%&SGPPVUDbo`q3fUZyUt ze{FVEm`R7)1_!&#XL~G~+Cs;>8z2Qsv+(8;%Pd?By*skg8>=|m;awbiZR$6`B%5eO z6sYpT?Df|bkjYrN0Ld8cu7c!(C~0Ef>yU)$v?iVv&TT-mez8Tr4 z!VzxS|L3qf5V?&#!M=i}bO>kS7GgFK;}`Rr_>(wc_XlH|u@#^TV7rq{O?AH{)jnqvs1+d>1iePU# z_9qJMMuci6=q#sc4}c5+?9a1Ap!Xa5gOw&Pd2185^MHlnzh? zJT<7w>C50`u~1v4%Xi183Lp2R2wk(QC}|RO$rMqk{i&v5mrfH^=0r%FD6uQ4d>m4j z^ALLrWkc#mdy&qrE*8>dF4*zs94G3a+ogw{nju!{T52ojGpOz=xz^0{4OCRFSLW<8 zN%Q}i>~@BKpN8Rv;Y{pCoR&?Z?LP&Vo0pBL#tLJQXuZU27p6numKUEB*>;Ag})#V_z5RWBvay(Fbc2fI1&E0(?N4k~V&mMRa`WsmaO zJeFNW?a%(M&qUb`P7xq0^iO8`-xZ_^twq>vD)wS63do%dYnjPzcXab$$k`sd)ltCx z-JHa+TY?mLRXL@+8L=K`pL8+>f}JLac#)rS>0~xHZ5_@YawS_su-4%0o*)c6V?OLk zm&SwE-t6Alm~Yx;tbe6l3wBq~XStwe_sXz)d{*V^oZL1N@Oo81?b zPv#n%eIOV?uCLj{L76~16YN2XmFkxX&b|fvkgI-a8MSlIj!pH=?6IKlYBPh~9sIqy zac2X2l;;112;z;C|KG(Zeyezk7{bZ^W?13^!K1xuu?=RAj-byufFi|z39+6vw#&^_zqGJaW=U`K-m==i|0 z*X`Ad1nV3I8J2e|D+N2AJ&Cq3tf}z3hQK#XPPejTpHPj>g_{jKehh| zJOIRg<8k=^9%o<2ANEhOdJ()3;eFdl)|z;*b;CDbLvPH^xFOwe;hjJ(i;iJtUV4*; zuS98Lno|j#_d#c}$n49cvs1XC-NRJZGQP~sMpH+QRI;c7O74M@q+-W!@nvi?h+sk|EWb4cC8J z%H*A#v6P*5B)&Ub1wk9lMmdqogi})TH%) z9$Uxo??FDFzt0dxm+>{RQoL6@E#5I0Im!!zFH-175XYi!GlXKM;oHfcuqT#J_LS_& z3>vwQ0qBVh_KWfzn03-6$B+#Ol#|kh zQ&~uo;U-HGu}`%};xvc^r$_baPEVOda=auP4natfb+?FLYP=NLB*sg_K7TM0qw^e@ z(qeb1StrG&SlE_~`GEZ* z-*%|=HxIk}(?$v+Qcgr^4*r0=EVx6>AW;qg>y|+CqtKiN(4+nXfG;1t7YJYbDs-2_ zLFq8H*QHAR3#y_24h&#L(0_-&{+`Kv_@GTj^qRa4m*z z83$K1A$tuGjt)~rXUld$HahCEq^h&3pla6hC`pbbOz0=CM$Pj1S*vJnVAA+MiQz7= zYSxLi|1Eg`?ZS%x)7bS}XdE!EHa-rI-wOEpUMD^YAE0YR`Y>kRt#`YpnY%oM?$Yhy zto6=bI%}#oXLw{*?k!jy!tQ?7()2Pbd2PWASB5ZRXD!(2ql$;8vEEptH6gfQWGzz; z#--_9#hoVS491n!AuLqVic!O)UFH>wLs&RuL1C5l!fXkwa<0lQFkXTVsMtNg;>=Z8 zC4`7Hv(BPy^UNvLECcr?%(zeL=wVr92;FTK*(OV}I(>ch9blY7U9QIeGnm+FT*aS7 z%+NFJ#s4sWNiJK7j;_-j?>ha*3tx4t(u_2@`@F_1#%b9*moEzL_R>m}9rPJ1p!ad; zO*W3>!_-@=ACan8p}ubMsC*Tv(B#X+tXYo4&~%B6AH$h0Idvj3Vfg8=Od%D+OoAg- zYQJ(Bv_Asv$trSW7)4?CIpN>F3gs2`!eQ!e%ap1wTly+%zt#DLzy2yTm&E16RNRtC zdeitn3xU7z?HB!lbY@WlgQ0wGn7C8&qf5FkeB-}_emanC@JL>G9<~H+6j~Bg$ zr*=_u_wyyeIBF*~w~^0FheNxmx%+ta%rIhRSUTxP2j=kcE{AmOoAO1-oy#Y<9NTpa z+i4_s0iRrobQ?Z0^y3qG?0SB&euzaL(IF?2$UOF4-Id?|U^x}fWxrO3qFiU+^4O>O z`~QAr>#7XSm6$md>=pCWh`UOd!JNgSp6TIAbR2f&GCvsAXHE&vw?3FJ`T9}j0Uctt zdnnO=vcA0&fv0mz`4sawgXfE^n7L(qs{iLLor$jY++%!`>BR4$mY-X3i$v~bKF6#M z9+d5!Jx2&5uZHhcXTM}pH04a?^Vkji5`P}ei7w1sdVBIJd5gcEt#tWk-aNij+5Zp& zdp~;;aSh+Ve{QrIpF%AEcZ&x^98tfX7PvKq7oHb6zzYv#w0BrTIX`p|1VsljS}&}= zD0}0DMZrEhY@LRB+9+F~q}$)ro+CK(KDxTQHp?_viOxO^76p4I%S(480Zm4sR`Ar& zFC8Y)rt@*TPf;RcdFXp*%z|3 zV>-)#tdr)Dtj*Gn=}=^!Acuy1M$P~4WMZxHCjKK{$L<{FwEypdo}94`v#SFJ-%Yl( z0~scUsuf%PMC4Dw^D5g8rFNlevY1G@naio)thG=Mo20wRL>bRYIj0CB-^@lm;4jHq zIfuDaZ_XO1moW1#k(GM7c_H#ZHVR6UV|CUl>H?&aOIAZk_|f;0u`$4n-tOK~cCjPZ z1nY=^T2B0FMJYo&*`~+ES!kUiQ7T=#3QCiOw-`zf$HJ@kvXS25>+aYjtA?q(E}7Cm z?Z1d^W$@s=9cTR-#AMvo^QiF_BW|q0{6E59=HKOC(#tzCRKS6WO@bkgmi+~;QjEAR+VyX$K-ABW@@0x6D=XkIZ?qGf~`^u0^47DS99ZDIP*?x6s$&*DNS6RiR1ZO z1zYBM-%X*yrZxyxtv(#;?eC5c#=3iZ5+@gIu{}Ew^tmh6)j2RYKzEhI4)ynT%dq5< zJX$YUgGug#hX_s6H#;eYPfXk4{@Br>-a*9wo>XV&4{B**pe^2)7`w@K<~oGyQ6|>f zx!T{`)pao5c4YiU!R9N8Z8CPmv<-HWT|p`)tQV|AA(~+;#;p@Wquw<9s!QAqhhIGX3!ih>pbYTePLlu7TR0GUFDK2 zG;u}Wb{cnsgVgauT%~#aCvXzzDtHh-jQhhH)bX$%vTFDv$^I>6^QNXSpc#3NY{1G zTeCEk+lAmZb#qN}@*q+bUT8n*Jp5tiO+_m+^w>l2{PR-|C|7tJI z*}FA|ZZC$}3$d4+V=4B+`(o$BgZ<82jI%4`VGcbA4f~Zm^Fm2EAy2N*Z!&vMjuSHM>ThG9fk+(OGS?x5-l`?k{H99r&j#VWcs2CCz^6 zS2?UjG<({w(#Zuh`-ESm+jlt8pOBUAkujo>(-|BxQ4LKJW%eJ+~^iwT# z{&byJVb_fk1ze4S7tm2B^{Xt^3&)FM!xx_;zg5X!PHjzlsfzyXH2z1}LMF~L zo-#)B9`+gh;s2A&ufuc)j&-|fjuzl@<>|v@cb&TS%UVxO0A*_7dZ>uA+Pi5>BbJql_Q0Q0oQ;MGeQDMTI_ypR|7c9(@$Y4h z;E(*Tu>aj*{6Wk`tiQY18Dc6TeZ4_^SXh@!@4_Vn*q%(u=E3ce23};{kL@=##+27< zqtMW@v`^^^M=!VFsgzE|K7CeXAN5};N$~5tvNqkwp04g3urAt{(H13A_^rmLq0MVTqZS<|@dekok6N1yFI1qRMvjrB{^sntjc6O}AFPQx}LHX=!nHor&AO zi&{(_(xQ4bON-2&r}_UBT=j>4UuVC;+P)q)=HASo;s0%v;LQIi;{(RGj6aFl=mk!S z+i)-N9f$>VD|Q8*$LZgXiD$)s;2iJ^;y=y6hzmnyp~5*K+@bk3@Rf>k<|N~Ot5qy}YXxF7We7rlnd>t#*rO1l946Hi_X@T>`ER=xXbzh=?@FaVw3inrLVB4RN_m$E{ z5xW9PZ_9{3(0PHxzA6h<273EtbXayxhWk0mPBTdNb6)HUIqP2_$2tc(N#8dG-Q%fB zOxD2*0_&10VA!cH%#aYeS;8*ZD>D=dAoHxW;n&TU4hKs#o7#q>{O%X$tjE-s9auw zvB@)6Aw-(bwQd8aGH{~l9Q*tDd ze_a-;vis+(6i^>{Ww!>mrzQM!XMM*Nw z+X@*ai2qKxiV3+b!yIbzHha0d4BZp~p4L|DJ#tKHlCZM@5)fft=Js4of;0i<&2sa% z@0D2R;V7|*Uow9S7{X!r0IeSa9ELpuajs`k1Bc;m+{<9jp`*P$T_C zO*tp;g)U#~Q9_&gc_c{9#?(WzCWAL1nV3O2nW@ov=P|jdHvo`oba5u#8Bx}-71#Sp zGeG&8U~Rlyr8;?=p$-<()uc|qLfX$lntPEflg--Us%~A6)xmoBu_Im7{{IaO&IDNd z@oyW;jO&bFi|rWa@9}BtDX)SKk9Zw=9gCxPf}$0HL-aRds}`+}F6`d(BOMe7Om#E9 zswf(L1>u>RWJwk6f+$=RJ}gmLWmc+&?4ENX`zbJ6MqzSkk$r+Bdg-}fUbH`RN-`~T zobpylQ0trz1+C8rT_HMa?DVR8u`7etXMU_RdQ!~T*?0;Vm5C3*q2EP7;VfHrmu@&LY ztVLS;B|QA~r7MXpI3+HL7F`(e(w`cRKxEXQbl-_ItsIU(i!RLG$(~*lKALq3C86ar z6zN^HmT0p~rA`}W?_!@^A3i=T!J4IxN2*qAAo5|z*2u%`I`)ZG;qI)(JKZ}EKU}k# zD6^F8P=;|I?vumGY}fb@zIMrQGFzt&vn$z0mxkN2POa*|BiF26MnqXARCUbkJ?vA; z{=bchE3sL$k#A#9v27`Xe0DGTnlYb}xXt__4|4iiKy zCsLz#Bl;rUew{~tLHccV`j-7@&PvUTyrMlr-3RI1pWJt_)^6I2^LXdr;aJ;He}AH< z4O7pP-3JkuK;5C&;L%JMA+_n>1#NKB>r_6?+4UpyX^k+WE_Kheaig0y)y19Z(!Bt0 z-N)+f$tbRj>l%nDZ3YwVNDMjSM9WL{4>7XGlto=<^Bd*)3Uf|dCUbv_H;q273pC%6 zE)Fu$hnkS+1}o7GTCw{j8q1PVDOXqdC)c~2G4-Sy@?N*()@PAis7wis?L_Tff!dvq zvR$Dilco-u@5ZRT?$T71XR}9;hlm6W?tp-WX1sufngDbU$^~T9M$awo1HD82Z3)jI z*2IanL?5}i4w&_}&Li9AM^dT%k76B69D;ZMVT1EW`2b&xOT?eW%h&Jc&^eTQoUfsl zA#=~{sXT_kwPugdVC`5(%a4#rPFBtxo`iU4DLGYVLk>y^n)3p=);DBTUCy_6C#dD4 zuC>D2u!B5&=>GFXXMq6Acu9bLP57OgOQoeY$*#fv+W!9dNy4w)4}9F*0RFrHPvAS7 zs^-@C626@wlX0*$tp`&ocjVlQ~XhEavwDw4Jgy=3IP7+zA9TDj0=l%4Ig z9;ck#i?8L4%oEZ<7L7%0K+NGi5VH(oU>hjH6Dq60!N!#3R1qjgmRR}LKtYn6Bqb-d znu9_CRW^N4AcZVb+3151)pYQDTs0ak@0Cxhhp|v%o#;#(_Qt!0647!w&&Hp-V4v=8 z=}WXl%liiKkTo;xt(lr2s+P(87E`DBUY*DyX9*nLnw?InYs^ZskVi9J9BD@L|M3Xz zg@1qHOL!;F{yYl5pGrglxzG58D1)ERb(rmcSX_qFJ})q~BhtuW?AFT8+8A^^{OIa0 z)rf49@oU^1w0BPiUN=TZyV$pvMyjcTsKn^Qxo3H%f7-nqL`BtR4(MOJOE3K!dtqLr zn5?6wEHoUi47}RD07yl}7H_;s;fZ(bo9--kk3Sx^o`GiPTEz4(T49x+o75}JL(9Ik z9=B!V%3ibZL5$x}7p?1hJzGBB?=v=nyl9Ok+ePjt-G#tzUmICP_xC#T_1kxS60UzP zSP$Z&Rho4DtDkWFJG;$QSM-j=N3PYLTbIeYqA6^B;rL~+m%4Z-G1j+SKT+!1<Sqm7Rg*-6i8LnlpFH;*Uf)_Dgh zhYV9fSWA4>vNt+BvoerCZU38^Thl9PPCz>jBIhsxtty6cDN`sa@#CHCc(AvmXhvi8 zKKZe{#ZQ()O!=@k4ndfgRMAkS<|k$)r6OwU!Vc|Fs)%E~o$bwj%q0Qw9XJnsF1BX($BkSb0iJbgnpH|HWcl(Lc_>j<(G0HX0y}Q4w!y|G0{RiJxL`|1q5UJ0{K&>k+@(FuspFf8S$VYP1=RMwyYv zf5JbGsNk3K1AGn7XTQY>fDgb}aVVRPVotYU+qA+~vje$@j2HZJNCR$y7#N;Mqy zYw;1m8vU7A3;E*neNkxAW1-CJw7u57VziCXIfs1}R@|OL3=L)vQSqZ7eWG-|H4$y%OcRMpbMbAOzY0Da1l(1*VPW_B?@!7tm zO)6VsY4KUUD5SN8Qm`K?q!s}+kfJkvtEA&3GGiZ-rqSx6XY6%<(`6R#ajWGFEw*uG zW~*T9G}aCZ#)IiC?#y;N@X5_~kY80HsJkxM?M|Z8?G4cUzkszd{CgWt^!$`hL~psD zUxJqYN&bEQCnJhGfcF`_i2whX@x1X@-2J&l9L3rHFJTwp$LKYF;&#h$|0O%3Ec_R2 zZ;-1qc!Sv0?IIsRdJ7;#%Nyi!;Ck;+mAFox+S%SdKZKFrGtY8QO_2X>#i7Dwepplx zawXa^FNB%04T5M5Gvf@A*1(l%IB;krWJ*- zEOSe>(b@-krubxw{asnpr}~s*U+(~#eY}4l5mR&ff$2Wi^~zhUi+miOF&fI^QpHkRHt*{4=q91&>99@Fv_1cmr$#FJQj#6#M`$L$uH*@jh;@bf`6{W)QQt`_w+Av%|7vu}EY@ zS7oWfB2||O>9hNH5|h@6T<)K&nlG|&#$7W{>_|5m{YOyYLU5sfakiUT27^UotrebC1%LUATzZAGFkfRCK^ zC4%Kx8GW`>JH2wWd2T1o|8v+DCeATFX0-DEQHOT-OUd zdsRN@Bg@>^-PC!OuWi^|M(Co+N_^~mwHVz)`pU(qkG?e06>Cc?HFbp%!d_sRc22p@ z+MiB7u_Cz_c0z7F;?s~^JURD~>(sbtiu5|#4$*f-&P*rP;Y7j{hant(i)8CpevA4- zlByt0I(VNZ)YsVW9+_P;7Ftst?tqwO5K{s%%P5UrF>;E8OXj>L6l+t#GWG`ulH?>Q zIr9+e-5Qu|q^*CApDe3E@Z}KqdKvup`K_rb11)J%yW)hYowWL=Xs6dnUYebD!!Z5t z_0v(8NjlQ_Kbb9J_}2yplV{kUc@>ZI>-aMU$I0J8<8I@7xascmuco?9A@r}Z&V zgS_LN6~?uKpI;J=rS)b|M7B>7&naGCLnLOU37$;YBw<7%_*`}PKo(*w_Z=Sj)4C-@ zkx`085oWir&t@kC{eyD#$@yk&c0w$QFuR96vn-s*A|;Zr54S8Nub`%-zh$&bC)znJIVQooQ; zQ(1da!|X%sE7bnSvUf1{J@i0rIQjEEV>-_LTy8uo3fMbDoA?ms`R@_m;l1JoSOCAo z7x4S-$${L5a&JbtXJDSyh#V=LnOn@g8D)~55vj+>XsYj>x~S1S2feIo_e7hmQ75dh z_!u`Ud`O*F`t6RSVzE14?^K#PM*LFZTieLx34oi82G zt4_h((F;sWd!@6Koc@Y{eSj){Zi>s4DmZgDfE=f`_kbPNYSM8^t=SrUw+~sr4T_`OHY5dP)4>R^KAA|A#Nn<8r{r*sF#aZ8*@G0Yueo*JU$l1K;?9_<| z$#iCe33JZs9eK5xpg#e7LLIJlorU(LvZw5xu0Aa?d&G5i+ZPw3ftuL6yQ;LfRhjj* z*k+$42-(3NKNtCp%P-Ur6|94`M#xrY6MymFyg1tSyui{QaDs<}mwY8PG%&FZ+yB0Mo5`Dc;bZ?_H& zG+<2-oH_9{8c^m)Rx)35FH+JwC|`o4lhTr8FxwoF*fKNDOQVX-SE@2_A%;)*>YQ2w z?<3{3rU*BOR3Lp$m}znADI#8a|HxrB7DmZ7EafV1u-~zto!=aU!ua{!d~p z4F7O|j{OW1yFEO~@8T~SYtVk|xo zJJH?6pTeaoM=~)!PI2D+67hvhd%Tng<*dga#Xj|#bdso`_`|pc=|DQHuHHCY^VCML z%1%ng$8ev{?sR0*kd96J0X0A4pMy`ps&oXXto)Ho%JlZc4h~{pI^NTk=z_ywXWNlP zJO9cmT#b~Dw@D_Wj;Q@Tlk$6OaGO)slw?t$KrTw^4{@(jB5T_A-s2AG4>DC`m%{yt z?%rbwTkeav2r8bn+@U_3@cZc-SAWcuIuO^SJ)5Ppfy2GWU0M4z)&4gzwuzl)A7Q_P zLw(K?x!7nV9AO|8F`9o{L$Y0bi(U%7Xi7bOy`cbzV<}CXaC{$-KS!rLD%X^ z{e6RD-FfA%e99f6&i7b$kmKTvW#vtW8PX+DsOEVl%S<`1@c?+YA;(8_YuSLGaGceNfn~F8_ZU z1Ab3I3Xn^b%l}^|3KR({b~CmA6MQklnZM=m{@KL0@}0bupT*DPhj0^6KR*Fqz{~iR z{B8W5{C)gZemB1#@qs_WKfynX-GHz2Z}S(iFYpWg8~zIavtbyy#yDe&F#~>s3ycb5 z3A_i_8=H+Yj9tcF;~e84&KUM!SMdVl4cKFNtMLxwUB->Z?Z&;vgYYkW()gtDdE+a_ zbH)oei}3HpFOAz51z{x ziBsau;%f9&?-4hPJH-dZL*j8nDf=|y7km{_iN7m;gm`7Y5-*ECy8j9bX7Je(7D*VD zuvo%563&%yo`ka`ER-;Ns`(OsfrKRzmP%MAVY!40C9IIJQo=+(n?*yCu9w!h0qBfP^2E@IDFem+%1z zAC&MzVF7y{m(Y+9K`ZbkBw<*>h=e&3=1Q0+;b;jbN;pZv$r4VHaH@pUB+Qp^x`YK1 z&X91Xgs2;kh`IrYx&eq91&A62h#Ccm8U=_N1&A62h`IrYx&er~0f@Q*h`IrYx&er~ z0f@Q*h`IrYx&er~0f@Q*SS{fa32P)oZNYog7C_V%K-3mM)E2;1)c$*U6`g5a22*V< zETTJj3p{{hJb`#XNBMDnF+YtPL9gN0^Y1(zFFA=c1) zja%Vc_@MD&_#b`7_>%DrwEZ6%|6%;vc*Xb&TK;G;Nfd~vC_%elCf15N_#*5^tB;98 zh($7pd&o|SE5zI2k9ecF11IAum#fE{)Z@+SaRoiXs5A5*atbX06-)k#W`!4MR)A<$fM`~LXjXt|R)Dn+0|Z0^1SGMXp#cJ-0Ro}{0-^x|q5%S;0Ro}{0-^x| zq5%T#lW@O;=SX-!!gD2zNqC-waS0Df*d}4Sgb4``N!TIbVF^1WJYT{i5_U=0En%;O zCndZJEyVc_! z^|)6(KA;{SRFC`A<9_vcKs_E*j}NKGL+bIcdOV^YkE+LG>hWRqcw9Z6P>+wO$4AxU zN#*|s``M-oA~ ztauqkFoklL3#H?0;qnjl?x^qZmEjPRB-Q?L|IZtYmyCn_Ilh;DneOu$?oW~@$3o?8 zXj0gjF5E^c`xtGhtZnlu`)Xk2wxdmUr>WE~X0l?3lVhMnJ(NJ$hd{RkqEj0Ld|I#u zT6_y-UoY>i+4Lxwoc>}fbAa`ie!!jB3F~ORUZTUzB*%lv}4Wp8yl=uVb z#8Z{F$S^Ys-r{iEw&|en`DwJ#*_wrt2W=32Q`QU_eKW9TI3b7s5U7w{H#*a3q3VXs zPAW1nnF~cwMdcnxP!%Qpohtg-Ks8)D0jArAY}$v@sO4f#N?n}Hfle3~W#$BpiQtAW^p?!5g%q}%aHlz z7?EN*$3U(fD#~-)!(5(ZwqZiKPX^j1)Ms|f#>hH4iLYh~spq#m29Z>R=?fxrdEs1> zfmGZ>Bi|L30{8( z%1f934jSL*x>>-(OgmebHpk2j2lEu(mfiA#4F9xhEYl}fL*!4qhQ{Yg5;c8yQ&s2x z^4T>E|DIq!=6QS(_Wv$H43KZ)CXiCx{e9ASKdf@U5EF6hcU+u?UF~DI=lgTw$HrV7 z6gh*>69eK+;@#{EI1l_8@eOtZ&IA6YEWE>ZR`$;Cojr2FuDFCSwYkl!CbS|BNvpOa z0(ZRp@BDC`?GEi#M$U-^yOCWs4_KNaE`Dm}d{g3-&AaHgW(DQc%Oq*~@dw!rKBP`5lmzavxs|UX-p(Bu>s|_UDptLttXfF;n1l>*Wi87nD>J zF9)@j^tTQt$RhDMByO-f+f&l%gBRJt{*!L#4&a9kXMc$ofFhf<<6{8u?N@O zyUCr8d~-)MjKz`J)ktOOt5p$=5_XypT+&?#eEA_7|0l9F4F4`>SbLPg!)jUSIMlWK^L@1O26b^q#6 zQQI)+HLs<6*M<;C+tbIV5v`xqVD~HwA$E24#PSFR`_R%5?)6DerPAq~eqxW+gb=nl z8zTEC6MJ+?2p7F%Lt}Y4vPZHeQN2I;4lWPDQ!^VWlEicgWKXOL6~(hA(@XoqS?8Zt z&TxCkQcG6}KU5XMZ9&;2PL=IPGSp=I47*;PwPODG`Vj6P50>Xk@09q*)`f~Xhf8i3 zK3r9XPi@zOr)m9P#*Q%9%0GgAv&+N~?)5xd>=bKYaW53(gfM=ObN|m6A2sfThu{Uc z33N9s`jt2(6yiU_4!|S)2J8?Vz}{gAt`Yrj_FZ@p-2#ufBPkYynaODgX`+0rckB0K z%KJ5^Ca2=Q-PEr$l2Z^zCE!-XnaRmu8B-T5y6#JiZH>jICnq6Hir3@3j?5&JlM@jq z#rr8gIRTdeH@Ka*B>tr2cwEWr`7%2>4l!~3oyKLF3X@|6t5pbe4P)v2r{+bPLWxDh$!V?i>{zWvyHkLZkKF8Em)r7MDbnwZSNWx}!8 z_Qp+$Dc((jF`g~dGKg|*Y!cgS#m>u#$q)#gTp^q>Ng-H~{VqRg*h#d*kIGa`OLAOK z>`DCg+Lo3HNrwB0T^}Z2N|!x5Ax`7utcB3-n!jW73k<8!3wQc;|3u| zDJ1pH9UyL`;MjhMajNvVqok0jB@~?3=NqC**$!-zMscq@hLEy8N#`4Do>koAi$aVn z6l(ut*=8nsu-m@dn8AOFz5Ua?nNMZ^hO?;s_>}QyVR8m+7zNmIqM*2VavoOsxrANd zI@Up_IF=?0fL*MxXW|KLC(9SJlNXXFpcVO6mIEEvC{IoYnLKuau(^0zWL50M1v&*G zuTACy8CF@+C?8KkR@JAzRTWhQJMKEpVZEmV9IKPlKwf5&;|X%BR2B6?c1%&bUlZ}7 z&i*Ij&2W@pvsVB3PQ70)n|F0iL$9vf7lfL0wV#j>t-rlR;)?NWPgN zl*Upvpb-%2lH??y7Ml|AgaoJhm7tWRQqC)-*2EOGv`RXM9aU7?J0eS>69pa2eMiXn z7-a7ARAwx2(%2s@S6ywHBQ0%xY3y7c0c7jCG&vrckyVyV)ak6UR_kCt2~^8Aw)Lh_ zf@a$mFKL1tmmH^5NMy3iT4Y#LWsx%$w#=5EG#cq`-?IPBW(^Gg`Y~$Xf~bCfMqS*- zJK**6F6{MxiT@Hi`iqR6@Y}fp-oQ^I9)Lhx;0AF>yb)1DKPkS04x*eE{N_SLn}~bD z+=Ow^=-FxE5_?Hv-bTgqHgC`Uy0 z$>Cy$5V3gpsCnC`&^wEO0s*s+vv1B0udorRYH3k=_^7=*i|DgS%ob)1u&tSI~g;%*0&;$N(epvy1x7VX!pnnfW-co2p*&9+sYoFJiGd)Z( zT2Yqnv(`iLd6X{K2k#+g5$&Y)|7>2Q&E?+WzhQbNoMzi8uq$Y8*4( z4ez{XjhE2!3q`fqEY1_XX#Lm0Ch!GB0lY^%Azoy`F^R0+sW&*Rku>MTi|t@mjy3FW z#I{GyluW}S3*Iwe$UhJrRmyqde%JD}*EskL|&7 ztoC!3f3PQFp^ce+a|QZ!t)i%;C@j;~cQ{y>Rf;{q`pQx~Oq+!;~?n53SvR8G7 zecm%mSld1xD;#>|*6CuIo)GFUq`_>f7OTwbiM}si_wK zb z)cvt>H2)vXY8X!Tya)FEx$wH(gLVB7&tuo)wck%HIUjQv^txr3s}@m*&ckM{QYn}H z?>2MVVtPK5X(#q3ruZdjbmWw9G&v6vVA?Fhg%m~7|3j1D8n({x6VuQhud~C_mrw8$ z=VC%KJCk!E6Ww%K31m`tt*1&K$hLY!HZ;lWRvP+yhx*FL`w7#jNmg%i4rFcMd_@6d z;c3gV%MRIPhSlF9#X0GrGmt$!YSmpn#w*T;0ZBZPEQUmkQ5#4ijbv8pYywqV>ODv5 z+IrgPh*oD$hbeJ%phSg6(voA7QF!p6Y9z;!JiU(C@=$3vd4%DW=k(stK%$?b0D4~c zVR$@_m9VMPs6d^-krY~;EK(H;^_dss%jCxo;rgSPIn|5}bawQ_yKv*jT6UodAt7)2 zq<9BwlCwd)j#f`L@xcUccSxjC!;0>qUY;xj^?Z{WPvksekS2OCeWOu+l|^C3CX)+Z z61yxp3xwvfus|&fHLJx6*z1ww_9Zitj@H);lQThwY?tcJ)C4YN7nsp8R2VdpLgRl9 zUqN-_T{!cz*0>M8w%5Sh{*3~gg7T*?a)iUashYSpxleD_^zNT$O~^jh6Y1ozX=W$T zGK3CSo<+x=a_s?YYSKWUO!_Jc6Z&*J=+Jo?LmjBrphB0X(ajN}6R?MN$z5b~kPBAI z5hTwsA`(c`y$=Eusc;p--_Yb%Y${!K)Adg0A7>I}x+qbp8xgOT!o!eq$Qp!u<(!E4~ ze6Y9Q=PSqBgDqHv%UN)fm1(0RJ2{zIcQrTet!=G0(p+J+&!q^gU$Ncwu`P}D+c!(u zvDU^N^|_7$Nv4Lkc!PPD7LZgzlv%8~zP8nmkr#)TgVR$@h|*Nt=*ww) zeM?KMe)pc*?HSlPh`bU!AFqfkge}wLX)4vYIih8b{Svz{j9pF6Q!`OMWY69`l;}TM zFJo6Xn_;W-bgQY)cQ`08_Ks>CwkxPIFFDh&a`nMSdk>dN#@;$3Qb-||taXqu2Sx1d z9mnT4Zg{a_pxl``PK`eHd6V(lIXKbCogqw@SOyX2c45*{*qNH& zz9WP+dGPA$NJ>k#^wsC5_t>mfaeYPF1u;mAxuxet4)DSQX;P^sJi|zzn_wM;tU4S? z@WSB*ch4dtl_0&`;I+cmpAjL~LNi4H=2;K-0IVjkt9M5tM59i%270(rok~TT1!mh_ zlQ_qsrA$w%x1hyMhS+}&;-z33Pa96qve9H+PP9g=QO1UYz{i?lUB@TPzR`4lG%O{go zk`d==>zQ3>>2Z{K_#fl#{L6ei1p|6bKgpHJg|Pm_VExG<>kodhtxei+<(O>$k<~KavD-uhvYNeYY}poNV~rxaF1QmaGckIv>;g@W5 zcShMguTgt&${&XAj$o<%#$*|^@33+nzhtAmKBhLmM*ZpP@$zZINP#Y#(vV1&Dzn!P zvcoE~muhH7X$iAS>X+u0MKTH6m8X2FR};xZ=GE9_2?Sw_jQkYTRSc$)nGE=;Bl^y? zl2h^JR{UhIe1G1g&_Hs5(np%rY3t51(fZFYcDVJ?4eXP=QvErQRBHcWR?bANaVa8u z{|>(f{3JIg7h9F97&(?@UR&jAK)EJb;Z<5*=uKdn=B+Cr3w~v?>Q!`4 zk`2Ocw!aQ(D4#W4{UKQDz9YE^x_46pr{;lQ>{^l`3p8ik_-jl;dz=bkU@+d@S3Yx? zDX|Ex1g%e2B0;jhg;P$p{jFo$JNLDv#X3knV;ISBgv%mXldM1r;#4Fswin@-Y>LD- zM4bH^6QCFs3`2igG^tPX|M7^liGR;y)8K4G`S~jD{i?;epGS?C5p&~waT8+aJSe^_ zUPS!A8_54(G_460B^-}sc^<$sd)I2C@4A$llU5hlCo~`I*PEX`Rm-H5Gn%p|YePjx zog_kCw=vu|QTkZMKAPctgD;2wWA97gt17PlXYRcB$OBhELI{tS009z6Lc$tZ1B4ja zNe~e+KEfkJ5&}tB6u0|QwY9ZX+qy4ZY^`nmb+ffq>sHsc?py0_tF5hCyZpK@{=YMG zm$~=Nz3&C}_w)Cc)K7Tm1 z&b1PXL1+AlAO|xpx;ScNc*%b}%kfHS)dn1N0v!_MO6Z%vTnRmpgVxY!SeIZB7S^&0vu$LQsaYXz!{ry7rP>DiC)V1!8Gl4BBl7{>GTotQXDCz&T&EyA|#l z=okXEBrpElHUx*`&027{(HcRN;UlPSxjP2RqtIO>^Wsu%NANkrtidT@13v{MF_id6 z5TmNg%c)lY{fDhB@Q%{C_oJ%Z#t$`)@@i zvk%UnIp3Uvx4+Av-TeF6r5{vBa#A~}z94eGcZ8c@_*GKD(L&USVlqq$8Pc51ig_{0 zJQ_Vf;)4!8EfDJU-{oc<|GL0k zDY(n|b$O)l{sA)SYHudw#iiPq7|Mh>8_YI?*}N80fsc-ovk!#Pin9Efv`4eXoCO9` zSgW{h24(oW<_s$5k~0R%rmBV+pEtKki|+S7pRgsy`Oy9!O6Cvb^Ea273(@7h_&|A= z_v*W>{Zf3rw~~E0dtN@@Xrnp;l_4XL4+CO~%{3RGJ6-4w7kmP=Yg%f`8T?}Ji_E7d zwi;^6Ks(_!EBLQ7=Y#+4;Gc^`+XwJE9JvK)Ah^HTfL=tq#GX7*?wv*j^E1tPV7|jz z>^la)ye-p^PaXj80=Z(KtlLcr&S#r*t!cx>sDVrySK1+;H~`*(UOrIH-6lEj{QN&0 zPH6b=9Xf@sq}vev|0en@V)-TzwRZ=6{%=S0pOMH2){EFbk0HMHjqnwC5s|ddXW7bz z(nzvK=qpMi&Of`kof$rND9~Uu?YPB}XNw}qQonM8=b|T1jgKT}`D^(8r8vBiXC_3F zb38!0Fc>;p53IW>;VwdcJ|&WD^w8i;c64^Oc6Rjk^}=E?ErY4g03f4)cD3&9hh$G}yb2$* zD}Os*^P#ABXuK+d@N_x4soekb?|%?^jKI(Di}VwT*Ek;|Y+F1wbdIhaxJ6 z-5}?IR!6fQ?Hf8OTJ4O1l7x!VxrJ(|5AF#|NoLsC=mH1a@s4%neRw2~;2?I7G$7HX zT)nzN1D*l0UTjBOXRqldq^3h~l9(vhtaMTfciYeGf7ppha zdZ;)K#otqJ{XAgqfh0bIu2(M+gTTn!^xJC493Pw#{kMSh)1~==#_3!12i4K_&TYGg zD*q1US|b82;6NLv@5uPShmgw&d7ajg%jtRaVWZG!Lq48=BfHiG>^^n}@dR8}&mR2q zv9CKrP8 zk8Gkt=AX3CW3|@-F&TiUd*Ke|I(h#;ny{2{2crLNCHE8Vx+MP0iRLm(^2N57r{pWv z7~4|oYr!&&Bb>Wp*z9}+87ZQxtq1|E*gO`jZnA{*P1vPv>uKH5Pa(pO(>LVHX2q-l zvS>+J=2Wu@>_IWVhToIqQp~&TDMvMOeLh^OS0Xb9#;nqo7}8Sn81S3|&-^kZmDiBE z_Yn{!^EjAU@H6t~)NMg9ImT=RldWKq-*~j<#iVoXK)#p{j}m-({wzB5t(m!Wz%$cP zetbS31_kuA{Q0w~bN0CWe+WW3k~_&i>1?u#o=cxGD&Y5jD~q%B>}$~WFJosT14ur9 z8qd6}B{u7UZ8gYuFHiHqb$lw`hZf`KYRJ+cjT;8f?u8;+um#MYB&X z4D?auEh~_@UaA603;6zDKQG_@+Wcu9_0F4V>V-1D>G<0-yLLJBPqVN zb$4|ko3)*%$PNHz-*GSWFH{nqFGg+VTF{(k&}n=zN9-?W6W^TbYujdrTY`Ed(RaM^Dyc~CS6$||2J*d2ul(`12Of={Uu5iSD?6hJ9gF@I*AAOGk43b(omtN-k zTe8r38>`IKXk(l;Iyme)ZEQ{h7nv43EjWgd^ZYagIHzciG*^KnEQvO85hB2n$Zy~M z9q;}DOQJ3%Z&mk>&Qn`^+qR{cOj-+5Nd^|PS}QNAVwZ-<&I!5d=!HlnLZ z5%bsbrBe{IjMcxTWo|cywgj-{jmM;Vx3#1;ccv@mgz)1hD;OGVt^h;p4O+t)3NUPx zJ4J6RdbABq34H+hW;RnQCr5{HqN8WMy5*9aHC#0tz>TAtmC~P7%HHVZrb)3}a|CF| z`l~L4Hyw4(8{hvU#u9=Y-QPfd?F({!_6O?^j(~pzPKmYCM0@u26+dOFN`Ljx7JO|L zhBdJhO(FG*+-Q`wB@8L#<}nP7d^0HGjSfpWJPoXC3SwDMe6t)44zPnti{!uf_dkMU z2>!bfp~l~#;}QEmgSg+%8bgeu5e?+i#+}CRko{{mJAs{Q`TzX@d4L{c`ItONb<)3e zW;V7|_a2ei-Q|hsOBrlU>cY${xc>f>V1pFLor3%`m*ohTzig484$fsc!l7MBo%|

cTwBsp1Yh{Goy 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

FFVD1;+keH#D%5217T?z)$Lm%eS3 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 J#f{7V{|2tRg0BDo literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore index fe2982b..34ed456 100644 --- a/.gitignore +++ b/.gitignore @@ -20,13 +20,19 @@ ltmain.sh m4/ missing stamp-h1 +stamp-it *.stamp +mkinstalldirs docs/reference/html/ docs/reference/xml/ src/.libs/ src/.deps/ tests/.libs/ tests/.deps/ +po/POTFILES +po/Makefile.in.in +po/*.gmo +po/libgdaex.pot *.lo *.o *.la @@ -35,3 +41,5 @@ libgdaex*tar* tests/test_prefix* tests/grid tests/grid.exe +tests/select +tests/select.exe diff --git a/Makefile.am b/Makefile.am index d0a7c6f..1e0cb58 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc -SUBDIRS = src docs tests +SUBDIRS = po src docs tests ACLOCAL_AMFLAGS = -I m4 diff --git a/config.h.in b/config.h.in index 57ae079..88fd3e3 100644 --- a/config.h.in +++ b/config.h.in @@ -1,11 +1,32 @@ /* config.h.in. Generated from configure.ac by autoheader. */ +/* always defined to indicate that i18n is enabled */ +#undef ENABLE_NLS + +/* The prefix for our gettext translation domains. */ +#undef GETTEXT_PACKAGE + +/* Define to 1 if you have the `bind_textdomain_codeset' function. */ +#undef HAVE_BIND_TEXTDOMAIN_CODESET + +/* Define to 1 if you have the `dcgettext' function. */ +#undef HAVE_DCGETTEXT + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define if your file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H diff --git a/configure.ac b/configure.ac index a57926d..6f13e15 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([libgdaex], [0.3.1], [azagli@libero.it]) +AC_INIT([libgdaex], [0.4.0], [azagli@libero.it]) AC_CONFIG_SRCDIR([src/gdaex.c]) AM_CONFIG_HEADER([config.h]) @@ -27,6 +27,16 @@ AC_PROG_MAKE_SET AC_PROG_LIBTOOL GTK_DOC_CHECK(1.0) +IT_PROG_INTLTOOL + +dnl ****************************** +dnl Translations +dnl ****************************** +GETTEXT_PACKAGE=libgdaex +AC_SUBST(GETTEXT_PACKAGE) +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", + [The prefix for our gettext translation domains.]) +AM_GLIB_GNU_GETTEXT # Checks for libraries. PKG_CHECK_MODULES(GDAEX, [libgda-4.0 >= 4 @@ -47,12 +57,13 @@ AC_C_CONST AC_CHECK_FUNCS([strchr strcasecmp]) AC_CONFIG_FILES([ - libgdaex.pc - Makefile - src/Makefile - docs/Makefile - docs/reference/Makefile - docs/reference/version.xml - tests/Makefile + libgdaex.pc + Makefile + src/Makefile + docs/Makefile + docs/reference/Makefile + docs/reference/version.xml + tests/Makefile + po/Makefile.in ]) AC_OUTPUT diff --git a/libgdaex.anjuta b/libgdaex.anjuta new file mode 100644 index 0000000..5e1cf44 --- /dev/null +++ b/libgdaex.anjuta @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/libgdaex.pc.in b/libgdaex.pc.in index 78f22e2..d55b525 100644 --- a/libgdaex.pc.in +++ b/libgdaex.pc.in @@ -6,6 +6,6 @@ includedir=@includedir@ Name: @PACKAGE_NAME@ Description: A libgda's "subclass" Version: @PACKAGE_VERSION@ -Requires: libgda-4.0 +Requires: libgda-4.0 gio-2.0 >= 2.24 gtk+-2.0 >= 2.20 Libs: -L${libdir} -lgdaex Cflags: -I${includedir} diff --git a/po/LINGUAS b/po/LINGUAS new file mode 100644 index 0000000..7d5856f --- /dev/null +++ b/po/LINGUAS @@ -0,0 +1 @@ +it diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..79e5261 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,2 @@ +# List of source files which contain translatable strings. +src/gdaex.c diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..52f3b48 --- /dev/null +++ b/po/it.po @@ -0,0 +1,225 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# Andrea Zagli , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: libgdaex 0.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-10-22 10:42+0200\n" +"PO-Revision-Date: 2011-10-22 10:52+0200\n" +"Last-Translator: Andrea Zagli \n" +"Language-Team: Italian \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. TO DO +#: ../src/gdaex.c:206 +msgid "Datasource cannot be empty." +msgstr "Datasource non può essere vuota." + +#. TO DO +#: ../src/gdaex.c:214 ../src/gdaex.c:307 +msgid "Unable to create GdaEx object." +msgstr "Impossibile creare l'oggetto GdaEx." + +#: ../src/gdaex.c:273 ../src/gdaex.c:322 +#, c-format +msgid "Error creating database connection: %s" +msgstr "Errore nella creazione della connessione al database: %s" + +#: ../src/gdaex.c:274 ../src/gdaex.c:677 ../src/gdaex.c:694 +#: ../src/gdaex.c:1016 ../src/gdaex.c:1056 ../src/gdaex.c:1095 +#: ../src/gdaex.c:1134 ../src/gdaex.c:1186 ../src/gdaex.c:1281 +#: ../src/gdaex.c:1341 ../src/gdaex.c:1407 ../src/gdaex.c:1457 +#: ../src/gdaex.c:2283 ../src/gdaex.c:2393 ../src/gdaex.c:2440 +#: ../src/gdaex.c:2458 ../src/gdaex.c:2511 ../src/gdaex.c:2570 +#: ../src/gdaex.c:2623 ../src/gdaex.c:2887 ../src/gdaex.c:2905 +msgid "no details" +msgstr "nessun dettaglio" + +#. TO DO +#: ../src/gdaex.c:299 +msgid "cnc_string must not be empty." +msgstr "cnc_string non può essere vuota." + +#: ../src/gdaex.c:323 ../src/gdaex.c:377 ../src/gdaex.c:411 +msgid "no details." +msgstr "nessun dettaglio." + +#: ../src/gdaex.c:376 +#, c-format +msgid "Error on writing on log file: %s" +msgstr "Errore nella scrittura del file di registro: %s" + +#: ../src/gdaex.c:410 +#, c-format +msgid "Error on opening log file: %s" +msgstr "Errore nell'apertura del file di registro: %s" + +#: ../src/gdaex.c:528 +msgid "Unable to get the GdaSqlStatement from the GdaStatement." +msgstr "Impossibile ottenere il GdaSqlStatement dal GdaStatement." + +#: ../src/gdaex.c:642 +#, c-format +msgid "Statement type %s not implemented." +msgstr "Tipo di istruzione %s non implementato." + +#: ../src/gdaex.c:676 +#, c-format +msgid "" +"Error parsing query string: %s\n" +"%s" +msgstr "" +"Errore nell'analisi della stringa della query: %s\n" +"%s" + +#: ../src/gdaex.c:693 +#, c-format +msgid "" +"Error executing selection query: %s\n" +"%s" +msgstr "" +"Errore nell'esecuzione della query di selezione: %s\n" +"%s" + +#: ../src/gdaex.c:701 +#, c-format +msgid "Selection query executed: %s" +msgstr "Query di selezione eseguita: %s" + +#: ../src/gdaex.c:732 ../src/gdaex.c:763 ../src/gdaex.c:793 ../src/gdaex.c:823 +#: ../src/gdaex.c:853 ../src/gdaex.c:883 ../src/gdaex.c:914 ../src/gdaex.c:945 +#: ../src/gdaex.c:976 ../src/gdaex.c:1488 ../src/gdaex.c:1520 +#: ../src/gdaex.c:1551 ../src/gdaex.c:1582 ../src/gdaex.c:1613 +#: ../src/gdaex.c:1644 ../src/gdaex.c:1676 ../src/gdaex.c:1708 +#: ../src/gdaex.c:1740 +#, c-format +msgid "No column found with name «%s»." +msgstr "Nessuna colonna trovata con il nome «%s»." + +#: ../src/gdaex.c:1014 ../src/gdaex.c:1054 ../src/gdaex.c:1093 +#: ../src/gdaex.c:1132 ../src/gdaex.c:1184 ../src/gdaex.c:1279 +#: ../src/gdaex.c:1339 ../src/gdaex.c:1405 ../src/gdaex.c:1455 +#, c-format +msgid "" +"Error on retrieving field's value: «%s».\n" +"%s\n" +msgstr "" +"Errore nell'ottenere il valore del campo: «%s»\n" +"%s\n" + +#: ../src/gdaex.c:1272 ../src/gdaex.c:1332 ../src/gdaex.c:1398 +#, c-format +msgid "" +"Error on retrieving field's value: «%s».\n" +"Unknown GValue type." +msgstr "" +"Errore nell'ottenere il valore del campo: «%s».\n" +"Tipo GValue sconosciuto." + +#: ../src/gdaex.c:1767 ../src/gdaex.c:1805 ../src/gdaex.c:1843 +#: ../src/gdaex.c:1881 ../src/gdaex.c:1919 ../src/gdaex.c:1972 +#: ../src/gdaex.c:2065 ../src/gdaex.c:2123 ../src/gdaex.c:2183 +#, c-format +msgid "Error on retrieving field's value: «%s»." +msgstr "Errore nell'ottenere il valore del campo: «%s»." + +#: ../src/gdaex.c:2034 ../src/gdaex.c:2090 ../src/gdaex.c:2154 +msgid "Error on retrieving field's value: unknown GValue type." +msgstr "Impossibile ottenere il valore del campo: tipo GValue sconosciuto." + +#: ../src/gdaex.c:2281 +#, c-format +msgid "Error on retrieving column %d: %s" +msgstr "Errore nell'ottenere la colonna %d: %s" + +#: ../src/gdaex.c:2331 +msgid "Invalid GdaDataModel." +msgstr "GdaDataModel non valido." + +#: ../src/gdaex.c:2345 +msgid "Unable to create the GtkTreeModel." +msgstr "Impossibile creare il GtkTreeModel." + +#: ../src/gdaex.c:2392 +#, c-format +msgid "Error opening transaction: %s\n" +msgstr "Errore nell'apertura della transazione: %s\n" + +#: ../src/gdaex.c:2399 +msgid "Transaction opened." +msgstr "Transazione aperta." + +#: ../src/gdaex.c:2433 +#, c-format +msgid "" +"REMAINS:\n" +"%s\n" +"from\n" +"%s" +msgstr "" +"RIMANE:\n" +"%s\n" +"da\n" +"%s" + +#: ../src/gdaex.c:2439 ../src/gdaex.c:2510 +#, c-format +msgid "" +"Error parsing sql: %s\n" +"%s" +msgstr "" +"Errore nell'analisi dell'sql: %s\n" +"%s" + +#: ../src/gdaex.c:2457 +#, c-format +msgid "" +"Error executing command query: %s\n" +"%s" +msgstr "" +"Errore nell'esecuzione della query di comando: %s\n" +"%s" + +#: ../src/gdaex.c:2465 +#, c-format +msgid "Query executed: %s" +msgstr "Query eseguita: %s" + +#: ../src/gdaex.c:2559 ../src/gdaex.c:2612 +msgid "No transaction opened." +msgstr "Nessuna transazione aperta." + +#: ../src/gdaex.c:2569 +#, c-format +msgid "Error committing transaction: %s" +msgstr "Errore nel committare la transazione: %s" + +#: ../src/gdaex.c:2577 +msgid "Transaction committed." +msgstr "Transazione committata." + +#: ../src/gdaex.c:2622 +#, c-format +msgid "Error rollbacking transaction: %s" +msgstr "Errore nel rollbacking della transazione: %s" + +#: ../src/gdaex.c:2630 +msgid "Transaction rolled back." +msgstr "Transazione rolled back." + +#: ../src/gdaex.c:2886 +#, c-format +msgid "Error on creating regex: %s" +msgstr "Errore nella creazione dell'espressione regolare: %s" + +#: ../src/gdaex.c:2904 +#, c-format +msgid "Error on regex replacing: %s" +msgstr "Errore nell'espressione regolare di sostituzione: %s" diff --git a/src/Makefile.am b/src/Makefile.am index 167a7ca..2f23eaf 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,6 @@ AM_CPPFLAGS = -I$(top_srcdir) \ $(GDAEX_CFLAGS) \ + -DLOCALEDIR=\"$(localedir)\" \ -DG_LOG_DOMAIN=\"GdaEx\" LIBS = $(GDAEX_LIBS) diff --git a/src/gdaex.c b/src/gdaex.c index 2f7b907..aaa931d 100644 --- a/src/gdaex.c +++ b/src/gdaex.c @@ -28,7 +28,10 @@ #include #include +#include + #include + #include #include "gdaex.h" @@ -129,10 +132,49 @@ gdaex_init (GdaEx *gdaex) static GdaEx *gdaex_new_ () { + gchar *localedir; + GdaEx *gdaex = GDAEX (g_object_new (gdaex_get_type (), NULL)); GdaExPrivate *priv = GDAEX_GET_PRIVATE (gdaex); + setlocale (LC_ALL, ""); + gda_locale_changed (); + +#ifdef G_OS_WIN32 + + gchar *moddir; + gchar *p; + + moddir = g_win32_get_package_installation_directory_of_module (NULL); + + p = g_strrstr (moddir, g_strdup_printf ("%c", G_DIR_SEPARATOR)); + if (p != NULL + && (g_ascii_strcasecmp (p + 1, "src") == 0 + || g_ascii_strcasecmp (p + 1, ".libs") == 0)) + { + localedir = g_strdup (LOCALEDIR); + } + else + { + localedir = g_build_filename (moddir, "share", "locale", NULL); + } + + g_free (moddir); + g_free (p); + +#else + + localedir = g_strdup (LOCALEDIR); + +#endif + + bindtextdomain (GETTEXT_PACKAGE, localedir); + textdomain (GETTEXT_PACKAGE); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + + g_free (localedir); + return gdaex; } @@ -161,7 +203,7 @@ GdaEx if (dsn == NULL || strcmp (g_strstrip (g_strdup (dsn)), "") == 0) { /* TO DO */ - g_warning ("datasource must not be empty."); + g_warning (_("Datasource cannot be empty.")); return NULL; } @@ -169,6 +211,7 @@ GdaEx if (gdaex == NULL) { /* TO DO */ + g_warning (_("Unable to create GdaEx object.")); return NULL; } @@ -227,8 +270,8 @@ GdaEx &error); if (error != NULL) { - g_warning ("Error creating database connection: %s\n", - error->message); + g_warning (_("Error creating database connection: %s"), + error->message != NULL ? error->message : _("no details")); return NULL; } @@ -253,7 +296,7 @@ GdaEx if (cnc_string == NULL || strcmp (g_strstrip (g_strdup (cnc_string)), "") == 0) { /* TO DO */ - g_warning ("cnc_string must not be empty."); + g_warning (_("cnc_string must not be empty.")); return NULL; } @@ -261,6 +304,7 @@ GdaEx if (gdaex == NULL) { /* TO DO */ + g_warning (_("Unable to create GdaEx object.")); return NULL; } @@ -275,8 +319,8 @@ GdaEx &error); if (error != NULL) { - g_warning ("Error creating database connection: %s", - error->message != NULL ? error->message : "no details."); + g_warning (_("Error creating database connection: %s"), + error->message != NULL ? error->message : _("no details.")); return NULL; } @@ -329,8 +373,8 @@ gdaex_log_handler (const gchar *log_domain, if (g_output_stream_write (G_OUTPUT_STREAM (priv->log_file), msg, strlen (msg), NULL, &error) < 0) { - g_warning ("Error on writing on log file: %s", - error != NULL && error->message != NULL ? error->message : "no details."); + g_warning (_("Error on writing on log file: %s"), + error != NULL && error->message != NULL ? error->message : _("no details.")); } } @@ -363,8 +407,8 @@ gdaex_post_parse_options (GOptionContext *context, NULL, FALSE, G_FILE_CREATE_NONE, NULL, &my_error); if (priv->log_file == NULL) { - g_warning ("Error on opening log file: %s.", - my_error != NULL && my_error->message != NULL ? my_error->message : "no details."); + g_warning (_("Error on opening log file: %s"), + my_error != NULL && my_error->message != NULL ? my_error->message : _("no details.")); } else { @@ -481,7 +525,7 @@ gdaex_set_tables_name_prefix_into_statement (GdaEx *gdaex, GdaStatement **stmt) g_object_get (G_OBJECT (stmp), "structure", &sstmt, NULL); if (sstmt == NULL) { - g_warning ("Unable to get the GdaSqlStatement from the GdaStatement."); + g_warning (_("Unable to get the GdaSqlStatement from the GdaStatement.")); return; } @@ -595,7 +639,7 @@ gdaex_set_tables_name_prefix_into_statement (GdaEx *gdaex, GdaStatement **stmt) break; default: - g_warning ("Statement type %s not implemented.", + g_warning (_("Statement type %s not implemented."), gda_sql_statement_type_to_string (sstmt->stmt_type)); return; } @@ -629,8 +673,8 @@ GdaDataModel stmt = gda_sql_parser_parse_string (priv->gda_parser, sql, NULL, &error); if (!GDA_IS_STATEMENT (stmt)) { - g_warning ("Error parsing query string: %s\n%s", - error != NULL && error->message != NULL ? error->message : "no details", sql); + g_warning (_("Error parsing query string: %s\n%s"), + error != NULL && error->message != NULL ? error->message : _("no details"), sql); return NULL; } @@ -646,15 +690,15 @@ GdaDataModel if (!GDA_IS_DATA_MODEL (dm)) { - g_warning ("Error executing selection query: %s\n%s", - error != NULL && error->message != NULL ? error->message : "no details", sql); + g_warning (_("Error executing selection query: %s\n%s"), + error != NULL && error->message != NULL ? error->message : _("no details"), sql); return NULL; } else { if (priv->debug > 0) { - g_message ("Selection query executed: %s", sql); + g_message (_("Selection query executed: %s"), sql); } } @@ -685,7 +729,7 @@ gchar } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -716,7 +760,7 @@ gdaex_data_model_get_field_value_integer_at (GdaDataModel *data_model, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -746,7 +790,7 @@ gdaex_data_model_get_field_value_float_at (GdaDataModel *data_model, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -776,7 +820,7 @@ gdaex_data_model_get_field_value_double_at (GdaDataModel *data_model, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -806,7 +850,7 @@ gdaex_data_model_get_field_value_boolean_at (GdaDataModel *data_model, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -836,7 +880,7 @@ GdaTimestamp } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -867,7 +911,7 @@ GDate } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -898,7 +942,7 @@ GDateTime } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -929,7 +973,7 @@ struct tm } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -967,9 +1011,9 @@ gchar } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); ret = NULL; } @@ -1007,9 +1051,9 @@ gdaex_data_model_get_value_integer_at (GdaDataModel *data_model, gint row, gint } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1046,9 +1090,9 @@ gdaex_data_model_get_value_float_at (GdaDataModel *data_model, gint row, gint co } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1085,9 +1129,9 @@ gdaex_data_model_get_value_double_at (GdaDataModel *data_model, gint row, gint c } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1137,9 +1181,9 @@ gdaex_data_model_get_value_boolean_at (GdaDataModel *data_model, gint row, gint } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1225,16 +1269,16 @@ GdaTimestamp } else { - g_warning ("Error on retrieving field's value: «%s».\nUnknown GValue type.", + g_warning (_("Error on retrieving field's value: «%s».\nUnknown GValue type."), gda_data_model_get_column_name (data_model, col)); } } } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return (GdaTimestamp *)gda_timestamp_copy ((gpointer)gdatimestamp); @@ -1285,16 +1329,16 @@ GDate } else { - g_warning ("Error on retrieving field's value: «%s».\nUnknown GValue type.", + g_warning (_("Error on retrieving field's value: «%s».\nUnknown GValue type."), gda_data_model_get_column_name (data_model, col)); } } } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1351,16 +1395,16 @@ GDateTime } else { - g_warning ("Error on retrieving field's value: «%s».\nUnknown GValue type.", + g_warning (_("Error on retrieving field's value: «%s».\nUnknown GValue type."), gda_data_model_get_column_name (data_model, col)); } } } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1408,9 +1452,9 @@ struct tm } else { - g_warning ("Error on retrieving field's value: «%s».\n%s\n", + g_warning (_("Error on retrieving field's value: «%s».\n%s\n"), gda_data_model_get_column_name (data_model, col), - error->message != NULL ? error->message : "no details"); + error->message != NULL ? error->message : _("no details")); } return ret; @@ -1441,7 +1485,7 @@ gchar } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -1473,7 +1517,7 @@ gdaex_data_model_iter_get_field_value_integer_at (GdaDataModelIter *iter, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -1504,7 +1548,7 @@ gdaex_data_model_iter_get_field_value_float_at (GdaDataModelIter *iter, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -1535,7 +1579,7 @@ gdaex_data_model_iter_get_field_value_double_at (GdaDataModelIter *iter, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -1566,7 +1610,7 @@ gdaex_data_model_iter_get_field_value_boolean_at (GdaDataModelIter *iter, } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); } return value; @@ -1597,7 +1641,7 @@ GdaTimestamp } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -1629,7 +1673,7 @@ GDate } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -1661,7 +1705,7 @@ GDateTime } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -1693,7 +1737,7 @@ struct tm } else { - g_warning ("No column found with name «%s».", field_name); + g_warning (_("No column found with name «%s»."), field_name); value = NULL; } @@ -1720,7 +1764,7 @@ gchar g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else @@ -1758,7 +1802,7 @@ gdaex_data_model_iter_get_value_integer_at (GdaDataModelIter *iter, gint col) g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else @@ -1796,7 +1840,7 @@ gdaex_data_model_iter_get_value_float_at (GdaDataModelIter *iter, gint col) g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else @@ -1834,7 +1878,7 @@ gdaex_data_model_iter_get_value_double_at (GdaDataModelIter *iter, gint col) g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else @@ -1872,7 +1916,7 @@ gdaex_data_model_iter_get_value_boolean_at (GdaDataModelIter *iter, gint col) g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else @@ -1925,7 +1969,7 @@ GdaTimestamp g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else if (!gda_value_is_null (v)) @@ -1987,7 +2031,7 @@ GdaTimestamp } else { - g_warning ("Error on retrieving field's value: unknown GValue type."); + g_warning (_("Error on retrieving field's value: unknown GValue type.")); } } @@ -2018,7 +2062,7 @@ GDate g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else if (!gda_value_is_null (v)) @@ -2043,7 +2087,7 @@ GDate } else { - g_warning ("Error on retrieving field's value: unknown GValue type."); + g_warning (_("Error on retrieving field's value: unknown GValue type.")); } } @@ -2076,7 +2120,7 @@ GDateTime g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else if (!gda_value_is_null (v)) @@ -2107,7 +2151,7 @@ GDateTime } else { - g_warning ("Error on retrieving field's value: unknown GValue type."); + g_warning (_("Error on retrieving field's value: unknown GValue type.")); } } @@ -2136,7 +2180,7 @@ struct tm g_object_get (G_OBJECT (iter), "data-model", &data_model, NULL); - g_warning ("Error on retrieving field's value: «%s».", + g_warning (_("Error on retrieving field's value: «%s»."), gda_data_model_get_column_name (data_model, col)); } else if (!gda_value_is_null (v)) @@ -2234,9 +2278,9 @@ GHashTable v = gda_data_model_get_value_at (dm, col, row, &error); if (v == NULL || error != NULL) { - g_warning ("Error on retrieving column %d: %s", + g_warning (_("Error on retrieving column %d: %s"), col, - error != NULL && error->message != NULL ? error->message : "no details"); + error != NULL && error->message != NULL ? error->message : _("no details")); } else { @@ -2284,7 +2328,7 @@ GtkListStore cols = gda_data_model_get_n_columns (dm); if (cols == 0) { - g_warning ("Invalid GdaDataModel."); + g_warning (_("Invalid GdaDataModel.")); return NULL; } @@ -2298,7 +2342,7 @@ GtkListStore ret = gtk_list_store_newv (cols, gtypes); if (ret == NULL) { - g_warning ("Unable to create the GtkTreeModel."); + g_warning (_("Unable to create the GtkTreeModel.")); return NULL; } @@ -2345,14 +2389,14 @@ gdaex_begin (GdaEx *gdaex) if (error != NULL) { - g_warning ("Error opening transaction: %s\n", - error->message != NULL ? error->message : "no details"); + g_warning (_("Error opening transaction: %s\n"), + error->message != NULL ? error->message : _("no details")); } else { if (priv->debug > 0) { - g_message ("Transaction opened."); + g_message (_("Transaction opened.")); } } @@ -2386,14 +2430,14 @@ gdaex_execute (GdaEx *gdaex, const gchar *sql) stmt = gda_sql_parser_parse_string (priv->gda_parser, sql, &remain, &error); if (remain) { - g_warning ("REMAINS:\n%s\nfrom\n%s", remain, sql); + g_warning (_("REMAINS:\n%s\nfrom\n%s"), remain, sql); } if (error != NULL) { g_object_unref (stmt); - g_warning ("Error parsing sql: %s\n%s\n", - error->message != NULL ? error->message : "no details", sql); + g_warning (_("Error parsing sql: %s\n%s"), + error->message != NULL ? error->message : _("no details"), sql); return -1; } @@ -2410,15 +2454,15 @@ gdaex_execute (GdaEx *gdaex, const gchar *sql) if (error != NULL) { - g_warning ("Error executing command query: %s\n%s", - error->message != NULL ? error->message : "no details", sql); + g_warning (_("Error executing command query: %s\n%s"), + error->message != NULL ? error->message : _("no details"), sql); return -1; } else { if (priv->debug > 0) { - g_message ("Query executed: %s", sql); + g_message (_("Query executed: %s"), sql); } } @@ -2463,8 +2507,8 @@ GSList stmt = gda_sql_parser_parse_string (priv->gda_parser, sql, NULL, &error); if (error != NULL) { - g_warning ("Error parsing sql: %s\n%s\n", - error->message != NULL ? error->message : "no details", sql); + g_warning (_("Error parsing sql: %s\n%s"), + error->message != NULL ? error->message : _("no details"), sql); return NULL; } @@ -2512,7 +2556,7 @@ gdaex_commit (GdaEx *gdaex) ret = TRUE; if (priv->debug > 0) { - g_message ("No transaction opened."); + g_message (_("No transaction opened.")); } } else @@ -2522,15 +2566,15 @@ gdaex_commit (GdaEx *gdaex) if (error != NULL) { - g_warning ("Error committing transaction: %s\n", - error->message); + g_warning (_("Error committing transaction: %s"), + error->message != NULL ? error->message : _("no details")); ret = FALSE; } else { if (priv->debug > 0) { - g_message ("Transaction committed."); + g_message (_("Transaction committed.")); } } } @@ -2565,7 +2609,7 @@ gdaex_rollback (GdaEx *gdaex) ret = TRUE; if (priv->debug > 0) { - g_message ("No transaction opened."); + g_message (_("No transaction opened.")); } } else @@ -2575,15 +2619,15 @@ gdaex_rollback (GdaEx *gdaex) if (error != NULL) { - g_warning ("Error rollbacking transaction: %s\n", - error->message); + g_warning (_("Error rollbacking transaction: %s"), + error->message != NULL ? error->message : _("no details")); ret = FALSE; } else { if (priv->debug > 0) { - g_message ("Transaction rolled back."); + g_message (_("Transaction rolled back.")); } } } @@ -2839,8 +2883,8 @@ gchar regex = g_regex_new ("(^[-\\d]?\\d+)(\\d\\d\\d)", 0, 0, &error); if (error != NULL) { - g_warning ("Error on creating regex: %s.", - error->message != NULL ? error->message : "no details"); + g_warning (_("Error on creating regex: %s"), + error->message != NULL ? error->message : _("no details")); return ""; } @@ -2857,8 +2901,8 @@ gchar &error); if (error != NULL) { - g_warning ("Error on regex replacing: %s.", - error->message != NULL ? error->message : "no details"); + g_warning (_("Error on regex replacing: %s"), + error->message != NULL ? error->message : _("no details")); g_regex_unref (regex); return ""; } diff --git a/tests/Makefile.am b/tests/Makefile.am index 8081d40..8d70a92 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -5,8 +5,9 @@ AM_CPPFLAGS = $(GDAEX_CFLAGS) \ -I$(top_srcdir)/src \ -DTESTSDIR="\"@abs_builddir@\"" -noinst_PROGRAMS = test_prefix \ - grid +noinst_PROGRAMS = grid \ + select \ + test_prefix LDADD = $(top_builddir)/src/libgdaex.la diff --git a/tests/select.c b/tests/select.c new file mode 100644 index 0000000..b48f3fb --- /dev/null +++ b/tests/select.c @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2011 Andrea Zagli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include + +int +main (int argc, char **argv) +{ + GdaEx *gdaex; + + gchar *sql; + GdaDataModel *dm; + + gtk_init (&argc, &argv); + + gdaex = gdaex_new_from_string (g_strdup_printf ("SQLite://DB_DIR=%s;DB_NAME=grid.db", TESTSDIR)); + if (gdaex == NULL) + { + g_error ("Unable to connect to the db."); + } + + sql = g_strdup_printf ("SELECT * FROM clientssss"); + dm = gdaex_query (gdaex, sql); + g_free (sql); + g_object_unref (dm); + + return 0; +} -- 2.49.0