齊魯華夏 發表於 2021-9-18 16:13:00

iOS之多语言开发

<p>&nbsp;</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>创建&nbsp;<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>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918150718856-2062357523.png"></p>
<p>&nbsp;</p>
<p>&nbsp;文件名是 <strong>Localizable&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918151529265-1931319044.png"></p>
<p>&nbsp;在每个语言的.string文件中,把项目中的所有需显示的文字,按照key-value 的形式放进去。</p>
<p>&nbsp;至此,所有的前置工作都完成了。</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&lt;<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>直接使用&nbsp;NSLocalizedString(key, comment)方法,“key”就是Localizable.strings文件中的我们设置的key, “comment”写niu即可</p>
<p>如此,只要在手机 &nbsp;设置-通用-语言与地区 &nbsp;中,切换语言,再打开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&lt;<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>&nbsp;</p>
<p>每种语言对应的字符串:</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918155808591-1887501332.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</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>&nbsp;</p>
<p>&nbsp;</p>
<h3>代码演示:</h3>
<p>进入app:</p>
<p>&nbsp;</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918160407374-921474347.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>点击英文,重新进入app:</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918160433863-934887916.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>点击韩语:</p>
<p><img src="https://img2020.cnblogs.com/blog/1219474/202109/1219474-20210918160505907-866556762.png"></p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/lfyDragon/p/15305471.html
頁: [1]
查看完整版本: iOS之多语言开发