这周在公司一直在搞APP 国际化,这个看似简单的事情却让我走了不少弯路,网上的教程我已不想吐槽,fuck!首先最可能的原因是我们的项目工程太大,1.8G,对此我也不想吐槽,毕竟项目至少被5个人蹂躏过,不废话步入正题:
```首先我先介绍一下国际化过程中可能会遇到的问题和简便的方法`
1.如果运行报错,首先检查一下你的国际化string文件,看看有没有少引文分号或者是等号;
2.如果你发现系统语言和代码写的都正确,但是有的内容国际化了有的却没有国际化,首先看一下你的国际化string文件是不是行数太多;
3.如果你工程的需要国际化的内容较多,建议你把国际化分为模块化,也就是你在创建String文件的时候,文件名跟你要国际化的文件夹名字一样,这样看起来比较清晰
4.你最好把工程里面的国际化内容先按文件夹整理好,然后用翻译工具一下子翻译出来,再整理好它的格式就ok了,这样做你会省下不少时间。
下面上步骤图
第一步:command+n创建一个String File 如下图:
![屏幕快照 2016-05-29 下午2.05.58.png](http://upload-images.jianshu.io/upload_images/969236-c591dcf5a64c3799.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第二步:如果你工程需要国际化的内容较多,那么红色框框里面的文件名可以以你的类文件夹命名。
![屏幕快照 2016-05-29 下午2.06.43.png](http://upload-images.jianshu.io/upload_images/969236-cee2d533de4cd6d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这是我以CC名字命名的:
![屏幕快照 2016-05-29 下午3.44.05.png](http://upload-images.jianshu.io/upload_images/969236-685b5aa0cad5b7a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第三步来到这里:
![屏幕快照 2016-05-29 下午2.04.11.png](http://upload-images.jianshu.io/upload_images/969236-ac113cd62e79f3ff.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第四步点击加号选择你要国际化的语言:
![屏幕快照 2016-05-29 下午2.08.11.png](http://upload-images.jianshu.io/upload_images/969236-b01c9fbdac566dc5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第五步来到CC.String这里,点击红色区域按钮
![屏幕快照 2016-05-29 下午2.07.01.png](http://upload-images.jianshu.io/upload_images/969236-329b46e4e11a814f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第六步来选择上一步弹出来的框框,选择一个语言
![屏幕快照 2016-05-29 下午2.07.36.png](http://upload-images.jianshu.io/upload_images/969236-e51a489832a697df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
第七步来到工程代码里面:
![屏幕快照 2016-05-29 下午3.44.57.png](http://upload-images.jianshu.io/upload_images/969236-5666f2d491a59caf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```大家可以看到我是这样写的NSLocalizedStringFromTable(@"国际化", @"CC", nil)```
我现在解释一下为什么用它NSLocalizedStringFromTable,其实看字面意思就知道了,来自哪个表,第一个参数@"国际化",就是你要国际化的内容,第二个参数@"CC",就是我第二步创建的String文件已CC命名的,所以这里用它来取,第三个参数可以写nil,也可以写@""```
```与NSLocalizedStringFromTable功能差不多的并且常用的还有一个叫NSLocalizedString,如果你用NSLocalizedString那么前提是你的String文件名要以Localization命名,记住必须是它,而且你在代码中要这样写NSLocalizedString(@"国际化", nil)或者NSLocalizedString(@"国际化", @"")这样写```
```以上内容都是工程内容的国际化,下面介绍APP名字的国际化,这个就比较简单了```
```找到你的info.plist文件,在右边选择你的国际化语言,之后你会发现你的info.plist文件可以折叠展开了。```
![屏幕快照 2016-05-29 下午3.58.24.png](http://upload-images.jianshu.io/upload_images/969236-4e13d68a1f7656d9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后一步在展开之后的文件夹里面对应写上CFBundleDisplayName = "你的APP名字";
比如我在英文文件里面这样写CFBundleDisplayName = "Your APP name";
xib和SB的国际化步骤,和内容国际化差不多,首先点击你的xib文件
![屏幕快照 2016-05-31 上午11.09.52.png](http://upload-images.jianshu.io/upload_images/969236-1b35b1188e77cc61.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![屏幕快照 2016-05-31 上午11.12.03 1.png](http://upload-images.jianshu.io/upload_images/969236-23ad1118537aaa4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在对应的文件里面自己更改内容就ok了
![屏幕快照 2016-05-31 上午11.15.36.png](http://upload-images.jianshu.io/upload_images/969236-e37c2a6c57e99367.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
切换模拟器语言,验证你的内容是否国际化了
![屏幕快照 2016-05-30 上午9.01.18.png](http://upload-images.jianshu.io/upload_images/969236-7b4802bcb6fe9f00.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![屏幕快照 2016-05-30 上午9.01.36.png](http://upload-images.jianshu.io/upload_images/969236-3fb4f501853f9542.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后见证奇迹的时刻,command+R