From fa92beae5af8b35ff7bdd377579a28184c1e282d Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Wed, 16 Dec 2009 17:29:28 +0000
Subject: [PATCH] more cleanup and tagging; remove untranslatable button
 images; add button css

---
 apps/susidns/src/css.css                      |  30 ++++++++-
 apps/susidns/src/images/add.png               | Bin 2489 -> 0 bytes
 apps/susidns/src/images/delete.png            | Bin 3286 -> 0 bytes
 apps/susidns/src/images/reload.png            | Bin 2712 -> 0 bytes
 apps/susidns/src/images/save.png              | Bin 2584 -> 0 bytes
 apps/susidns/src/images/search.png            | Bin 2766 -> 0 bytes
 .../src/i2p/susi/dns/AddressbookBean.java     |  61 +++++++++++++-----
 .../src/java/src/i2p/susi/dns/ConfigBean.java |  16 +++--
 .../src/java/src/i2p/susi/dns/Messages.java   |  24 +++----
 .../src/i2p/susi/dns/SubscriptionsBean.java   |  18 ++++--
 apps/susidns/src/jsp/addressbook.jsp          |   8 +--
 apps/susidns/src/jsp/config.jsp               |   6 +-
 apps/susidns/src/jsp/index.jsp                |   2 +-
 apps/susidns/src/jsp/subscriptions.jsp        |   6 +-
 14 files changed, 115 insertions(+), 56 deletions(-)
 delete mode 100644 apps/susidns/src/images/add.png
 delete mode 100644 apps/susidns/src/images/delete.png
 delete mode 100644 apps/susidns/src/images/reload.png
 delete mode 100644 apps/susidns/src/images/save.png
 delete mode 100644 apps/susidns/src/images/search.png

