忽然发现在xcode4。5里不会添加本地化字符串了,Localication的加号点开必须选择资源文件(首次添加是空的,无功而返),随后搜索到好文(http://blog.csdn.net/freshforiphone/article/details/8239865),转而告知:
参考
app如果会在不同的国家发行,那么就需要为app做本地化或者叫国际化,根据device的语言类型来选择对应的资源,显示正确的图标,文字等。另外,网上搜了下本地化,发现由于Xcode升级的关系,很多操作都不一样了,所以本文是以最新的xcode4.5为例。
1.app显示名称的本地化
1)选中工程,在Info中的Localizations按+号,为InfoPlist.strings和storyboard创建本地化。
2)
在InfoPlist.strings(English)添加 "CFBundleDisplayName" = "TestLocalization";
在InfoPlist.strings(Chinese)添加 "CFBundleDisplayName" = "本地化测试";
3)运行后结果如下
device为英文环境时
device为中文环境时
说明:
参考[1]中苹果文档中Info.plist的 LSHasLocalizedDisplayName要设置为YES,但是测试发现不设置也可以。
参考
[1]http://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial
app的本地化,除了app名称的本地化,还包括程序中使用文字的本地化、xib资源的本地化(按钮等)、图片资源的本地化,本文分别介绍这三者的本地化
1.使用文字的本地化
1)在工程文件中右击,”new file“,选择string File,创建 Localizable.strings 文件。
1.1)如果用NSLocalizedString 那么一定要使用Localizable.strings 文件名,
因为#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
其中table传的值为nil,就是默认table,而系统默认table就是Localizable.strings 此文件。如果修改为其他文件名,比如xxx.strings,那么应该使用 NSLocalizedStringFromTable(@"KEY",@"xxx",nil);来本地化。xxx没有后缀.strings
1.2)如果需要使用其他目录的本地化文件,有可能你不想根据手机的语言来判断使用哪种本地化,而希望自己用开关控制。
此时,可以使用NSLocalizedStringFromTableInBundle ,这时你需要根据目标目录创建NSBundle,另外bundle其实就是一个目录。
#define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
[bundle localizedStringForKey:(key) value:@"" table:(tbl)]
- NSString* result = key;
- static NSBundle* bundle = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^
- {
- bundle = [[NSBundle bundleWithPath:bundlePath(<span style="color:#ff0000;">path只是个目录</span>)] retain];
- });
- if ([key length]>0&&bundle)
- {
- result = NSLocalizedStringFromTableInBundle(key,xxx(<span style="color:#ff0000;">没有后缀.strings</span>), bundle, nil);
- }
2)为 Localizable.strings 创建中文的本地化
3)在Localizable.strings(chinese)中修改TITLE 和KEY字段,修改设备的语言为”中文“,运行后结果如下
2.xib资源的本地化
3图片资源的本地化
然后在en.lproj和zh-Hans.lproj使用同名但不同内容的图片即可。