iOS本地化总结
2013-10-30 14:05
120 查看
/article/9090059.html
OS应用的国际化,主要分为3个部分:
Info.plist 文件的国际化
.xib文件的国际化
.m文件的国际化
下面我就来一一说明。
Info.plist 文件的国际化
我们使用Xcode 4.5 创建一个新项目,会自动创建一个 en.lproj 目录,这个目录下存放的就是需要国际化的文件(默认为英文)。下面,我们还需要创建中文国际化支持。
1. 创建名为 zh-Hans.lproj 的目录
2. 在项目的 Info.plist 文件中增加配置 Localizations, 添加英文和中文的支持:English, Chinese(simplified)
3. 将 en.lproj/InfoPlist.strings 文件拷贝到 zh-Hans.lproj/InfoPlist.strings 文件中。
4. 将 zh-Hans.lproj 目录添加到项目。注意要选择 Add to targets
5. 选择 File -> Info -> Localization 为对应的语言
在 InfoPlist.strings 文件中,我们可以国际化一些应用信息,例如:
CFBundleDisplayName 应用显示名称。这样我们就可以根据不同的语言,显示不同语言的应用名。
更多字段信息,请参考
http://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
的 Key Summary 部分。
.xib 文件的国际化
我们已经创建了一个英文的xib文件,在 en.lproj 文件下。然后,需要使用命令行来操作:
1. 将 .xib文件 中的文字提取,另存为 .strings文件。
ibtool --generate-strings-file MainViewController.strings MainViewController.xib
2. 将 MainViewController.strings 拷贝到 zh-Hans.lproj 目录下,然后汉化该文件中的文字
3. 执行命令,根据英文的 .xib文件 和 .strings汉化文件 生成一个汉化后的 .xib 文件
ibtool --strings-file zh-Hans.lproj/MainViewController.strings --write zh-Hans.lproj/MainViewController.xib en.lproj/MainViewController.xib
4. 将生成的这个 .xib 文件添加到项目中的 zh-Hans.lproj 分组下,注意要选择 Add to targets
5. 选择 File -> Info -> Localization 为对应的语言
至此,xib文件的汉化已经完成。
.m 文件的国际化
1. 代码中,凡是需要国际化的文字,都使用 NSLocalizedString 函数,例如
NSLocalizedString(@"hello_world", @"Hello world!");
2. 执行命令,将所有 .m 文件中需要汉化的文字都提取出来,并放入 en.lproj 文件夹下
genstrings -o en.lproj *.m
此时,会自动生成 Localizable.strings 文件。接着将该文件也拷贝到 zh-Hans.lproj 文件夹下去。这个文件就是需要汉化的内容
3. 将 .strings 文件添加到项目中相应的汉化目录下,注意要选择 Add to targets
4. 选择 File -> Info -> Localization 为对应的语言
然后,我们运行程序,通过修改系统语言发现,文件显示名称、.xib文件 和 .m文件 都可以自动切换显示语言了。
附上示例:
http://download.csdn.net/detail/midfar/4749454
http://www.worlduc.com/blog2012.aspx?bid=13531870
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。
我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。
搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。
我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。
搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。
http://chenjohney.iteye.com/blog/1303723
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。
我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。
搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。
最近要做一个应用要实现本地化,因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦,所以经过一个下午的研究,总算是成功了一点点,还是庆幸一下。先给出结果。
英语: 中文:
具体实现如下:
静态本地化 : 加载的文件,如xib文件,图像文件,还有实现应用程序名本地化
动态本地化: 显示的字符串本地化
一。先做准备:设置程序本地化
在xcode点击程序图标:点击Info选项->Localizationn,点击“+”,选择要添加的语言,简体中文选择Chinese(zh-Hans)
你会在你工程目录下发现多了个文件夹,“zh-Hans.lproj",x-code使用.lproj作为其本地化文件夹的扩展名。
二。设置xib文件本地化, 图像本地化的方法是一样道理的,可以根据用户的显示语言加载不同的xib文件
操作:点击xib文件,在IB窗口中选择选项选择“File Inspecter",也就是第一个选项,选择“Localization->"+"选择添加的语言,
效果如下,原来的xib文件就会出现三角形,其下有两个文件,因为我的为storyboard,但效果是一样的。就可以实现将其本地化了,非常简单吧
三。设置应用程序名本地化,
设置应用程序名存储在应用程序的Info.plist文件中,我们例子实际上为Localize-Info.plist,选择文件,并不需要对文件进行本地化,而是使"Info.strings"本地化就可以了,在Localize.Info.plist,空白处右键,选择Show Raw Keys/Values,就会看到应用程序名实际为CFBundleDisplayName,我们只需要在对应的 Info.plist中添加以下代码就可以了
英文版:
C代码
CFBundleDisplayName = "Localization";
中文版:
C代码
CFBundleDisplayName = "本地化";
效果图:
四、加载的字符串本地化,
原理:在代码中将加入的字符串加入NSLocalizeString宏中,启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件,当然你可以自己去创建这个文件,然后手动是添加对应的字符串。,
C代码
labelName.text = NSLocalizedString(@"Name", @"The name is ");
labelPassword.text = NSLocalizedString(@"Password:",@"The password is");
NSlocalizeString 第一个参数是内容,第二个参数将会转化为字符串文件里的注释。
转化方法如下 :先关闭项目,打开终端,进入到项目的目录,输入genStrings 文件名.m就可以将该文件中的宏转化为相应的字符串文件,
效果如下:会看到生成"Localizable.strings",
打开文件,就可以交给翻译人员去翻译了
最后附上例子,这是必须的
总算把截图搞上去了,分享一下。
Localize.zip (37.8 KB)
下载次数: 124
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。
我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。
搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。
OS应用的国际化,主要分为3个部分:
Info.plist 文件的国际化
.xib文件的国际化
.m文件的国际化
下面我就来一一说明。
Info.plist 文件的国际化
我们使用Xcode 4.5 创建一个新项目,会自动创建一个 en.lproj 目录,这个目录下存放的就是需要国际化的文件(默认为英文)。下面,我们还需要创建中文国际化支持。
1. 创建名为 zh-Hans.lproj 的目录
2. 在项目的 Info.plist 文件中增加配置 Localizations, 添加英文和中文的支持:English, Chinese(simplified)
3. 将 en.lproj/InfoPlist.strings 文件拷贝到 zh-Hans.lproj/InfoPlist.strings 文件中。
4. 将 zh-Hans.lproj 目录添加到项目。注意要选择 Add to targets
5. 选择 File -> Info -> Localization 为对应的语言
在 InfoPlist.strings 文件中,我们可以国际化一些应用信息,例如:
CFBundleDisplayName 应用显示名称。这样我们就可以根据不同的语言,显示不同语言的应用名。
更多字段信息,请参考
http://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
的 Key Summary 部分。
.xib 文件的国际化
我们已经创建了一个英文的xib文件,在 en.lproj 文件下。然后,需要使用命令行来操作:
1. 将 .xib文件 中的文字提取,另存为 .strings文件。
ibtool --generate-strings-file MainViewController.strings MainViewController.xib
2. 将 MainViewController.strings 拷贝到 zh-Hans.lproj 目录下,然后汉化该文件中的文字
3. 执行命令,根据英文的 .xib文件 和 .strings汉化文件 生成一个汉化后的 .xib 文件
ibtool --strings-file zh-Hans.lproj/MainViewController.strings --write zh-Hans.lproj/MainViewController.xib en.lproj/MainViewController.xib
4. 将生成的这个 .xib 文件添加到项目中的 zh-Hans.lproj 分组下,注意要选择 Add to targets
5. 选择 File -> Info -> Localization 为对应的语言
至此,xib文件的汉化已经完成。
.m 文件的国际化
1. 代码中,凡是需要国际化的文字,都使用 NSLocalizedString 函数,例如
NSLocalizedString(@"hello_world", @"Hello world!");
2. 执行命令,将所有 .m 文件中需要汉化的文字都提取出来,并放入 en.lproj 文件夹下
genstrings -o en.lproj *.m
此时,会自动生成 Localizable.strings 文件。接着将该文件也拷贝到 zh-Hans.lproj 文件夹下去。这个文件就是需要汉化的内容
3. 将 .strings 文件添加到项目中相应的汉化目录下,注意要选择 Add to targets
4. 选择 File -> Info -> Localization 为对应的语言
然后,我们运行程序,通过修改系统语言发现,文件显示名称、.xib文件 和 .m文件 都可以自动切换显示语言了。
附上示例:
http://download.csdn.net/detail/midfar/4749454
http://www.worlduc.com/blog2012.aspx?bid=13531870
Xcode版本相关
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
Supporting Files,然后在它里面添加新文件,选择iOS下Resource里的
Strings File,不要选择成
OS X下的哦,我开头就没看清楚,Xcode也不知为何优先打开了OS X地选项。
OS X与iOS不一致
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用NSLocalizedString(@"key",nil);设置某个Label地字符串,奇怪地是,在模拟器里工作正常(那个Label在中文环境显示中文字符串,英文环境显示英文字符串);我再换成真机,在中文环境里它却死活得不到字符串,只显示为
"key"。
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
.app里的遗留文件
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
.app和
.app.dSYM后,再从模拟器或者真机里删除应用,并重启Xcode。再次测试,本地化字符串总算可以从中文版的Localizable.strings读取了。
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
总结
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。
Xcode版本相关
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
Supporting Files,然后在它里面添加新文件,选择iOS下Resource里的
Strings File,不要选择成
OS X下的哦,我开头就没看清楚,Xcode也不知为何优先打开了OS X地选项。
OS X与iOS不一致
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用NSLocalizedString(@"key",nil);设置某个Label地字符串,奇怪地是,在模拟器里工作正常(那个Label在中文环境显示中文字符串,英文环境显示英文字符串);我再换成真机,在中文环境里它却死活得不到字符串,只显示为
"key"。
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
.app里的遗留文件
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
.app和
.app.dSYM后,再从模拟器或者真机里删除应用,并重启Xcode。再次测试,本地化字符串总算可以从中文版的Localizable.strings读取了。
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
总结
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。http://chenjohney.iteye.com/blog/1303723
Xcode版本相关
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
Supporting Files,然后在它里面添加新文件,选择iOS下Resource里的
Strings File,不要选择成
OS X下的哦,我开头就没看清楚,Xcode也不知为何优先打开了OS X地选项。
OS X与iOS不一致
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用NSLocalizedString(@"key",nil);设置某个Label地字符串,奇怪地是,在模拟器里工作正常(那个Label在中文环境显示中文字符串,英文环境显示英文字符串);我再换成真机,在中文环境里它却死活得不到字符串,只显示为
"key"。
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
.app里的遗留文件
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
.app和
.app.dSYM后,再从模拟器或者真机里删除应用,并重启Xcode。再次测试,本地化字符串总算可以从中文版的Localizable.strings读取了。
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
总结
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。最近要做一个应用要实现本地化,因为使用的是xcode4,应用程序本地化的问题跟以前的版本还是有些不同,在网上找了些资料对于xcode4以上的版本资料还是相对较少,有些最后要通过手动创建文件,这样操作实在是太麻烦,所以经过一个下午的研究,总算是成功了一点点,还是庆幸一下。先给出结果。
英语: 中文:
具体实现如下:
静态本地化 : 加载的文件,如xib文件,图像文件,还有实现应用程序名本地化
动态本地化: 显示的字符串本地化
一。先做准备:设置程序本地化
在xcode点击程序图标:点击Info选项->Localizationn,点击“+”,选择要添加的语言,简体中文选择Chinese(zh-Hans)
你会在你工程目录下发现多了个文件夹,“zh-Hans.lproj",x-code使用.lproj作为其本地化文件夹的扩展名。
二。设置xib文件本地化, 图像本地化的方法是一样道理的,可以根据用户的显示语言加载不同的xib文件
操作:点击xib文件,在IB窗口中选择选项选择“File Inspecter",也就是第一个选项,选择“Localization->"+"选择添加的语言,
效果如下,原来的xib文件就会出现三角形,其下有两个文件,因为我的为storyboard,但效果是一样的。就可以实现将其本地化了,非常简单吧
三。设置应用程序名本地化,
设置应用程序名存储在应用程序的Info.plist文件中,我们例子实际上为Localize-Info.plist,选择文件,并不需要对文件进行本地化,而是使"Info.strings"本地化就可以了,在Localize.Info.plist,空白处右键,选择Show Raw Keys/Values,就会看到应用程序名实际为CFBundleDisplayName,我们只需要在对应的 Info.plist中添加以下代码就可以了
英文版:
C代码
CFBundleDisplayName = "Localization";
中文版:
C代码
CFBundleDisplayName = "本地化";
效果图:
四、加载的字符串本地化,
原理:在代码中将加入的字符串加入NSLocalizeString宏中,启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件,当然你可以自己去创建这个文件,然后手动是添加对应的字符串。,
C代码
labelName.text = NSLocalizedString(@"Name", @"The name is ");
labelPassword.text = NSLocalizedString(@"Password:",@"The password is");
NSlocalizeString 第一个参数是内容,第二个参数将会转化为字符串文件里的注释。
转化方法如下 :先关闭项目,打开终端,进入到项目的目录,输入genStrings 文件名.m就可以将该文件中的宏转化为相应的字符串文件,
效果如下:会看到生成"Localizable.strings",
打开文件,就可以交给翻译人员去翻译了
最后附上例子,这是必须的
总算把截图搞上去了,分享一下。
Localize.zip (37.8 KB)
下载次数: 124
Xcode版本相关
从Xcode 4.4开始,添加本地化支持的步骤稍有变化,参考Localization(本地化) in Xcode 4.4。我用的是最新的Xcode 4.5,自然也是这样操作。我现在只需要本地化一些字符串,nib/storyboard以及infoPlist之类的不需要本地化。选择
Supporting Files,然后在它里面添加新文件,选择iOS下Resource里的
Strings File,不要选择成
OS X下的哦,我开头就没看清楚,Xcode也不知为何优先打开了OS X地选项。
OS X与iOS不一致
在我傻傻地从OS X菜单下添加了Localizable.strings,并且添加了两种本地化语言支持:英文和中文,我开始测试用NSLocalizedString(@"key",nil);设置某个Label地字符串,奇怪地是,在模拟器里工作正常(那个Label在中文环境显示中文字符串,英文环境显示英文字符串);我再换成真机,在中文环境里它却死活得不到字符串,只显示为
"key"。
之后是各种搜索,然后根据得到地零星信息,删除、重建Localizable.strings文件,重启Xcode之类的,但真机里就是不对。
后来不甘心,重新新建了一个项目,在添加Localizable.strings时,我终于注意到Xcode默认选到OS X的Strings File上了。
.app里的遗留文件
然后是换成正确的iOS版的strings之后,添加了两种语言:英文和中文。虽然我的真机和模拟器都改成了中文,但是就是读取不到中文Localizable.strings里的字符串,总是读取到英文版的。搜索无果,各种清空,删除,偶然看到Products有个.app,就在Finder里打开(Show in Finder),然后查看(显示包内容),里面有些历史遗留的东西,Localizable.strings在en.lproj和zh-Hans.lproj外也有一个,应该是原来胡乱测试时弄错后留下来的,虽然项目里和项目文件夹里都已经删除,但这个.app并不在项目文件夹里,所以悲剧。
最后,终于搞定了,要将Products下的app在Finder里打开,删除里面的
.app和
.app.dSYM后,再从模拟器或者真机里删除应用,并重启Xcode。再次测试,本地化字符串总算可以从中文版的Localizable.strings读取了。
总之怪Xcode不智能,生成这个.app时只知道添加文件进去,却不懂删除项目里没有的文件,坑爹呀。
总结
Xcode很好用,但要建立在你熟悉它的情况下,有时候它也不是那么智能。因为Xcode可以同时用于开发iOS和OS X应用,都集成在一起,所以添加新文件时要看清楚,别选错了。
相关文章推荐
- iOS开发总结-----项目名字本地化
- IOS开发 应用程序本地化 总结
- IOS应用程序多语言本地化的一点个人总结
- 关于iOS App 国际化和本地化 的一些总结:国际化 vs 本地化(Internationalization vs Localization)
- iOS 拨打电话四种方式总结(推荐最后一种)
- IOS应用内购买(In App Purchase)总结
- 【IOS 开发学习总结-OC-46】★ios开发之UI控件——UIProgressView 与 UISlider(另:可拉伸图片)
- <iOS>iphone技术总结, 在网上找到比较有用的东东,整合一下
- IOS 内存管理机制总结
- iOS GCD常用方法总结
- ios多种语言的本地化思路
- iOS开发种传值方式的总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- 【IOS 开发学习总结-OC-2】objective-c 数据类型
- iOS 开发 中级:UIToolbar,UINavigationBar,UITabBar,UIBarButtonItem,UITabBarItem自定义方法总结
- ios之NSSet 使用技巧总结
- unity发布ios游戏总结
- iOS CAShapeLayer的FillRule属性总结
- UIViewController-iOS-Apple官方文档翻译注释总结
- IOS 开发入门总结