diff --git a/apps/susidns/src/css.css b/apps/susidns/src/css.css
index 0ee2432d62..fae4f94a0b 100644
--- a/apps/susidns/src/css.css
+++ b/apps/susidns/src/css.css
@@ -121,4 +121,32 @@ p.footer {
   font-size: 10pt !important;
   line-height: 160% !important;
   -moz-box-shadow: inset 0px 0px 1px 0px #002;
-}
\ No newline at end of file
+}
+
+input[type=submit] {
+     border: 1px outset #999;
+     background: #ddf;
+     color: #001;
+     margin: 5px;
+     font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif;
+     padding: 1px 2px;
+     text-decoration: none;
+     min-width: 110px;
+     border-radius: 4px;
+     -moz-border-radius: 4px;
+     -khtml-border-radius: 4px;
+     -moz-box-shadow: inset 0px 2px 8px 0px #fff;
+     color: #006;
+     opacity: 0.9;
+}
+
+
+input[type=submit]:hover {
+     background: #22a;
+     color: #fff;
+     border: 1px solid #f60;
+     opacity: 1.0;
+     -moz-box-shadow: inset 0px 0px 0px 1px #fff;
+
+}
+
diff --git a/apps/susidns/src/images/add.png b/apps/susidns/src/images/add.png
deleted file mode 100644
index 8ea13225a551f454a71f088df341f880bbacf2e4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2489
zcmV;q2}bsbP)<h;3K|Lk000e1NJLTq003(M000~a1^@s6W|%>B00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU*OG!jQRCwBA
z{Qv(y!zdUU03d*vMuTAJ0Du4*jjSOA00L+<vW5@<2%yo(8bSadfEcj}K6&!Q;_TV8
z(@&l}seS$Wbyk?TsHiBsHNwWm_W#$fUyLA{nVFg4@87=+=zJI;SAIB}2NHv+d;R(~
zBPdKoL`43Wn3&w)<>f7Qb#*-ol==<Ce}EXJ^#>3@7?HJq|Nd>0CQb7E{{1_Hva&LR
zn3xy?KR-X%0U*rC2+;zfK`lub9|X|(=zvuD;btDJ<qe~O5yt=u=SPnoF<iQI2^`i*
zNlAx%eSM>V(w~6%I}rbcMH)Z=q1d!))v6m4Cr(rcX)-f2W004ZXW-=IWME-ofs~m{
zOn4nfspp5gdC1`3zkgu$fByUdN7(J#w;7HfKhE&^^Jj*PjEqOIv9Vr2Wv`%-_6uY@
zKmfr_-nnz<!MeISJ02b$24iDmFy`aq14j@jN5OIvGL7s&Y&5!BboGSfhogDuxeOL*
zZ{NOUIDGgp!>wDl7`}Y@!cb69a6K|IG9IYpF%Z88MHoN;fn(wR{rdr}t*zxCO`r%;
zR8(Y;mX>B<Wn~3N7AR+dA`C{uFtQvrJ~}2<o)Yt3zI@4W@ZdoPO-)UBf&&E_Nd5Wq
z=NVqSc)=heBLkPChx=f5A-e|@<{%6b`}FA(!-o$a!2D;=o{9ST`TYP!-~(V3{QyN4
zKmdVTgBLDbXaXq&MHH}-0~_-5=TC5@2#R?a4Ko<VhNTb~M(3l8kt&Z%eOFf(gRQMC
z!-EG8z(okC><76KS<lm_PZ{>@+XwasObyHoV513)L2@AR-@kvu8vxXBA0hRy9EBXd
zAh&=b3>5yLcmOs&7?hNhB7jO&fLIKOIROHYTE!>;gD^03QE=-Iy7VJ1{@0iI1Sdf#
zbaZU)Af-bKEfs=+oNy-59EVXUWd#89DTKg-0FN>Fx?t83r{<sDss6h!;7j}tuOdid
zjFNMfl#)2-$Q?X;@6uXh5>N#ANQU<wDwmy(;$c>3_wpX9*ci9({x82LJUCr_@UlW-
zR>4R9ZPi+5-4?Y?Z9fDM3$VBlD=I2t2YD8RxwyE%j{f@fE7(%x$U?5Ouz8Fg;KYd&
z;G)gY(2!x-vSna4$jyR+f($EGtYEl$^(q6fDGbhaprRZULEpZ8V_39k5jbK%fpP8H
zH3ly)FL3SyMII<MgTz7pq$NPly`TsKB^pp<fieatOhGMgq%IUQuu4({R#Q(vTz~+y
zmoW~&AP7YnI(BktOmD!!xQB;g@){nfJQ5Pe4lR?3X!v|S;t|d_hXBlQLC~zJG%6M_
z^>*zfy;auNMxs?!dhbaBZxf_I&RR>x7#U}D3z>6f65_uotu-;Tyu;m7b?i}~_=6FJ
z{b{?hN>zIvOAHW5dj?-j<X4b|!p=tk;>*|uU=Rj^E>c7(vXck$hF-)HVh1*e59wD3
z1qBG9f4^<sSA%|)RT4@SruKkfdi11NxTMUqh_Ern7L54>qfk}m?i)KT1;WbUIj8lo
zxdmdc|4oJij_@Tp{}4+RrphADEU*Y4SUFp3J$;qlcz*(rS_d}(gD?yL`{|$kcgY@%
zQx3@$;?;@=f(Q^Xj^#|xQgx&#S%et?03LOvqgkt9CCtNn98%ZypZz_qs!0&fQh9*(
z-mlR$&HXe!?#07ki{C~;usPdWdwm*N#z}r(@W#(Vn14r1RAntEsxpuBKAq(6M*vdH
zAO%1e27-cqA;+Bale{ob^(vSN1|%RN3SzY_ByQW;cFRsXYdl~^Ns{TA#of&6WbfSS
z^4w!Q0rqSCe8+O<4u3JTiWk8mqKpE}f@khtV!&Jm84OU>;uCx$H=M7Cl<Vr5#dn^6
z;(Kd99U=nqZxO67VjwTHK$l!ij_V9}Jp~X8P~wTHsp-N42M)x891hA!APulO3%P-T
zG6GEJVh|L-r%#_|C@n1o_mN;lvyqVzxE}NM^#$j=>gsB6P65e*5*tVzsF~m0-3{uZ
zfa@ucJSd04{00gbkY8zCXQ7W?fG{X0!Nfoq)KUcjXe2%b*2Q0;<Ai?!0tgiKj7N?f
z$vAW7%ruZjP;7!yDJa#!JOImC$W2pXB8$?Th7Ldh{r>%XaJK^FR#+l}H5NeTfg%nx
zTqYqQ0S^F>JgCS7R@C6}PEcgQ>;&Z~ke@+CB6^)gs{4plj~-dDF+xzC4D#Q*ckjUA
ze(v14EA!{iKM&M$35bsa1P}`}5H72zsLZ}~>sBf(OCmQj@eP|08Y{y$W=2RJn|e^>
zz=~&3?gu3rSj!0%Atoj!@cIno2T;xewQ@lb0V?`Hav(o~%tEf%u_Zoo+=ov+a%&Jd
zEMbWX))EA{3E0Yg0Bkh9g$^}=#t1(G1P~~){=2xioZhr)lLoMCPX(3jpdk-fqXK!@
zA31j+k7D2|%gGsUBV-;Z&_THX6j?Agf;<R{I9Lt>MFuRgV37)<VRE1d1DOd56j;O~
z7fF=3kC1wpIIL3)vJ;lOK;aH5AwZ?V;lqbN9y@mIDQG4I7FhrR!~!+{H?VoTAE>AX
z*k@^Z^X3h>$N+T~K@~J8Wnya$5}VqvO{WkmkDfANi3B#p1TzEHI)jZ!Aa^xDkqYZ0
z!sKAhc9>b90K=8Lh;<(!^~l3cuqhHy(FbgvgS#6b_kbd5+qP}jfD!c!8d0Eu+~=Tb
z8z6ufk><77va+%?fW@Id&_i~>I?EZ<q5@%9lM*=_4`zT~RO72lNSOkm>J&XNVZcUA
zVBIBPHS_?8K{@K#6VT8L1H(<w&@GgH4G=(#XjA;4&X;6*db$U&e76J^AF|ro+SZ`r
z16D+g0_p)+Q4WlpyKmpV{RZqazD3JXph&s}%~@Xo0th`>fr>?5&<s8h%j)avYXMtI
z%D|#f8khq4fd+Ge5+g8$GL8l{WdK+N{sY!e|A1A_Phex>`{T!tK@Euy(1>~h#gC!<
z&!DykKmajfS(5>(m_U&N8c_s|Nl5^)ICPkv2ilv)xqf35kXB;D;tn*L25m^Z1mYJ!
z{0`KpK%UwM2q0Vm4k{8s1u6$Lr}0BECsceiqNp2TzoC)x5sE)UCmccI@P-0F0O1RC
zMkr>1<|cM%L@|#>7S$u`FEnC)LUS2xWfMw^2q3@!&`zh12cF-700000NkvXXu0mjf
D)(SlB

diff --git a/apps/susidns/src/images/delete.png b/apps/susidns/src/images/delete.png
deleted file mode 100644
index 736eaf24676b37173e09a874309258ff32194d33..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3286
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
UsfV01v;Y7A07*qoM6N<$f=O!>LjV8(

diff --git a/apps/susidns/src/images/reload.png b/apps/susidns/src/images/reload.png
deleted file mode 100644
index b0503ac5b3919a7c30f468d1d57f07de53314b2a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2712
zcmV;J3TO3+P)<h;3K|Lk000e1NJLTq003(M000~a1^@s6W|%>B00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU+DoI2^RCwBA
z{Qv(y!zdUU03d*vMuTAJ0Du4*jjSOA00L+<vW5@<2%yo(8bSadfEcj}K6&!Q;_TV8
z(@&l}seS$Wbyk?TsHiBsHNwWm_W#$fUyLA{nVFg4@87=+=zJI;SAIB}2NHv+d;R(~
zBPdKoL`43Wn3&w)<>f7Qb#*-ol==<Ce}EXJ^#>3@7?HJq|Nd>0CQb7E{{1_Hva&LR
zn3xy?KR-X%0U*rC2+;zfK`lub9|X|(=zvuD;btDJ<qe~O5yt=u=SPnoF<iQI2^`i*
zNlAx%eSM>V(w~6%I}rbcMH)Z=q1d!))v6m4Cr(rcX)-f2W004ZXW-=IWME-ofs~m{
zOn4nfspp5gdC1`3zkgu$fByUdN7(J#w;7HfKhE&^^Jj*PjEqOIv9Vr2Wv`%-_6uY@
zKmfr_-nnz<!MeISJ02b$24iDmFy`aq14j@jN5OIvGL7s&Y&5!BboGSfhogDuxeOL*
zZ{NOUIDGgp!>wDl7`}Y@!cb69a6K|IG9IYpF%Z88MHoN;fwRp0`}YHiii*Gy1&SaL
z=HTD}M-(iwKo)}7$POAT#mt#AXTWSw0)x4al46?L=HV&^VG#ww+}zyYV(`U_7ht(9
zTefIcS69cjwze(?DFsCsKmdUw>%xT#O`kq}0!I?Ck^@`t^XE?nR#r&c0#rF77lFu*
zz?EX)l_FZI!Y99U=~9N7GiSo(Y;0^8a&vPT1Ox=YZUH44kUP-L12%%dw2qDrJW*j&
zORW2-Z62;11qxRf4GM3N`JnKJHa-}foSY(n%;V6y>jyvpfg|hU#fxg7hyvA5pcn>e
z1S$UU;|Dm9kOK<d=4T?V)sL+Rz$FhVyQ8C{8Qk35z;>@)yOyD|vy&k^I~(jaP;P(t
z@FBRE(AU?8n*q`X^6>NL&%x#aTVM<~ZrlJTJ{1)exVo=jzcSppa|g`U)6>K72S^U&
z7La+My5!ljXJC1dc_6!C)d9Kw1w{-p8{}qKM1krm5E~T!FaY$c5Rg&?;<rHj0U!Y9
zWsJf=2t-jKfq<n&u+4S6h<ES;7GA?Mc>!Y~SlifS-+*A5WWZuYcV_<AneV;#{=7=y
z127m`YYB?PaC(w;_N;FL|J5L9ttBAg-xwo}x3wmqaq|F@7-NhogrKaoYR)O(jxkiN
zRpp$er0@^cdhdleZYiRPc@E>=k19(kNxrNvr6}i|_(fcC+5vG_ntyG}_g(rRjJP3-
z+`$y(eLSIVugk7B_2%;<0O@6n!axW_(J2Bp+owqHA@l%xN6#TPvTUK?b-Y1*1BNXV
zVxxj1<II1fKGxzFMmWixg;R`Ck}*b|#mQX;capv(>zBsf(1F6|oYH$2@4X(ZwI<eD
z4I+mwrAW?MN!+!c{ya}{&Pj|>=P4zrwW{5E>3&K))Q&MEgdo>-@rTr;5;XQjG>j22
zHpBqJ{%LozHdXgHZWu@)0z!mKT+fv(2s_>a&|dB~0D~|Pb&(=Uk!_d&I@VxHI(DF;
zU>E!>-3AE~4L{pwpHE!w)T^pdqQo%KpM>erKa+(Iv@b-~t12{$c89IKcYw@3LBkGw
zqkRyZ0Oh~ZS_`mQPbt|L!%8XEd$+Y#Xc8mmY-shI(`v182ao_!x=ifY0S}7zi)4vm
zViq_vv4vgs@r5-n+Q*O58}B0k>2+^IF$e<z_%&IAwOE5iX_zVbES+SfNb?F5Cqek^
z^B>i-lpBr!24NO}NK1C*Qrx4U6Grj-J*0N|>pyV%m25iaRQ8ZL%0AQC7^5Pdk-qoR
zoX96LI6WBty?32C=lrd;Ok3rUl%)`q0ENk5lQZbD{<Sy#EQIkp9I=B;r>ydP_H#PJ
zu3G?7%vc3r5Qw3L_7mLv0l`Jw{r`V)aOzs9FEk*9PA!xU#WOkYF2Q3iIztFs?_EHt
zPInfsHOpggP0rg9emTT<n}7XhAHb4aMxONtt;spdT(s7tTab74fsHj3R;^WIZ#pUA
z=a5P%N(wQj1gLw)7}6r*#26Jjr6lfj8)Ffjb7$G${NcNPJ+|QtHb3kEK6r61(@b5@
z9qxV$K#Lh00SLlSl)@!gh8bw6-GwEnZCHmDD0Bo%@65{)Pi;MmGy#qzT=GAEl7&@9
z#UgWiwuCugm~|%@4+Z!q%)+>vLd6(etyS?QrQ}K}PW~M_2`DyX0j5Zt#6z5nGxoLC
zv;!d!;1^h!b5?1G$2LYt*Mtz1U~q;teBS#jcM8WHUoq>gUSQVU_%MrYJmS`S--k|k
zoB~i{FE<Q?Fc3hsCC~w)x>U4RN{Y1FK4>9+mK^00k(@XUHXeV*p#F&A{fI^I1jJ@*
zErV4KR%Lxk(_hH?H}hl|VX@YFS6H=-nk5t(wJ4xuxs#9eSqkTj-7()V#z;GebFT_g
zNyHSpY{0{qi@o=}vwTufVxlGPX4dY#-^i*zLMsU$B_f}qZQpawXFx9d)=L1fK%2~$
zfgYcI>(;GQSe8U?X5t$*Av9KoucwbL59`x_0uok-!CG&iG92VFP%#Fow?OWL6~(X?
zE36m+$(fs*gZ05Wn;>~mZh<w`k?ToNgn(#aVPSBff%L%YFIdG-OyVTuU*y&xa#+H0
z6|5x)vJ=>)dH`$;y@d`nfyM|w0tDd1jBNmhK_EB@eHP1tUcnMg=15N_NOHwR6scTU
zvL&#2c-{ck{VJtnjIl+;PUcqCCn`Ec_3AP^{xWKH-iA&5*vPFc!BFlJY%54XV0CGa
za{v}Bg_2EN`jO)7m#o-Vu-LadWv#xq@B1nCF8CzwQumzm%FL5thG0Dchy`l??|b*|
z?FTBV0TvN0pw1<*Z4a)1L7g;EO2^h3BxZyeeZUi+Jd6)ZW#}y^<lKiGx#+1DrU%ye
zfaN}9_ak>jU@bUU1R?7InFC84#O5ws{)H8NFaR<aRP=$0eoz+#WFIJ^wr$&X4H!|+
zpb-Tc$bAkPeFq32Mx=Qywydly4PbHT4|K2{u)KE$^<_X9mKxCmWS{`H;s#$aOK2zv
zUtL4W6bVUF^w6Ri1Yq4IU^Vmrh(S5(*%MGllY!wTXy_J7zXk{(Mzkq@Q0Ge$*pv4F
zHeD@&#fvPk$!rZOM`1<4D4^~j04O&BBj@hhw{O1zJN$3aaug_%Zb5U_SAYOQPd1=p
z5j5;83dFMd`ubYHmXI>AD3k`KFn*xHoS?)8Oo5D}K}{I|7J>hO_0vCKmGcwWnD`Ft
zQ-T^2AD|KS1d1O+`JX{;4}bt-#Ihy>RIr001vH`v8k3R$VsRiA1C38Xd($}AZ;S%c
zN_1G<0r3}TL*gY6gC@1!ff^OaQ~Lk`ge$;7MIxv`<$&fiekkUIijPJVbtCLIG*Ui7
zF(@bffQrK#3IG9wFVGpGm<5`f*r5@{JQ`V4kF3AYi1`W4Ww4b^C@mg<00RI6q4d}(
SLGxb#0000<MNUMnLSTZD*w?iH

diff --git a/apps/susidns/src/images/save.png b/apps/susidns/src/images/save.png
deleted file mode 100644
index 0743f3879efe9d0f876da3d7f505b06110c51d22..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2584
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

diff --git a/apps/susidns/src/images/search.png b/apps/susidns/src/images/search.png
deleted file mode 100644
index ce46f1d378e455b2ed5d0bc82afd12bcc3878425..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2766
zcmV;<3NiJGP)<h;3K|Lk000e1NJLTq003(M000~a1^@s6W|%>B00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU+U`a$lRCwBA
z{Qv(y!zdUU03d*vMuTAJ0Du4*jjSOA00L+<vW5@<2%yo(8bSadfEcj}K6&!Q;_TV8
z(@&l}seS$Wbyk?TsHiBsHNwWm_W#$fUyLA{nVFg4@87=+=zJI;SAIB}2NHv+d;R(~
zBPdKoL`43Wn3&w)<>f7Qb#*-ol==<Ce}EXJ^#>3@7?HJq|Nd>0CQb7E{{1_Hva&LR
zn3xy?KR-X%0U*rC2+;zfK`lub9|X|(=zvuD;btDJ<qe~O5yt=u=SPnoF<iQI2^`i*
zNlAx%eSM>V(w~6%I}rbcMH)Z=q1d!))v6m4Cr(rcX)-f2W004ZXW-=IWME-ofs~m{
zOn4nfspp5gdC1`3zkgu$fByUdN7(J#w;7HfKhE&^^Jj*PjEqOIv9Vr2Wv`%-_6uY@
zKmfr_-nnz<!MeISJ02b$24iDmFy`aq14j@jN5OIvGL7s&Y&5!BboGSfhogDuxeOL*
zZ{NOUIDGgp!>wDl7`}Y@!cb69a6K|IG9IYpF%Z88MHoN;fn(wR{rdr}t*zxCO`r%;
zR8(Y;mX>B<Wn~3N7AR+dA`C{uFtQvrJ~}2w9+b+iT)D#V^5shgDJdzq95#KV+J{g5
z^5x4J^!4@OiIW!og_#YbVUY;JAhA!MJ~4dw@Bz$!_UxIcpP%0kU<5t@M$r#YWB~*a
zxO}^C;X)HgAt<7Nl^ocRpFe+sBMSsTl_PQyh@9PVr5Jdnh?c7G$uC{HlwsMjWelpS
zs$hrTxpRjhD=Uk^%gYPYpaHuFmdnYt510CxGiNe{goJ?oiX2honny@IC`W<pg3+Mx
z28A&w{Gp8x1}7({2q5z~wC?%=5J2F_x_I%T8YrSb^%FNYH&`P`@sA%rzySmcB#>e7
zHa`<_t$u7p05*A0#BA8GfdN=&g2g~~gCY!6JOEP}0~Z$;*nQWoT?4yOMMVW}#@DZ3
z!TLb}lsjOF30M6ADrP|H(aiznW>7H%@~?)51_L`gJ4tmGA^(CR2AK_tBv?d&>M9T$
z<R%z+`0$|+kWvKVw?O;>AOPvrZo@zbLoFpzHi&350@E-89R(#+Hwr!Mz#8<a5P}uL
zv&0EqcM1{(A7S&J!Ozd>;M-dJ0ubl`1;hXV7~RR*bJjJ&|82Eaz5sv(Nl;1{!=Kg~
z_1-Cjfb!w=&3n%;z!<|~2=fRs=Nt(ksFXr6MqbM~^UJ|`DW!A&l+C2IW*?5@V4GtM
zl2VdViqBu^;4X33w&eTz`d|wJ17smMfhm;tRzf{yO8U$+^~LZf0O@6j!$1f`(GeAh
z3S2{KI0GlZ;SorV!DToLo)e+Vn}lXlwMj=2c1hsB|A*bje))Yw;o}0bjEynstl!NZ
zNOzNUw?YUC0>QlZVy)GbIOlX92wZDb#{;tWE@KRdF@Dp?JaFcml2TG}FhR~)N+~K%
zYfa&DC-WR&h()o6HpJZieUW`<X!}Kj(-!}!YqCzNt~wqw0Fbk+wJ_Cd!y;kNj{vln
zu?+(u3`JdB5v8~Z5PMLw1<No7i!cK-umA&4)103bXMzNYh6C=y^SAJI&ba{u5C`QB
zLnzP?>YM%x7LitKl`)3QIc2RStu-m7NJ>exNVmsF@7)ebdIT;`WDPFT0^at@Ih#B6
zY!YL%RL4A?$3UVq;UYf8{Z~T>LH6DjC^R6Vi+dqp=)ZvF4s&Or!GnVT@g41qsh+n^
zB{#kv0Z6Zd6o^3>3ZQO!0gvOty=%|mLEU(!;e`fdU{)gtme~4#|4-6J&#JWsFkk>P
ziA1!_uKc38U2qHL;P2}c^<Mvq1L^s#wa6ZL{3sHl_a1x47~y)ZLsALbdzW)gnRAx4
zR){H{rRMIj$U6fsG2EEaG?XA%a5wBrgSt1H|37>aQwoMBVKS?%oy$xwPA{FKo{s>e
z*joyKAP@!6pmyLY{CB^u%00M%euFyFfJA*YAO=3?aqo<6*P@-$=prhvK$aFcD`;@e
zThEH{t3rIj{B0a6T5AIpjN`JRJf$=cg(ejR9_!&;jk27Za~_I99HY+8vLDBkQkGil
z(t981GLK%qi8NpjJu&Vcf;Cv?kG^vsIg4$BhKVx-oAdbPVua)Vhr6Bvhy^I|#MIPu
zA+Q3D2RRDlDUb$OorT=MKp6q1axn<9W66>w4AZ7f0}pe7iZPIf3JVLt@~*C~40Gqs
z1s8{)#00E-89Y2Zz&Wv{rG??~<HzuZhn}7uxO9LO-yna0JP*n_@$vBtJv}|(1_me*
zfQr73jt;OLu$(3+C<xDKpd0{8#K=V^rNtpE!a#`wCI-SFH^IUK7>Q3GJb3UGI!^c(
zAOI)!k^&$M0|68d())QLPt;{WC?3c>VZe=`F1qQ5Ogc$3De9Nr`#Q$h9K<HDq<oxA
zX5FRf8?wGc9-tx&85AA6t+i{;g+<(`XX+1})?tej*F+04`^~#}J|xicBSTqwI%STG
zlu7L5uTC}xpC%P)Mrzq#f1k*TU4Bra@bSMe9`zFJb!6(dP60@<V-yOZ7>J@+xghty
z7duxW{G8%~h{6Yp@Fcz>lbAReD3<w&uLI<qiyJV4zp}u)-1H=?eAVD$K@zMhbWgKf
z0VI|msbHSPRZ&p&CV<%686!%Kcg1r`y!WjLEX?6g6K$>ex3k{xR;24k&j)9wVEnUE
z?bATVObiN!C361>z=;{$00@InbR7p_6&GX$j?Uo#ok05%UqTu$dT5%`1GK=;{}9a;
z5l3cjvr>0h7}c~=)h>#0v^svn@-Oo?cRwFrB#$^qmikXwA&KblgpIC}JP6~)?VC8$
zDcsqGE{mhXy>=n%?|ZvlQEZZkoqtDfQFv7~Cb>EpW;_GkaSI?8sQJI|-MhCRsHg_m
zv~2-(LV<02aB2p53Y5~YwFZgFUFZXz_~c>DR#@u`c}x;Ha6od%jR#oc2PBSMWWvlv
z?u>#G0IV1XsR!}VJN&RnL2h2d)KTJJ^cE^8f<QS5)Q|#=V1WDyil}Ydwp{~8)H7&A
zfd+D)gGS#00*Dc5UW+X&D@y~|C-Db*!VXw0I)f@~5Qa4=kvny?1n8bZPZ-EK5nqBK
zrszdBgVGTSlBVdPITi$9-KAT%Zan~EP>y=`1k{3JV7Lhyx`ooO0Ro5-ZHgb%`I1ae
zPxk=U3zop*Kvr8@+ZvRrkW<?zpk50Yl$(H&a~Ig<_y%k|y+zAWph&s}%~@Xo0th`R
zfyx_D&rcMHW%c#-wScWIWnfV#4NP_XK!ZWOL`Gn0WE>4@$^ftk{0FR`{sF6;pTNe%
zcVI&TG-vez8c|Q6_%W3K8Pxs)2p~o*YcfCuGbmC(BZ{CgDG4AJ2Vzjqkq6qF#<_lD
z6p&Wp!{QD!831iayaeJGK>QBWs6d|D2M8cs0S+n>K?N!YG^g=HF(*`fG@_^*VZWh~
z@)3$ZLnj<T;_!w7Kmg$jbVev<f#xQ5XhboOMi$j0>n}87enN8@Y-JNl?;0S$0A_rZ
UGfMATL;wH)07*qoM6N<$f*wBEdH?_b

diff --git a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
index 4036462bdc..ce53d99d45 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
@@ -194,20 +194,27 @@ public class AddressbookBean
 			// addressbook.jsp catches the case where the whole book is empty.
 			String filterArg = "";
 			if( search != null && search.length() > 0 ) {
-				message = "Search ";
+				message = _("Search") + ' ';
 			}
 			if( filter != null && filter.length() > 0 ) {
 				if( search != null && search.length() > 0 )
-					message += "within ";
-				message += "Filtered list ";
+					message = _("Search within filtered list") + ' ';
+				else
+					message = _("Filtered list") + ' ';
 				filterArg = "&filter=" + filter;
 			}
 			if (entries.length == 0) {
-				message += "- no matches";
+				message += "- " + _("no matches") + '.';
 			} else if (getBeginInt() == 0 && getEndInt() == entries.length - 1) {
 				if (message.length() == 0)
-					message = "Addressbook ";
-				message += "contains " + entries.length + " entries";
+					message = _("Addressbook") + ' ';
+				if (entries.length <= 0)
+					message += _("contains no entries");
+				else if (entries.length == 1)
+					message += _("contains 1 entry");
+				else
+					message += _("contains {0} entries", entries.length);
+				message += '.';
 			} else {
 				if (getBeginInt() > 0) {
 					int newBegin = Math.max(0, getBeginInt() - DISPLAY_SIZE);
@@ -216,7 +223,7 @@ public class AddressbookBean
 					           "&begin=" + newBegin + "&end=" + newEnd + "\">" + newBegin +
 					           '-' + newEnd + "</a> | ";
 		       		}
-				message += "Showing " + getBegin() + '-' + getEnd() + " of " + entries.length;
+				message += _("Showing {0} of {1}", "" + getBegin() + '-' + getEnd(), entries.length);
 				if (getEndInt() < entries.length - 1) {
 					int newBegin = Math.min(entries.length - 1, getEndInt() + 1);
 					int newEnd = Math.min(entries.length, getEndInt() + DISPLAY_SIZE);
@@ -245,38 +252,43 @@ public class AddressbookBean
 		if( action != null ) {
 			if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) {
 				boolean changed = false;
-				if( action.compareToIgnoreCase( "add") == 0 ) {
+				int deleted = 0;
+				String name = null;
+				if (action.equals(_("Add"))) {
 					if( addressbook != null && hostname != null && destination != null ) {
 						addressbook.put( hostname, destination );
 						changed = true;
-						message += "Destination added.<br/>";
+						message = _("Destination added.");
+						// clear search when adding
+						search = null;
 					}
-				}
-				if( action.compareToIgnoreCase( "delete" ) == 0 ) {
+				} else if (action.equals(_("Delete"))) {
 					Iterator it = deletionMarks.iterator();
-					int deleted = 0;
 					while( it.hasNext() ) {
-						String name = (String)it.next();
+						name = (String)it.next();
 						addressbook.remove( name );
 						changed = true;
 						deleted++;
 					}
 					if( changed ) {
-						message += "" + deleted + " destination(s) deleted.<br/>";
+						if (deleted == 1)
+							message = _("Destination {0} deleted.", name);
+						else
+							message = _("{0} destinations deleted.", deleted);
 					}
 				}
 				if( changed ) {
 					try {
 						save();
-						message += "Addressbook saved.<br/>";
+						message += "<br>" + _("Addressbook saved.");
 					} catch (Exception e) {
 						Debug.debug( e.getClass().getName() + ": " + e.getMessage() );
-						message += "ERROR: Could not write addressbook file.<br/>";
+						message += "<br>" + _("ERROR: Could not write addressbook file.");
 					}
 				}
 			}			
 			else {
-				message = "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
+				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.");
 			}
 		}
 		
@@ -364,4 +376,19 @@ public class AddressbookBean
 			endIndex = Integer.parseInt(s);
 		} catch (NumberFormatException nfe) {}
 	}
+
+	/** translate */
+	private static String _(String s) {
+		return Messages.getString(s);
+	}
+
+	/** translate */
+	private static String _(String s, Object o) {
+		return Messages.getString(s, o);
+	}
+
+	/** translate */
+	private static String _(String s, Object o, Object o2) {
+		return Messages.getString(s, o, o2);
+	}
 }
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java b/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java
index 7dad7a2500..f6655757d8 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java
@@ -136,17 +136,16 @@ public class ConfigBean implements Serializable {
 		String message = "";
 		if( action != null ) {
 			if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) {
-				if( action.compareToIgnoreCase( "save") == 0 ) {
+				if(action.equals(_("Save"))) {
 					save();
-					message = "Configuration saved.";
-				}
-				else if( action.compareToIgnoreCase( "reload") == 0 ) {
+					message = _("Configuration saved.");
+				} else if (action.equals(_("Reload"))) {
 					reload();
-					message = "Configuration reloaded.";
+					message = _("Configuration reloaded.");
 				}
 			}			
 			else {
-				message = "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
+				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.");
 			}
 		}
 		if( message.length() > 0 )
@@ -162,4 +161,9 @@ public class ConfigBean implements Serializable {
 	public void setSerial(String serial ) {
 		this.serial = serial;
 	}
+
+	/** translate */
+	private static String _(String s) {
+		return Messages.getString(s);
+	}
 }
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/Messages.java b/apps/susidns/src/java/src/i2p/susi/dns/Messages.java
index 2426606af6..dd04c62890 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/Messages.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/Messages.java
@@ -19,19 +19,15 @@ public class Messages {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
-    /**
-     *  translate a string with a parameter
-     *  This is a lot more expensive than getString(s, ctx), so use sparingly.
-     *
-     *  @param s string to be translated containing {0}
-     *    The {0} will be replaced by the parameter.
-     *    Single quotes must be doubled, i.e. ' -> '' in the string.
-     *  @param o parameter, not translated.
-     *    To tranlslate parameter also, use _("foo {0} bar", _("baz"))
-     *    Do not double the single quotes in the parameter.
-     *    Use autoboxing to call with ints, longs, floats, etc.
-     */
-    public String _(String s, Object o) {
-        return Translate.getString(s, o, _context, BUNDLE_NAME);
+    public static String getString(String s) {
+        return Translate.getString(s, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
+    }
+
+    public static String getString(String s, Object o) {
+        return Translate.getString(s, o, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
+    }
+
+    public static String getString(String s, Object o, Object o2) {
+        return Translate.getString(s, o, o2, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
     }
 }
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
index b860e23930..cc983b54bf 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
@@ -126,7 +126,7 @@ public class SubscriptionsBean
 		String message = "";
 		if( action != null ) {
 			if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) {
-				if( action.compareToIgnoreCase( "save") == 0 ) {
+				if (action.equals(_("Save"))) {
 					save();
 					String nonce = System.getProperty("addressbook.nonce");
 					if (nonce != null) {	
@@ -135,20 +135,19 @@ public class SubscriptionsBean
 						// Fetching from the addressbook servlet
 						// with the correct parameters will kick off a
 						// config reload and fetch.
-						message = "Subscriptions saved, updating addressbook from subscription sources now." +
+						message = _("Subscriptions saved, updating addressbook from subscription sources now.") +
 						          "<img height=\"1\" width=\"1\" alt=\"\" " +
 						          "src=\"/addressbook/?wakeup=1&nonce=" + nonce + "\">";
 					} else {
-						message = "Subscriptions saved.";
+						message = _("Subscriptions saved.");
 					}
-				}
-				else if( action.compareToIgnoreCase( "reload") == 0 ) {
+				} else if (action.equals(_("Reload"))) {
 					reload();
-					message = "Subscriptions reloaded.";
+					message = _("Subscriptions reloaded.");
 				}
 			}			
 			else {
-				message = "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.";
+				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.");
 			}
 		}
 		if( message.length() > 0 )
@@ -183,4 +182,9 @@ public class SubscriptionsBean
 		
 		return content;
 	}
+
+	/** translate */
+	private static String _(String s) {
+		return Messages.getString(s);
+	}
 }
diff --git a/apps/susidns/src/jsp/addressbook.jsp b/apps/susidns/src/jsp/addressbook.jsp
index 4fda75eff7..0189d0a323 100644
--- a/apps/susidns/src/jsp/addressbook.jsp
+++ b/apps/susidns/src/jsp/addressbook.jsp
@@ -38,7 +38,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>${book.book} <%=intl._("addressbook")%> - susidns v${version.version}</title>
+<title>${book.book} <%=intl._("addressbook")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="css.css">
 </head>
 <body>
@@ -111,7 +111,7 @@
 <div id="search">
 <table><tr>
 <td class="search"><%=intl._("Search")%>: <input type="text" name="search" value="${book.search}" size="20" ></td>
-<td class="search"><input type="image" src="images/search.png" name="submitsearch" value="search" alt="Search" ></td>
+<td class="search"><input type="submit" name="submitsearch" value="<%=intl._("Search")%>" ></td>
 </tr>
 </table>
 </div>
@@ -155,7 +155,7 @@
 
 <c:if test="${book.master || book.router || book.published || book.private}">
 <div id="buttons">
-<p class="buttons"><input type="image" name="action" value="delete" src="images/delete.png" alt="Delete checked" >
+<p class="buttons"><input type="submit" name="action" value="<%=intl._("Delete")%>" >
 </p>
 </div>
 </c:if>
@@ -174,7 +174,7 @@
 <b><%=intl._("Hostname")%>:</b> <input type="text" name="hostname" value="${book.hostname}" size="20">
 <b><%=intl._("Destination")%>:</b> <textarea name="destination" rows="1" style="height: 3em;" cols="40" wrap="off" >${book.destination}</textarea><br/>
 </p><p>
-<input type="image" name="action" value="add" src="images/add.png" alt="Add destination" >
+<input type="submit" name="action" value="<%=intl._("Add")%>" >
 </p>
 </div>
 
diff --git a/apps/susidns/src/jsp/config.jsp b/apps/susidns/src/jsp/config.jsp
index 4c3cefbdf8..9f407ced95 100644
--- a/apps/susidns/src/jsp/config.jsp
+++ b/apps/susidns/src/jsp/config.jsp
@@ -34,7 +34,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title><%=intl._("configuration")%> - susidns v${version.version}</title>
+<title><%=intl._("configuration")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="css.css">
 </head>
 <body>
@@ -64,8 +64,8 @@
 <textarea name="config" rows="10" cols="80">${cfg.config}</textarea>
 </div>
 <div id="buttons">
-<input type="image" src="images/save.png" name="action" value="save" alt="Save Config">
-<input type="image" src="images/reload.png" name="action" value="reload" alt="Reload Config">
+<input type="submit" name="action" value="<%=intl._("Save")%>" >
+<input type="submit" name="action" value="<%=intl._("Reload")%>" >
 </div>
 </form>
 <div id="help">
diff --git a/apps/susidns/src/jsp/index.jsp b/apps/susidns/src/jsp/index.jsp
index 0f56bdf187..51e0517e97 100644
--- a/apps/susidns/src/jsp/index.jsp
+++ b/apps/susidns/src/jsp/index.jsp
@@ -32,7 +32,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title><%=intl._("Introduction")%> - SusiDNS v${version.version}</title>
+<title><%=intl._("Introduction")%> - SusiDNS</title>
 <link rel="stylesheet" type="text/css" href="css.css">
 </head>
 <body>
diff --git a/apps/susidns/src/jsp/subscriptions.jsp b/apps/susidns/src/jsp/subscriptions.jsp
index 7485e10bc2..4edd704ae6 100644
--- a/apps/susidns/src/jsp/subscriptions.jsp
+++ b/apps/susidns/src/jsp/subscriptions.jsp
@@ -34,7 +34,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title><%=intl._("subscriptions")%> - susidns v${version.version}</title>
+<title><%=intl._("subscriptions")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="css.css">
 </head>
 <body>
@@ -64,8 +64,8 @@
 <textarea name="content" rows="10" cols="80">${subs.content}</textarea>
 </div>
 <div id="buttons">
-<input type="image" src="images/save.png" name="action" value="save" alt="Save Subscriptions" >
-<input type="image" src="images/reload.png" name="action" value="reload" alt="Reload Subscriptions" >
+<input type="submit" name="action" value="<%=intl._("Save")%>" >
+<input type="submit" name="action" value="<%=intl._("Reload")%>" >
 </div>
 </form>
 <div id="help">
-- 
GitLab