iOS之多语言开发
<p> </p><h2>前要:iOS多语言开发,可以分为两种</h2>
<ol>
<li>系统设置,通过在手机设置中切换语言,进而改变app中语言;</li>
<li>app中手动切换,用户在app中,手动选择语言,进行切换。</li>
</ol>
<h3>一.添加需要的语言</h3>
<p>不管使用哪种方法,都需要先添加语言,这一点是相同的。</p>
<ol>
<li>在项目的project中添加语言<img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918150141542-178224723.png">
<p>添加完成后是这样的</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918150216079-191015394.png"></p>
</li>
<li>创建 <strong>Localizable.strings</strong> 文件<img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918150434177-422084893.png">
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918150649399-35946094.png"></p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918150718856-2062357523.png"></p>
<p> </p>
<p> 文件名是 <strong>Localizable </strong>,也可以更改其它名,后面会讲到<img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918151021858-1355259992.png"></p>
</li>
</ol>
<p style="margin-left: 30px">上面都完成后,项目是这样的<img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918151519449-1786084204.png"></p>
<p> </p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918151529265-1931319044.png"></p>
<p> 在每个语言的.string文件中,把项目中的所有需显示的文字,按照key-value 的形式放进去。</p>
<p> 至此,所有的前置工作都完成了。</p>
<h3>二. 代码部分</h3>
<h3 style="margin-left: 30px">1.使用系统设置切换语言</h3>
<p style="margin-left: 30px">使用系统设置切换语言,比较简单,直接上代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> NSArray *array = @[<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">中文</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">英文</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">法语</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">韩语</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i=<span style="color: rgba(128, 0, 128, 1)">0</span>; i<<span style="color: rgba(128, 0, 128, 1)">4</span>; i++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> UIButton *btn =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> btn.frame = CGRectMake(<span style="color: rgba(128, 0, 128, 1)">100</span>, <span style="color: rgba(128, 0, 128, 1)">200</span>+<span style="color: rgba(128, 0, 128, 1)">70</span>*i, <span style="color: rgba(128, 0, 128, 1)">200</span>, <span style="color: rgba(128, 0, 128, 1)">40</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> btn.backgroundColor =<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>
<span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">第一种:使用系统设置语言</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)"> , nil) forState:UIControlStateNormal];
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)"> forState:UIControlStateNormal];
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">12</span> btn.tag = i+<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 128, 1)">14</span> }</pre>
</div>
<p>直接使用 NSLocalizedString(key, comment)方法,“key”就是Localizable.strings文件中的我们设置的key, “comment”写niu即可</p>
<p>如此,只要在手机 设置-通用-语言与地区 中,切换语言,再打开app,app中文字就会切换成对应的语言。</p>
<h3 style="margin-left: 30px">2.app中手动切换语言</h3>
<div class="cnblogs_code">
<pre>- (<span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">)viewDidLoad {
;
NSArray </span>*array = @[<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">中文</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">英文</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">法语</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">韩语</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i=<span style="color: rgba(128, 0, 128, 1)">0</span>; i<<span style="color: rgba(128, 0, 128, 1)">4</span>; i++<span style="color: rgba(0, 0, 0, 1)">) {
UIButton </span>*btn =<span style="color: rgba(0, 0, 0, 1)"> ;
btn.frame </span>= CGRectMake(<span style="color: rgba(128, 0, 128, 1)">100</span>, <span style="color: rgba(128, 0, 128, 1)">200</span>+<span style="color: rgba(128, 0, 128, 1)">70</span>*i, <span style="color: rgba(128, 0, 128, 1)">200</span>, <span style="color: rgba(128, 0, 128, 1)">40</span><span style="color: rgba(0, 0, 0, 1)">);
btn.backgroundColor </span>=<span style="color: rgba(0, 0, 0, 1)"> ;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">第一种:使用系统设置语言
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">, nil) forState:UIControlStateNormal];
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">第二种,app中手动选择语言</span>
<span style="color: rgba(0, 0, 0, 1)"> ) forState:UIControlStateNormal];
forState:UIControlStateNormal];
;
btn.tag </span>= i+<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">;
;
}
}
</span>-(<span style="color: rgba(0, 0, 255, 1)">void</span>)btnClick:(UIButton *<span style="color: rgba(0, 0, 0, 1)">)btn{
NSInteger tag </span>= btn.tag-<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (tag==<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">zh-Hans</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(tag==<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">){
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">en</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (tag==<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">){
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">fr</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">ko</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}
[synchronize];
UIWindow </span>*window = .<span style="color: rgba(0, 0, 255, 1)">delegate</span><span style="color: rgba(0, 0, 0, 1)">.window;
[UIView animateWithDuration:</span><span style="color: rgba(128, 0, 128, 1)">0.4f</span> animations:^<span style="color: rgba(0, 0, 0, 1)">{
CGAffineTransform curent </span>=<span style="color: rgba(0, 0, 0, 1)">window.transform;
CGAffineTransform scale </span>= CGAffineTransformScale(curent, <span style="color: rgba(128, 0, 128, 1)">0.0001</span>,<span style="color: rgba(128, 0, 128, 1)">0.0001</span><span style="color: rgba(0, 0, 0, 1)">);
;
} completion:</span>^<span style="color: rgba(0, 0, 0, 1)">(BOOL finished) {
exit(</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">);
}];
}</span></pre>
</div>
<p><strong>每次选择语言后,保存到本地</strong></p>
<p>这里用了一个宏:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">#define</span> KLanguage(key)[ pathForResource: objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:key value:nil table:@"Localizable"]</pre>
</div>
<p>"appLanguage":将选择的语言保存在本地,本地偏好设置保存用的key,</p>
<p>"Localizable":这就是我们创建的Localizable.strings文件名。也可以用其它名字,只要与宏里的保持一致即可。</p>
<p> </p>
<p>每种语言对应的字符串:</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918155808591-1887501332.png"></p>
<p> </p>
<p> </p>
<p>首次进入app,使用系统默认的语言:</p>
<div class="cnblogs_code">
<pre>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *<span style="color: rgba(0, 0, 0, 1)">)launchOptions {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">首次进入app,设置语言。自己根据实际情况,设置刚进入app的默认语言</span>
NSString *currentLanguage = [objectForKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">currentLanguage) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获得当前语言</span>
NSArray *languages =<span style="color: rgba(0, 0, 0, 1)"> ;
NSString </span>*language = ;
</span><span style="color: rgba(0, 0, 255, 1)">if</span>(){
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">en</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}</span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(){
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">zh-Hans</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
[ setObject:</span><span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">en</span><span style="color: rgba(128, 0, 0, 1)">"</span> forKey:<span style="color: rgba(128, 0, 0, 1)">@"</span><span style="color: rgba(128, 0, 0, 1)">appLanguage</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">];
}
[synchronize];
}
;
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> YES;
}</span></pre>
</div>
<p> </p>
<p> </p>
<h3>代码演示:</h3>
<p>进入app:</p>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918160407374-921474347.png"></p>
<p> </p>
<p> </p>
<p>点击英文,重新进入app:</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918160433863-934887916.png"></p>
<p> </p>
<p> </p>
<p>点击韩语:</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918160505907-866556762.png"></p>
<p> </p><br><br>
来源:https://www.cnblogs.com/lfyDragon/p/15305471.html
頁:
[1]