From dde8eb937556043d0cf2d48e12fa1d8e53417a63 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 22 Aug 2017 18:34:43 +0200 Subject: [PATCH] #128 - Add language chooser to settings --> restart after change needs to implemented --- .../budgetmaster/logic/Settings.java | 17 ++++- .../logic/utils/LanguageType.java | 35 ++++++++++ .../budgetmaster/logic/utils/Strings.java | 5 ++ .../budgetmaster/resources/_de.properties | 9 ++- .../budgetmaster/resources/flags/english.png | Bin 0 -> 18427 bytes .../budgetmaster/resources/flags/german.png | Bin 0 -> 7881 bytes .../budgetmaster/ui/cells/LanguageCell.java | 63 ++++++++++++++++++ .../ui/controller/Controller.java | 19 ++++-- .../ui/controller/SettingsController.java | 49 +++++++++++++- .../ui/controller/SplashScreenController.java | 8 ++- .../budgetmaster/ui/fxml/SettingsTab.fxml | 14 +++- .../budgetmasterserver/main/_de.properties | 2 +- 12 files changed, 207 insertions(+), 14 deletions(-) create mode 100644 src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java create mode 100644 src/de/deadlocker8/budgetmaster/resources/flags/english.png create mode 100644 src/de/deadlocker8/budgetmaster/resources/flags/german.png create mode 100644 src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java diff --git a/src/de/deadlocker8/budgetmaster/logic/Settings.java b/src/de/deadlocker8/budgetmaster/logic/Settings.java index 0a633663e..29da9144f 100644 --- a/src/de/deadlocker8/budgetmaster/logic/Settings.java +++ b/src/de/deadlocker8/budgetmaster/logic/Settings.java @@ -2,6 +2,8 @@ package de.deadlocker8.budgetmaster.logic; import java.util.ArrayList; +import de.deadlocker8.budgetmaster.logic.utils.LanguageType; + public class Settings { private String clientSecret; @@ -10,6 +12,7 @@ public class Settings private String currency; private boolean restActivated; private ArrayList<String> trustedHosts; + private LanguageType language; public Settings() { @@ -74,8 +77,18 @@ public class Settings public void setTrustedHosts(ArrayList<String> trustedHosts) { this.trustedHosts = trustedHosts; - } + } + public LanguageType getLanguage() + { + return language; + } + + public void setLanguage(LanguageType language) + { + this.language = language; + } + public boolean isComplete() { if(url == null) @@ -91,6 +104,6 @@ public class Settings @Override public String toString() { - return "Settings [clientSecret=" + clientSecret + ", url=" + url + ", secret=" + secret + ", currency=" + currency + ", restActivated=" + restActivated + ", trustedHosts=" + trustedHosts + "]"; + return "Settings [clientSecret=" + clientSecret + ", url=" + url + ", secret=" + secret + ", currency=" + currency + ", restActivated=" + restActivated + ", trustedHosts=" + trustedHosts + ", language=" + language + "]"; } } \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java b/src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java new file mode 100644 index 000000000..f9ed0a080 --- /dev/null +++ b/src/de/deadlocker8/budgetmaster/logic/utils/LanguageType.java @@ -0,0 +1,35 @@ +package de.deadlocker8.budgetmaster.logic.utils; + +import java.util.Locale; + +public enum LanguageType +{ + GERMAN("Deutsch", Locale.GERMAN, "german"), + ENGLISH("English", Locale.ENGLISH, "english"); + + private String name; + private Locale locale; + private String iconName; + + private LanguageType(String name, Locale locale, String iconName) + { + this.name = name; + this.locale = locale; + this.iconName = iconName; + } + + public String getName() + { + return name; + } + + public Locale getLocale() + { + return locale; + } + + public String getIconName() + { + return iconName; + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java index 545c847ae..6e38376d8 100644 --- a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java +++ b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java @@ -8,6 +8,7 @@ public class Strings public static final String VERSION_NAME = "version.name"; public static final String VERSION_DATE = "version.date"; public static final String AUTHOR = "author"; + public static final String CREDITS = "credits"; public static final String FOLDER = "folder"; //TITLE @@ -128,6 +129,10 @@ public class Strings public static final String INFO_HEADER_TEXT_WELCOME = "info.header.text.welcome"; public static final String INFO_TEXT_WELCOME_FIRST_START = "info.text.welcome.first.start"; public static final String INFO_TEXT_WELCOME_COMPATIBILITY = "info.text.welcome.compatibility"; + public static final String INFO_TITLE_LANGUAGE_CHANGED = "info.title.language.changed"; + public static final String INFO_TEXT_LANGUAGE_CHANGED = "info.text.language.changed"; + public static final String INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW = "info.text.language.changed.restart.now"; + public static final String INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER = "info.text.language.changed.restart.later"; //WARNING public static final String WARNING_ENDDATE_BEFORE_STARTDATE = "warning.enddate.before.startdate"; diff --git a/src/de/deadlocker8/budgetmaster/resources/_de.properties b/src/de/deadlocker8/budgetmaster/resources/_de.properties index 99ffe43b1..952572464 100644 --- a/src/de/deadlocker8/budgetmaster/resources/_de.properties +++ b/src/de/deadlocker8/budgetmaster/resources/_de.properties @@ -1,9 +1,10 @@ # DEFAULT app.name=BudgetMaster -version.code=6 +version.code=7 version.name=1.4.0_alpha version.date=12.08.17 author=Robert Goldmann +credits=L�nderflaggen von Freepik auf https://www.flaticon.com folder=Deadlocker/BudgetMaster @@ -127,6 +128,11 @@ info.header.text.welcome=Willkommen beim BudgetMaster info.text.welcome.first.start=Dies scheint dein erster Besuch zu sein, da noch keine Einstellungen existieren.\nDamit es losgehen kann, �berlege dir ein Passwort und trage es in das Passwortfeld ein.\n\n(Hinweis: Das Passwort kann sp�ter jederzeit ge�ndert werden.)\n " info.text.welcome.compatibility=Deine Einstellungsdatei ist veraltet und muss aktualisert werden.\nSeit Version v1.3.0 wird ein Passwort ben�tigt, um BudgetMaster zu entsperren. Damit es losgehen kann, �berlege dir ein Passwort und trage es in das Passwortfeld ein.\n\n(Hinweis: Das Passwort kann sp�ter jederzeit ge�ndert werden.)\n " +info.title.language.changed=Neustarten +info.text.language.changed=�nderungen der Sprache werden erst nach einem Neustart des Programms wirksam. +info.text.language.changed.restart.now=Jetzt neustarten +info.text.language.changed.restart.later=Sp�ter neustarten + # WARNING warning.enddate.before.startdate=Das Enddatum darf zeitlich nicht vor dem Startdatum liegen. warning.empty.width.in.pixels=Bitte gib eine Breite in Pixeln an. @@ -250,6 +256,7 @@ settingstab.label.rest.activated=aktiviert settingstab.label.rest.deactivated=deaktiviert settingstab.label.trusted.hosts=Vertrauensw�rdige Hosts: settingstab.label.trusted.hosts.info=(ein Host pro Zeile) +settingstab.label.language=Sprache: settingstab.label.database=Datenbank: settingstab.button.database.export=Exportieren settingstab.button.database.import=Importieren diff --git a/src/de/deadlocker8/budgetmaster/resources/flags/english.png b/src/de/deadlocker8/budgetmaster/resources/flags/english.png new file mode 100644 index 0000000000000000000000000000000000000000..56268bc43902937b857b586498cf5059a7926f36 GIT binary patch literal 18427 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 Gp$Pz*Q!GmW literal 0 HcmV?d00001 diff --git a/src/de/deadlocker8/budgetmaster/resources/flags/german.png b/src/de/deadlocker8/budgetmaster/resources/flags/german.png new file mode 100644 index 0000000000000000000000000000000000000000..2644cdb785a2ef8eb806b0ae25bcc03c1160ae52 GIT binary patch literal 7881 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4mJh`hA$OYelajGuoOFahH!9jaMW<5bTBY5 za29w(7BevLUI$@DCym(^3=9mCC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2 zNHH+Txp}%chE&{od$)GY{M1_e50@_m-Lk5TSR>`wdi4-T<f|oJA(u8LMJYC%dNqSZ z_f)fn)i>{zEn8m6OuC`*M`hEJKyFFSnGgHpSGBZXT=!*uQ<+}wLC5Upr%DnQxaSJ; z)&8q}_q+P++_L4%pFjLvaR2*PtCQM>9JN1Uu7CZx=lsum{I%_Tvags|>F)F6dEWB9 z{pZ6=1*tzmc4+GG#&c>PvVC~(!`}~wH<;OoZfkk_u=T_34dy>{f2H5Py#I5^ul%|h zb-mS>*Y8yNE9ZUr{m+$O(s!8roq2EmzaI4{;}wqafh;e67R;CM<9*(~pDUiHUS7_N zxiZ`$#CZ3m`F|IFDgT-DYxmsw|JDhwwdG*A@P*Od_D^Aiz&ifz?e!e557)QUn#z25 zyjB12-RsMv?##>DtZ+4J*Is5OhAXKT{5hYuNgq1(;qeCJ!w>K2SqJlmFPkN{b#Bu7 zMh1qxa^H#%r5`Fkw13(8%e?Q--I|^CcW%gUOD9GSh6^hb>zyj%f8_j#yD{Zu|J&7n z3J)#YVm9A5yR>O9Hxolo+6{l-@Xg}kJJ)l~=KX!Et?6tgZ@yQy)m1rmMh3R{#`v1! zKc0R_xshLCcJ1GmWAT33@BCO;7*6E8*l()C_g~@{@3EY(%WVVRv~IVO=3uz6r?I|f zhe3^PZCK6^!zsR*{UX&*E7I8+8D3d_InQC<cJ-m?;oiV1)wgq#_~$<KQDkr^W&gLO zpm2wEj`4wv&AFNRqSZOGjN2I)_R9V``uXE}?*Afj=1X2ox_)`y?sL`r0t^ePo$G^s z>8+{oJll}y($BkOZ^WCEp64`}7`D`ZIL}w!7B6WPa%KG`xw&u8C@~!Pk$*jU(mk#8 z0|DyMm+qBTD>5<kJo2oO=kKr5;ODLUaba<$f3=Vz6N8N57xfl<@BZAoxfvG%c3+m8 zAO5B?U7oRF4*UN#AIcNkA3CI!E!k`Dt?$5~u>Acuea_cBj2dgb(+~Nx3NU26d0erc z)Bfs*L=Su4^drd~f(#i)9@uN%k&3(UAkihxBmJ3*Eem6V72m(@?YnK-<&S-}YkI`9 zH`d>gVF6$B|GN(xH~2HRZ@V%5+?Cy5C0H0%S^N-hGo58x5>j|f?3E=4!<VWT{(SR4 zEU|lWaxz=@X7fmWCx!*HoB#Jdoc6)HSEB0G^p`sO0`r|17F_OsxmWkirHX|?WlJ}| zEIiD?u%+~azt4B|-+l6{{tGugTH|+Rw*W)N@uRhNkK2F6DnCeaWMMc~V?BTMuZ920 zd3V$bFg6I<A9((+AmDS0o5hTCTiCf2849kre_O}FETv|0$-(NeoM8{cf%oy3KASI$ zZ*I}~vfTLnQfH<Hr4*|l-Pb?;OZ`#KE4b;)=PS&6+9DVf7C*Gt{}aK?5~M$4xj7eu zN%e>MVqw`82L!tA70im$WVo<L{(HUJn`=)R65sgkJ#?IjiGf$*U%kk@3pW}9HL8xu zzg)<~@U^z){eRB&nP~?k_DrklIL^h*a3$l%eA#)I4m6l)RGqw8wVJ_UEBpT^8+6`W z+|ponYjV};l)YgL3#tzP_dl%G%k^TxqT_#7&eLWH=sjq!dPneErk{iO8*kh6E;${B z3%eiI*Hwf$GgU2kVf*~`Q6`4FvVSfg{?E&9qPU=)Z%Ld<Y`z%7i$5R!fBwRgf0lj4 zrE1oHG5ul;FU~x$*SmA?de!#rZOkEO4_;Z^cX=}_!!7ea=`CBOcmkMR*Uws5&dtzM z|07=DpLZ~0){+;I;x8UDF(k|X^S*PB{mPHBgQ`_K84kQ)```KSf2M*1v&h~zE_-7c z9^5!wUv^_%CIfHKmn}D|_Anf{*#3WOqQhnesTD7BufO`r#L&+FZ{<TfUZxWc7hf-X z^_QuE^~LMiqT4dK9NfC*nV;qnU?`INS1(wW&F0Y7b?>`)S|h`R+Yjc;yt~A}a4OE? zW{v<uk;K1zPHCB{hWpx8kD||TFfMpG|9kaB{sR~EMT%k@7%rT6SRZ%e<pgG#(2L6F zjg46v)Oi1&K9tR8e!x(4?<b?p&I}ocKI~U~Q@(=HZOx0B<}(zT9OkzF50_18F#NqL zQi<V8?gxLa)iQAnh1yjwRW`datT_B(zMNcH2IH+|FIHYYE5W$n)Zu!!8!t96ZHc`Y zoj${q$w9RJ{~5dWA6Z{4S#<oINij=<7VrP>ZPR7^8v3-W-d3NLV_d*>`2VC2*6l(I zvb*M0cS@=-d@1@-Z}p~Ff^pZn7klTMb+a_Y@%&fiQ*b!1YdD#uA&>9>dFv8}sUIsh zdosK@_F=!COvwWVt;H`+UY{Ar<e=XE|LVhr!)yVTuKD|Jtr23dGW=tI?fFtWhS0Dt zFZyRjGC5ec|9`sf8~cj0cNwS8j%9MNZu@^|!|{boD|#2D>zf>AY52(VpZjpbVU_@E z*Z2D_=m;|$Gy3zq>X5v{+xZd}*L{Q;+>HM`Z;9pOcX%thx2Er=8beRYkMn%{%Q6_G z7QcA8`K$$F!j6aaWfeCQ88hZA+CD$`8YhD@@Bi{vaao~;V_H>zcAv3fO!)A@-uBO- zhYT5e7G0m8_l=X`=m&etoMH`zO@UwjOlED^)Bb<ShGU5gC;Tq{R_A2+$<|OU!_<&- zSDE37<sbX>&&(<Bi<una4*y?dr~jRCfho715W^>lf17Pyus0~niI{jZWPJNzubH#; zCZmOup|qb6!>sC~{~w!KGPr-N@GEC~BEqmQx0tzr=e`)jEYm;vTUIhkER<$#NaOkc zbKMX2gem20XT%v^{cn;F|HEuB&6@e1D#MlUUH_lwBrzO&u~Y57<b^8_>tia;JY!9m z(-m1Xhaq4-!w22jVhv_Lr!fTdKm0E^TeQLKcLzhj+lT+RUC3X|bRq3%PUUQdfU^(n z4cBb-WPC9p>6niQ!zyuxX}9Jul-vknTo85mzis0BUQUO0(aq0nnH)^p{(rH{|G~VV zx@)F!EW?Xhh9B$BayU${4QF`q_QU=|YAg%f*9kCG8UOKr`*}`1L)G#bj?1|i?(Tn@ zKld!VL;u><uh%w~@-l3{Rl*Q*WG$0JdE0-P?SB{pHbyf)=U|vC`!Aove)CO+6*H2| z_Bt}Wh+&9Goy-^zxSFNm9M6AOGjRsd?H&vn??2RUj{e86;^f-Kd@+Vw;tcP$uVh%! z`J1)j8_)krGhqf(V}AyT`yb}Z%-cATVa3d(GG8%<V{#068#@_Rtc+%9*l7Ryzo;}v z!z`_|8!MR(ykI`iY{t)E`h5X|!LEn<4=iI`peV+{pe+3__>h@2TSJ>h+AR^r2R9fK zcAjN&IIJVi&?f(Hc{`&tYeSo6+U=K22QD%na5m#);Qcy*!Qjh>{db-*EO@9V&cG-C z@A4r&Y37DD?X<flj1TIW4qVUSVlet>%DBMv&v~Be91aGfz%zS{SsV84JD$tNVD!1- z8l%EKy9{B52`l-Z$uOARU|>kea-PPx;QZ%*j0ui?j1M%q`5m6kJEg^N<oZ!DSq3lh z=OPSdQ3VVdxo4CZj$B_VCe6TCoXN-dKwV6Vf$#HVH}-}fzc#qCH7M5Zn8>KGPp!pQ zOoE{;<je_9UmgbetveVD*7TccF)VriZ+k=pgT%FId4EL~L^CE#bY*Q2jJ(ppAP_Hn z*jP-2!EMQmnZmOL7}jl>!C;^je$5J`Xa3d+3<g@~%YH3qn9Iiy9_hj$F?sbX83wax z2L_4BXSeb&d^ElOi1EOVGi#F>Dh?cCJg~ziU^Rn4yzwD9Zgz&pL1!*WmU1y{k2GP( z=)RpL$nfa(jt_fSnH#ogq`fLE<zSc|sl$-5`t&OS2Dz;P3>U)s!>kyNTt8EA!HLl! zT6A-1+EnHP=DI=*B}dG)B^e%NXT8|&z;HqEXwTfJqYMSTM;ROXb}j2-Ojz8?*wA+? zVkLt>e6bD}L&?!OTC5G#x*QB8NB2(UVE9<-C9y$);ezPVGqy{)7!x{=GBm7<x^x-j zd%qX6H`IFFZ*gXDC>Pnhea1msZie$;=USS}Ffr`P%hP8*FjtI$q3Y4OIJO2^5G%>u zpUL6RvFBQL3}3G7+{?jGu3^LQ<%;ZH4u)t^IfkmN>~Lm>KW)!7tQbNLS>EMghz}}Y zSka<iYRr%m24bC!<z)CMeKsVAVa1f0cR3imMWq<DQZvn&4)lviF=#z?m*r*nC_P7v zPs@ZM#LIBD|LYWnA5BWk4yv^aCo?AOWny+vUHjgHp(DP+&0@g;h5*l_J@YPhG8F86 z#N@Cv_I@YBhZ%>M9G2Q%yT%}}|G~+`^&p<;=3h_B*c$w`v>2`&Qok+95T>ocaOKde zZ7dBxTKo9dYiclDaWdT8pYP7F!@-boL6}~KJ43{}2@C<+r*8`~T+>ovxN_=NAuGfD z|I7}?>zP0Nv}Z`EkUg-G>3|U{OG8wY**t~~Zj6izrd{jNWccw%o?%wC?12Kt2h3gU z3|qf7Ze#)LbY9Oap~qmesDL3LyT3=3Vb2;6OTS->;Yj@lKUd}kw~FT(Ob3)$nH$_9 zOlC1`a5~7aKrpOFjbTl&0YgShsWKPCM}0qz-6A{;QVVCi6m}D0I2WYDkTGSmn-Igg zFb#%`DXZOu7~X+dyWNEt=7oU7)Z2L(UNRjB7v*A*dU{n^pT)+AVUP1fh6NMv8OAU~ ztZ-ns;KAL_&0wxAz+iIe>|xf1saz}!y<3WQFl>lxWLPlq8oxM0T#y1o#**o6JPaS} z=Pa^dxR9}&N0i~277v5Ttvd^u4s7LOX6P+@8^HKL8pQh6yO8MszX%(H)LV9E)&^gY z*tX0S3>VfLFkHy^+s@kXgZ;7yE5jy(+yaIfOBEO<v_>{FAE;qvY|uF)FT)_F&B2h8 z`0)Y51|LTT1@6;q><sG}*&1xt$jC6rg$Xd6ICQv~`M_l^CWgq0sse@|y-f@bVs*i6 z4L{^3i!d{6GFr*OkRQasaN^YLE{1|-P7DrV=X973RB|ygL|U%rV2}sPwRbTTOa;lU z(_%W{3zFNpl7r#2C=<h`O?x;P$~9RSQl73;Vz{$hfMLSa-(3tFq7)evv{!dCd}sk_ zo2S8afUT9GVNH$((*ZXyLx<@=8knKSbYMSN|NSn84Y43?x4RiW>;Y@jXFAXgvaNC> z2ZJ@(w#^(2yTOdz91P4LDM<~c1B@VpWCR!(6fQG7P-b8_@j;nEoRP_)O`LHTuK<J5 z9^MPh4GaqU`c)zZ3{Rd{>N7Jn{K@%lmB4Vq|EJZ1vmkSB#;`Q>f*BDk4ZL7R084|q z2ouAmPcDKCVcIMVDXFD`4DW(LfmQ3uu)`bV)^btCgq<L_P7`N*paycsoe-9W)gWy} zp@Ix{OF#j_FUt791|&BpoTb4S<ou#EL56!^Idf6Qgh?O+)V|7Em8{@k+#krpaN<yY z*UkU;86RYV;@QU5g284DDC*nU*&C*U;xfY0f<Y%36up}cGA3*UMXDG-AH!!+7KTj* z^~fp31Z0BG?^*^A#Rc(!3=1y)`d|HypO0ZSD9z<w4q$x14oY+1nin!1Fb9dfm3C%r z$QA{q$Xg4U4#c!FHn`2U4q>oxO=MVb(eGzGqe5%LbP;w2sh3L+8vj3ml=k<CNifXH zd|JTxAdQu&!EION4u%Z@po}5LC(dwhAt?X6m(XMI;aIOF#9-oOcw1e@lwpa$hb2yo z4vTFnpX`y>Vz{$5fZ>8hdA|xn444((ufi~ADM&26SA{`Doar4XC%449$1zx>FnA~? z%xz+HP+lXQbxmHEVNC!i|BEi>WatLv{ltqIOb4t*c^IS~&Q<1P&}7-OCW9d$TVFo+ z9KSe&T%ZNRimmR)gczo2$}n8HwP_<u1HT4{#ePhPp^tyPrX0hSAj8A`@}(eqdYPCU zbk|De9h28)*ulrZAocC%e-EYutXv!nTT2dBFg3hpU|5hi|G&I3!xDiFVTz0k!mi0> z@9S4#&<XcoSTXhKTMmYG%nS`|wg2odF+8whV92=e{J%06gC@(GumFY?tyh(2zE$RB zm>&Y-_-`|2m?QH|ON${S%5b%RUNnP;;se80)&{TYoF&DzCX5fNK%CwCgc%duEEep5 zmhj&gCO93aVr6Uain5<I)9x0-2UZa0my<g4fy{>sl$afsifsP5rH{2igsE=H1%?1k zd#SfJ^4<&)t3Vv@-GU5hpep6mnLhRg5hgQjGlq~u&o-X<w2`erU(<pi<k0k8k__hp zL3LE|E-{86jvK39FkA?ZK5ljVxG=-JfC`2eE3K;p8P0`*SjD^LKuQ+=V7MS`ea!gq zacPEkTNoHF2$z2|VmPxE#44^9W8ll(opI=(?&t0DHC6u<85VdaeG@a@QO>wPlxZ5M z(!H)D`TkFyJA;KPPXrIci>}6^Z{KVfwm2QwE5^dG>(RZkGw;e+8!SPbB)?K72W^&| zEgB3L0;O-8Zoe(bux_IP!-c@>A%+Y-ynn^m8LSrVpR;u;H^W+i55C+i46+~3mYsW3 z#@;aV;R08thHX|6=Wd*0YY5}0xB_Zo*xq_qdAF0HU}h^*!?s;(_!uAT_^{_FQ^U53 zeRI}M<!4wcP%s<RT-mW!c=N7c#ss$;$rl+CV!ll=-f9N&f!u}y1_M3*k}SV+ke@-E z;@9E~QHlwhk1{tH-n?^C^6pE9f~l-54Td{conuT$s<@`abYO)|^tlVSK+f24$%*N} zikO=(f8Ob32>2uNK(d>YLHU!<^8LTx`!Qs+Hn@V?W+{Q@X~o-_4zz4Ix`^q(hHX=f zHyeVix64XoOo)(wdoAW&8iPh1*M^gim<~)ZD}BBD|2vTBKQ^#}n})NEckTwMuS=T9 z_`tya<u{vmt_(Y_I58hc)XS{{S<@>f&EO?nZP;Bc%AmLH0Yktpi}?%}xETE-OBjs4 zhpc~ApwE1O3Di0jdjj@f^HFw%VCgE$=4x36y9{P<lUAA`O7TJAY=(w2HuqltjBaHp zNV}12%rK$T_UW6`cAz-D4r&yC+^Tiv-YS-c%*1wIMu)?1HPYuX6hv_BxN{8DvR;4c z&RVd~+jICBq+Tu5I(ugoYs2Nk4Zchchk2$L`!PtEvFL0MWXPEDG<5d%P#%WhLuRvC z8`^G!oik%RP|d_};#8B?xm#JF0I0aIjB&v;xizomtSw@&Fx`{%nIRx}{gll<3=+W{ zJC3q3Em)Sf@>9>+Dux*{^FTd_ndzq_)fjrTS<Y+*^)4zy=dZsCP6qqWvN-tOiEqCd zHJ#zZvk%#`xf;5Dms)OSY1r1*;A$quAi8~pUh!5tP%wwxjA015vdZf0m0he2<}LGY zrZ9w@Ie$u0m7&Ch<qT(at{H<?QoiNvEHi&_VtEiI&DYSiV{6~$E$bK)k|NSCGhRr3 zeQKr(L&@J*#ynn@1=F|xnHzQ8GU`4kPQq_AFnl>7S~_pxS3XcWkDV>hp!YlP?(=kE zrUPF#TuozH;Jt0yW_N}aE*us8(ael5F6q|4&ph-d#|;$KOU=|6WVdb6EZ*$NxL}8A z!P>K&4()5!zSgZj3pQ@sh5X4(7t;Pd?a91wCMOJ}rT@kXhAlVUXPN2G21WjZXfthw z+)r!O&YfDu*6{dHvY9T!<1Z1G!7L3?tqqe86`ScZB!7vq^p>(xpAAkFvF&^G85%DB zF12))vQeHb3(6sNH`0xn4V-?Tx_R-#&l`V0J~O{{fuZL@ujQFzHlU1Nb9))v1Brce zPsg0mWbonYzkP>6=IG<6YXlgis?!_H*_jHKto7aZC?4d*$ag#p4?48}r9U;}{|w6h z1rx2A89X*WSR|94I1dyncIl5nJ^7vI4%RR`XtUf&{>+^6dfuG$gm;V!b{Hr0Ix|d| zYib$$QJ;ZFmdTIrwhUWCPL6hU{j<;hAPX)Z)|cUGIQHB1=I66^j1M}*+4sIEU@*DX z-7fX7NuDv`jpBnhA2vBNU9ixfZhLQyFhd(B<7Qh8js=DMzh>qh<780gWGp_U*Uq-! zTiI0GyE(!PZh}nD+U{H0Fl_z0d(-sUnM?;HoDQ@m9#CXjF}HD3`|MPv0~SsP4sAG| z$h4x@Hub&PVU`B7mWI>(m6ZYxvTwAjx7}1_*kZ_1qw}VG2ZL62{ms>9br=^gD?WHt za6plH#T@3;ezVmq4Sa14uMau4^DZ#ro3{66j}XHy0Vccm2N*++JwL0)xL~$oLZ>tP zg<|hBDvS%n6(3xF$H(yE=GA|YA)&SgZyQ5_1+V>o>^{OH#IQ<$>7I04kp`pHyQQ0+ z&$4B5XmvVpX2acwEH7rfO<iwV%+kQs)*zX<*qQ4>ne=J7>}wnhqI`^(4<F{!cDQX5 z^DWHSjbVi&#|)7$%PkC#x2<}!GOe2-V6(!9(01{JGyAfpaWItfF`CPK5>jlqcq9Is zpRo%=h6BeAojuP2m}M?!r=B;lW@%t+ZTNi1uU-1Vin3{YFP#x!kdk0ZYn^ZXgyH|` z^QYx9!#Egt`4~Y1b!83rZwGvHGj?J)p}^w9S8n-*Ayt1)ju{8TPS!^4LwdXnCoZhp z#6F9a$>G_1fg4LC86<B$nfZ^2VXc6HX^np{gVBe*o1VY?%f!&m+IV!HID^TLfB%kF z?PWM{(fPpqmfTsa7Zh%vy0`2&H-n5Z%OA&zfXfV04-Rfx{_-so!(uL`df9JT3J$z) zb*pE@=`k3rbLaTKJdNqfiTbJ~>lqxXoes#ixtoYCV3X6Vo_0@{;lefn14SKvb`yyO zO?*q_OdZdQF}&~*m?6C_%gmuQN4I*ioG!zKj{*fwKdNr5|Hxpw#s2Fe;V)^74e!_* zEgxq3a=d6<ep+scI5)!=9Tpk+f7jkNIf&=K|9yMY_ZJ757^YS>J=mY&=fM8ATm2U& zLx?ep57+j#>!w-@dgJ`}rcR2}W(atzP!M)wK_+AFhJ|l5LBqtkP6v(@6jy{YGaq|! z^@_9FtCdU)UwN3)Tk5Z!X$buBd{g<0g-i^+6<rT_6Sp5@<4G=mB|7h!I>Utx3I$OS zYfmydN5p>P*c-&K;G$zf+>ecI>`USd{PRT^PP|TT+|ToW9i!8<x_MO%^53}`QvRqM z+|T(}N-1Tb{oG3bPr?i$jYb@EM8aAad4;4h73O}N{KbZap^b|vpZ|M%vy__2p@SvM z?yozp$Y3x@;lsNPZl7DCqJ!t9+VV0s7_v0BCU(1VZQZogW_OhY6GLvrnh&NAr%P#v z+|s`s`SnK}3&SlbmSt_X59#%aX{Cl+%?|#m#lm1E$#PF3@1ro|iX-KJwoge90?ib3 zJ0=wUXvt<-pg#X&{UV#@DnTX&(H#*NVwo@eT>UHdPCJ7`YQB7p!kf!$7V3UmYW%d! zj)fuXv%|vOhqR?EdQNJ;<f&}nXJXh|d*s8~hpfD^ZckcE(rh+~Gd3LCQ?g=*{m<o6 zHastvzwD{-<Y!{&<zYIS-J#F<+N1_Nagtpr$Z$f9=L}c9c$oxKN}Btv-<!WMu`m?< zUwL4DYiQ#3hYrqf{i<u`z5gc2knrL-Z@rC;)Hi9VD|h~FnQs5ia4!dg!6$<c*ESrP z%(n97<X_XKRNshnV`wOBZM^yL+z0K$tzExDZ!O+DH<E=Rqh4T!h#ud4e&#klTeAt@ z9vyvpuf$D|VS#qygChm8KbC*kmFO~k&%AGUN}tM=hzT+*Se}>=^-J%~yA5Y2EIPYw z>E6=9o!94BvM{X3QLs?HBN0|D&zM}p_y5(F_HzZx1Q-_V>sQ=oP-B~8bjPC0H?u$H zMd2O}h6{IYbBnjv^ZaFt-}dXWT*R9)TNZ{B`aC{7@44go{HuNhJeEK8IVI}#_o><M zc@!8Jn&-Lv_*W2ImGk=9hVviR%&pCQ8@6<7&3^TdjSLKnd0Ew$yqB<--Z$M&Ta0U! z=^OK<TYu(6trmV0E5NWocwvIq3}HLreZv1t-<bAT=jE^ZS|0TF`IPKL|0V_oTRv9U zG~(q8a+~L_Y|{?*J#YHPk)gqgwfW`4{=-cLwL5J8I7i6;Q@-3U{B7y}-@ih-ZwKd! zEs65oUhcrqAoI?}!gP-OKdl<WKeZJadqeZWdD;K0`;uO-@i%tgjDLC0m+xP#{lSre z!A(G@>$}{X$?MYQ%j@xmxA`w!eP?>x`WDfL^9u5-JkRnUzV#tQ>cs8C+z+?E{QPC_ z%liEj{_WR&c|UgczuWJZ$G@KUCA(hrZ=Ctk`@c_pNuN3YU(WLiJG(1~|Fc(k7ib!W T-YaBaU|{fc^>bP0l+XkKXD1!e literal 0 HcmV?d00001 diff --git a/src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java b/src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java new file mode 100644 index 000000000..d7da4df94 --- /dev/null +++ b/src/de/deadlocker8/budgetmaster/ui/cells/LanguageCell.java @@ -0,0 +1,63 @@ +package de.deadlocker8.budgetmaster.ui.cells; + +import de.deadlocker8.budgetmaster.logic.utils.LanguageType; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.control.Label; +import javafx.scene.control.ListCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; + +public class LanguageCell extends ListCell<LanguageType> +{ + private final double HEIGHT = 20.0; + private boolean useBorder; + + public LanguageCell(boolean useBorder) + { + this.useBorder = useBorder; + } + + @Override + protected void updateItem(LanguageType item, boolean empty) + { + super.updateItem(item, empty); + + if(!empty) + { + HBox hbox = new HBox(); + + Image image = new Image("de/deadlocker8/budgetmaster/resources/flags/" + item.getIconName() + ".png"); + ImageView imageView = new ImageView(image); + imageView.setFitWidth(HEIGHT); + imageView.setFitHeight(HEIGHT); + hbox.getChildren().add(imageView); + + Label labelName = new Label(item.getName()); + labelName.setPrefHeight(HEIGHT); + labelName.setStyle("-fx-font-weight: bold; -fx-font-size: 14; -fx-text-fill: #212121"); + labelName.setAlignment(Pos.CENTER); + hbox.getChildren().add(labelName); + HBox.setMargin(labelName, new Insets(0, 0, 0, 20)); + + hbox.setPadding(new Insets(0)); + if(useBorder) + { + setStyle("-fx-background: transparent; -fx-border-color: #545454; -fx-border-width: 0 0 1 0"); + } + else + { + setStyle("-fx-background: transparent;"); + } + setGraphic(hbox); + setAlignment(Pos.CENTER); + } + else + { + setStyle("-fx-background: transparent"); + setText(null); + setGraphic(null); + } + } +} \ No newline at end of file diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java index f87742a17..2d960d0a2 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/Controller.java @@ -328,12 +328,19 @@ public class Controller public void about() { - AlertGenerator.showAboutAlert(Localization.getString(Strings.APP_NAME), - Localization.getString(Strings.VERSION_NAME), - Localization.getString(Strings.VERSION_CODE), - Localization.getString(Strings.VERSION_DATE), - Localization.getString(Strings.AUTHOR), - icon, stage, null, false); + ArrayList<String> creditLines = new ArrayList<>(); + creditLines.add(Localization.getString(Strings.CREDITS)); + + AlertGenerator.showAboutAlertWithCredits(Localization.getString(Strings.APP_NAME), + Localization.getString(Strings.VERSION_NAME), + Localization.getString(Strings.VERSION_CODE), + Localization.getString(Strings.VERSION_DATE), + Localization.getString(Strings.AUTHOR), + creditLines, + icon, + stage, + null, + false); } public void refresh(FilterSettings newFilterSettings) diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java index 5d8dc9535..506a7f648 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SettingsController.java @@ -11,7 +11,9 @@ import de.deadlocker8.budgetmaster.logic.serverconnection.ServerConnection; import de.deadlocker8.budgetmaster.logic.utils.Colors; import de.deadlocker8.budgetmaster.logic.utils.FileHelper; import de.deadlocker8.budgetmaster.logic.utils.Helpers; +import de.deadlocker8.budgetmaster.logic.utils.LanguageType; import de.deadlocker8.budgetmaster.logic.utils.Strings; +import de.deadlocker8.budgetmaster.ui.cells.LanguageCell; import de.deadlocker8.budgetmasterserver.logic.database.Database; import javafx.application.Platform; import javafx.fxml.FXML; @@ -20,6 +22,7 @@ import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.ButtonBar.ButtonData; import javafx.scene.control.ButtonType; +import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.RadioButton; import javafx.scene.control.TextArea; @@ -56,8 +59,10 @@ public class SettingsController @FXML private RadioButton radioButtonRestActivated; @FXML private RadioButton radioButtonRestDeactivated; @FXML private TextArea textAreaTrustedHosts; + @FXML private ComboBox<LanguageType> comboBoxLanguage; private Controller controller; + private LanguageType previousLanguage; public void init(Controller controller) { @@ -66,6 +71,15 @@ public class SettingsController textFieldClientSecret.setText("******"); radioButtonRestDeactivated.setSelected(true); + comboBoxLanguage.setCellFactory((view) -> { + return new LanguageCell(true); + }); + + comboBoxLanguage.getItems().addAll(LanguageType.values()); + comboBoxLanguage.setButtonCell(new LanguageCell(false)); + comboBoxLanguage.setValue(LanguageType.GERMAN); + previousLanguage = LanguageType.GERMAN; + if(controller.getSettings().isComplete()) { textFieldURL.setText(controller.getSettings().getUrl()); @@ -80,8 +94,15 @@ public class SettingsController radioButtonRestDeactivated.setSelected(true); } setTextAreaTrustedHosts(controller.getSettings().getTrustedHosts()); + + if(controller.getSettings().getLanguage() != null) + { + LanguageType language = controller.getSettings().getLanguage(); + comboBoxLanguage.setValue(language); + previousLanguage = language; + } } - + anchorPaneMain.setStyle("-fx-background-color: " + ConvertTo.toRGBHexWithoutOpacity(Colors.BACKGROUND)); labelClientSecret.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT)); labelSecret.setStyle("-fx-text-fill: " + ConvertTo.toRGBHexWithoutOpacity(Colors.TEXT)); @@ -206,6 +227,7 @@ public class SettingsController controller.getSettings().setCurrency(currency); controller.getSettings().setRestActivated(radioButtonRestActivated.isSelected()); controller.getSettings().setTrustedHosts(trustedHosts); + controller.getSettings().setLanguage(comboBoxLanguage.getValue()); } else { @@ -232,6 +254,7 @@ public class SettingsController settings.setCurrency(currency); settings.setRestActivated(radioButtonRestActivated.isSelected()); settings.setTrustedHosts(trustedHosts); + settings.setLanguage(comboBoxLanguage.getValue()); controller.setSettings(settings); } @@ -257,6 +280,30 @@ public class SettingsController controller.refresh(controller.getFilterSettings()); controller.showNotification(Localization.getString(Strings.NOTIFICATION_SETTINGS_SAVE)); + + if(controller.getSettings().getLanguage() != previousLanguage) + { + Alert alert = new Alert(AlertType.INFORMATION); + alert.setTitle(Localization.getString(Strings.INFO_TITLE_LANGUAGE_CHANGED)); + alert.setHeaderText(""); + alert.setContentText(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED)); + Stage dialogStage = (Stage)alert.getDialogPane().getScene().getWindow(); + dialogStage.getIcons().add(controller.getIcon()); + + ButtonType buttonTypeOne = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_NOW)); + ButtonType buttonTypeTwo = new ButtonType(Localization.getString(Strings.INFO_TEXT_LANGUAGE_CHANGED_RESTART_LATER)); + alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo); + + Optional<ButtonType> result = alert.showAndWait(); + if (result.get() == buttonTypeOne) + { + //TODO restart programm + } + else + { + alert.close(); + } + } } public void exportDB() diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java index 8fe0b2739..65bea18bd 100644 --- a/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java +++ b/src/de/deadlocker8/budgetmaster/ui/controller/SplashScreenController.java @@ -62,6 +62,12 @@ public class SplashScreenController }); settings = FileHelper.loadSettings(); + //load correct language + if(settings.getLanguage() != null) + { + Localization.loadLanguage(settings.getLanguage().getLocale()); + } + if(settings == null) { settings = new Settings(); @@ -172,7 +178,7 @@ public class SplashScreenController Parent root = (Parent)fxmlLoader.load(); Stage newStage = new Stage(); newStage.setTitle(Localization.getString(Strings.APP_NAME)); - newStage.setScene(new Scene(root, 650, 650)); + newStage.setScene(new Scene(root, 650, 675)); newStage.getIcons().add(icon); newStage.setResizable(true); newStage.setMinHeight(650); diff --git a/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml b/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml index 96f3f6aed..209c927ab 100644 --- a/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml +++ b/src/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml @@ -2,6 +2,7 @@ <?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> +<?import javafx.scene.control.ComboBox?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.RadioButton?> <?import javafx.scene.control.TextArea?> @@ -53,7 +54,7 @@ <Font name="System Bold" size="16.0" /> </font> <VBox.margin> - <Insets top="-5.0" /> + <Insets top="-7.0" /> </VBox.margin> </Label> <Label fx:id="labelSecret1111" alignment="CENTER" contentDisplay="CENTER" maxHeight="-Infinity" text="%settingstab.label.trusted.hosts.info" textAlignment="CENTER" wrapText="true" VBox.vgrow="ALWAYS"> @@ -64,7 +65,7 @@ <Insets top="-20.0" /> </VBox.margin> </Label> - <Label fx:id="labelSecret1112" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" text="%settingstab.label.database" textAlignment="RIGHT" wrapText="true"> + <Label fx:id="labelSecret1112" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" text="%settingstab.label.language" textAlignment="RIGHT" wrapText="true"> <font> <Font name="System Bold" size="16.0" /> </font> @@ -72,6 +73,14 @@ <Insets top="35.0" /> </VBox.margin> </Label> + <Label fx:id="labelSecret11122" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" text="%settingstab.label.database" textAlignment="RIGHT" wrapText="true"> + <font> + <Font name="System Bold" size="16.0" /> + </font> + <VBox.margin> + <Insets /> + </VBox.margin> + </Label> <Label fx:id="labelSecret11121" alignment="CENTER_RIGHT" contentDisplay="RIGHT" maxHeight="-Infinity" prefWidth="158.0" textAlignment="RIGHT" wrapText="true"> <font> <Font name="System Bold" size="16.0" /> @@ -113,6 +122,7 @@ <VBox.margin> <Insets /> </VBox.margin></TextArea> + <ComboBox fx:id="comboBoxLanguage" maxWidth="1.7976931348623157E308" /> <HBox alignment="CENTER_LEFT" prefHeight="11.0" prefWidth="539.0" spacing="30.0"> <children> <Button fx:id="buttonExportDB" mnemonicParsing="false" onAction="#exportDB" text="%settingstab.button.database.export"> diff --git a/src/de/deadlocker8/budgetmasterserver/main/_de.properties b/src/de/deadlocker8/budgetmasterserver/main/_de.properties index 9eb890aca..dd7db603a 100644 --- a/src/de/deadlocker8/budgetmasterserver/main/_de.properties +++ b/src/de/deadlocker8/budgetmasterserver/main/_de.properties @@ -1,5 +1,5 @@ app.name=BudgetMasterServer -version.code=6 +version.code=7 version.name=1.4.0_alpha version.date=12.08.17 author=Robert Goldmann \ No newline at end of file -- GitLab