From a2e0c8a9dc82ea628fe4525e2d0993c1576343c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A3=9E=E4=BE=A0u?= Date: Tue, 13 Jun 2017 20:01:17 +0800 Subject: [PATCH] complete --- .../project.pbxproj | 41 +++++++++++++ .../UserInterfaceState.xcuserstate | Bin 27356 -> 33707 bytes .../Base.lproj/InfoPlist.strings | 8 +++ .../Base.lproj/ThirdViewController.xib | 54 ++++++++++++++++++ .../Class/NSBundle+AppLanguageSwitch.h | 2 + .../SecondViewController.m | 37 ++++++++++-- .../ThirdViewController.h | 13 +++++ .../ThirdViewController.m | 44 ++++++++++++++ .../en.lproj/InfoPlist.strings | 8 +++ .../en.lproj/ThirdViewController.strings | 3 + .../zh-Hans.lproj/InfoPlist.strings | 8 +++ .../zh-Hans.lproj/ThirdViewController.strings | 3 + 12 files changed, 216 insertions(+), 5 deletions(-) create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/InfoPlist.strings create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/ThirdViewController.xib create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.h create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.m create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/InfoPlist.strings create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/ThirdViewController.strings create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/InfoPlist.strings create mode 100644 iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/ThirdViewController.strings diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo.xcodeproj/project.pbxproj b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo.xcodeproj/project.pbxproj index 6bb9b39..fa49bf9 100644 --- a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo.xcodeproj/project.pbxproj +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo.xcodeproj/project.pbxproj @@ -17,6 +17,9 @@ 4B32F1D11EEFE8A40066445B /* FirstViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B32F1D31EEFE8A40066445B /* FirstViewController.xib */; }; 4B32F1D81EEFE9850066445B /* SecondViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B32F1DA1EEFE9850066445B /* SecondViewController.xib */; }; 4B32F1E71EEFF38C0066445B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B32F1E91EEFF38C0066445B /* Localizable.strings */; }; + 4B32F1FA1EF000220066445B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4B32F1FC1EF000220066445B /* InfoPlist.strings */; }; + 4B32F2021EF002D90066445B /* ThirdViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B32F2001EF002D90066445B /* ThirdViewController.m */; }; + 4B32F2041EF003E40066445B /* ThirdViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4B32F2061EF003E40066445B /* ThirdViewController.xib */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -43,6 +46,14 @@ 4B32F1EB1EEFF38D0066445B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; 4B32F1F51EEFF4340066445B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/SecondViewController.strings; sourceTree = ""; }; 4B32F1F71EEFF4360066445B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/SecondViewController.strings"; sourceTree = ""; }; + 4B32F1FB1EF000220066445B /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/InfoPlist.strings; sourceTree = ""; }; + 4B32F1FD1EF000240066445B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + 4B32F1FE1EF000250066445B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; + 4B32F1FF1EF002D90066445B /* ThirdViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThirdViewController.h; sourceTree = ""; }; + 4B32F2001EF002D90066445B /* ThirdViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThirdViewController.m; sourceTree = ""; }; + 4B32F2051EF003E40066445B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ThirdViewController.xib; sourceTree = ""; }; + 4B32F2081EF003E50066445B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ThirdViewController.strings; sourceTree = ""; }; + 4B32F20A1EF003E60066445B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/ThirdViewController.strings"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -83,6 +94,9 @@ 4B32F1CC1EEFE7D90066445B /* SecondViewController.h */, 4B32F1CD1EEFE7D90066445B /* SecondViewController.m */, 4B32F1DA1EEFE9850066445B /* SecondViewController.xib */, + 4B32F1FF1EF002D90066445B /* ThirdViewController.h */, + 4B32F2001EF002D90066445B /* ThirdViewController.m */, + 4B32F2061EF003E40066445B /* ThirdViewController.xib */, 4B32F1C21EEFDEBE0066445B /* Class */, 4B32F1B71EEFDE840066445B /* Assets.xcassets */, 4B32F1B91EEFDE840066445B /* LaunchScreen.storyboard */, @@ -97,6 +111,7 @@ children = ( 4B32F1AC1EEFDE840066445B /* main.m */, 4B32F1E91EEFF38C0066445B /* Localizable.strings */, + 4B32F1FC1EF000220066445B /* InfoPlist.strings */, ); name = "Supporting Files"; sourceTree = ""; @@ -141,6 +156,7 @@ TargetAttributes = { 4B32F1A71EEFDE840066445B = { CreatedOnToolsVersion = 8.3.1; + DevelopmentTeam = YP3GK894M5; ProvisioningStyle = Automatic; }; }; @@ -169,7 +185,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4B32F2041EF003E40066445B /* ThirdViewController.xib in Resources */, 4B32F1E71EEFF38C0066445B /* Localizable.strings in Resources */, + 4B32F1FA1EF000220066445B /* InfoPlist.strings in Resources */, 4B32F1D81EEFE9850066445B /* SecondViewController.xib in Resources */, 4B32F1BB1EEFDE840066445B /* LaunchScreen.storyboard in Resources */, 4B32F1D11EEFE8A40066445B /* FirstViewController.xib in Resources */, @@ -186,6 +204,7 @@ files = ( 4B32F1CF1EEFE7DA0066445B /* SecondViewController.m in Sources */, 4B32F1C51EEFDEF40066445B /* NSBundle+AppLanguageSwitch.m in Sources */, + 4B32F2021EF002D90066445B /* ThirdViewController.m in Sources */, 4B32F1B01EEFDE840066445B /* AppDelegate.m in Sources */, 4B32F1AD1EEFDE840066445B /* main.m in Sources */, 4B32F1CA1EEFE7C10066445B /* FirstViewController.m in Sources */, @@ -234,6 +253,26 @@ name = Localizable.strings; sourceTree = ""; }; + 4B32F1FC1EF000220066445B /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 4B32F1FB1EF000220066445B /* Base */, + 4B32F1FD1EF000240066445B /* en */, + 4B32F1FE1EF000250066445B /* zh-Hans */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 4B32F2061EF003E40066445B /* ThirdViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + 4B32F2051EF003E40066445B /* Base */, + 4B32F2081EF003E50066445B /* en */, + 4B32F20A1EF003E60066445B /* zh-Hans */, + ); + name = ThirdViewController.xib; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -335,6 +374,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = YP3GK894M5; INFOPLIST_FILE = iOSAppLanguageSwitchDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -347,6 +387,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + DEVELOPMENT_TEAM = YP3GK894M5; INFOPLIST_FILE = iOSAppLanguageSwitchDemo/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo.xcodeproj/project.xcworkspace/xcuserdata/zengqingfu.xcuserdatad/UserInterfaceState.xcuserstate b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo.xcodeproj/project.xcworkspace/xcuserdata/zengqingfu.xcuserdatad/UserInterfaceState.xcuserstate index 13fd820c94f08e73e111963af0e9d1ae2e529c22..7122a018795b27ab356c8ef8dad18ab947032cc8 100644 GIT binary patch literal 33707 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 Ypt-bJZ;R&=5Q;yg%fz3Kf13^eAM6JNz5oCK literal 27356 zcmdUX2Ygf2_xQUvZBkZMvAHBa}$nl(c0P@I4R|M8OHl zkd~z^WrzqkP?RMiOB@J-ED;nLBB1iW@4cpNpz`(i`Tsv(fB(X#Y2Lf{+;h)8_ndRj zxRnjH*2X54>KFzvh>0*9BQTQwmA+m!aJ)JBJTWgU7z@EdF*z27DX?%X0#jniSPGVkrD5q<24=!auu^OU zR)JMwqp=!nELMv(VB@f<*fi{MjKNrJCN>M3jlF=qh`ofpjJ=92#oDmt*k)`C_BOT^ zdk5Qwy^C$fc3>Z1A7i_*Pq4$-aqLU%d+Z!`3Hu$pgZ+v91t1UsG3W_AL0>Qc1c4Y3 z3lc#pNCO670z<(_Pzmgy5ljFrU0d9hu;X7~}+zH=hd;v0@Mri7 zya8{DFcAX`nkZeAA<~NSMJ7>! zs8BRgR4y7Nsu0zQ>P0qDgJ_Cqs%V<%anaMFxuR!8&x&3ZEfOsjEfKvTS|eI3S|{2j zdRMev^r>i%Xs>9W=(y-h(FxI4qI072q6?zyq8p-{IEDip;v(DycgH<&PuvUl!~5gG zco?q2WAFq#5g&|am3 zJpKayBK{KoGQJFN#oO@Z_*(pJd@KGAz72mD-;VFVKfyo6_uzZ+BluDL7=9c-jen1y z!!O~#<9G18_&t0e{s(~(A_6A}!iDfA{E1#fI1xc82^FCxA_)xeRm6N^HL;dh zN4!OBA+{0k5xa;_h<(H%;tS$S;skMqI7|FMoFgs~cZqw%AH<);U&MV9BLN9X2`MFI zq&L}%>`e|N2a#c{0P3|@}N8^f2uFlj|!j$QXy0*C8r`NC8eRFs5B~_%AmAVCS{@us6xt26;VT}a;kK zTk0hB9d(L2O?^+Dp)OLFsGq4{sN2-O_x9rIuyBWlAW zn3Ta;P{~X#mw4(kb)`1@*v5v6DoduVs=3Zm-&8Ics8(laGqmZta9w6bTzFJ`d`x&o zj5ao0m7$7CkJD%~)R8*J$lh3AENC_6gZW~9m_ODF>y7nc2!>=RhGtxt9*pa1tREJD z^~VNaf!IK75aY(UvmlHG5iCez!AKUAGYW)DhTT#zw!vntZ)!}hYO;>6XtGq7OZ+n} zqbr(gn{?IICY#;dgq}8L+3dxIhQ{H1GmE)ujHS+k00>_To9i$sh7HMok(-gX8R5V(u`Ht46NrjdMn;p$x>>x#{wZ7Ump|M=zTWG05 zeFP*NZ#f)X9Ar>oF<8(_OpQfi8Y~KnW;_@%BVnYBY$XtEEh9iMl6r%$0RY?jF}n1D2`$Uh}jD4~S{w zvFuwedF@}ra`Kq)?27uv|G?vpEpEpqU_mReMyv^I#>O)NOn+to6SxAKh)u%AV=c@; zCYT9il$UFh zxkM`TMlv5s#qm}oKg%WF`V4JF{rHMT=f+2Pl{p=Iq7|FL3}S+YTBD8OCVP0+*dk$T zK8ZbrgiE^JUNNZ+dlDP&n9LmPSuAKd_B1vZdxi;NLK*pTY#ufrdyWZX!kGwe5>2Bf3Ys;ipK|MM6Y9J4E45ZPjd6^+09%L!EnCJY1mqTBi_0ZF z^UTKPri#j1OQsbmOIv+~ebRDl5w-*yK0MFd`OE?1HEfvxBQVX1@js3?E3ma#&?;;t zwhCK~y^g(stzlG*nu%mIOcWEn3R{P*$2MSZVsBv^nHVOPiDTlK1SXMD3>|8-)n!#w zA*nu0iQn4Mw@msOb`UY?AtsqgMNFE(tpI0i9pPXfWl|95ROgHhpHvxc zE9_XU6WF&8@yJQ+JH#VtOghISjzQ00X9av556)v3oFDv%UHcD9a~->Z-NbJ3OQU5n znJi{7w=^SK!lNT1qd9U!M7I;;c-ezX3RK>5ep@2XMv419wKx zNoCK2ph8XD}t6O3W2HA)hIZP2#jEGU@ zAcnDnPaL2NK=DHqC;_F20wqjoR|*UR!<{Ew4n{dYr~;4u2MW}JI#3U6JOzd@Lz!XB zaE=1QTGVPaM}nyMb`msou!aNAiD1&-kYFm9-Yp4cfF}?MW-%j~QHTUp4ie1fs5^%# z@0K5)1G2nyKlQ zA2xPi>>$S5VC&xyV>@^c3u*&9z)r@>jBNw&gAbTG=4mH873}6!_G9IeasLyQJ&`ls zi_k&l?=8*l3|7uIjo|xo7HAjy2JGX}s4bUF|DT}o|I#$>iWh%s1)qV#h?&4a@HsdH zzF_JZ8`HpyTLF%Mqu>}g&e)m98HSm|>D3VaP~tev2&b2bM*h@dKnJ>rM&vnc8jnov za*3jwrY1X59Jc1hq6&MBrTrYItwkr}?wdO-5yxS{V5{Pflc>3HjB-Y#To|z{a0m08 z1gEf|R`4Cu*a}WFP25zZnI%PL4qeU^&^KA?8hNz>egGHRz&UW9X=YlOX$}CFz)zU0 z4g3f$Gvk>FZQu&H%1mS?F_T9iFr79MryEO(IEcoIntE$fGk22f-$@{+0Xw?|rd5yP zm7!o;ECDy$I2*z-_;28j)8Kc(J!T3sm6>b`Oq;%}vm?YH7};Tx@P^ZJh;gPv4ARgABGn3Ap&N9E9zz;=QxF*hLz=90Xctt}H4Jl{*U<5Zd4ie2 zOlM~Q8=ERH{rz7~&E7BC(oQ5OgI-7qz@E^PnaRv*gWk}Gd6IdGQIrU5S|ad8x0FDx zg}>Xz{EEQ7uwS{Pj}u2f$dt=r0PN3E`q9mh(TF(Y!Oo6J1VU#G3xi=eI-A1~7z*Vu z3@Vtp%rnfh%sgiPN*Do^PzBX6l6j7Ko>{^yWma*F9qxptFnPzuYj;%$58HR%|8IL5 zS*A`i)Yp%;2@`TqF%crup%o@EFSNoG=EXA=-1uiUbV}aPoR)B51l76FH zGV9+`(n{n5%S6Jr2A#Yj>be*Za5azH+H%R#e+@TF{iD1NjZJps;%n@R^Ew{q_2rTU z{~FF+{DGVmQEQ#do!TS1L3SgL?3?A1SN}C+oqaq10pG1Wz8lLW&pYr%yi;p!x0IB; zsEnv+Xi#$APvjtIRHD@2}CG-9@9J}3WPDp;uBl*F<8BgKO;SQDzLtDr>3gyhC zr+9>Sl}jG~*Qi=oVXb#I4u0T~`nX)O7xrn2!zUl#~bd^VRPr0Pcf#`o-Dmm+~e@Ni#Jl^~MSMMw&3V2r(yan$fR}}mW z-iE)!JIn#*Gv*-k`3iUs{()_Te=&!cFOa+NFn6N!HQB9oNZB}!(nSsr1qyIH@TxsZ zp&e6UM}ZQHy%0s0EhDl~bSk~JR^QmzY(XBSK@W6tIG>z*aVM$EJ=_Lf7}BCr1gK*) z(NoJ>qEzvU0M*p?Nr-5Xdv}u%d5FZ=Mv;^`${a(JIL;_IV7H1xd#cJfV6l;E4ptnB zpLD|V5%umCRv%Gc1S^0!!F+{aeJ#Mc$*x*_m4~H{RUugFD1=vB2VOy7XAihPT$pQA+|&|oF*;YEQdH9|q%k5Z zf;5)-iMfIxU2UIfPV9zL?W_^QEkRsVR99f*MB}>!HbFEI0h`SH!dyeZer-o<=g~f< z_T`M{mLS$?ii~Jxx3Ff3ow*uHc#|ox4>Q! zy^Me@WNtIRBVcy~V7Gz|@v%c&B4ZGH#iRH|Sxc-+-F2EvMa#Q|wnDTLL0iq-WBx$U z{uH47Rq@J)-}2Lpj*CUGG|^7u{*5tGOQTtMmP!OPa;!&@TNYBa;hxM=m%p)H!2NVEggos6+x zbf{aPUx*GPphsCivVh`%(gM&+o9@*Zh2>Q7J4%J3Kb_#d79kgPH{5?(^gTCE7W80& zYnO@An|6PRf=F?ZXdPqXJ9p7V(UorDTowH+z(HwW9-VM5y>oik`gW{hI|z15)U6yA z-4h`>EJEHB35(*3Xl^oLZhwAo^|?hnlsL5@5xcG-j^iY9$l=J};@OH*Ebw;nx8QD^ ziedpu7>b-2K9LK#gxA_?P~K3SS{s?6(M5&F#j0b%qtaut!qcOoRpC(@ojNKrN*kG# z5!o(vaWO9C#z2VqwBj-r_;O03BbmXWB{+MYi*O6he%u@R&TtA?|_lG_3 zUU+Ym+O!*Y!vl~%-!ieGqQ1Jwj*=~^?AC^+At)QoGSO7gG=>Ge8H`4Fv%vo-J^&BI zTu~C~AUp^K7xK({M>7M;dTJVjAa!|GQc>G%kpKyDKlS20%ybfL=Ii|E6kHD3j1Nv{?KhpDzt8ooSzDO4IZN;Nl5a7H-@xl@zFL;NY z_Fp%Dy7+L6oax*6U?v-$gr_6kM`c?O)9$sTPu!2)Li09pd;hL@unVc zz+|nsjRlHUd>jkHk%JrYRvtRMBWfTo-Xr274jAL{$1&OK_yl|+J_(;MqVJQ3 zH1QEaEnZPe9TYq%^E#M#1QA^k+(SZYNHhZZh+=-Ks!V?!XHx$rohD^X}dNlhqW zspFvlB&(v%T05y+;?)&^5lNt0Aq(??5s?qA%8oKv(O$APa2~TphsR8 zcH+pqczANV@Q?71S)gY@4hwS8{!8OSIT%(DP|PP6JNoa#4|do8bNmqg1q+NU$YVi1 z*Iyz4C`|Y#Sbd3q(+yN?9exu3j)`GG0SgKlMf)s|;AfEbI*b3nrSl?xT}8eWR#ZCb zfB+QX1euuh&+32HQ?yv(->dh)L1F5s*!B#0mmaQe?j9(Yww=^MqAkjjOK(D=rm`6& zl%vdeH%2tX++0;BZm-(dOfeGTdDl*OEMQ7V>VRmReh_ z&3>#;-+ny;`VR<1&&}4!7BuSUtlEm2M)aK%Zh>h*0wJaD5-vd=v3LaMb+8C-%wjzU zEW=h?eIzJ2B(%Hq;PwIALgbyHz{#Zgjq2rvp*Pz6;pm<;BD z=fP@JFSQfw5~vJ;@QJ0if3|-Bv^mUzU2`74Frp)IArrCRa{N4g5gU%^%zblglpk>} z6%R>~pYSXAoA}T8FT5-%Ws}OY-HigVn;1_Pj6(5P zlnT=k%pv>)bFkunqf?ppBoVy{lu5Cg=tJ}+`Vj#{e_{X;$bu>sRI>n?N~2j&!vbW& zTUQfu^C0?hrU?rkW5HM!)G{K}5D6q?n2kiMEEJ*efen<=gC6ADQ3%6Q-BGwx zR8iSkUw{;93fIX|)#LQCJW{RF#H%#X$WT+E!%U<$K0Gc)mmaQ;iB@OCsxl*Wv09W7 z)fIp+eCGhg_11CCmd*?!E;qYf=Ue_}REZx45S?CZ6N+rM+R6&M9%W?n`MZMpZ+}-& zi4uFeyz*&ji9}8ebevWMw5TKFI9HWAcB)`|5;4g3B#;?r=`fFp1VV=etsxSLBqEte zAySDnBAv(}v;^9r$V{ncfsF+XEI<~godu07XktM#3&yV@vao(cHlZhSh+M)z7}2+U z7EEAJgnl9mB`ox2VHFEUvv3^u3}vJZLsLSuHB?kuYS9S`eKU`-O~|VlZ$*)Fo1L>} zh18IARMv!2V>k+QyC%g=R+I`hiEGx8qa^_B049Lwi4v(%0nK20MZ=g(OJ#FS4VU8X zv{p`wjjEumHT6z#hjaO1oqZix3n*AQU!-?>BUc|);iz?LG*nEoHKU~N0e_dK^iWnG zF@hMwt-?s6oESw^5S2s~QB7Eg(FEfANi3Mmf)*A`VZl@uAanh37BDPeSulMKVI>|T z#&Wbr|7=79F^)6SXRzQ!7Hs3`j!4gf>nx;LNTVI17+TAtS7f&!LC2jw1)6habUCUO zL-9X5sv+ab+`7CNY^k?4H*zb)Et&8FH7ems!)*1!cXM-P9Rf16OE*bR)T6x`ji;fo zECKD0IxEXi8JXSEh>TlD%AnLi@~#WajqP~OK{`e}PA~+Exf0VcGw}p56KPydlL`yK z%`lIfmBgopM_)jUkE~B@65jYW2!82@Ua??4DrW{yu;7I+i6@Dt&=|9cImFXwoaw}~ z_&{PFF~1BQRBEg3miiK8xgy+$RS7|RK_vxLx7SJudY;Q*aGvEbWE(qX%#Agl1<$i! zrUW}qJWsrU27HltiFlb?mPqJVh3udukZn>mA`v9$&u!|7FT&88FjSpRQ>_lYV2-PHlURuJ5l%*_q3W*e= zm1skFFGsAna%ksB#XJryn9Z}|(~q#x1(o?afwFmeBRo1OC)iZ&4i~Gvjab9^P9E8& z=i~Q$=iEhoMvz9GJ4!7D64 zNApF?iSH20o@T*fo`7Ucm6^$#34ModDqMFPB#(dD{;!8bKehhyhGW?NC;Qi>bTSjf81H)C}X;$#pR%n5N) z&I05=dD9_tHwpMCIDEoc@K%QeB~_dRWdX8pk?ww!z6+P7voFLQ5Ohh&^gVeI%T^4L_BXwjJ3wE%m z07Nl@*Y1u&wtu?U2c+Czw#cz81~Q+6ZzPf1-$t59jF~J?krgc1)!`o_tI67bxKYVEvYxb&4dggXLn7n( zBbGZy?_t4V793$DEI7)EIKPJGN|XfHegOe0$qugy7s?PEvz$Oq!DJ7|o5-o;G;AZu zuwXX}KH)sGpE8rVGw99w9%&gvTcTr8&^At`L4msHcs^9!l`UtHPZA4}T0v&}Ar|aK zY{@B?Il{E(Vo$V@&ydfuU>^%U>kv}pbL0z1z>;Va?r$ZLk$HfdfULf&)F|hQvypB2 zcZo#&nU8#hMDEd663O3#tt1k>pCi-M+EKq+E=lBB^PviVuIgW~Mz!d?UW2Urh>j}O z^yVgHtTb7x+EqT;%Bg%7e8KDd|9!__v~|K8Eltf0+A*m3wb8=)ZEf`lk04#gp`L6N z4)tFMtF?|}()BE=|C#2rA2m^2fhWp)=-7`N$+x@X{jG@ix3S;^&->RLyuX9n=19MM z)w%v3kbC|q@9!n|k^9L5 zDqBU7t+{Fpcaei*FB~CHpuO-=c{KSI`8774L|PsF|BeY{!S{}7oZ_Z|)cZ*kav57@ z2~V#Mk2j#CXMquaATJ`VuHjOxv4oJ%bDQP4Qu zZeDZ|gM?}~^I;vQq!`qR(^2gYsX>C~x*|M%ga&$0b7952dG5t;Rm-r_mY}@Iy4NQYyP$EZ4|PW6hOl}r8xhJWoSlEMw?wyl+ntIj=&w12*7P_*Ki)bQ75G>}vw3Yzg z1MV31C2FBluUDv7S!6dtF=vg6QNOMZiomq`Wlp_cqgp!_ppAu62aYQ_99L1RStw&s zO`M~Wky=Bo?>ZVRrQT!~v9Kr7@@XwRWXyrsW@_sLO}BAPy|||J-#cNkliI~G?R(Vw z)CbguEc9WaFAM!x=)Z#ci29h?O?|?`UMy6y(9FUjj%@?lwXtyRj&Kk_KD&qxZvZ-t z|4kE~ARU)YSgJcZJF4#-m-%$Oh!E2J95efjLT9>F)IsWV>Jaq>b(lKB!rm+Kq!c9hw(~Q81=p?AC=k_r==W!0j4&o+pTT^q z;`XYJQiLn(_&iM*-OU4 zh|XSKw71jFr~PPjG+Rac)4k~4bRW7ejhI5kLN$vHj8MbEC>BPqqLS$WL_XG!9>g&S zlKn{i&Oshh$lq~*$i=Nn6ADCg(RbvG5>{<)(N^?_-RR85Q>T|GLwDoztqtyb|WgifYYTj>-QCb2O2 z5xmDck?0Isiz2D*x3QQlP0P`fOl&y1#|eFL%s7iSAcp`yV?CWi=Q?Jc%EB}jrmv)p zbRG%<^`i?|n889V(ywSWb=*D~)-A%Y3!CbWprvAok9=g$&<-b zsL$U82Lc8S3Q!9)9f_=Zx}1es%(O0M9%iPih=sI;9*vG`Fq^aT;9wROluOhd64(i+ zi0;@yaO(==Sg|Ko(2vn$=~}vug?bhuTIaDazr#GF8+fx0<~Yncl`0?%CABJs#Pa(7-|?vKq^Z#&GKspqAi{1}VZwNy12ur;iIy zO^)#uN!4692MxpT(*Pu81OASnDIKP!^U|HsOFxBV%pCe@dM^D8 z{VY9?o=-nVKhMHqUeuJZu#|;mEF8i@wBo~9IGlweSU7Sm{UZGmwvk?d^~0~DzhA^Q zqHiy<5G`>9r>ZIu1EaV%_q`lxE%b!H=8qFU4#wn!ORaDv5E4I}%+lHIHv5BGq}`Tn zw;wyW0d?V(584h6DaY@Hstw2x3Ul04Ot}wxR)T8Z-zO?{a#^HEVy? z-Vq5qE)vd#9vqtUVeDjG;SRRjnj3^1PkJrAZW#+l31T9X-q6O$g$LG+yNV`W(;m~L zH-ZbxIt(Uy3;hmKSM=NTRu)#X(9*`yn4={p8ohWFIf-mQ_a<7Z1%ZqNURhzsn|86A zWw+IJ_|P4z|2~aUhXnJP-o?V2cI%Da4K6IFKcPRR_popb3&*msz7wPU^uexn8T~nZ zh=o=b6>}p&#f1|)^amHx3QTJf>|)25$7pog?W}I6zoNfpVJ(YF!1?q)!Acc+&YalQ z%A-%wXPkPTrI9g#Oz{TCz#TD6p?gD`Q};_WvMJi=A8BM&*jb3~!$h){ld&8ndv(yO z-F)IsBOPqnuj6eOedg5Sp&S_c27R-bm#};qj32uBG7P0dBw(pT7`o6kg~%cb(Dkh& zP=K@og+<2@V~IKx@mq_oX5E9XWj#O~L|3yS=Ra{AUCMd^UCa6t@}K{TeB`%@JLp2z zaCGr%0lHfCWpX3AiTnV$B|alRN0+D`A&-%#$ur~+-l z_t7P$$ar#lywNWuQxt zONfiyWv|O|mlG~uyL{Wj)?-SKX+4-8(_Ot>2e=M&4RQ@}-S2wB^?TQ|uIF4YxL$Jo z)%Aw!E!W$wcUX1eShqQD&$}&fTj93WZN1x@ZX4aUxovmb z>Gr1v{p#-S?(g2qy|;T`_h9#A_e}Q!_mS@9?xWl*-N(95bf4+|r2B05r`?}% zpXdIZ`%?F1?rrWX+*i53?!Lx-o%=iPAG?3&fqV4zPao~ksmC&pH$2vPZ18x?V~59Hk3$}ZJ&t-D z_c-Zs%Hw;FvmWO>e)YKSal_-57>Y$=Tuh34iUY(0!~?}a;t;W1tPsbG6UE8mRB^gk zE7pkzi;Kl0#TDWzu|?bykT?dy+pT_oYDUAr(s{Qkk@$ zG(g&48YopslclNBbg5RVlMa^Zr6tlb=}_r#=}74)X{EGU+8~`Iog$qkWu(tYpOwy& zJ|}%ux?1{{bdz+8bgOimbeHsF=_k@X(tXkc(qqyS(yyi8N-s!nNbgGjkp3mZWR%QB z<|=cSiDkWIePn%Q0kUvegiI+@%Ti>yGNUYCRvij>}HSzLtI4Gr#BXo+EpX z>RH+IV$YjB|Ll3+6L^X|2~Q7CiKood)6?72*Hi0h_iXjt?|H)W8_$!Tr#;Vj{@{7r z3-cnpC@&W;S1(_$K3@I2`g;X=g?P!m6kZ8lMz3*Rlf7nmJ>~V1*Q;KOy_R|{_gd+- z+UpIkHC~&&c6uG~I^uQF>zdaMuUlTXy=iZmcW>_yZ@IU^JHlJ#y~2CF_jd0Oymxtj z?7i1}zxQX}pL-woKI#3dkDHH|Pqa^x&u|~R&*MIf59>3-XTHxOpCvx8`Ly~h_gU%l zmd_@iEk0X)w)t%L+39n|*T*-@x7l~8?>660eE0h9_dV!)$oH`CdEcLXZ}{Hwz3qF) zkMwi(bN3VbdHQ+#`TF_$h4>}28{>%K^{P+1E@IUB($p5ha zQUBxqC;Y$m|JMII|I_|w{D1Jj;Qyol75`uSulwKZ1$v2k5xuBh^Ls7n^;)miUdwxD z_Acmc?p@rwwD+&Q|LTMFfqn2kt$jB1d8^N+K3n?g`pQgX@P4qLxSzCN&wgJ0 zR`lE0Z*#x5`@Iv;7{CNf4|pPAR{y^J!}^E!SN2!;|ET|={)hV??SFhg&48u>;|EL} zFgegSa8O`yU}#`i;QGMrfja}=5BzZ8sDX6@Z3D**Y#ih=$a|3QApb$V2kjd4`JgWb z9T{{i$R6}~&{IKkg60N28#F)Ym7qmIOM+etY7JT*^nTF!pc}!xf(Hgi1jhzv1{;I( zgA0Pq!NtKNgGU8d23H4<4jvOcE_ibAjNtjfuLLg&UK0FTaBJ|I;B~6uc$) zz2HxS4+WnLJ|BEB_{ZR%g0BYu7W{kg-QYih{|doETtZ|ay+T4l)FGOX=#bcu_>hc{ z%#f^*?2w!gLr8H*RfsKQO32KRCqrh3JRR~($jc!MLtYJ89I`ZIS;!k9n?iPk>c%Sg#aCx{QJUm<#t_e>I zFAA>-w}y`muMeLPJ|q08@E60Egl`RhFZ|2!E8%y-{|LVy0V9YAD#A0uJHj`jSH#AM z_apX1?29-M@p;4-5no4~j5rl>CgNPg1*MzPOX;ojRSr^yDCNp)YM@GuE(q7DvQ@dNJXL|JNL8vDsv4`RS2d{Ys%F(hRf}qxicw8h%~dT> zy`|ctI;r|q?V=u_j#E!kGwLVR NHSE^rEuT^hQzpdV;-l2X^{ek*=q>LYU_%OcAoDYQiII~dmq#9s{8K|}+%+MZXibtPRfB4{ zGzLw+rchI?Db+%@xfJ%^y*Cj5VehF=k85J2Bg1-iz5Eb1>$M zn4>XY#(W)fGUimQC^jUvFm_7p%-CmQUygkxwk`IJ*bT9VVh_iD6Z>84>DV)|mt*h8 zfjChd5l6+j#JR?~$BE-)ah`GBae;Az;)3JkaXaJo#eEg`ZQQB2GjZqQF2-GsyBhaL z-2HeMPsCI4J>uQsJ>n(t{o=LpPsDGIKOX;Uf?GmRf-)g8Avz&8Av0k}!tjLhgvta< z!kC1y3H1r%5}FbwB+N~im+)M|iwO%7UQJk%uqArxVX6o=?1#_*3G~iN7Y^OuU_VH}TITS&~YshKS|z`yg&J1@)yZRk}oFTO>s%-of4Oln39r`o|2g|IAv1G^pu$?Po>OBS&-6} z@_NeJlnp5xQ$9;Mo^mtgPO5Ke|I~<7RjMX6IyEJ=D0N7xEp=k*^3>N;kEUKp{U!C+ z)SIclrQT12X+#>8CP_<3OHH$;+0z!LElK-0?TfUdX~4;ho`|F(^ZwVaOPjF(u>Gj8z#QW*p4;D&w1slNqNn zzRx(DaW&&w#`TO_8NX-T&Gtqs#gX=Aks+9a(}Ytovv#oAKsC~ckAu5Hqe*S2V< zX&LQw?E>vO?VH+7+PAgav^%uBwR^PtwV!Ff)}GX!)}Gb=nMr2$%=F6i&GgTV&a`Dt z%xuY=mdRu;$Xt>6M&`QAH#4_nzLU8r zgF^@J7<^>#PlJCSe0T64gYRe4*{<0h*^=zw?5OO-?3C>E?9A-k?7ZxP?4s{;2fv*%{d%YHulrR;^-tFzZ+ug`ufdvo^I>}}cGvv+3ynEhM!eLc{N z^n{+$OY}YU-g;ksFMS_zdDF6I1`^K;I%Tq@Tyw@+?BZeVUuZfI^~Zgg&3 zZengqZd$HBw<5PTcYN-Q+_|~)a-YwADR*IRYwq&gRk?5EuFYMadm#6c!PPL(pf*Gq zVhr(yBtwc}u)$!+HxwF*3>AjahB1c63^s$^&}^7sU<|VjFB=vamKa_$tT3!LtTC)J zY&Cpf*k$WSnGdF-|p3H_kLZWt?MNY+PyFWPIEBj&Zy3J>v()y~cya zFN{Zx$Bk!=7mYs}e==S(UN_z{-p<4F-1B64o_XGRz4H3x1>_CL3(JekOV7*98=RMu zXUr?f8I%_&_x@5X+x^4R1bjNhBfG+SV@Ga<7(6^v}!N7vxf~bPnf`o$Pg4BYHg3N-f zf{KEcf|m;3D)^w_bitK^8wI}=+$s2@P*g}3x)izR9sY6G^}Vu(PKq*MGZxbMXQQ7 z7i}$iw`gb4Cq;XTjuo9K`ljf+qRT~Bi>?*jC>~H8R-936DYh5SE}mOFulV`mmx>n_ zFDhPI+*-V%cy;lb;$6kNi}w`oEB>tb^WwwB$BIuBe_i}-@u}kPi|>|rm4ufVN`{r# zN@kQSDA`=Hx8!iik&@#jr%HY(xmzkK#Y@T3o~6E}y-NF*29^#g4K58WO)sq~Z76Ll zZ7!Wy+EO~TbXMszrSnT)D1EtfVd=`!HKprHH5kIROHY)ZEB&$br_!sX z*Gq4e{$6^wj4qRw^(_l58¬rYKXEMV3XC4K6d4jVP-uvy_b~t1GjWjVo&`d#-GA b*(YWD%LGps2GO;r+z)+A_;ma(JMw=3URIM0 diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/InfoPlist.strings b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/InfoPlist.strings new file mode 100644 index 0000000..b7fdf33 --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/InfoPlist.strings @@ -0,0 +1,8 @@ +/* + InfoPlist.strings + iOSAppLanguageSwitchDemo + + Created by zengqingfu on 2017/6/13. + Copyright © 2017年 zengqingfu. All rights reserved. +*/ +"CFBundleDisplayName" = "语言切换"; diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/ThirdViewController.xib b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/ThirdViewController.xib new file mode 100644 index 0000000..f978fdf --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Base.lproj/ThirdViewController.xib @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Class/NSBundle+AppLanguageSwitch.h b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Class/NSBundle+AppLanguageSwitch.h index 6889185..dcf30c6 100644 --- a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Class/NSBundle+AppLanguageSwitch.h +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/Class/NSBundle+AppLanguageSwitch.h @@ -9,6 +9,8 @@ #import //语言改变通知 FOUNDATION_EXPORT NSString * const ZZAppLanguageDidChangeNotification; + + @interface NSBundle (AppLanguageSwitch) /** diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/SecondViewController.m b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/SecondViewController.m index 959ba5c..cae23be 100644 --- a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/SecondViewController.m +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/SecondViewController.m @@ -8,25 +8,43 @@ #import "SecondViewController.h" #import "NSBundle+AppLanguageSwitch.h" +#import "ThirdViewController.h" @interface SecondViewController () @end @implementation SecondViewController - +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} - (void)viewDidLoad { [super viewDidLoad]; - // Do any additional setup after loading the view from its nib. + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageChange:) name:ZZAppLanguageDidChangeNotification object:nil]; } + + + +- (void)languageChange:(id)sender { + if (self.isViewLoaded && !self.view.window) { + //这里置为nil,当视图再次显示的时候会重新走viewDidLoad方法 + self.view = nil; + } +} + - (IBAction)closeAction:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; } - (IBAction)setupChineseAction:(id)sender { - [NSBundle setCusLanguage:@"zh-Hans"]; + [self showHUDCompletion:^{ + [NSBundle setCusLanguage:@"zh-Hans"]; + }]; } - (IBAction)setupEnglishAction:(id)sender { - [NSBundle setCusLanguage:@"en"]; + [self showHUDCompletion:^{ + [NSBundle setCusLanguage:@"en"]; + }]; + } - (IBAction)currentLanguage:(id)sender { @@ -34,7 +52,11 @@ NSLog(@"当前语言是=%@", currLanguage); } - (IBAction)restoreLanguageAction:(id)sender { - [NSBundle restoreSysLanguage]; + + [self showHUDCompletion:^{ + [NSBundle restoreSysLanguage]; + }]; + } - (IBAction)strTestAction:(id)sender { @@ -42,6 +64,11 @@ NSLog(@"测试字符的结果是=%@", tes); } +- (void)showHUDCompletion:(void (^ __nullable)(void))completion { + ThirdViewController *vc = [[ThirdViewController alloc] init]; + [self presentViewController:vc animated:NO completion:completion]; +} + - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.h b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.h new file mode 100644 index 0000000..569e076 --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.h @@ -0,0 +1,13 @@ +// +// ThirdViewController.h +// iOSAppLanguageSwitchDemo +// +// Created by zengqingfu on 2017/6/13. +// Copyright © 2017年 zengqingfu. All rights reserved. +// + +#import + +@interface ThirdViewController : UIViewController + +@end diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.m b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.m new file mode 100644 index 0000000..28ed2a6 --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/ThirdViewController.m @@ -0,0 +1,44 @@ +// +// ThirdViewController.m +// iOSAppLanguageSwitchDemo +// +// Created by zengqingfu on 2017/6/13. +// Copyright © 2017年 zengqingfu. All rights reserved. +// + +#import "ThirdViewController.h" + +@interface ThirdViewController () + +@end + +@implementation ThirdViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self dismissViewControllerAnimated:NO completion:nil]; + }); +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/InfoPlist.strings b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..649d73f --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/InfoPlist.strings @@ -0,0 +1,8 @@ +/* + InfoPlist.strings + iOSAppLanguageSwitchDemo + + Created by zengqingfu on 2017/6/13. + Copyright © 2017年 zengqingfu. All rights reserved. +*/ +"CFBundleDisplayName" = "Lan Switch"; diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/ThirdViewController.strings b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/ThirdViewController.strings new file mode 100644 index 0000000..f898e75 --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/en.lproj/ThirdViewController.strings @@ -0,0 +1,3 @@ + +/* Class = "UILabel"; text = "正在设置语言..."; ObjectID = "yTu-Le-1xE"; */ +"yTu-Le-1xE.text" = "setting Language"; diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/InfoPlist.strings b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/InfoPlist.strings new file mode 100644 index 0000000..b7fdf33 --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/InfoPlist.strings @@ -0,0 +1,8 @@ +/* + InfoPlist.strings + iOSAppLanguageSwitchDemo + + Created by zengqingfu on 2017/6/13. + Copyright © 2017年 zengqingfu. All rights reserved. +*/ +"CFBundleDisplayName" = "语言切换"; diff --git a/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/ThirdViewController.strings b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/ThirdViewController.strings new file mode 100644 index 0000000..4f22d8d --- /dev/null +++ b/iOSAppLanguageSwitchDemo/iOSAppLanguageSwitchDemo/zh-Hans.lproj/ThirdViewController.strings @@ -0,0 +1,3 @@ + +/* Class = "UILabel"; text = "正在设置语言..."; ObjectID = "yTu-Le-1xE"; */ +"yTu-Le-1xE.text" = "正在设置语言...";