From 9a85d1bd7350e10c3c49f2673551ef3c1949700b Mon Sep 17 00:00:00 2001 From: zhangzq Date: Tue, 14 Oct 2025 17:17:28 +0800 Subject: [PATCH] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E5=8C=85=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nlsso-server/libs/language-all.jar | Bin 35408 -> 29378 bytes nladmin-system/nlsso-server/pom.xml | 3 +- .../main/resources/config/application-dev.yml | 4 +- .../src/main/resources/language/i18n/en.js | 751 +++++++++++++++++- .../src/main/resources/language/i18n/in.js | 13 - .../src/main/resources/language/i18n/ja.js | 13 - .../src/main/resources/language/i18n/vi.js | 102 ++- .../src/main/resources/language/i18n/zh.js | 102 ++- .../src/main/resources/language/zh.js | 333 ++++++++ nladmin-ui/package-lock.json | 177 ++++- nladmin-ui/src/api/i18n.js | 10 + nladmin-ui/src/i18n/index.js | 32 +- nladmin-ui/src/i18n/langs/chinese.js | 37 - nladmin-ui/src/i18n/langs/en.js | 134 ---- nladmin-ui/src/i18n/langs/english.js | 37 - nladmin-ui/src/i18n/langs/in.js | 134 ---- nladmin-ui/src/i18n/langs/indonesian.js | 37 - nladmin-ui/src/i18n/langs/zh-CN.js | 134 ---- nladmin-ui/src/main.js | 15 +- nladmin-ui/src/router/routers.js | 2 +- nladmin-ui/src/views/login.vue | 14 +- 21 files changed, 1491 insertions(+), 593 deletions(-) delete mode 100644 nladmin-system/nlsso-server/src/main/resources/language/i18n/in.js delete mode 100644 nladmin-system/nlsso-server/src/main/resources/language/i18n/ja.js create mode 100644 nladmin-system/nlsso-server/src/main/resources/language/zh.js create mode 100644 nladmin-ui/src/api/i18n.js delete mode 100644 nladmin-ui/src/i18n/langs/chinese.js delete mode 100644 nladmin-ui/src/i18n/langs/en.js delete mode 100644 nladmin-ui/src/i18n/langs/english.js delete mode 100644 nladmin-ui/src/i18n/langs/in.js delete mode 100644 nladmin-ui/src/i18n/langs/indonesian.js delete mode 100644 nladmin-ui/src/i18n/langs/zh-CN.js diff --git a/nladmin-system/nlsso-server/libs/language-all.jar b/nladmin-system/nlsso-server/libs/language-all.jar index a79897ce303afdb03fc44d1b15bc4e6103ab47a9..7f3846351377e38ce7e7d62ee69a9290e35f1477 100644 GIT binary patch literal 29378 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%0AY)Bmrk4_m3 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 F{|^e3%iaJ0 literal 35408 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%0A59g_sz-Svy|9(crU z$i4R3#KuC#If}s!Uc$2H#s?q$j%SPz=`wBzmPC7pr`L}gT8Va8L*($0Fcq?mIj~Uq zP$m&7`)->D4WWDPP;dC#EDjw*Sere!SslCQ(1o`6SXNVJzbaCl1H-{CJn>iHx8|Vc zT&gEwxt4{tKIWeJ#BM#dy;SnOC_KF+2R4Yp@hQ${)3XUYy;01)rIH#ku1UotrW&jC zLH>5=H!~FVOvYs^Dq;HkDx+_M_-*1o*^%<0G+;{C-nr-S+k&FspL|$q=CD(%@zuW2 z@|<`m4;O?|bPY3ezGjkaIT0Fa#ZG!9FH3TypuwKob`|dFB68gjiQEb$H+(M#)|7R) zX~#+-w#6SAXCOl_OBN2q18eB$x@rL}i?$V}&I{_dB!h`n7#{O4Jp^yYEB<9dM^k}1 z6(tKT?LtK}PPfUK^c<3jm3CPRzYx9rTX(FT{3mSIO~&x;CYta|?8lsKR76)uQ}r}< zS6hXNdFfiN-b9BjI$?&_AEl?^rnc&_ad2U9 zQa8Fv*Aca+j8&b!cu$1VdxFk3uPdeqB8H9EFqNbDY6gn_bg}zz$|Ffw<0DdV$kdST z!?~lbV?pN*5-JWESLYBofGG7#Lef>8XAGu|M26YKd zB6eQYV6+7xANn_%yR%@%6Vefroq}iU-asjoQ~8Pw}0BGx7erzZrLosjZLLYX?PE z+%q4Oz-scph$ymvrx>!q5E`>%5YGrtH10qF@C#>NW<9=_3^EYK;FvuT3;MY(dfhfG z@tBoms8d_fin3Q4A>AX)w{wKsgjT89(@__Y?}tXR(jves$Jpj=#1gXpa{LXz6%n&u znUcnx0<$xc8fl2c+%#H6@p=uML*!?=iSey8S8_Aq!9HUBo=H;-!g@diDWJq{-qGWW z;#unEVUvSIt;GJLhJ(9aSba0eAof`|Xr1+AMrKvh{s88u^tnO0zuCRtthZeRj}ssH z?4R|NqpTL4&>-V`A#FNq%f`a&Irh?m;v$$Y#pt4jD}H;CZfWy)8<-(w^R%oF-*Gjy zpgei*PBZ3xQ|!WABCjdBZ!u*)U|!&B{09fj>HU5>Kv|oZCs1_CnN~jVRU1I7_2M@rI7IBj0xCSVy!US6>8?_pK1v_M_WG$+O$>TRED< zwbIm;{*N(vjHCT_d8kIT!81qC{r}Q+H7^Hq7J?1}l1TvqLiFEwC+XtipzLDk;`(=a zwm8GnCu?|a)SR4HK3n#Vzx@{>MevZL9U2%3Nd&!6iWkKelLr-3VB%_fQw zQ|^y7v8E@IgGvI(@nObtj_%n$xYLgdl+vY>pi3Cj=oM8{AyKCfd#G&6t&WYSieOFx zQduthJy;2%Ra&N0nd3H8v?a)KcC4DB z{3Ag|)7B&Hyg!xQ;j9GsBs-_%!47}q1YC3?dQf^b%l8N6}e8_D9#Ym z_ag)Df(?0Ph2+7~>c}Ar|D<{iTD0ia@WX~6P`e!V1N>T&wPyd)OE{=UmZ8B8iW2+F zQ@H8f&|8s0hR_?v4TZ$&4lJ#cFiFHyQvikZ zACz-M2#UY%Eh&r$Z{sI#VIkAT6TDITkNEcHUD|`_Ony_|u@NjSNEqcKdi}1%&|&DD zLw!ud|8sds?cS!=FL$NTXg~P~XBWRPS1HM{cIlQ(%1I7xr{vH$M1NgQ7<~@!T^Y1N z4&+wyb z*eRakqU7n?D`wG3&LdS(HkohYE}y+2Dv!YN=~CZmBsaFFdF+n)h$h z53*)xJtT#*;{-OvapSI=pMZvtaTl`449P$)NK-O5y4AuRJXY~B7F7UrtN&+PozVim zvgfT}?XHwv)_kT+OX;r^i0h=GO@*IMtxVJ&nVp35QZKAHhX?WD#RYEC(N6wKrTa`Y z9^%u!AG_a`@D~3(U_#D(*AX|WcjMh7AFkp2;DDSNd$dLn&*BWpIUhFs%!z z2fTK9pcTUhyGKG^ic+vmjva7jd^LOQ=jX^Rhm-X4A#dt(APRFzoOmI8@#P7 zU&4#muf$Vr3_17?MgkA4OX|@`hx5hrXK?Y<*o`mSODSx1p!FZhkU~H57N#_lrpza- zY4R8S9ZWp@sA?au;kE4>npc7ARPSo_@qGDqaiS`uK}$$Y?(a$v$9p z>B9S~-XM8z-0UD9Hnr9^!HTcW?_j*Oh!0N|vBT>6XKdktA%uqCzWG3-gw~WO1tmks9$jLY7!U_8KvgdW$18>Vkh-8zC8c*zy6k9%i4KukB>ozqdp2I~Sx!p}3^WzkXOqbTi) zn`UtkP+vGT;>nu6+`mUaaHJ53r!&VsUBaI=Fkn-k{ z#3n=;=a36r(3$K{9@Z76rcPAYw3CIq_c5FUB@Sf17t-?g;3Z~Ot&k*k6qjTmcZRD|| z!}GvZZ$Bk$2fI{lP=FDgAJ%K&G}uki0eA_n9+-Pdn1+1=ubo?}E`jVJG{^BERB!QG zEO^78VZRZtvAQn~^dk%k z&a5yQzb1{?l?Jcjn{MOyQxXUVeto=`qBDNdw z+9p}eKjvHQjtdlHR2Wmx=Iu46zB&E9ZM>WId};GDWj;U|f!#bu$G!Yc@|x|YQYZb0 zM&8W1fgtkZ>(FU20eTvAc9np^?!8X3(m2gg`L|v~LOfwqS*r48n;b-2!3S`zoo_96D{insu^JnEp zRZ38dlV)&%P}te0KF?1!T)MTAElkp_M$G%%Tblq#aQ{nFHt)L0FzFjpaR1Se66GUv z%eFt$aht>#JrVu~!pdh%<7^A(#~-6g=(jU)9|Oi#4=5EaH?|@EhhEKQWjfV`l7$uk z30OlXp8&IKXWqtQ`b$S<`9G93vo7d#M5DgOYRXQqm>q<2bZcGcgeQE%G?Xs^ZQ^_y zy3AFhI`^2Yr`g$XxHnblzkB9H#N)UiG1`?>w-YJKv-TB8_#{?P3LoNx>$4aQV~G=O zn6|__@?l~gKdx!Nj#GHSjXv-m0^dWdTAFMe>h=!Czo4XdRxO;*5&~!#fT={ z@DB(FMRwYP+}saDbIiQ!He+;m(Ht4s>IqEzKkf9{UZHAqrzpzFE03xsJ8B(Sv;jkD zGkjt%;tt=N1$|6<@@ZZjn+qwqHKdOKz5~qN&IftKke8hz)0h?GoYI)Vr>1VA>Rh`U z_OnxQ`J`OCy9aK0`G*G+dA8gqkIYB*W6S=9f>Q87FV2%kZsS!Vb1#AErw4xd&#ve_ zLkT@zn+eRp7M)AYtXne`DmldIhzwHCVbburkLlE)X@F)Y8?zRKJm?yy*;k%FLBiN8W`v z^CgWAPU;K7AONG9P(f4}=DhK(7xN#30vJBxB79MP`|`uzb(isx$fm9qu9V2+<{F8h z>+$E0)B81i8}Bd^&Wli?j+-=H1#MR@m6z+Z{WbGa1;f!rHy@iyJfFf-X*l2J!3-aF z?xbR5HcJHayKaDt-3Lk%_r<^mNA?(-;N(HLp$zHgg(_ripkUIdmpNaLA=hvFVBW-a z{7@EeyO6b8Of%~~p>?L3=~a9-!~=QA{BzBPRB`Zf>wO0S@I-FxBVvY!qb6B z8nZK+N#2^SCQTo0JCxnH$r38i&R0etx~?kYB4tN~u9t78m5$eIrbYPXvfIbll zdzwUZci@E_UbijWBmq7xp56_>nn=N@Bh|1NVlA24?m##OVBC~!*bLE@RBLnK8$)H> zlxmm{(IuDYa9|o!WZaZ*7!QG#igoL!(7YTdB)8V_h(5r<&i$f!KA=o~t^*_;^TO_t zL306AlE*Oe%cD5~hKHb&dH|J!bG%?yOkrBF0hyENF7NveB|8@-Rjf$h-VRTLyDJZM zvK4@{k4t88voFHu?79lZPjI@_F3BZP)(k+rL#*G@b>+8cgF(j-Oql#~`-4+> z@VVGMIzZ8>IOeg*m5^EtLCyO@nTGqI8`XhQ%bs-t!~Up&6_~v87p=zWptRsxbV2R= zpFHzHX(3#2LNfQ1%9=Nk4%!~wM+`^Q@P3S4sz9)*I1UMI$+_EY?#(Yg^+&cxIPlo8 zad7%2o}HFjZ5lvv03Ex0`Z9_imQo$tApZ3bu_fDX1__UYu=8ps)d4k506 zIXyyvuSNF@y-8yKDC1ceI1kCA;jexfoeT)!f)Ud8Xgxa4Y^3i}1bPm5bM*FQ+X7?< zm@xb*j)=LCn{Uhj*zng2ujoev@b;*F>#o}o(@I5jXc|Ekv5KOhg+D+}bw^q>udZwsfZpH_VW2w4 zNAa2k;Lm_R#jEF(zi}x2YwOJpoc}G$>)YVXxG}Ia?6x{Al!)}VlSN5yWzmDavf`1{f)S3IV=2KhVn`v=Fd32Q~O3C|AWf7EGB@-RF+` zm6>t%L&|}aGNo`BrvCXK#gu zJ^qaBz?A_oe=7QiW5fCnFpaZbOr+=QP|WwVU6>Ch!{QHL?glH;stPRx>xxW6-6biM zs&%Ls)wFMAR@m&S0+4P?m9sjJluartU#%YzVAN}ajVlZ5@;jhOm&}E=ALYW;gh1-g z%=5c{bF6B-Aq`oJixikKl3OneOUP0It>u0)Ircs`v(A@_O1y~QuV4vm*}secs~(d+ zkpERUb_Jg#XZdVu_eTH$A^vXyo~WUVp@^ZKo2k>^6}%KRTYC&u3_rW)>du^=x|S3- zF}TR9X(cQajE?4(E^6JDrq$vgFxD-kjliunGxt>L9oguJ2v~htNtss*QL^E*&;E9I z>RWZ3Ja2Q}3+o@`likk8*~k1d?Z?@dc^~h;p##v{@I{EhP$4*iQLu2@jW^j?O$QlG zQ&+Cj#U#G)Td$?EQK3kdEEk+eum`1wf?9x~FKN*jr?CxN6)QEf9V3i#TdzJ(YUzGa zs#=e=L?_9$mzesVO@cUxgNox)5vwSu&q>!*Quu2a$bm8pj}v1cGsvxnvAThG7PN0u z%^SM#Q)K5(EO5++>4#0UBsv~t0t(C)+c=_fgl4oMv0kh}Zzv6c#az$XB7LVQ;<(pK zOP_`lONu?$ukQu579N;k7TR1njZ28i>uy>l%fD|s0-hcKtsg!gQwuY_zyCyq&GQw1 zOWQW|Vp@{EJE;q`BtQ+P`N|Z=kgkWOYz@vGX^cv+aubTdRV0HKt2%v9&D$O1dfr3B zB5&n^Zm&qj0$+WKMCqKkX(@HppXUGe-YhM*t)MnYzg;4wcpB+Go~U+hk)Ea&_`MsW zA2(3Z)J&DF(rk)#eA(By+oodm&NXJqQ1y~7>e%CPQQaM3Lo>+}ssD`%1~B&6Y$BB? zx(R`N%&^h5SXPzQ927-3qaGE^i4$3D z(fmVb3E!hd;ny^(aTTK5v5(1^3uh%ho%mE)dhA)+Nrh^IW-SM)eA9&cn+j6FIbvlO zVEfudB2%d|GG_5i`!0A7BeJjO;EJf!44y3~g{w7dC00DmqDHS7l67m`eWeeOscD~F z&a(2O{{!sdUhk~TUoMCst9o(Krf^J!inmdH{q#l+ycYXcdr_u_0cFNH#L2@6CndyD z2mBS}>auwes&+M}mDs(mw5zT%R;(m6fx*nvH-kVje>8KJfj6EOUE=9`A&G`{=bp+G z@UPYPR)ht%FxMmj@IKZKh)#sdd0$UXN5fB)<5+;;abOw;Y&C+Vz(rKC%&V}3{V|N* z1w`xwbwZ(N3LVm>O@^ee#Ac^u3ZSbk)<1pe61R|L8Br?j3aRwd9 zx%Eqd&KV<8!#k#&)fzw4!W>e*>zI+`r;9lv5_{Rmq}UtejUE+jPl~JCJV@AT^2u)E ziqEkAu8OQcEy|-(S6x=ql4JZ60SwQt-4Asa%exVE5?B>LrG>mzX2qY`ixZLC^CV?L z`4df>NR#@D?GV~gIYmOKw|zXXK10RkRcG@d!gq2|n;Doqgw>TD{E){C%pvBhLSh1X zS?;QieV>R}q&u+BOxwf!J&_4_{zsdZxdeE0+PF9*bfK=Nf!SptjO=|v^kIl;K`55j zdgCcU)O@SwDYyOV`|R2IjIMUMFx~kzk50e?nR+p|3tHtT;<6sqb%xuvdR`LO$L#5d zcS+8(>+j8zer=>=U5}ZHudSVTxz@+N=RBV0Tb?t`_uD_?)_y#{UUeO-{){K31lOgk zW5-u%RK)U>)iZJIm#krVeIXQ=!8(g{#cy|(~!04*-^wpZ)iTF}0k_Xcq z?mW7t3q|M5t%9>TLS4bXqZBA#7Ag-kLf2FNl|$bcus#+AUy&mtRu*AUK!fQWRAFlJ zGFF*vdHR1U`v>Sqm-YQ0jwYPg_QbYrTa$@x+qP}nw(UtW(Zsf`fA-PdC*O0<`+J|P zPO`Fcf4aJ!>O$9D*L4lr{mo(YcGBzLds}m0@9?yb(_r%-TXlGU_O}1roa3{$HaF4J z`Ez^DL0(D*lMc=!Fj^|Hp7){fW?Ey|rz87^JU$Y8{>V$?&noa}%qa z%?8*-9-JOx2$#7>a?E~*%e4+q7biC$YwtcBl%18oSYzy<% zU1G$ibbY$#+F02G)kRV$C7hul%2$%<S~t@!U7eR`pOuYJM(*i zRu|qmbaM;7I>d?MFQi2ww5X9|(-97%*K{mDSND4YGlqS2c;4QBOWTbS-*(NHnK?VaEgIc@mDzUcL8bPpajgV zV~3QqrhZEw8@lcpy53pxak47=66g<*_!2x;SItt4@UDt{i4nchfl~fMvi*2)}4x zXpSclG}jkuz4HYL&;mh(-~~0adOIqRsQTXea5TSR3k3pqE>>@=9y-h$>S!Dfm1raQ zvg>~5iMRD=o)qPG`#6IQxQ^q&l;trxWaKM0;G6%3k%*wYzRedttug;%oCTJfJjD(E z?V(K{7M4s&n?QEvy|q?ze-oA(l?g z$NO{X&eyx}r>nju7989Yo~7s70X)TO2zY4RYRmwEk38L|Mj5|}C+|VN^qxW8oZCI<9i&YX5ueSH?K8}o;N)=+@6&jAZj$sljA+l{9MZD!PI^fl7Jd?)B?WZa% zL9S=gU^&K#%K}LZz}Y80TE4t5IoRD%#*EoP9N2nd%!V)YWMil0;61=uzf&__-Xgb7 z$D?51J+F$aq+#AKcJ7#>^o^BmE|2N2^0?l1)yN#4}t**UoT*u3g1saGiaeL zK)gtFsDAdtI<<;gLF3kO_Qs6)`tv@du;=o00~nSM&F_YzjH$;X|2dl83h9vcGQ%|r z6l?s&yN$IIn{(rsQcSphW)?GBIFwwz<_HQ(RMHN@o-B@U2=;ywoVdums*~%BbV1qP zL4p&dZ2?{`IdRYzxcEUi*l7x%pm>BNA{$TJZAU<^Au%YDA7#vjd1IJ3%-NI;RTo+3z> zC)WQU{0n>jN8JhO0ymAGLtC4l&Lyok&~hEAO!xO<<%Gq_@_7m?X!G60^KL_`8)hh> z--bC$4dmYH2PnKWd=hy0sjB#B6ZGklHu`SgJ;Q4hJ>6)zif&)sQI<)Ua54L5072VD7h3Y+lgH53+6O0 zySQC2i(fu==JeQ`?jrUHvtag;1s$NV3W4lcHl5EB!mM%-pw#w!5oQz!84H!O&kRN! zwsvgcR*OuU?>uRyu6$%R$f~)SrnQh7GLsK$rIp@_z6-u@l1(B~>cLCnz` zZ?JPtPZ`AzK2kmU4-Ua1gh`nE(ICHZ88iK;E@QQhgoJsVsw_M-e=aXYjn~OKt;%9p zn7Un-wmPFBO)W78O%Pmt2YV8%3^FL%5EvX;vMKJ&jDeQJFxz`jlbviquzWZZl~#uzP0 z)s53roBkDO1~$#Tp2AJCvzSk!#xId@hLumfy*V=heL_8EHXu+>nH|k%mp_zJJP;)( zL46{>`XQ51_Kkz^N5L!W)*|WCJoO$r&_}ZW{_X1T+@aB0b>2y{`mkVTvhOnvh%I83 zW=^8`sqQeFq6Qt4vaMeuPB(Il2dk)k{_uKDHv5 zjx<8aa;5pY8)MB#rR*5&SD$*0@T^tbZw%{!V#DKc;jJOw9M&*K z@COPPm`jjBR|H3m)Tc;6FplFO%6~1p)DF&_@?{UNx-kb#?etqf&CPmrV z@RYTuhCEvyx;VM?nxgKm8AXFj*cABb>=73Ly-mT8udA;gW{zbbY(Vb32rU5 zYJu0~!f-Y~UWVAkr1)hoI6QL?>+A**>5oK(x zCYi=r)#xK;gqwv0TWU4G;?aX#*%N2tD+B=O1^%_OQGBhOhM!9{Z&52`U)D#)6d6fA`D#krErD@-W7It5I z7BX&rnrGy2ICKPlEeDk!zWLs5>U{}hIh4|v%~)xNKFvKXM>tqGbc0%VJ=5n&>1Dz{ zT6<_lJ=XlQ{>_#BL-PxGGrW1sB*nt6`o0mLAKo((|Cxa?O#qR$e{2awI)p%#iHM8q;2Nsk{#+Su-Q1p-rwXOrg3-qeV`!@LiTj_$9nivH+dTe^7E&=>Xjd z!k{Lyp~{I^J&yO-EkkT{#scao&2n-DI00+Pt~zOlsXXeabk^(ZM1s4Fb@6E(gnq`b z2TJs;yz*<(QBWeEi-wm2iDdzVm4c<9Kir7~Tl}cArCbMJu~!vfPsAJ)XbJ50W-r{$ z#=sh!Zxz8o-(8g>*I*uaqj+4=*e+Zb#@Z_O)K?!G$s6snH=L2aZSp*@g(B6!l`7Sk zY%n#I#M4ofe5b&;eU!Sk`+nPOgXJ@y_94^ffX5RbI<$M=C$O_0({J^f3G5LK%n8ya zTZ`T+Ps=4f$dduFh99~TqbZU1a%Ett(7*HoRvK+0kPs3N=vS|<^-gq zGNr9eiUx=Ek~}SiNiVGNrzOG+xMlFQhA&7szOERvKC{2HE2e3af58}aMzg*xkN zR6RqsT$^8&iV91=Wy^m`JtSg%qr@(X+fBGI8MO)3m+6=v}1>POwhMB^C z$Yi~Cmo7RXov!&E#Pk!>R<}2We{o=_61^NLPIWjarKFJ8GhUar84RpRjk@SHR#dz~ zK5c94Bq5Tkn_sY=EX-_snvYl&3W{2{x1AyRc`7vvKTPLQ*)9xKtByMw-QtsM0as>pfl(O+Bc~&>o>q5s*OT2e{o^oVdwNBPJmSZ4rv_@{e6_3DUfy0=QU}Os zPtxoxmDeBwz3DPoUdKJbLuQ58TxzBN@y=0)we+xSJ}8Jy$5e;DyWxqSKo*Bt+qjzD zX?lm_NhFPi=H?v4_P zz6qJ{C3xL%Am2LSdam5kc>r3UnMcu1 zJSN?$#anQ|OD2UfWlrPI>tWdBtmY%F8mHj<9%oQBmDflya3bV#pKyIs-zZq@_I%@c zS(XV#jy{$|og9_nYG}gk0cp6ayD$Jq>|}G7Qm*a3N()SN+QTJ%DU7{iG)?;TVD&AM z>&JJQo|SL|GVqZqFsGT_(>9v=hT@VRVt~u>X)G*7h`wIb#a(C7c;lEEOr8usDC*%k z`r)f#`T=HbC=yaeeAX||E*(~{96@J0$A>t+r-N-0zP0Toz(XhuVo!j_Rf8NHw=!l@ z^2s&>iYC&#g=X9a)qj)0Dy)*-^T+=K8U6!kiA$dbceONc%^GV*@hZR!Q=-#Jye&E%2SsWZ-~+wcftncbO=|e2MxR-sTZZZ*0u0tLf` z#b3lz&*FAFB_~_!F1wd-Kbiad58EVp~_6kOig8W zqSOHZ^*i+&Iu4Q#=39!-tF1B*vy$Wndj#c{B``u3=^K~?lry)^4Bq{0tt8Dn4 zWV%O0q}#(e>S-S7d1_n}K{~MVR{_>ou{?`dj6;=vgWU`04PLuYa&eJ1orzrk{`%|f zbo!Xkw!%Gs++cE4q7)*88n)oqT0DgU1&bi9`8=ggxD>~!tV-v3D z!~RFiq1F4_b5>jyC1@U|f#g+uouOMv_e;W2%&GH%+k7{z!)og-#1&M-GIs9+zhyz? zZmu%H&mKg+FFFVgZ9gX@G3-|Fki|KNU}`{^m9TsB$54a;iZH{EFfR}RPc*xS29i#v z7g<2>MX0;uY&G-0B%T@yKwgaX!5d$1R3-iJttcl4Iz&qwIp>-;6;|46kbV(Rv3Wza zC`eMj9a&+1dI{9# z3-{YoXl04Efnhlcbq6)uuo5H)y3D>iM2KF;s@O<9RRqiiXLMJon*ZC$Fj|MNkiI+| zq9AKGs7Fj#4(YO0bFtn6Q!KLgOl0M0{2(#4y(Vgb%88f;4C5Z10tNm_&Q8gew>u?3TtRnAW<545e!`toim?`Y9RtQA~*54WLVxC%vv z`~o#ZMx8diqq&+)D@AX0T%MkVzY&g`0a@!zd7DRhz zer&4tuwf)+!VgCwJXR=LbON$3!NSlq!!1u!(kW=sRaJsPX&o>-n5-#Ol~CY?u-iQ@ z-v1fwG>wE>+|XQ+JygCzJ?g&CG5B*wTSE&1tB0hpg8s47ZeZtyr{Wsr2vi!sbtD6g z96{l3S!oLqrekUs%PsW0^JtWlI{8OC7ITq=M5fC{f>TW;9OE@N zqDF16-hSReV#KibB~b{sGu*c}x!h|-o*BhjU`M4^L6cyUMh_8k*InS$P9TxEh<;o2 zY@`*ARB4d1V(U{SdgV4tsL-b&P0}aBu)~J#m--DgplG9Q$bJ!iV+gPVW=cXHE+R|a zDGLcPl2-R+({4^jR0qMFy#a`q=0^{|`8*XvPREn^R(ox_c>OM?$$+PdxN+`&mI0SF z9oThPx}ARCI&g*&%CIte9y<-KA3Iwk#)(O|D&wRRF!c^th#g=#SzfO`Pio0AY;Awq z6@xX~bBryp(c#jzVe{W7<@Z;EPnaUx&f2SB#Ig0jmW+;DWXPEy`#j^zZ1 zs7x1_ogNIp_I^(K<=T1^tQWw2Zq3d^A5^Ah`Y?mJ@O@x%pvWG}!3Lw&Z+=X()z6s! z#j*1pVdQO+x($H#{Frg~vFth~Y^|v~`#PW4%P453|BKLJD|YxYhyNgJ93JN)TEwFv zkbS-CjcFNi6q%*y(#TIR6lU`S=$zb!T54}epLeFle)z^_(o(RAH;f{Sy{^Ztf;(H%mCUW+cb5-rH?IWC=Alrd+VjWm@e(dnKOWx13M;KBSRHLMi*%w> z@}#bOs0>;LHBxDLIL)(BH5f(!1_9O`$Jk1b?=U!V`*7|?Q)%?VhOk3hcWn{%D!X!g zU3JPX`r~Z6YmOWP>kfc>^7Zt{)fAP^sl8e-A1C7zQstd!b&?X@2^DuF7Wu3D7Ayot z+p`;!<>e`lxTl0l>>3EiU~${T@h~a~3x-=@Y5xhhJDl z!C6C)Vgp-;e?=jIFj|VwBI$vHJmy$)n0~1rYyazXl?1tMw=2S>t%(@%Y`FJAG4f+h9?ged2HjsMS&r z>`P!_KSJD^eB$M_02C&agV^s572>%9Gb1!lwg~L)G83SIFcXA6M0r=Xr5Tn~eE?a4XV_A+TGJU3PY$NPMgqa%cU}2UMRqdVF6ELA+rhXrFtAn*i zZJ5_y^cyU)t#r~L!pfZE&hA@KGB%Z^HiQ>6&w)d!pqxk-hhp^h+A9p7!>=@)6r@t* zErd<2))uUUr;^M)0NH9bDO$Y98U#MGgRYlT(wh zUKY4Dp^3#C&LL^mXQ+D^^OP|8VYp8X>YD>{QXHOL|I?mX)(EJiH?xd zIr7Zb(!(2@tE#oBpCi-gQDbG*D(12w%8afHrDb9aUR3BHDb_44KclF(UO z5@#F)XOGk~*BVe&+`0NCp>OMO^T+SQv6^iG{4~{36kQMZ=pV8=BUOY2%x-0LqWN<2typgEBjgqFfn7DHCKL9Q=^o1UStRJ&R|}GOI!^kigGPs# za$$1xFXHu{?))1n$&pJ7_AB87WnYEUE~Ysos2nfIx%N+z%_rB++`A(e{GX%7oj_`F z;WN)7t!$hkfSlH^thEHhB+_mWS_jw~2$0^#W3v~pICdjOq%k&SXnf`_P|@y+QkD*2 z>6~!}cuZU(aAut719Yr72qUCq2c|mmJO>n6L$04*LJw{IpMAwu$X{{}Ql7;TG2*@% z)xl!O5aaOG)sY~LriR;#<8BJJ2fSpOt`V9-c5-kMm}5nGlUGb?N29+yi9G5EcRboe zyYTf#{LX2syx`3-@9FNjbFP6R^bOBOA(*;eI&l@%kiWg@=u<(+v#(kWBuc zrs=N6f19SST44^sdrfKKgOg4J079;~Ku!lWig^R@VIomIiKa)99BE%gwsMFo`vSxg z9?jP4A8Qm+jm1z7G?I?U5v9cMcm=vSz0k0?)ipKQ6LrbEOM{FsuVu)Z1>yFfP;RontKlb=wtE0 zMgm+}c)$00xm~I1eBC?ty7fr%W*v+2ox;5Zme{U6OI2p8)(o-}?rO~a^^K!zXmXM} z3|4yklK4$Yk3v0JA9kU4BBPj_#Qzc-EmQ7E+{ozqzIV6J|J61|$?2l(PL1mKJKM4; zQG4dDN+_UC;BIf8o17V)yE+)>ik9AO2S^qRkY6^Rv8vf{!9`SA%G(xl>%-fIR?j2T z!36kP7YY~L{zI)i^>X1%gSt`aV538Go!EIq>8Vt6xvPDG)rV@r+Pl$Ul?;MUQ62}T;5_JAA_)yfzHJknTtJYiDt`nJH3V}-(-t8+K7f?`xKWdG zPjU{A$FTxFqsp5E-j!DU*MSJtojrAdSJt-C-VoP{cAduNk+kYM(TS%v2r>^cts6pQ z#5=@0_yUe#h1d(Z&XcF?V+{E8oRWn|i^*v;cBVpULGk5pIn*i#mfLgcCHw8h<4 z&X&iE5CbP`p}nH(cE@o~hmBR9g0l?Dj0T){e4(2|0vGiS29OPNQwGFR`x5*t)z~5? zBr3R-2gGNvL2&hAi`xGkTvm>sUsUwLgOkQ5+q8fz5thl1&)O&5+=Xo&V{6FgW%>Jw zIg=Vg1KAWQyJ6{403e-m$=7?8kPuH3@$*9j;b?`4d%PU>dR~dS{8^HY^3hknjcFNI zK8vDgsITvl9~xl2DXY%Mp7nGymJQCFBIn`?SJ|8U+14$Dkhlp+E<)YXPI$s4VSs2} z(^N&EE`Tm1b?sRUT=QHp+yo14~{~`Kw5McDTwKv(cNYakf~TV0_FQ6 zEVrbD+Lxr-3xb`vxnxj57;3Wb_IYN^`8Bdx#ge<)V8^iMiluL zl4dfQ6l>hU$=d~#&|2;WK^#*TQ%s>vmK@wAF6*cE7GL@(T)2sJFBStKH?Rqu=JsXq z+HzwlS7EF3&Z;K9?6;t|9#;1~C`gaw8w zUy{``iEvTxO!E$MUQ=xTBxZs=!4{|&ysFDafso{ltwj%@;zjKgKhUqid2zusRXOoT z#D`Tk-_(IkD14gxLe#1Mdx9+?R@7tLW}C7+s^(O)g_2#>)Un6-*>l&F+a51M<{Pa3 zL_QoyQ9|D47q%4K?Dnm1kEcik(BB{!b%7i|WZ}){Qaxc&zUTq?)oP6-6wH0qU#aCkzxq`bfDkt&IVb+2GQ!J&S&1fz0iqmfZy^J{Us`9ywX zbmh0MG3x+wN2*?f7M+bl1%dQWJ$O!;1%hU>)cpZR{YIG>epM-9r zQEC=o!JhYh0I=tt#V>py+(-ordZbBv9Xx$`Z+@E09=-@B=&Clf)dC0*Cq8marrqil zZwSEdM&^Xezk8&$G}dv+OHX@^j>d46?SsEjZY*qpU9wfMq2xfGSyIkM_a8FKJ~@`8 zGpEb*>q&|PBZt@OjAr}EV^}quU^n~7jq^E-*YUCbI^uM}ImLm4$lbagk?yNmeNc5O z(OH2a7mnF((5~%-pR@q_?qpP^zaM*&y5_x1d5}RBsbCF3onT}%Pz#o}Im#}S$i)I{ zf&1kS0b-eDyeD=ypL(LPXt@Fr@|tqZ?T7;jp2?KkD9-8z8|E5E5JcWCJN`%eD#{H3 z>(8F!pjpCR2n%VM!K2A%^nx7KS2&txh!9qMm1+%JfH;(xC&-!rT1!y4`Nx{?ba?YbAbsig1I zFI)aRW}zQ0Ynw|kwsBhVcGgCLUQa?k9;f*|soUFENP@pv3LN!x77Sd8f5Om&_{(Uk z=7>eh^oBF5&W^s`GGm^LpJ7#g$y(S3T-IY^Z%W?w{Lq`oR~9Ec?np>!p)6U3y1~M8_<>D5lrZRoBo9%AF7&T^+CRpYIpE;SmBe2NI z*oIy^S)M#ILVO@RY>MOXav%>Tz_?G_=MV=JN|hdRuwa-}b>g6aY9t@0rG(CGEVZV< znQd1LpnkBO8h^(xm-5{jO8uy{P)saVVG<|Mi&{%m61q}K?zhnHOR98b5FYxXJ9S+1 z>=r9g_=!uuK`-_K%hC-Z*Aho*{H_2|L@#h9QOHuv52!Hxz%ziB@FySykysO=DF^*! z<2F-ySlcoV`#Kj2T66B>s^RgNnTrIK6jU%1Jqi)Q{;8T!88;Qz9PYc&tL69w;m7-R z%o**G!p@q3LR>impDvE2q%He(xY1Mo+OJ-^{rhMHrCV@FG`+6b z;+3vO5N2uk`8u{9tV@o8h`{9F4frDPf`vh4&M;2YTo;3=RWoCF7l!Q9AX2@wTQ+;Y zBfyF#AyL;>6`D_PqM;jns5RQ!upV*!>X7S=zUuLUXp-)T;IW{dB6#Hj#!XfqW#R<( zu;uP?>{>x+6nyUtv}mmBj21?pc^cGkyWA~c1`rFiP~=ixP`q{jnH8kYZ54iniIAm; z-&}jDbpthcPjqNY=uaKW?C0$6o=px~w-o|dZ7+2Bo03a%0pGv2mo$)jLR!;BrT1xj z6@s}Vlb8ss!)I{d{-iVQK;%IML&<%%Zg&d&sqgXeVO1xonaBcs(mV=}PV5RHSyGIE zyp*WHd)cN^cpXk(BhT367Yf4)>h|WFo%@PP$il6-X=r^XfK<-Ouh^jL_JnKlhr+@+ z9&@CDYQE0Uix1nE;(~geQo)((s7Mga>ayZH_R!m z3y@xo&7hPZ0f0hky!9bBR(=vEcLhkZStB`!c519}B(-bq%W(VHD5vD%!6n8a_g?+{lYTmNdLRx=l%% zCwbkn^+Nsx$g#EC)F{#Yi;3zm=0!Y#1Y}&dG$-F#8H_|n zZE6p6wU&pkGZ+~5x%aL4YeW>sux5uu-Wac@qJ)Kop$D*ND7Kdmit;>fOSHId&3K;Y z+wyR?2V!%Y^%6C)UgN!Iw7#!0!8z*R(0ILGvuJr<->P_FUUs;3Hht(DozHt%4OHcL zWj(I#k>)<2>TFB0Re~lPHz`)^93_UJKQ=6Qo<^Kc;Kds6lCrX0Qp_J{Q>bSisua$o zfF_X4lu>oLPF0;f%@cRE9;&Fk99h^3x{D4dhiZvac4Q5QG+ywTcG*_;*fS)%C9B?= zy+<~-z20qIV4F{nVOr{jHEMC(m{Hl@x!#zvxwoIGp!!a}YIg{!cHEZ1#?Ye2wQrF_ zpwxw2Uv_=ZoH4p{X0GC4P1?Wv_&DsKGwrz1erQoGBNLHoitFpAS73QmoVHc>2 zSHQT44c(OWF6nnp@JZ7HZ`@hjj<|v9YocX#ZKTknBg9b5EP{q2tyQQ6%%0zA+B(Q( z#f`j-jvNjYW%)~xi1rWHy65g(i!N(kOGv^l9VZ8cd#t^bUCbn%3!$wk3+9q2R2{@g z?BEzQAG3Aq$QNCf@^fK|2~`{!zb8-oCS*$NyAHdq<+~5p3^!?z`{nyP_j9z6wW?om z4oCihOqFTtpFidg@WbPkix*%Xfq&AP1}d(DQn zk;6tq=Ntcn*3z8jrpH4PoUy#SKGO=HRjWcvY(+_HoH#zs8tAHKFroR@wYh!Ytx?a` z>)N9(WUmv!*rg|dU0Y&As2@Z{b{Wz6kV^DB47DH9wg1lG>D&MUBmb4Ja3{5ZtwwA! zN%=uXq;3kp0Tm+pH@vg_0sM83EOo;bsUw%B=+?osL!!y*@k=7}>MM2#3gai|9x1>q zTccz_Z)bt;gPeH=sG~pq)NoG9AtoHZx0SbcLo1||+(ANB|2loA=PF*?tS?okmKvBF z7A-b0&&^IZ^s#*~2=CHA{8sIGg(&(CZ`WZ@lp||N3P6q-S`k4Q1W;-PJ>&Kjsc>Pm zmZP--4x3Y__lOh;lmvY8t3+3p5`%R)bFfe;5UB4K4mmp`$G$O(n&mM!w)rH8rj8)1 zmU#A(C8R%^$p8W*G2OT2b8$~v|MLJw^p$K#Edkv`s-muy&S~dru~DQsMjE1@6PM{_ ztSlfCJ;GjQfV;4zg7ViSCh6b#Y;21o+u&6qo9Rs*djpn?i!ix4`6dxp*S2uNt)+X& z0a00rgl&hh#`)ybcM`6F z4UOO@QZuGb^VQvhS1+bcUX4gJ3OtmmvHRvQG25~>l4x$*53Y}I!!R6+(mfQIE`}F0 zOt(6h;hP9XA8F$27x2UB8}Xh5XR7(Bp_-j6(f~9Hpm;qu!YR@;1DRT39^g>}HDp0j z-di_bh#q$WmL(Tlz>6!+xCMVpz?yyaV>)JYg+`;a)M?$67r14U-yu770r5~#B-!tG z+enPOhdiHbgajz@AW^|UAYBLdX?t6OKpQ*C3f=X#urKl)FN7}L_R01L*CFdRiHbVi3Re#;J>r6NWWOWNuW6RuhPp3W~fAsIV)W zf=WnK#!U4H+IbpA2sURfOo*yVFF}6d=l!5fvvOXjqy<0q(4F=|t23-CwKCU?T?mHw z2Dlk$UU{9iv)w4ecB&ZGUW(1ncR#o=X;A@UNQDDj;S)m6-QZyKxwLpXDK@^>qz$U7 z=Fx9bT%>@lPmA#fW))3*dp+FD#hk&+)_Nw@qixxfQUd93LFb(@6YqXuOg~MnL;QRK z14xf3pl=3;&1Hi~^>GXGiz&n9xWTM=cem6lb$6!o0`rRx zZhvmfIM#QOUg8Zj5@xZMpWH^R@cJOOo+cs#BTjQK9P%AtE6~~lR21*42Jmv3SHACX zKD4CzqQt;{3{L33m%wpzdbO#(P%SBUmbU`ARC`OZgpqxSF`|TGm;i_0wcchoCI-|o z{cgz?Iq6zH%-{-5t?)c{sRns1W%XH)CSotsn>)Feu1T77+{TkiO-A_QT5Jd>$x;WN z{KNM)Pg@U|Tu8z8v0cgtv_{-@UqUAj=qjn?hbH4i zCma?I%!Ho4**9()vCv-**c#{%0-LrhtZea6;!ndpcA*;jSrsUdleTQEYTX4CwAuIx z#|~ctVCQAANGhfB2DyJRoud6R0@dK;VO5A^G9lQ`)_fBF($PM>E4Ug8;KCVCaD0%% zrCK2xR;olvwuhv7p1~FDxE6XF4l3X7>%4U_kse7e{gs;3Xy%M~Jg!4BmM0X(SSUwz zsNelv`sPYBF~@Hd8Hc`?1lD%|F|#m0DOy+!DB&pn(r=4!SPDXzUOzB(m7`-WE~uq8 zUk!gD_9(giJ>;%JoViEc>zE45Dc=dzeaa968D|ks0UkmOXCa)7Tu+9Ermn~&GxGbF zKp0hnujy@Yvbv3Yyqvf*75O89$-;84V+>^CS&ZKL5i%?x6562Rb6w|>lr9S!0c30t z#ey`h#XkN)rx&=P7DwNli&#g|5feAWW|29RN9xDk5MTM7Md|+{1poaz=i-kZ8r=M%Z7xJ zcxG|Gg6&yfD}@nM(=g*>X>K8FFWR}SKucL{%`IR?%04z04iKKsvzqx0wFRv*d^(d9 zn=tD8M>@6ilY$_pNQ1*$hWBr{ZORs%pCR_G$ssnsg}|xdS;clxVVec8{H<#e&F$(C zChij#lg)W5`@sW(v9-5wPL=y$P?6pu{dvaZphF}{)lx!bBhC`*#;mvc?b&kBZuo>7 z&=nm)(4~2Nf!;&)aD!cMU|(06rHH>R^ zjrpY;b`j1)HSY);@y#jXJm|w+tFR#n&5B{HfPT_^>uVbEt^=~EDi|U4P5c1tT>c?~ zq`1B{rDn<${3TIXX zZ2cqowY9HP99-i$o4cDv2>JbSWhzI!$DLK0y1j{gr!Uw^c;ge!va*C#P}_xd&z!2rsNs*|Ssng=^4p(xz=Iv^%f zzGHayf7L&-e~F>)nwat9V{x|kEy$$z5y!;*ZGg#BK0Kr~vpNf~AT^Dt$LchX#L2oC zO(v@zzWXIkuWCgImg5i`Iy}_HHPIyD+x0_2K?~amBrz~S!5NuHB7fXwKIMcKFY3PM z2_Ww4ao%UKT*gxqf7_44S0x{hKg^DG{&Jko`d>~l7GWGPK=^RHZql280IQMa{Ks6v zSZelI-@d9kyVfCatlZ0)1k{1SlS8yM4W&;HH-uw*v>hZ)@8?3JypEU29=%m-AYtPn-eI`>s5m1SZaNxmfn z=Z*+xL*DvDgA2?bJ3DPj)@G_rj4y|jiWgW25)@~P4+qqXYyiazzyoB2rF6d#w3Vo|sKOCkzt_x>-%4?CU7N~qY}w$;k{j7aOGqQaw% zwg61%-9_PVIs61i8_WJNFY(*u!R0K;e)@{5Eou>P_@#Kqz4PJ>KMaT>IlZUVIh7akrIlVZ_ z%PpBLe`uPzw>V?^O6LGY)9BbgxtqeyD0{0nv%iz<6&6R#ioyxzHa4rWrax>3%6rc| zY+-_5CF%!GVwjSdE|moby%KE+n(vPfmGV;B_NfVB>l4q9^U6juB>!mXTjsu`Z32O6 z_B(w-1}~*Daux5_P*rvrOdPjEhiD;3lNu}0NUBIN0T28-0%`~SZTp(eVLpa}*<*w; zB5-QnJlrf?EbspEe%r5OEvPHXF$|*1BaV+*`q?rucHeT7WbB$n@*Ae zl}f5Mh75{GUZfvEuGOGYdBwne!nCvp_6i_>J|5lk%P*yfyGQf8Bsu=c|{$2yK>a$CctPFZq|WGjhhg0C>5U_H^> z-53|!7Tn(V^sg84U}?g}c2u=`b`23dghr@0k8XP&0;!twDh>GgFoY&p8erTIj+}io zCY6|1;^MRsd<8LJfF~n?lR}DE5j_WqV3D>NS{QqdK!;8^US2d+#}Zu&B8=V8vOKy6 zZD*Ut7q=@g)Cv(t9z&;M6Zt{!aNmA;J=g869d0VWAIkXg+{xT|aeBHob-lkFEUosu zIi9~tzpq9LXX02EAt^DS#>N@Kb!wo%DNUs~UTzN6Oo5=|a1&Kd)C9!@7bLQeR5eOo)w3&`3$j%u9`rY>Ly2 z(og|>j4TJpMf!FL1t`cyd;3cm2j~arN1)GapdfA!LDqmDNeX~KNWg!0&i=#iJ^e_! z#Pg#ZDIbrIzy9mW_xa=3f7#1R@kxsb3n?g4O9}s-@ZqWR;kW(SG5*7}>mL^!z$st# zUkQH=`@<*xpa1yB&kx<=e_VfrEqwg`him-*iuh1O|4YQO7#C;n%4gg(YLqypQZUYxBQRm zk4m}z6Z8-H=>JuSf4|+hALrWtIdc8~@sz@U4Kw*LV*0n(&n*o0pQZiVJ+%FZ{Z|{c z&~Y^Q-@$*(3;urn@ml|IRQweDkMZ}fulaKU2>*%rTLEVOE90Lv@wYMj@4&ym>;7o` z@(h&>Odp|~A1$BYUqAqWd>^Eb$-(DVDfuxS;5RVVaWwg-y8maMuBi~Y_{aP41>x^D zSN}xj`-FVRyL{&TrJep!N`Zeh+rP_#e};c{vHcT{_tAJh!~d73?Pv05W7R*&`ycoD zzmPxKtbS&G_R9Q|Y5Y++|AqNS4gXOMpPVy4vp<^?{>fHA{;%x+WL5YX{Mn}LPjD{! z{{;Uh)3VR-&o&Z&!nKJ0EBucd`9G!-pUIzv=l>)JeH>2tM_vE_l%fAj{VXf~C-wbf z%KY!t&m!ZWS)Ub-{$zE3jKKfS`agO{pJAT`JpP1H3;qlCN5%bN%;%Kc9>wLiHG-v7_s aKj&?-5??_7K;VCTxqJ+qJs%JNfd3Cgg~GuA diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml index d4c8557..f6bebcc 100644 --- a/nladmin-system/nlsso-server/pom.xml +++ b/nladmin-system/nlsso-server/pom.xml @@ -284,7 +284,8 @@ nl.sdkall language-all 0.0.1 - + system + ${project.basedir}/libs/language-all.jar diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 6218b0e..0cf0188 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -9,10 +9,10 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:fujia}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + url: jdbc:mysql://${DB_HOST:192.168.81.251}:${DB_PORT:3306}/${DB_NAME:fujia_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false # url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:wms_oulun}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false username: ${DB_USER:root} - password: ${DB_PWD:123456} + password: ${DB_PWD:P@ssw0rd.} # 初始连接数 initial-size: 15 # 最小连接数 diff --git a/nladmin-system/nlsso-server/src/main/resources/language/i18n/en.js b/nladmin-system/nlsso-server/src/main/resources/language/i18n/en.js index 5193744..d3e08e3 100644 --- a/nladmin-system/nlsso-server/src/main/resources/language/i18n/en.js +++ b/nladmin-system/nlsso-server/src/main/resources/language/i18n/en.js @@ -1,13 +1,748 @@ var config = { - "lang": "English222", + "language": "English", "platform": { - "title": "NOBLELIFT Platform", - "tip1": "The user name cannot be empty", - "tip2": "The password cannot be empty", - "tip3": "当前语言,111111英语" + "title": "NuoLi Platform" + }, + "system": { + "exception": "System exception, please contact administrator", + "paramException": "Parameter exception, please check input parameters", + "resultException": "Request result does not exist", + "dataException": "Data exception, data does not exist", + "dataExceptionArg": "Data exception, %s data does not exist", + "dataDuplicationArg": "Data duplication, %s already exists in the system", + "dataFormat": "Data exception, data is incorrect", + "activatArg": "%s has not been activated in the system", + "operation": "Operation failed", + "error_param_undefined": "【%s】corresponding type 【%d】is undefined", + "per_auth": "Permission already assigned, cannot delete", + "error_isNull": "Data does not exist: %s", + "dept_has": "Department has associated users, cannot delete", + "user_not_exist": "User does not exist", + "password_error": "Incorrect password", + "account_not_activated": "Account not activated", + "vehicle_already_in_storage": "Carrier code: %s already exists in storage, please verify the data!", + "no_available_location": "No available storage location", + "detail_already_allocated": "Current detail has already been allocated a storage location", + "no_allocated_location": "This detail has not been allocated a storage location, please allocate first", + "main_table_status_must_be_allocated": "Main table status must be allocated!", + "no_task_allocation_detail": "No allocation detail found for the task", + "no_inbound_bill_detail": "No inbound bill detail record found", + "no_inbound_bill": "No inbound bill found", + "no_location_in_warehouse": "No storage locations in this warehouse area", + "no_vehicle_info": "No carrier number information", + "no_suitable_location": "No suitable storage location found", + "no_available_warehouse_area": "No available warehouse area found", + "cannot_select_suitable_warehouse_area": "Cannot select suitable warehouse area", + "captcha_config_error": "Verification code configuration error! Check LoginCodeEnum for correct configuration", + "available_quantity_cannot_be_negative": "Available quantity cannot be negative, please check the change quantity! Current available quantity is 【%s】, current change quantity is 【%s】", + "operation_failed": "Operation failed", + "local_ip": "Local IP address:" + }, + "business": { + "InvReminder": "Current allocation strategy, %s has no available locations", + "loginPassword": "Login failed, incorrect account or password", + "accountUse": "Login failed, account not enabled" }, "common": { - "home": "Dashboard", - "Layout_setting": "Layout Setting" + 'home': 'Dashboard', + 'Layout_setting': 'Layout Setting', + 'Personal_center': 'Personal Center', + 'Log_out': 'Log Out', + 'Personal_information': 'Personal Information', + 'username': 'UserName', + 'name': 'Name', + 'phone': 'Phone Number', + 'phone2': 'Phone', + 'sex': 'Sex', + 'sex_male': 'Male', + 'sex_female': 'Female', + 'email': 'E-mail', + 'Security_settings': 'Security Settings', + 'Save_settings': 'Save Settings', + 'Reset_settings': 'Reset Settings', + 'Change_password': 'Change Password', + 'New_password': 'New Password', + 'Old_password': 'Old Password', + 'Verify_password': 'Verify Password', + 'User_information': 'User Information', + 'Operation_log': 'Operation Log', + 'action': 'Action', + 'IP_source': 'IP Source', + 'Browser': 'Browser', + 'Request_time': 'Request Time', + 'Creation_date': 'Creation Date', + 'account': 'Account', + 'password': 'Password', + 'verification_code': 'Code', + 'login_rm': 'Remember Me', + 'login': 'Login', + 'login_ing': 'Logging in...', + 'Create': 'Create', + 'Update': 'Update', + 'Delete': 'Delete', + 'More': 'More', + 'Export': 'Export', + 'Editors': 'Editor', + 'SelectAll': 'SelectAll', + 'Query': 'Query', + 'Reset': 'Reset', + 'Confirm': 'Confirm', + 'Cancel': 'Cancel', + 'Yes': 'YES', + 'No': 'NO', + 'Success': 'success', + 'Fail': 'fail', + 'Please_select': 'Please Select', + 'Operation_success': 'Successful operation', + 'Upload_success': 'Upload Success', + 'Operate': 'Operate', + 'Refresh': 'Refresh', + 'Closes': 'Close', + 'Closes_l': 'Close Left', + 'Closes_r': 'Close Right', + 'Closes_o': 'Close Other', + 'Closes_a': 'Close All', + 'Theme_style_setting': 'Theme Style Setting', + 'Theme_color': 'Theme Color', + 'System_layout_configuration': 'System Layout Configuration', + 'Open': 'Open', + 'Fixation': 'Fixation', + 'Display': 'Display', + 'Dynamic_titles': 'Dynamic Titles', + 'crudTip': 'Are you sure to delete this data?', + 'startDate': 'StartDate', + 'endDate': 'EndDate', + 'moreMenu': 'MoreMenu', + 'browses': 'browse', + 'fz': 'Full screen zoom', + 'submit': 'Submit Success', + 'add': 'Add Success', + 'edit': 'Edit Success', + 'del': 'Delete Success', + 'close': 'Confirm Close', + 'save': 'Save Success', + 'datas': 'Data', + 'Tips': 'Tips', + 'Tip1': 'Confirm to delete the selected {count} pieces of data?', + 'Tip3': 'User name not used as login', + 'Tip4': 'Mobile phone number cannot be duplicate', + 'Tip5': 'Please enter a phone number', + 'Tip6': 'Please enter the correct 11 digit phone number', + 'Tip7': 'Drag and drop the excel file here or', + 'Tip8': 'The two passwords are different', + 'Tip9': 'Please enter your password again', + 'Tip10': 'Please enter your old password', + 'Tip11': 'Please enter your new password', + 'Tip12': '{min} to {max} characters in length', + 'Tip13': 'Are you sure to log out and exit the system?', + 'Tip14': 'WebSocket connection error', + 'Tip15': 'Please enter an icon name', + 'Tip16': 'NOT NULL', + 'Tip17': 'Please enter what you are searching for', + 'loading': 'loading...', + 'Tip18': 'select date time', + 'Tip19': 'Are you sure to delete the selected data?', + 'Tip20': 'The login has expired,please log in again!', + "name": "Name", + "create_name": "Created By", + "create_time": "Creation Time", + "update_name": "Modified By", + "remark": "Remark", + "is_used": "Activated", + "is_delete": "Deleted", + "create_mode": "Creation Method", + "input_optname": "Prepared By", + "input_time": "Preparation Time", + "update_optname": "Modified By", + "update_time": "Modification Time", + "dis_optname": "Allocated By", + "dis_time": "Allocation Time", + "confirm_optname": "Confirmed By", + "confirm_time": "Confirmation Time", + "bill_code": "Document Number", + "bill_type": "Document Type", + "biz_date": "Business Date", + "bill_status": "Document Status", + "zh_name": "Chinese Name", + "in_name": "Indonesian Name", + "en_name": "English Name", + "ext_id": "External ID", + "request_param_cannot_be_empty": "Request parameters cannot be empty", + "yes": "Yes", + "no": "No", + "user_info_get_fail": "Failed to get user information", + "operation_success": "Operation successful" + }, + "gateway": { + "picking_point_not_exist": "The picking point you entered does not exist, please enter 1207 or 1210 picking point!", + "create_task_fail_empty": "Failed to create task: returned task information is empty, application parameters are", + "apply_task_fail": "Task application failed, application parameters are", + "check_error_log": "Please check the error log" + }, + "md_pb_measureunit": { + "unit_code": "Code", + "unit_name": "Name", + "qty_precision": "Data Precision", + "qty_unit_id": "Base Measurement Unit", + "qty_unit_name": "Unit Name" + }, + "md_pb_storagevehicleinfo": { + "storagevehicle_code": "Carrier Code", + "storagevehicle_name": "Carrier Name", + "one_code": "Barcode", + "two_code": "QR Code", + "storagevehicle_type": "Carrier Type", + "vehicle_width": "Carrier Width", + "vehicle_long": "Carrier Length", + "vehicle_height": "Carrier Height", + "weigth": "Pallet Weight", + "overstruct_type": "Does Carrier Exceed Location", + "occupystruct_qty": "Number of Occupied Locations", + "ext_id": "External ID" + }, + "sch_base_point": { + "point_code": "Point Code", + "point_name": "Point Name", + "region_code": "Region Code", + "region_name": "Region Name", + "point_type": "Point Type", + "point_status": "Point Status", + "vehicle_type": "Carrier Type", + "vehicle_code": "Carrier Code", + "vehicle_qty": "Carrier Quantity", + "in_order_seq": "Inbound Sequence", + "out_order_seq": "Outbound Sequence", + "in_empty_seq": "Empty Carrier Inbound Sequence", + "out_empty_seq": "Empty Carrier Outbound Sequence", + "parent_point_code": "Parent Point Code", + "ext_point_code": "External Point Code", + "ing_task_code": "Task Code Being Executed", + "is_has_workder": "Generate Order", + "workshop_code": "Workshop Code", + "is_auto": "Auto" + }, + "sch_base_region": { + "region_code": "Region Code", + "region_name": "Region Name", + "point_type_explain": "Point Type Description", + "point_status_explain": "Point Status Description", + "is_has_workder": "Generate Order", + "order_seq": "Sequence", + "workshop_code": "Workshop Code" + }, + "sch_base_task": { + "task_code": "Task Code", + "task_status": "Task Status", + "config_code": "Configuration Code", + "point_code1": "Point 1", + "point_code2": "Point 2", + "point_code3": "Point 3", + "point_code4": "Point 4", + "group_id": "Group ID", + "vehicle_type": "Carrier Type", + "vehicle_qty": "Carrier Quantity", + "vehicle_code": "Carrier Code", + "vehicle_code2": "Carrier Code 2", + "handle_status": "Processing Status", + "car_no": "License Plate Number", + "task_group_id": "Task Group ID", + "task_group_seq": "Task Group Sequence", + "finished_type": "Task Completion Type", + "create_mode": "Creation Method", + "request_param": "Create Task Request Parameters", + "response_param": "Issue Task Request Parameters", + "workshop_code": "Workshop Code", + "ext_group_data": "Additional Group Information", + "priority": "ACS Priority" + }, + "sch_base_taskconfig": { + "config_code": "Configuration Code", + "config_name": "Configuration Name", + "route_plan_code": "Route Planning Code", + "task_qf_type": "Task Pick/Drop Type", + "acs_task_type": "ACS Task Type", + "task_name": "Task Name", + "task_type": "Task Type", + "task_direction": "Task Direction", + "priority": "Priority", + "task_create_max_num": "Maximum Number of Tasks Allowed to Create", + "task_issue_max_num": "Maximum Number of Tasks Allowed to Issue", + "is_auto_issue": "Auto Issue", + "start_region_str": "Start Region Configuration", + "next_region_str": "End Region Configuration", + "start_point_pre": "Start Point Prefix", + "next_region_pre": "End Region Prefix", + "is_check_workorder": "Check Work Order", + "is_check_start_lock": "Evaluate Start Point Lock", + "is_immediate_create": "Create Immediately", + "is_check_next_lock": "Evaluate End Point Lock", + "is_start_auto": "Start Point Auto", + "is_next_auto": "End Point Auto", + "is_lock_start": "Lock Start Point", + "is_lock_next": "Lock End Point", + "request_param": "Create Task Request Parameters", + "response_param": "Issue Task Request Parameters", + "is_group_congrol_issue_seq": "Control Issue Sequence by Group", + "unfinish_notify_time": "Task Unfinished Notification Time", + "sql_param": "SQL Configuration", + "workshop_code": "Workshop Code" + }, + "st_ivt_bsrealstorattr": { + "stor_code": "Warehouse Code", + "stor_name": "Warehouse Name", + "simple_name": "Warehouse Abbreviation", + "stor_capacity": "Warehouse Capacity", + "total_area": "Total Area", + "stor_type_scode": "Warehouse Nature", + "is_virtualstore": "Is Virtual Warehouse", + "is_semi_finished": "Is Semi-finished Product Warehouse", + "is_materialstore": "Is Raw Material Warehouse", + "is_productstore": "Is Finished Product Warehouse", + "is_attachment": "Is Accessory Warehouse", + "is_reversed": "Allow Returns", + "is_mvout_auto_cfm": "Auto Confirm Transfer Out Business", + "is_mvin_auto_cfm": "Auto Confirm Transfer In Business", + "area": "Area", + "storea_ddress": "Warehouse Address", + "principal": "Person in Charge", + "office_phone": "Office Phone", + "mobile_no": "Mobile Number", + "order_index": "Display Order", + "whstate_scode": "Status", + "base_class_id": "Material Basic Classification", + "sysownerid": "Owner ID", + "sysdeptid": "Department ID", + "syscompanyid": "Company ID", + "ext_id": "External ID", + "depart_name": "Department Name", + "company_name": "Company Name" + }, + "st_ivt_checkdtl": { + "seq_no": "Detail Sequence", + "sect_code": "Inventory Area", + "struct_code": "Inventory Location", + "checkpoint_code": "Inventory Station", + "storagevehicle_code": "Storage Carrier Code", + "material_id": "Material ID", + "pcsn": "Batch", + "base_qty": "Inventory Quantity", + "status": "Status", + "is_down": "Issued", + "fac_qty": "Inventory Count Quantity", + "check_result": "Inventory Result", + "check_optname": "Inventory Person", + "check_time": "Inventory Time", + "remark": "Detail Remark", + "check_code": "Inventory Document Number", + "check_type": "Inventory Document Type", + "stor_name": "Warehouse Name", + "dtl_num": "Detail Quantity", + "create_mode": "Creation Method" + }, + "st_ivt_iostor": { + "stor_code": "Warehouse Code", + "sect_date": "Date", + "quality_scode": "Quality Type", + "start_num": "Opening Quantity", + "in_num": "Inbound Quantity", + "out_num": "Outbound Quantity", + "total_qty": "Total Quantity", + "total_weight": "Total Weight", + "io_type": "In/Out Type", + "detail_count": "Detail Quantity", + "seq_no": "Detail Sequence", + "work_status": "Execution Status", + "task_id": "Task ID", + "storagevehicle_code": "Storage Carrier Code", + "is_issued": "Issued", + "plan_qty": "Planned Quantity", + "real_qty": "Actual Quantity", + "point_code": "In/Out Point ID", + "assign_qty": "Allocated Quantity", + "unassign_qty": "Unallocated Quantity", + "mol_code": "Loss Document Number", + "mol_inv_type": "Loss Document Type", + "mol_type": "Loss Type", + "turnout_sect_code": "Transfer Out Area Code", + "turnout_struct_code": "Transfer Out Location Code", + "turnin_sect_code": "Transfer In Area Code", + "turnin_struct_code": "Transfer In Location Code" + }, + "structWarning": { + "safe_qty_lower_limit": "Safety Stock Lower Limit", + "safe_qty_upper_limit": "Safety Stock Upper Limit", + "cron": "Expression", + "notify_type": "Notification Type", + "overdue_days": "Overdue Days", + "safe_days": "Safety Days", + "is_read": "Read", + "current_qty": "Current Quantity" + }, + "strategy": { + "sect_code": "Warehouse Area", + "strategy": "Rule", + "strategy_type": "1 Inbound Strategy 2 Outbound Strategy", + "description": "Description", + "strategy_code": "Strategy Code", + "strategy_name": "Strategy Name", + "class_type": "Processing Type", + "param": "Processing Class", + "ban": "Prohibit Operation", + "form_data": "Restriction Parameters" + }, + "code_rule": { + "current_value": "Current Value" + }, + "dept": { + "dept_id": "ID", + "pid": "Parent Department", + "sub_count": "Sub-department Count", + "name": "Name", + "zh_name": "Chinese Name", + "in_name": "Indonesian Name", + "en_name": "English Name", + "dept_sort": "Sort", + "is_used": "Status", + "create_name": "Created By", + "update_name": "Updated By", + "create_time": "Creation Date", + "update_time": "Update Time", + "code": "Department Code", + "ext_id": "External ID" + }, + "dict": { + "dict_type": "Dictionary Type", + "dict_sort": "Sequence", + "label": "Dictionary Label", + "value": "Dictionary Value", + "para1": "Parameter 1", + "para2": "Parameter 2", + "para3": "Parameter 3" + }, + "menu": { + "home": "home", + "menu_id": "Menu ID", + "pid": "Parent Menu ID", + "sub_count": "Sub-menu Count", + "type": "Menu Type", + "system_type": "Belonging System", + "category": "Menu Category", + "title": "Menu Title", + "en_title": "English Title", + "in_title": "Indonesian Title", + "zh_title": "Chinese Title", + "component_name": "Component Name", + "component": "Component", + "menu_sort": "Sort", + "icon": "Icon", + "path": "Path", + "iframe": "Is External Link", + "cache": "Is Cached", + "hidden": "Is Hidden", + "permission": "Permission", + "is_pc": "Is PC Menu" + }, + "param": { + "code": "Code", + "name": "Name", + "zh_name": "Name", + "en_name": "English Name", + "in_name": "Indonesian Name", + "value": "Value" + }, + "user": { + "user_id": "User ID", + "username": "Login Account", + "password": "Password", + "is_admin": "Is Administrator Account", + "person_name": "Full Name", + "zh_person_name": "Chinese Full Name", + "en_person_name": "English Full Name", + "in_person_name": "Indonesian Full Name", + "gender": "Gender", + "zh_gender": "Chinese Gender", + "en_gender": "English Gender", + "phone": "Phone", + "email": "Email", + "avatar_name": "Avatar Path", + "avatar_path": "Actual Avatar Path", + "extperson_id": "External Person ID", + "extuser_id": "External User ID", + "pwd_reset_user_id": "Password Reset By", + "pwd_reset_time": "Password Reset Time" + }, + "basedata_manage": { + "same_warehouse_numbers": "Duplicate warehouse numbers exist", + "deleted_or_without_permission_operation_failed": "Deleted or no permission, operation failed!", + "same_supplier_code": "Duplicate supplier codes exist", + "current_device_code_already_exists": "Current device code already exists 【%s】", + "current_supplier_code_already_exists": "Current supplier code already exists 【%s】", + "current_cust_code_already_exists": "Current customer code already exists 【%s】", + "current_material_code_already_exists": "Current material code already exists 【%s】", + "current_sorting_code_already_exists": "Current classification code already exists 【%s】", + "current_unit_code_already_exists": "Current measurement unit code already exists 【%s】", + "unit_code_not_exists": "Measurement unit code 【%s】 does not exist!", + "current_vehicle_group_plate_info_exists": "Current carrier group plate information already exists", + "parents_cannot_be_oneself": "Parent cannot be itself", + "material_information_not_exists": "Material information 【%s】 does not exist!", + "storage_vehicle_code_already_exists": "Current carrier code already exists 【%s】", + "vehicle_type_no_dict_config": "This carrier type %s has no dictionary value configured", + "storage_vehicle_not_exist": "Carrier with code 【%s】 does not exist!", + "parent_class_code_invalid": "Please enter correct parent node code!", + "sect_code_already_exists": "Duplicate area codes in the same warehouse", + "struct_code_not_exist": "Structure code 【%s】 does not exist", + "sect_no_io_rule": "Area 【%s】 has no inbound/outbound strategy configured", + "strategy_no_available_struct": "Strategy 【%s】 has no available storage locations, total of %d locations queried", + "sect_no_in_rule": "Area 【%s】 has no inbound strategy configured", + }, + "sch_manage": { + "task_already_completed": "This task is already completed!", + "task_already_cancelled": "This task is already cancelled!", + "task_not_exists": "This task does not exist", + "only_cancel_generating_tasks": "Can only cancel generating tasks!", + "task_status_must_be_create_to_cancel": "Task status must be 'created' to cancel task", + "same_point_code_exists": "Duplicate point codes exist", + "data_empty": "Data is empty!", + "task_config_already_exists": "Task configuration 【%s】 already exists!", + "start_and_end_region_cannot_be_empty": "Start region and end region cannot both be empty!", + "tray_cannot_be_empty": "Tray cannot be empty" + }, + "decision_manage": { + "location_list_empty": "Storage location list is empty", + "strategy_type_error": "Strategy type error", + "no_available_location": "Current allocation strategy has no available storage locations", + "no_available_location_same_block_num": "Current allocation strategy sameBlockNum has no available storage locations", + "no_available_aisle": "No available aisle found", + "strategy_name_already_exists": "Strategy with same name already exists 【%s】", + "strategy_no_instance": "Start failed, current strategy 【%s】 has no corresponding instance information", + "alley_ave_no_available_location": "Balancing strategy result: Carrier code: 【%s】 current allocation strategy has no available storage locations", + "fifo_rule_inventory_shortage": "Current outbound strategy: FIFO, inventory allocation failed, reason: insufficient inventory!", + "depth_priority_location_not_found": " Depth priority strategy: Get deep location with stock and shallow location without stock: Carrier code: 【%s】 failed to get location, number of locations for this strategy is 0!", + "limit_storage_vehicle_not_exist": "Limit strategy: Current carrier information does not exist: 【%s】 does not exist", + "limit_storage_location_not_found": "Limit strategy: Carrier code: 【%s】 failed to get location, number of locations for this height level is 0!" + }, + "task": { + "status": { + "created": "Created", + "applied": "Applied", + "created_completed": "Creation Completed", + "issued": "Issued", + "executing": "Executing", + "completed": "Completed", + "cancelled": "Cancelled", + "unfinished": "Unfinished" + } + , + "created_desc": "Create Task", + "applied_desc": "Apply Task", + "create_completed_desc": "Create Completed Task", + "issued_desc": "Issue Task", + "executing_desc": "Executing Task", + "completed_desc": "Complete Task", + "cancelled_desc": "Cancelled Task", + "unfinished_desc": "Unfinished Task" + }, + "bind": { + "type": { + "unbind": "Unbind", + "bind": "Bind", + "no_operation": "No Operation" + } + }, + "vehicle": { + "type": { + "empty_pallet": "Empty Pallet", + "empty_container": "Empty Container" + } + }, + "base_data": { + "type_not_defined": "Corresponding type 【%s】 is undefined" + }, + "pm_manage": { + "no_such_unit_info": "No such measurement unit information", + "no_such_warehouse_info": "No such warehouse information", + "form_type_param_cannot_be_empty": "Form type parameter cannot be empty", + "current_bill_already_merged": "Current document has been merged, resubmission not allowed:【%s】", + "current_bill_is_new_merged_bill": "Current document is a new merged document, resubmission not allowed:【%s】", + "current_bill_is_not_new_merged_bill": "Current document is not a new merged document, submission not allowed:【%s】" + }, + "warehouse_manage": { + "main_table_status_must_be_generate": "Main table status must be generated!", + "no_cancel_outbound_alloc_dtl": "No cancellable outbound allocation details exist", + "no_selected_outbound_point": "No outbound point selected", + "no_selected_floor": "No floor selected", + "no_related_outbound_bill": "No related outbound bill found", + "no_alloc_dtl_to_set": "Currently no allocation details to set", + "main_table_status_must_be_allocated": "Main table status must be allocated!", + "cannot_force_confirm_with_unfinished_tasks": "Cannot force confirm with unfinished tasks!", + "no_alloc_dtl_for_task": "No allocation detail found for the task", + "no_dtl_found": "No detail found", + "vehicle_already_in_storage": "Carrier code: 【%s】 already exists in storage, please verify the data!", + "detail_already_allocated_location": "Current detail has already been allocated a storage location", + "no_available_location": "No available storage location", + "detail_not_allocated_location": "This detail has not been allocated a storage location, please allocate first", + "cannot_find_allocation_detail_for_task": "No allocation detail found for the task", + "cannot_find_inbound_detail_record": "No inbound bill detail record found", + "cannot_find_inbound_order": "No inbound order found", + "no_location_in_sector": "No storage locations in this warehouse area", + "no_carrier_info": "No carrier number information", + "cannot_find_suitable_location": "No suitable storage location found", + "cannot_find_available_sector": "No available warehouse area found", + "cannot_select_suitable_sector": "Cannot select suitable warehouse area", + "outbill_qty_zero": "Quantity cannot be zero", + "outbill_sect_empty": "Allocation warehouse area cannot be empty", + "outbill_not_found": "Cannot find outbound bill information", + "outbill_no_details": "Current order has no allocatable outbound details", + "outbill_no_cancelable_details": "No cancellable outbound allocation details exist", + "outbill_allocated": "Fully allocated, unallocated quantity is 0", + "storagevehicle_no_inventory": "Current carrier 【%s】 has no related material batch inventory, please check data!", + "frozen_quantity_cannot_be_negative": "Frozen quantity cannot be negative, please check the change quantity! Current frozen quantity is 【%s】, current change quantity is 【%d】", + }, + "pda_manage": { + "change_type_cannot_be_empty": "Change type cannot be empty!", + "carrier_code_cannot_be_empty": "Carrier code cannot be empty!", + "material_id_cannot_be_empty": "Material ID cannot be empty!", + "unit_id_cannot_be_empty": "Measurement unit ID cannot be empty!", + "unit_name_cannot_be_empty": "Measurement unit name cannot be empty!", + "change_qty_cannot_be_empty": "Change quantity cannot be empty!", + "carrier_already_has_inventory": "Current carrier already has inventory materials, please check data!", + "material_info_cannot_be_empty": "Material information cannot be empty!", + "vehicle_info_cannot_be_empty": "Carrier information cannot be empty!", + "vehicle_already_has_group_plate_info": "Carrier code: 【%s】 already has group plate information, please verify the data!", + "vehicle_already_in_storage": "Carrier code: 【%s】 already exists in storage:【%d】, please verify the data!", + "dtllist_cannot_be_empty": "dtlList cannot be empty", + "vehicle_not_group_plated": "This carrier is not group plated, please check!", + "vehicle_not_in_group_plate_status": "This carrier is not in group plate status, please check!", + "point_not_exists": "Point does not exist:【%s】", + "no_materials_available_for_storage": "Currently no materials available for storage!", + "move_in_location_cannot_be_empty": "Move-in location cannot be empty!", + "material_detail_cannot_be_empty": "Material detail cannot be empty!", + "vehicle_not_exist_in_system": "Carrier does not exist in the system!", + "move_in_location_not_exist_in_system": "Move-in location does not exist in the system!", + "location_and_vehicle_code_cannot_be_empty": "Location code and carrier code cannot both be empty!", + "vehicle_code_empty": "Carrier code cannot be empty", + "point_code_empty": "Point code cannot be empty", + "point_not_found": "Point 【%s】 does not exist", + "point_already_binded": "Point 【%s】 is already bound to carrier 【%d】", + "vehicle_already_binded": "Carrier 【%s】 is already bound to point 【%d】", + "point_no_vehicle_need_unbind": "Point 【%s】 has no bound carrier 【%d】, no need to unbind", + "start_point_not_exist": "Start point does not exist", + "end_point_not_exist": "End point does not exist", + "site_code_empty": "Point code cannot be empty", + "site_not_exist": "Point 【%s】 does not exist" + }, + "acs": { + "connection_failed": "ACS connection failed" + }, + "status": { + "published": "Published", + "unpublished": "Unpublished", + "started": "Started", + "stopped": "Stopped", + "production_in": "Production Inbound", + "purchase_in": "Purchase Inbound", + "other_in": "Other Inbound", + "production_out": "Production Outbound", + "sales_out": "Sales Outbound", + "other_out": "Other Outbound", + "generated": "Generated", + "allocated": "Allocated", + "type_not_defined": "Corresponding type 【%s】 is undefined", + "code_not_defined_r": "Corresponding code 【%s】 has no R data defined", + "code_not_defined_x": "Corresponding code 【%s】 has no x data defined", + "node_completed": "Node Completed", + "abnormal_completed": "Abnormally Completed", + "manual_in": "Manual Inbound", + "material_out": "Material Outbound", + "manual_out": "Manual Outbound", + "move_storage": "Move Storage", + "abnormal_move": "Abnormal Move", + "inventory": "Inventory", + "transfer": "Transfer", + "inventory_loss": "Inventory Loss", + "inventory_profit": "Inventory Profit", + "physical_inventory": "Physical Inventory", + "receipt_notice": "Receipt Notice", + "sales_order": "Sales Order", + "production_inbound": "Production Inbound", + "purchase_inbound": "Purchase Inbound", + "sales_return_inbound": "Sales Return Inbound", + "purchase_return_outbound": "Purchase Return Outbound", + "subcontract_material_list": "Subcontract Material List", + "production_material_list": "Production Material List", + "production_picking": "Production Picking", + "simple_production_picking": "Simple Production Picking", + "transfer_outbound": "Transfer Outbound", + "other_outbound": "Other Outbound", + "lowest": "Lowest Priority", + "normal": "Normal Priority", + "higher": "Higher Priority", + "urgent": "Urgent Priority", + "warehouse": "Warehouse Task", + "agv_task": "AGV Task", + "ctu_task": "CTU Task", + "third_floor_ctu": "Third Floor CTU", + "xian_gong": "Xian Gong System", + "hairou_ctu": "HaiRou CTU", + "hikvision_ctu": "Hikvision CTU", + "inbound": "Inbound", + "outbound": "Outbound", + "in_out_bound": "In/Out Bound", + "first_floor_workshop": "First Floor Workshop", + "second_floor_workshop": "Second Floor Workshop", + "third_floor_workshop": "Third Floor Workshop", + "main_storage_picking_platform": "Main Storage Picking Platform", + "first_floor_io_conveyor": "First Floor I/O Conveyor", + "second_floor_io_conveyor": "Second Floor I/O Conveyor", + "second_floor_ctu_shelf_docking": "Second Floor CTU Shelf Docking Position", + "second_floor_agv_production_line_docking": "Second Floor AGV Production Line Docking Position", + "second_floor_empty_shelf_buffer": "Second Floor Empty Shelf Buffer", + "pallet_warehouse": "Pallet Warehouse", + "container_warehouse": "Container Warehouse", + "virtual_warehouse": "Virtual Warehouse", + "second_floor_ctu_buffer": "Second Floor CTU Buffer", + "second_floor_shelf_buffer": "Second Floor Shelf Buffer", + "ascending": "Ascending", + "descending": "Descending", + "unbind": "Unbind", + "bind": "Bind", + "no_operation": "No Operation", + "empty_tray": "Empty Tray", + "empty_container": "Empty Container", + "start": "Start", + "pause": "Pause", + "completed": "Completed", + "force_completed": "Force Completed", + "cancelled": "Cancelled" + }, + "error": { + "param_undefined": "Parameter 【%s】 undefined 【%s】", + "ParamExist": "Parameter 【%s】 already exists", + "Update": "Update failed", + "Detele": "Delete failed", + "NullPoint": "Null pointer exception", + "SystemAuthError": "System authorization error", + "File_3": "File upload failed", + "isNull": "Parameter 【%s】 cannot be empty", + "Send": "Send failed" + }, + "role": { + "Check_1": "Role name cannot be empty", + "level": "Role level" + }, + "quartz": { + "ip_different": "Local IP 【%s】 differs from scheduler IP 【%s】", + "create_job_failure": "Failed to create scheduled task" + }, + "system_manage": { + "username_password_error": "Incorrect username or password", + "account_not_activated": "Account not activated", + "param_empty": "Parameters cannot be empty", + "code_rule_not_exist": "Missing configuration related to 【%s】", + "menu_no_permission": "No menu permission", + "current_business_executing": "Current business: 【%s】 is being executed, please try again later" + }, + "login": { + "childError": "Child node menu cannot be set as directory" } -} \ No newline at end of file +} diff --git a/nladmin-system/nlsso-server/src/main/resources/language/i18n/in.js b/nladmin-system/nlsso-server/src/main/resources/language/i18n/in.js deleted file mode 100644 index 2b65b37..0000000 --- a/nladmin-system/nlsso-server/src/main/resources/language/i18n/in.js +++ /dev/null @@ -1,13 +0,0 @@ -var config = { - "lang": "English222", - "platform": { - "title": "NOBLELIFT Platform", - "tip1": "The user name cannot be empty", - "tip2": "The password cannot be empty", - "tip3": "The verification code cannot be empty" - }, - "common": { - "home": "Dashboard", - "Layout_setting": "Layout Setting" - } -} \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/resources/language/i18n/ja.js b/nladmin-system/nlsso-server/src/main/resources/language/i18n/ja.js deleted file mode 100644 index 2b65b37..0000000 --- a/nladmin-system/nlsso-server/src/main/resources/language/i18n/ja.js +++ /dev/null @@ -1,13 +0,0 @@ -var config = { - "lang": "English222", - "platform": { - "title": "NOBLELIFT Platform", - "tip1": "The user name cannot be empty", - "tip2": "The password cannot be empty", - "tip3": "The verification code cannot be empty" - }, - "common": { - "home": "Dashboard", - "Layout_setting": "Layout Setting" - } -} \ No newline at end of file diff --git a/nladmin-system/nlsso-server/src/main/resources/language/i18n/vi.js b/nladmin-system/nlsso-server/src/main/resources/language/i18n/vi.js index f0f58c7..e4d2bea 100644 --- a/nladmin-system/nlsso-server/src/main/resources/language/i18n/vi.js +++ b/nladmin-system/nlsso-server/src/main/resources/language/i18n/vi.js @@ -44,6 +44,105 @@ var config = { "accountUse": "Đăng nhập thất bại, tài khoản chưa được kích hoạt" }, "common": { + 'home': 'Trang chủ', // Trang chủ + 'Layout_setting': 'Cài đặt bố cục', + 'Personal_center': 'Trung tâm cá nhân', + 'Log_out': 'Đăng xuất', + 'Personal_information': 'Thông tin cá nhân', + 'username': 'Tên người dùng', + 'name': 'Họ tên', + 'phone': 'Số điện thoại', + 'phone2': 'Số điện thoại', + 'sex': 'Giới tính', + 'sex_male': 'Nam', + 'sex_female': 'Nữ', + 'email': 'Email người dùng', + 'Security_settings': 'Cài đặt bảo mật', + 'Save_settings': 'Lưu cài đặt', + 'Reset_settings': 'Đặt lại cài đặt', + 'Change_password': 'Đổi mật khẩu', + 'New_password': 'Mật khẩu mới', + 'Old_password': 'Mật khẩu cũ', + 'Verify_password': 'Xác nhận mật khẩu', + 'User_information': 'Thông tin người dùng', + 'Operation_log': 'Nhật ký hoạt động', + 'action': 'Hành động', + 'IP_source': 'Nguồn IP', + 'Browser': 'Trình duyệt', + 'Request_time': 'Thời gian xử lý yêu cầu', + 'Creation_date': 'Ngày tạo', + 'account': 'Tài khoản', + 'password': 'Mật khẩu', + 'verification_code': 'Mã xác minh', + 'login_rm': 'Ghi nhớ đăng nhập', + 'login': 'Đăng nhập', + 'login_ing': 'Đang đăng nhập...', + 'Create': 'Thêm mới', + 'Update': 'Chỉnh sửa', + 'Delete': 'Xóa', + 'More': 'Thêm', + 'Export': 'Xuất', + 'Editors': 'Biên tập', + 'SelectAll': 'Chọn tất cả', + 'Query': 'Truy vấn', + 'Reset': 'Đặt lại', + 'Confirm': 'Xác nhận', + 'Cancel': 'Hủy', + 'Yes': 'Có', + 'No': 'Không', + 'Success': 'Thành công', + 'Fail': 'Thất bại', + 'Please_select': 'Vui lòng chọn', + 'Operation_success': 'Thao tác thành công', + 'Upload_success': 'Tải lên thành công', + 'Operate': 'Thao tác', + 'Refresh': 'Làm mới', + 'Closes': 'Đóng', + 'Closes_l': 'Đóng bên trái', + 'Closes_r': 'Đóng bên phải', + 'Closes_o': 'Đóng khác', + 'Closes_a': 'Đóng tất cả', + 'Theme_style_setting': 'Cài đặt kiểu giao diện', + 'Theme_color': 'Màu chủ đề', + 'System_layout_configuration': 'Cấu hình bố cục hệ thống', + 'Open': 'Mở', + 'Fixation': 'Cố định', + 'Display': 'Hiển thị', + 'Dynamic_titles': 'Tiêu đề động', + 'crudTip': 'Xác nhận xóa dữ liệu này?', + 'startDate': 'Ngày bắt đầu', + 'endDate': 'Ngày kết thúc', + 'moreMenu': 'Menu thêm', + 'browses': 'Duyệt', + 'fz': 'Thu phóng toàn màn hình', + 'submit': 'Gửi thành công', + 'add': 'Thêm thành công', + 'edit': 'Chỉnh sửa thành công', + 'del': 'Xóa thành công', + 'close': 'Xác nhận đóng', + 'save': 'Lưu thành công', + 'datas': 'Dữ liệu', + 'Tips': 'Gợi ý', + 'Tip1': 'Xác nhận xóa {count} dữ liệu đã chọn?', + 'Tip3': 'Tên người dùng không dùng để đăng nhập', + 'Tip4': 'Số điện thoại không được trùng lặp', + 'Tip5': 'Vui lòng nhập số điện thoại', + 'Tip6': 'Vui lòng nhập đúng 11 chữ số điện thoại', + 'Tip7': 'Kéo thả file excel vào đây hoặc', + 'Tip8': 'Mật khẩu nhập hai lần không khớp', + 'Tip9': 'Vui lòng nhập lại mật khẩu', + 'Tip10': 'Vui lòng nhập mật khẩu cũ', + 'Tip11': 'Vui lòng nhập mật khẩu mới', + 'Tip12': 'Độ dài từ {min} đến {max} ký tự', + 'Tip13': 'Xác nhận đăng xuất khỏi hệ thống?', + 'Tip14': 'Kết nối WebSocket xảy ra lỗi', + 'Tip15': 'Vui lòng nhập tên biểu tượng', + 'Tip16': 'Không được để trống', + 'Tip17': 'Vui lòng nhập nội dung tìm kiếm', + 'loading': 'Dữ liệu đang tải...', + 'Tip18': 'Chọn ngày giờ', + 'Tip19': 'Bạn có chắc chắn xóa dữ liệu đã chọn?', + 'Tip20': 'Trạng thái đăng nhập hiện tại đã hết hạn, vui lòng đăng nhập lại!', "name": "Tên", "create_name": "Người tạo", "create_time": "Thời gian tạo", @@ -321,6 +420,7 @@ var config = { "para3": "Tham số 3" }, "menu": { + "home": "home", "menu_id": "ID menu", "pid": "ID menu cấp trên", "sub_count": "Số lượng menu con", @@ -644,4 +744,4 @@ var config = { "login": { "childError": "Menu nút con không thể đặt thành thư mục" } -} \ No newline at end of file +} diff --git a/nladmin-system/nlsso-server/src/main/resources/language/i18n/zh.js b/nladmin-system/nlsso-server/src/main/resources/language/i18n/zh.js index 13b4c19..3778a29 100644 --- a/nladmin-system/nlsso-server/src/main/resources/language/i18n/zh.js +++ b/nladmin-system/nlsso-server/src/main/resources/language/i18n/zh.js @@ -44,6 +44,105 @@ var config = { "accountUse": "登入失败,账号未启用" }, "common": { + 'home': '首页', // 首页 + 'Layout_setting': '布局设置', + 'Personal_center': '个人中心', + 'Log_out': '退出登录', + 'Personal_information': '个人信息', + 'username': '用户姓名', + 'name': '姓名', + 'phone': '手机号码', + 'phone2': '手机号', + 'sex': '性别', + 'sex_male': '男', + 'sex_female': '女', + 'email': '用户邮箱', + 'Security_settings': '安全设置', + 'Save_settings': '保存配置', + 'Reset_settings': '重置配置', + 'Change_password': '修改密码', + 'New_password': '新密码', + 'Old_password': '旧密码', + 'Verify_password': '确认密码', + 'User_information': '用户资料', + 'Operation_log': '操作日志', + 'action': '行为', + 'IP_source': 'IP来源', + 'Browser': '浏览器', + 'Request_time': '请求耗时', + 'Creation_date': '创建日期', + 'account': '账号', + 'password': '密码', + 'verification_code': '验证码', + 'login_rm': '记住我', + 'login': '登 录', + 'login_ing': '登 录 中...', + 'Create': '新增', + 'Update': '修改', + 'Delete': '删除', + 'More': '更多', + 'Export': '导出', + 'Editors': '编辑', + 'SelectAll': '全选', + 'Query': '查询', + 'Reset': '重置', + 'Confirm': '确认', + 'Cancel': '取消', + 'Yes': '是', + 'No': '否', + 'Success': '成功', + 'Fail': '失败', + 'Please_select': '请选择', + 'Operation_success': '操作成功', + 'Upload_success': '上传成功', + 'Operate': '操作', + 'Refresh': '刷新', + 'Closes': '关闭', + 'Closes_l': '关闭左侧', + 'Closes_r': '关闭右侧', + 'Closes_o': '关闭其他', + 'Closes_a': '关闭全部', + 'Theme_style_setting': '主题风格设置', + 'Theme_color': '主题颜色', + 'System_layout_configuration': '系统布局配置', + 'Open': '开启', + 'Fixation': '固定', + 'Display': '显示', + 'Dynamic_titles': '动态标题', + 'crudTip': '确定删除本条数据吗?', + 'startDate': '开始日期', + 'endDate': '结束日期', + 'moreMenu': '更多菜单', + 'browses': '浏览', + 'fz': '全屏缩放', + 'submit': '提交成功', + 'add': '新增成功', + 'edit': '编辑成功', + 'del': '删除成功', + 'close': '确认关闭', + 'save': '保存成功', + 'datas': '数据', + 'Tips': '提示', + 'Tip1': '确认删除选中的{count}条数据?', + 'Tip3': '用户姓名不作为登录使用', + 'Tip4': '手机号码不能重复', + 'Tip5': '请输入电话号码', + 'Tip6': '请输入正确的11位手机号码', + 'Tip7': '拖拽excel文件到此处 或者', + 'Tip8': '两次输入的密码不一致', + 'Tip9': '请再次输入密码', + 'Tip10': '请输入旧密码', + 'Tip11': '请输入新密码', + 'Tip12': '长度在 {min} 到 {max} 个字符', + 'Tip13': '确定注销并退出系统吗?', + 'Tip14': 'WebSocket连接发生错误', + 'Tip15': '请输入图标名称', + 'Tip16': '不能为空', + 'Tip17': '请输入你要搜索的内容', + 'loading': '数据加载中...', + 'Tip18': '选择日期时间', + 'Tip19': '你确定删除选中的数据吗?', + 'Tip20': '当前登录状态已过期,请重新登录!', "name": "名称", "create_name": "创建人", "create_time": "创建时间", @@ -321,6 +420,7 @@ var config = { "para3": "参数3" }, "menu": { + "home": "首页面", "menu_id": "菜单ID", "pid": "上级菜单ID", "sub_count": "子菜单数量", @@ -645,4 +745,4 @@ var config = { "login": { "childError": "子节点菜单不能设置为目录" } -} \ No newline at end of file +} diff --git a/nladmin-system/nlsso-server/src/main/resources/language/zh.js b/nladmin-system/nlsso-server/src/main/resources/language/zh.js new file mode 100644 index 0000000..6b61aac --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/resources/language/zh.js @@ -0,0 +1,333 @@ +var config = { + "language":"简体中文", + "platform": { + "title": "NOBLELIFT Platform", + }, + "system": { + "exception": "系统异常,请联系管理员查看", + "exceptionArg": "系统异常,%s", + "paramException": "参数异常,输入参数不正确", + "paramExceptionArg": "参数异常,输入参数%s不正确", + "resultException": "请求结果不存在", + "dataException": "数据异常,数据不存在", + "dataExceptionArg": "数据异常,%s数据不存在", + "dataFormat": "数据异常,数据不正确", + "dataDuplicationArg": "数据重复,%s在系统中已存在", + "activatArg": "%s在系统不可用用", + "operationStatusArg": "操作失败,%s状态不正确" + }, + "business": { + "InvReminder": "当前分配策略,%s无可用货位", + "loginPassword":"登入失败,账号密码不正确", + "accountUse":"登入失败,账号未启用", + "billDataExceptionArg":"操作失败,%s操作的单据数据不存在", + "billDataDtlExceptionArg":"操作失败,%s操作的单据明细不存在", + "billActivatArg":"操作失败,%s操作的单据数据无可用", + "billOperationStatusArg":"操作失败,%s单据的状态不正确", + }, + "common": { + "name": "名称", + "create_name":"创建人", + "create_time":"创建时间", + "update_name":"修改人", + "remark":"备注", + "is_used":"是否启用", + "is_delete":"是否删除", + "create_mode":"生成方式", + "input_optname":"制单人姓名", + "input_time":"制单时间", + "update_optname":"修改人姓名", + "update_time":"修改时间", + "dis_optname":"分配人姓名", + "dis_time":"分配时间", + "confirm_optname":"确认人姓名", + "confirm_time":"确认时间", + "bill_code":"单据编号", + "bill_type":"单据类型", + "biz_date":"业务日期", + "bill_status":"单据状态/单据明细状态", + "zh_name":"中文名称", + "in_name":"印尼名称", + "en_name":"英文名称", + "ext_id":"外部标识" + }, + "unit": { + "unit_code":"编码", + "unit_name":"名称", + "qty_precision":"数据精度", + "qty_unit_id":"基本计量单位", + "qty_unit_name":"单位名称" + }, + "storagevehicle": { + "storagevehicle_code":"载具编码", + "storagevehicle_name":"载具名称", + "vehicle_type":"载具类型", + "vehicle_code":"载具编码", + "one_code":"一维码", + "two_code":"二维码", + "storagevehicle_type":"载具类型", + "vehicle_width":"载具宽度", + "vehicle_long":"载具长度", + "vehicle_height":"载具高度", + "weigth":"托盘重量", + "overstruct_type":"载具是否超仓位", + "occupystruct_qty":"占仓位数", + "ext_id":"外部标识" + }, + "point": {"point_code":"点位编码", + "point_name":"点位名称", + "region_code":"区域编码", + "region_name":"区域名称", + "point_type":"点位类型", + "point_status":"点位状态", + "vehicle_type":"载具类型", + "vehicle_code":"载具编码", + "vehicle_qty":"载具数量", + "in_order_seq":"入库顺序", + "out_order_seq":"出库顺序", + "in_empty_seq":"入空载具顺序", + "out_empty_seq":"出空载具顺序", + "parent_point_code":"父点位编码", + "ext_point_code":"外部点位编码", + "ing_task_code":"在执行的任务标识", + "is_has_workder":"是否创建工单", + "workshop_code":"车间编码", + "is_auto":"是否自动" + }, + "region": {"region_code":"区域编码", + "region_name":"区域名称", + "point_type_explain":"点位类型说明", + "point_status_explain":"点位状态说明", + "is_has_workder":"是否创建工单", + "order_seq":"顺序号", + "workshop_code":"车间编码" + }, + "task":{ + "task_code":"任务编码", + "task_status":"任务状态", + "config_code":"配置编码", + "point_code1":"点位1", + "point_code2":"点位2", + "point_code3":"点位3", + "point_code4":"点位4", + "group_id":"组盘标识", + "vehicle_type":"载具类型", + "vehicle_qty":"载具数量", + "vehicle_code":"载具编码", + "vehicle_code2":"载具编码2", + "handle_status":"处理状态", + "car_no":"车号", + "task_group_id":"任务组标识", + "task_group_seq":"任务组顺序号", + "finished_type":"任务完成类型", + "create_mode":"生成方式", + "request_param":"生成任务的请求参数", + "response_param":"下发任务的请求参数", + "workshop_code":"车间编码", + "ext_group_data":"额外组盘信息", + "priority":"acs优先级" + }, + "taskconfig":{ + "config_code":"配置编码", + "config_name":"配置名称", + "route_plan_code":"路由编码", + "task_qf_type":"任务取放类型", + "acs_task_type":"acs任务类型", + "task_name":"任务名字", + "task_type":"任务类型", + "task_direction":"任务去向", + "priority":"优先级", + "task_create_max_num":"允许最大任务生成数", + "task_issue_max_num":"允许最大任务下发数", + "is_auto_issue":"是否自动下发", + "start_region_str":"起点区域配置", + "next_region_str":"终点区域配置", + "start_point_pre":"起点点位前缀", + "next_region_pre":"终点点位前缀", + "is_check_workorder":"是否校验工单", + "is_check_start_lock":"是否判断起点锁定", + "is_immediate_create":"是否立即创建", + "is_check_next_lock":"是否判断终点锁定", + "is_start_auto":"是否起点自动", + "is_next_auto":"是否终点自动", + "is_lock_start":"是否锁定起点", + "is_lock_next":"是否锁定终点", + "request_param":"生成任务的请求参数", + "response_param":"下发任务的请求参数", + "is_group_congrol_issue_seq":"是否按组控制下发顺序", + "unfinish_notify_time":"任务未完成通知时间数", + "sql_param":"sql配置", + "workshop_code":"车间编码" + }, + "storattr":{"stor_code":"仓库编码", + "stor_name":"仓库名称", + "simple_name":"仓库简称", + "stor_capacity":"仓库容量", + "total_area":"总面积", + "stor_type_scode":"仓库性质", + "is_virtualstore":"是否虚拟库", + "is_semi_finished":"是否半成品库", + "is_materialstore":"是否原料库", + "is_productstore":"是否成品库", + "is_attachment":"是否备件库", + "is_reversed":"是否允许红冲", + "is_mvout_auto_cfm":"是否移出业务自动确认", + "is_mvin_auto_cfm":"是否移入业务自动确认", + "area":"地区", + "storea_ddress":"仓库地址", + "principal":"负责人", + "office_phone":"办公电话", + "mobile_no":"负责人手机", + "order_index":"显示顺序", + "whstate_scode":"状态", + "base_class_id":"物料基本分类", + "sysownerid":"拥有者ID", + "sysdeptid":"部门ID", + "syscompanyid":"公司ID", + "ext_id":"外部标识", + "depart_name":"部门名称", + "company_name":"公司名称"}, + "checkmst":{"seq_no":"明细序号", + "sect_code":"盘点库区", + "struct_code":"盘点货位", + "checkpoint_code":"盘点站台", + "storagevehicle_code":"存储载具编码", + "material_id":"物料标识", + "pcsn":"批次", + "base_qty":"库存数量", + "status":"状态", + "is_down":"是否已下发", + "fac_qty":"盘点数量", + "check_result":"盘点结果", + "check_optname":"盘点人姓名", + "check_time":"盘点时间", + "remark":"明细备注", + "check_code":"盘点单号", + "check_type":"盘点单类型", + "stor_name":"仓库名称", + "dtl_num":"明细数", + "create_mode":"生成方式", + }, + "st_ivt_iostor": {"stor_code":"仓库编码", + "sect_date":"日期", + "quality_scode":"品质类型", + "start_num":"期初数", + "in_num":"入库数", + "out_num":"出库数", + "total_qty":"总数量", + "total_weight":"总重量", + "io_type":"出入类型", + "detail_count":"明细数", + "seq_no":"明细序号", + "work_status":"执行状态", + "task_id":"任务标识", + "storagevehicle_code":"存储载具编码", + "is_issued":"是否已下发", + "plan_qty":"计划数量", + "real_qty":"实际数量", + "point_code":"出入点位标识", + "assign_qty":"已分配数量", + "unassign_qty":"未分配数量", + "mol_code":"损溢单号", + "mol_inv_type":"损溢单类型", + "mol_type":"损溢类型", + "turnout_sect_code":"转出库区编码", + "turnout_struct_code":"转出仓位编码", + "turnin_sect_code":"转入库区编码", + "turnin_struct_code":"转入仓位编码" + }, + "structWarning": { + "safe_qty_lower_limit":"安全库存数量下线", + "safe_qty_upper_limit":"安全库存数量上限", + "cron":"表达式", + "notify_type":"通知类型", + "overdue_days":"超时天数", + "safe_days":"安全天数", + "is_read":"是否已读", + "current_qty":"当前数量" + }, + "strategy": {"sect_code":"库区", + "strategy":"规则", + "strategy_type":"1入库策略 2出库策略", + "description":"描述", + "strategy_code":"策略编码", + "strategy_name":"策略名称", + "class_type":"类处理类型", + "param":"处理类", + "ban":"禁止操作", + "form_data":"限定参数"}, + "code_rule": {"current_value":"当前值"}, + "dept": {"dept_id":"ID", + "pid":"上级部门", + "sub_count":"子部门数目", + "name":"名称", + "zh_name":"中文名称", + "in_name":"印尼名称", + "en_name":"英文名称", + "dept_sort":"排序", + "is_used":"状态", + "create_id":"", + "create_name":"创建者", + "update_id":"", + "update_name":"更新者", + "create_time":"创建日期", + "update_time":"更新时间", + "code":"部门编号", + "ext_id":""}, + "dict":{"dict_type":"字典类型", + "dict_sort":"排序号", + "label":"字典标签", + "value":"字典值", + "para1":"参数1", + "para2":"参数2", + "para3":"参数3"}, + "menu":{"menu_id":"菜单标识", + "pid":"上级菜单ID", + "sub_count":"子菜单数目", + "type":"菜单类型", + "system_type":"所属系统", + "category":"菜单分类", + "title":"菜单标题", + "en_title":"英语标题", + "in_title":"印尼标题", + "zh_title":"中文标题", + "component_name":"组件名称", + "component":"组件", + "menu_sort":"排序", + "icon":"图标", + "path":"链接地址", + "iframe":"是否外链", + "cache":"是否缓存", + "hidden":"是否隐藏", + "permission":"权限", + "is_pc":"是否PC菜单"}, + "param":{ + "code":"编码", + "name":"名称", + "zh_name":"名称", + "en_name":"英文名称", + "in_name":"印尼名称", + "value":"值"}, + "role":{ + "level":"角色级别" + }, + "user":{"user_id":"用户标识", + "username":"登录账号", + "password":"密码", + "is_admin":"是否为admin账号", + "person_name":"姓名", + "zh_person_name":"姓(中文)", + "en_person_name":"姓(英文)", + "in_person_name":"印尼名称", + "gender":"性别", + "zh_gender":"性(中文)", + "en_gender":"性(英文)", + "phone":"电话", + "email":"电子邮箱", + "avatar_name":"头像地址", + "avatar_path":"头像真实路径", + "extperson_id":"外部人员标识", + "extuser_id":"外部用户标识", + "pwd_reset_user_id":"密码重置者", + "pwd_reset_time":"密码重置时间"} +} diff --git a/nladmin-ui/package-lock.json b/nladmin-ui/package-lock.json index 53765cc..fb294db 100644 --- a/nladmin-ui/package-lock.json +++ b/nladmin-ui/package-lock.json @@ -4878,6 +4878,19 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/node-notifier": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-5.4.5.tgz", + "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, "node_modules/@vue/cli-plugin-unit-jest/node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", @@ -13850,6 +13863,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "optional": true, + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/is-dotfile/-/is-dotfile-1.0.3.tgz", @@ -14352,7 +14381,7 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "devOptional": true, + "dev": true, "engines": { "node": ">=4" } @@ -18888,16 +18917,70 @@ } }, "node_modules/node-notifier": { - "version": "5.4.5", - "resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-5.4.5.tgz", - "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", - "devOptional": true, + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "optional": true, + "peer": true, "dependencies": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", "shellwords": "^0.1.1", - "which": "^1.3.0" + "uuid": "^8.3.2", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "optional": true, + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/node-plop": { @@ -27711,7 +27794,7 @@ "version": "1.3.1", "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "devOptional": true, + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -32023,6 +32106,19 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node-notifier": { + "version": "5.4.5", + "resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-5.4.5.tgz", + "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", @@ -39259,6 +39355,13 @@ "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "dev": true }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "optional": true, + "peer": true + }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/is-dotfile/-/is-dotfile-1.0.3.tgz", @@ -39602,7 +39705,7 @@ "version": "1.1.0", "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "devOptional": true + "dev": true }, "isarray": { "version": "1.0.0", @@ -43056,16 +43159,54 @@ } }, "node-notifier": { - "version": "5.4.5", - "resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-5.4.5.tgz", - "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", - "devOptional": true, + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/node-notifier/-/node-notifier-10.0.1.tgz", + "integrity": "sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==", + "optional": true, + "peer": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.5", "shellwords": "^0.1.1", - "which": "^1.3.0" + "uuid": "^8.3.2", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "optional": true, + "peer": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "optional": true, + "peer": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "optional": true, + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "node-plop": { @@ -50160,7 +50301,7 @@ "version": "1.3.1", "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "devOptional": true, + "dev": true, "requires": { "isexe": "^2.0.0" } diff --git a/nladmin-ui/src/api/i18n.js b/nladmin-ui/src/api/i18n.js new file mode 100644 index 0000000..c82a00f --- /dev/null +++ b/nladmin-ui/src/api/i18n.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +export function fetchMessages(locale) { + return request({ + url: '/api/language/js/' + locale, + method: 'get' + }) +} + +export default { fetchMessages } diff --git a/nladmin-ui/src/i18n/index.js b/nladmin-ui/src/i18n/index.js index 22a7fe8..bba566a 100644 --- a/nladmin-ui/src/i18n/index.js +++ b/nladmin-ui/src/i18n/index.js @@ -1,27 +1,19 @@ import Vue from 'vue' import VueI18n from 'vue-i18n' -import locale from 'element-ui/lib/locale' -import zh from './langs/chinese' -import en from './langs/english' -import indonesian from './langs/indonesian' + Vue.use(VueI18n) -const messages = { - en: { - ...en - }, - zh: { - ...zh - }, - in: { - ...indonesian - } -} + +// 准备默认的语言环境消息(可以是空对象,也可以是一些基本消息) +const defaultLocale = 'zh' +const fallbackLocale = 'zh' + +// 创建i18n实例 const i18n = new VueI18n({ - locale: localStorage.lang || 'zh', - messages, + locale: defaultLocale, // 设置当前语言 + fallbackLocale, // 设置回退语言 silentTranslationWarn: true, // 解决vue-i18n黄色警告"value of key 'xxx' is not a string"和"cannot translate the value of keypath 'xxx'.use the value of keypath as default",可忽略 - globalInjection: true, // 全局注入 - fallbackLocale: 'zh' + globalInjection: true, + messages: {} // 初始化为空,稍后从接口获取 }) -locale.i18n((key, value) => i18n.t(key, value)) export default i18n + diff --git a/nladmin-ui/src/i18n/langs/chinese.js b/nladmin-ui/src/i18n/langs/chinese.js deleted file mode 100644 index 71fba7c..0000000 --- a/nladmin-ui/src/i18n/langs/chinese.js +++ /dev/null @@ -1,37 +0,0 @@ -import zhLocale from 'element-ui/lib/locale/lang/zh-CN' -import zh from './zh-CN' -import menu from '../../views/system/menu/locale/zh' -import param from '../../views/system/param/locale/zh' -import user from '../../views/system/user/locale/zh' -import scheduler from '../../views/system/timing/locale/zh' -import dept from '../../views/system/dept/locale/zh' -import dict from '../../views/system/dict/locale/zh' -import redis from '../../views/system/redis/locale/zh' -import log from '../../views/monitor/log/locale/zh' -import notice from '../../views/system/notice/locale/zh' -import errorLog from '../../views/monitor/log/locale/error/zh' -import online from '../../views/monitor/online/locale/zh' -import role from '../../views/system/role/locale/zh' -import corn from '../../views/system/timing/locale/corn/zh' -import codegen from '../../views/tools/codeGen/locale/zh' -import storage from '../../views/tools/storage/locale/zh' - -export default { - ...zhLocale, - ...zh, - ...menu, - ...param, - ...user, - ...scheduler, - ...dept, - ...dict, - ...redis, - ...log, - ...notice, - ...errorLog, - ...online, - ...role, - ...corn, - ...codegen, - ...storage -} diff --git a/nladmin-ui/src/i18n/langs/en.js b/nladmin-ui/src/i18n/langs/en.js deleted file mode 100644 index 783672e..0000000 --- a/nladmin-ui/src/i18n/langs/en.js +++ /dev/null @@ -1,134 +0,0 @@ -export default { - 'lang': 'English', - // 平台 - 'platform': { - 'title': 'NOBLELIFT Platform', - 'tip1': 'The user name cannot be empty', - 'tip2': 'The password cannot be empty', - 'tip3': 'The verification code cannot be empty' - }, - 'common': { - 'home': 'Dashboard', - 'Layout_setting': 'Layout Setting', - 'Personal_center': 'Personal Center', - 'Log_out': 'Log Out', - 'Personal_information': 'Personal Information', - 'username': 'UserName', - 'name': 'Name', - 'phone': 'Phone Number', - 'phone2': 'Phone', - 'sex': 'Sex', - 'sex_male': 'Male', - 'sex_female': 'Female', - 'email': 'E-mail', - 'Security_settings': 'Security Settings', - 'Save_settings': 'Save Settings', - 'Reset_settings': 'Reset Settings', - 'Change_password': 'Change Password', - 'New_password': 'New Password', - 'Old_password': 'Old Password', - 'Verify_password': 'Verify Password', - 'User_information': 'User Information', - 'Operation_log': 'Operation Log', - 'action': 'Action', - 'IP_source': 'IP Source', - 'Browser': 'Browser', - 'Request_time': 'Request Time', - 'Creation_date': 'Creation Date', - 'account': 'Account', - 'password': 'Password', - 'verification_code': 'Code', - 'login_rm': 'Remember Me', - 'login': 'Login', - 'login_ing': 'Logging in...', - 'Create': 'Create', - 'Update': 'Update', - 'Delete': 'Delete', - 'More': 'More', - 'Export': 'Export', - 'Editors': 'Editor', - 'SelectAll': 'SelectAll', - 'Query': 'Query', - 'Reset': 'Reset', - 'Confirm': 'Confirm', - 'Cancel': 'Cancel', - 'Yes': 'YES', - 'No': 'NO', - 'Success': 'success', - 'Fail': 'fail', - 'Please_select': 'Please Select', - 'Operation_success': 'Successful operation', - 'Upload_success': 'Upload Success', - 'Operate': 'Operate', - 'Refresh': 'Refresh', - 'Closes': 'Close', - 'Closes_l': 'Close Left', - 'Closes_r': 'Close Right', - 'Closes_o': 'Close Other', - 'Closes_a': 'Close All', - 'Theme_style_setting': 'Theme Style Setting', - 'Theme_color': 'Theme Color', - 'System_layout_configuration': 'System Layout Configuration', - 'Open': 'Open', - 'Fixation': 'Fixation', - 'Display': 'Display', - 'Dynamic_titles': 'Dynamic Titles', - 'crudTip': 'Are you sure to delete this data?', - 'startDate': 'StartDate', - 'endDate': 'EndDate', - 'moreMenu': 'MoreMenu', - 'browses': 'browse', - 'fz': 'Full screen zoom', - 'submit': 'Submit Success', - 'add': 'Add Success', - 'edit': 'Edit Success', - 'del': 'Delete Success', - 'close': 'Confirm Close', - 'save': 'Save Success', - 'datas': 'Data', - 'Tips': 'Tips', - 'Tip1': 'Confirm to delete the selected {count} pieces of data?', - 'Tip3': 'User name not used as login', - 'Tip4': 'Mobile phone number cannot be duplicate', - 'Tip5': 'Please enter a phone number', - 'Tip6': 'Please enter the correct 11 digit phone number', - 'Tip7': 'Drag and drop the excel file here or', - 'Tip8': 'The two passwords are different', - 'Tip9': 'Please enter your password again', - 'Tip10': 'Please enter your old password', - 'Tip11': 'Please enter your new password', - 'Tip12': '{min} to {max} characters in length', - 'Tip13': 'Are you sure to log out and exit the system?', - 'Tip14': 'WebSocket connection error', - 'Tip15': 'Please enter an icon name', - 'Tip16': 'NOT NULL', - 'Tip17': 'Please enter what you are searching for', - 'loading': 'loading...', - 'Tip18': 'select date time', - 'Tip19': 'Are you sure to delete the selected data?', - 'Tip20': 'The login has expired,please log in again!' - }, - 'WorkOrder': { - 'form': { - 'WorkOrderCode': 'WorkOrderCode' - }, - 'placeholder': { - 'WorkOrderCode': 'Please enter the code' - } - }, - 'monitor': { - 'sys': 'System', - 'day': 'Running Day', - 'status': 'Status', - 'core': 'Core', - 'cpu': 'CPU Utilization', - 'memory': 'Memory Utilization', - 'tality': 'Tality', - 'used': 'Used', - 'leisure': 'Leisure', - 'exchange': 'Exchange Utilization', - 'disk': 'Disk Utilization', - 'cpu_monitoring': 'Cpu Utilization Monitoring', - 'memory_monitoring': 'Memory Utilization Monitoring' - } -} diff --git a/nladmin-ui/src/i18n/langs/english.js b/nladmin-ui/src/i18n/langs/english.js deleted file mode 100644 index 07dee28..0000000 --- a/nladmin-ui/src/i18n/langs/english.js +++ /dev/null @@ -1,37 +0,0 @@ -import enLocale from 'element-ui/lib/locale/lang/en' -import en from './en' -import menu from '../../views/system/menu/locale/en' -import param from '../../views/system/param/locale/en' -import user from '../../views/system/user/locale/en' -import scheduler from '../../views/system/timing/locale/en' -import dept from '../../views/system/dept/locale/en' -import dict from '../../views/system/dict/locale/en' -import redis from '../../views/system/redis/locale/en' -import log from '../../views/monitor/log/locale/en' -import notice from '../../views/system/notice/locale/en' -import errorLog from '../../views/monitor/log/locale/error/en' -import online from '../../views/monitor/online/locale/en' -import role from '../../views/system/role/locale/en' -import corn from '../../views/system/timing/locale/corn/en' -import codegen from '../../views/tools/codeGen/locale/en' -import storage from '../../views/tools/storage/locale/en' - -export default { - ...enLocale, - ...en, - ...menu, - ...param, - ...user, - ...scheduler, - ...dept, - ...dict, - ...redis, - ...log, - ...notice, - ...errorLog, - ...online, - ...role, - ...corn, - ...codegen, - ...storage -} diff --git a/nladmin-ui/src/i18n/langs/in.js b/nladmin-ui/src/i18n/langs/in.js deleted file mode 100644 index 122b11c..0000000 --- a/nladmin-ui/src/i18n/langs/in.js +++ /dev/null @@ -1,134 +0,0 @@ -export default { - 'lang': 'in', - // 平台 - 'platform': { - 'title': 'NOBLELIFT Platform', - 'tip1': 'Nama pengguna tidak dapat kosong', - 'tip2': 'Kata sandi tidak dapat kosong', - 'tip3': 'Kode verifikasi tidak dapat kosong' - }, - 'common': { - 'home': 'rumah', // 首页 - 'Layout_setting': 'Pengaturan Bentangan', - 'Personal_center': 'Pusat Pribadi', - 'Log_out': 'Log Out', - 'Personal_information': 'Informasi Pribadi', - 'username': 'Nama Pengguna', - 'name': 'Nama', - 'phone': 'Nomor Ponsel', - 'phone2': 'Ponsel', - 'sex': 'Gender', - 'sex_male': 'laki-laki', - 'sex_female': 'wanita', - 'email': 'E-mail', - 'Security_settings': 'Pengaturan Keamanan', - 'Save_settings': 'Simpan Pengaturan', - 'Reset_settings': 'Reset pengaturan', - 'Change_password': 'Ubah kata sandi', - 'New_password': 'Kata sandi baru', - 'Old_password': 'Kata sandi lama', - 'Verify_password': 'Konfirmasi Sandi', - 'User_information': 'Informasi Pengguna', - 'Operation_log': 'Log Operasi', - 'action': 'Perilaku', - 'Browser': 'Pelayar', - 'IP_source': 'IP Sumber', - 'Request_time': 'Meminta Konsumsi Waktu', - 'Creation_date': 'Dicipta Pada', - 'account': 'Akaun', - 'password': 'Sandi', - 'verification_code': 'Kode', - 'login_rm': 'Ingat aku', - 'login': 'Login', - 'login_ing': 'Daftar masuk', - 'Create': 'Buat', - 'Update': 'Kemaskini', - 'Delete': 'Hapus', - 'More': 'Lebih', - 'Export': 'Ekspor', - 'Editors': 'Editor', - 'SelectAll': 'Pilih Semua', - 'Query': 'Pertanyaan', - 'Reset': 'Reset', - 'Confirm': 'konfirmasi', - 'Cancel': 'Batalkan', - 'Yes': 'Ya', - 'No': 'Tidak', - 'Success': 'sukses', - 'Fail': 'gagal', - 'Please_select': 'Silakan pilih', - 'Operation_success': 'Operasi berhasil', - 'Upload_success': 'Unggah Berhasil', - 'Operate': 'Operasi', - 'Refresh': 'Segar', - 'Closes': 'Tutup', - 'Closes_l': 'Tutup Sisi Kiri', - 'Closes_r': 'Tutup Sisi Kanan', - 'Closes_o': 'Tutup Lain', - 'Closes_a': 'Tutup Semua', - 'Theme_style_setting': 'Pengaturan Gaya Tema', - 'Theme_color': 'Warna Tema', - 'System_layout_configuration': 'Konfigurasi layout sistem', - 'Open': 'Buka', - 'Fixation': 'Tetap', - 'Display': 'Tampilan', - 'Dynamic_titles': 'Tajuk Dinamik', - 'crudTip': 'Apakah Anda yakin untuk menghapus data ini?', - 'startDate': 'TarikhAwal', - 'endDate': 'TarikhAkhir', - 'moreMenu': 'LebihBanyakMenu', - 'browses': 'melayar', - 'fz': 'Zum layar penuh', - 'submit': 'Mengirim Sukses', - 'add': 'Tambah Sukses', - 'edit': 'Sunting Sukses', - 'del': 'Hapus Sukses', - 'close': 'Konfirmasi Tutup', - 'save': 'Simpan Sukses', - 'datas': 'Data', - 'Tips': 'Prompt', - 'Tip1': 'Konfirmasikan untuk menghapus {count} data yang dipilih?', - 'Tip3': 'Nama pengguna tidak digunakan sebagai daftar masuk', - 'Tip4': 'Nomor telepon ponsel tidak dapat duplikasi', - 'Tip5': 'Silakan masukkan nomor telepon', - 'Tip6': 'Silakan masukkan nomor telepon 11 digit yang benar', - 'Tip7': 'Seret dan jatuhkan berkas Excel di sini atau', - 'Tip8': 'Kata sandi yang dimasukkan dua kali tidak cocok', - 'Tip9': 'Silakan masukkan sandi lagi', - 'Tip10': 'Silakan masukkan kata sandi lama Anda', - 'Tip11': 'Silakan masukkan sandi baru', - 'Tip12': 'Antara {min} dan {max} karakter dalam panjang', - 'Tip13': 'Apakah Anda yakin untuk log keluar dan keluar dari sistem?', - 'Tip14': 'Koneksi WebSocket error', - 'Tip15': 'Silakan masukkan nama ikon', - 'Tip16': 'TIDAK NULL', - 'Tip17': 'Silakan masukkan apa yang Anda cari', - 'loading': 'Memuatkan Data...', - 'Tip18': 'pilih tanggal waktu', - 'Tip19': 'Apakah Anda yakin untuk menghapus data yang dipilih?', - 'Tip20': 'Log masuk telah habis,silakan log masuk lagi!' - }, - 'WorkOrder': { - 'form': { - 'WorkOrderCode': 'Kode Perintah Kerja' - }, - 'placeholder': { - 'WorkOrderCode': 'Silakan masukkan kode perintah kerja' - } - }, - 'monitor': { - 'sys': 'Sistem', - 'day': 'Proyek ini telah berjalan terus menerus', - 'status': 'Keadaan', - 'core': 'Inti', - 'cpu': 'Kadar penggunaan CPU', - 'memory': 'Kadar penggunaan ingatan', - 'tality': 'Total', - 'used': 'Digunakan', - 'leisure': 'Bebas', - 'exchange': 'Kadar penggunaan area pertukaran', - 'disk': 'Kadar penggunaan disk', - 'cpu_monitoring': 'Monitor penggunaan CPU', - 'memory_monitoring': 'Monitor penggunaan memori' - } -} diff --git a/nladmin-ui/src/i18n/langs/indonesian.js b/nladmin-ui/src/i18n/langs/indonesian.js deleted file mode 100644 index fa0ecbd..0000000 --- a/nladmin-ui/src/i18n/langs/indonesian.js +++ /dev/null @@ -1,37 +0,0 @@ -import idLocale from 'element-ui/lib/locale/lang/id' -import id from './in' -import menu from '../../views/system/menu/locale/in' -import param from '../../views/system/param/locale/in' -import user from '../../views/system/user/locale/in' -import scheduler from '../../views/system/timing/locale/in' -import dept from '../../views/system/dept/locale/in' -import dict from '../../views/system/dict/locale/in' -import redis from '../../views/system/redis/locale/in' -import log from '../../views/monitor/log/locale/in' -import notice from '../../views/system/notice/locale/in' -import errorLog from '../../views/monitor/log/locale/error/in' -import online from '../../views/monitor/online/locale/in' -import role from '../../views/system/role/locale/in' -import corn from '../../views/system/timing/locale/corn/in' -import codegen from '../../views/tools/codeGen/locale/in' -import storage from '../../views/tools/storage/locale/in' - -export default { - ...idLocale, - ...id, - ...menu, - ...param, - ...user, - ...scheduler, - ...dept, - ...dict, - ...redis, - ...log, - ...notice, - ...errorLog, - ...online, - ...role, - ...corn, - ...codegen, - ...storage -} diff --git a/nladmin-ui/src/i18n/langs/zh-CN.js b/nladmin-ui/src/i18n/langs/zh-CN.js deleted file mode 100644 index ef067db..0000000 --- a/nladmin-ui/src/i18n/langs/zh-CN.js +++ /dev/null @@ -1,134 +0,0 @@ -export default { - 'lang': 'zh', - // 平台 - 'platform': { - 'title': '富佳WMS', - 'tip1': '用户名不能为空', - 'tip2': '密码不能为空', - 'tip3': '验证码不能为空' - }, - 'common': { - 'home': '首页', // 首页 - 'Layout_setting': '布局设置', - 'Personal_center': '个人中心', - 'Log_out': '退出登录', - 'Personal_information': '个人信息', - 'username': '用户姓名', - 'name': '姓名', - 'phone': '手机号码', - 'phone2': '手机号', - 'sex': '性别', - 'sex_male': '男', - 'sex_female': '女', - 'email': '用户邮箱', - 'Security_settings': '安全设置', - 'Save_settings': '保存配置', - 'Reset_settings': '重置配置', - 'Change_password': '修改密码', - 'New_password': '新密码', - 'Old_password': '旧密码', - 'Verify_password': '确认密码', - 'User_information': '用户资料', - 'Operation_log': '操作日志', - 'action': '行为', - 'IP_source': 'IP来源', - 'Browser': '浏览器', - 'Request_time': '请求耗时', - 'Creation_date': '创建日期', - 'account': '账号', - 'password': '密码', - 'verification_code': '验证码', - 'login_rm': '记住我', - 'login': '登 录', - 'login_ing': '登 录 中...', - 'Create': '新增', - 'Update': '修改', - 'Delete': '删除', - 'More': '更多', - 'Export': '导出', - 'Editors': '编辑', - 'SelectAll': '全选', - 'Query': '查询', - 'Reset': '重置', - 'Confirm': '确认', - 'Cancel': '取消', - 'Yes': '是', - 'No': '否', - 'Success': '成功', - 'Fail': '失败', - 'Please_select': '请选择', - 'Operation_success': '操作成功', - 'Upload_success': '上传成功', - 'Operate': '操作', - 'Refresh': '刷新', - 'Closes': '关闭', - 'Closes_l': '关闭左侧', - 'Closes_r': '关闭右侧', - 'Closes_o': '关闭其他', - 'Closes_a': '关闭全部', - 'Theme_style_setting': '主题风格设置', - 'Theme_color': '主题颜色', - 'System_layout_configuration': '系统布局配置', - 'Open': '开启', - 'Fixation': '固定', - 'Display': '显示', - 'Dynamic_titles': '动态标题', - 'crudTip': '确定删除本条数据吗?', - 'startDate': '开始日期', - 'endDate': '结束日期', - 'moreMenu': '更多菜单', - 'browses': '浏览', - 'fz': '全屏缩放', - 'submit': '提交成功', - 'add': '新增成功', - 'edit': '编辑成功', - 'del': '删除成功', - 'close': '确认关闭', - 'save': '保存成功', - 'datas': '数据', - 'Tips': '提示', - 'Tip1': '确认删除选中的{count}条数据?', - 'Tip3': '用户姓名不作为登录使用', - 'Tip4': '手机号码不能重复', - 'Tip5': '请输入电话号码', - 'Tip6': '请输入正确的11位手机号码', - 'Tip7': '拖拽excel文件到此处 或者', - 'Tip8': '两次输入的密码不一致', - 'Tip9': '请再次输入密码', - 'Tip10': '请输入旧密码', - 'Tip11': '请输入新密码', - 'Tip12': '长度在 {min} 到 {max} 个字符', - 'Tip13': '确定注销并退出系统吗?', - 'Tip14': 'WebSocket连接发生错误', - 'Tip15': '请输入图标名称', - 'Tip16': '不能为空', - 'Tip17': '请输入你要搜索的内容', - 'loading': '数据加载中...', - 'Tip18': '选择日期时间', - 'Tip19': '你确定删除选中的数据吗?', - 'Tip20': '当前登录状态已过期,请重新登录!' - }, - 'WorkOrder': { - 'form': { - 'WorkOrderCode': '工单编码' - }, - 'placeholder': { - 'WorkOrderCode': '请输入工单编码' - } - }, - 'monitor': { - 'sys': '系统', - 'day': '项目已不间断运行', - 'status': '状态', - 'cpu': 'CPU使用率', - 'core': '核心', - 'memory': '内存使用率', - 'tality': '总量', - 'used': '已使用', - 'leisure': '空闲', - 'exchange': '交换区使用率', - 'disk': '磁盘使用率', - 'cpu_monitoring': 'CPU使用率监控', - 'memory_monitoring': '内存使用率监控' - } -} diff --git a/nladmin-ui/src/main.js b/nladmin-ui/src/main.js index 0bc4fe0..f4cbc25 100644 --- a/nladmin-ui/src/main.js +++ b/nladmin-ui/src/main.js @@ -33,7 +33,11 @@ import './router/index' // permission control import 'echarts-gl' import 'jquery' - +// add-xy start +import { fetchMessages } from '@/api/i18n' // 有一个API模块来获取语言文件 +// 当前语言,可以从本地存储、用户设置或URL参数中获取 +const currentLocale = localStorage.getItem('lang') +// add-xy end // 全局引入LogicFlow import LogicFlow from '@logicflow/core' import { Menu } from '@logicflow/extension' @@ -100,3 +104,12 @@ new Vue({ i18n, render: h => h(App) }) + +// add-xy start +// 异步获取语言文件 +fetchMessages(currentLocale).then(messages => { + // 将获取到的消息设置到i18n实例 + i18n.setLocaleMessage(currentLocale, messages) + // 设置当前语言 + i18n.locale = currentLocale +}) diff --git a/nladmin-ui/src/router/routers.js b/nladmin-ui/src/router/routers.js index 3c0a61d..84050cf 100644 --- a/nladmin-ui/src/router/routers.js +++ b/nladmin-ui/src/router/routers.js @@ -42,7 +42,7 @@ export const constantRouterMap = [ path: 'dashboard', component: (resolve) => require(['@/views/system/redis/index'], resolve), name: 'Dashboard', - meta: { title: i18n.t('menu.home'), icon: 'index', affix: true, noCache: true } + meta: { title: i18n.t('common.home'), icon: 'index', affix: true, noCache: true } // meta: { title: '首页', icon: 'index', affix: true, noCache: true } } ] diff --git a/nladmin-ui/src/views/login.vue b/nladmin-ui/src/views/login.vue index d723e61..460d711 100644 --- a/nladmin-ui/src/views/login.vue +++ b/nladmin-ui/src/views/login.vue @@ -28,7 +28,7 @@ - + {{ language }} @@ -108,6 +108,18 @@ export default { }, methods: { // 中英文切换 + // 语言切换-x + async changeLanguage(locale) { + // 如果已经加载过该语言,可以直接设置,避免重复请求 + if (!this.$i18n.getLocaleMessage(locale)) { + const messages = await fetchMessages(locale) + this.$i18n.setLocaleMessage(locale, messages) + } + this.$i18n.locale = locale + // 可以将当前语言保存到本地存储,以便下次使用 + localStorage.setItem('lang', locale) + this.setLang(locale) + }, langChange(command) { this.$i18n.locale = command localStorage.setItem('lang', command)