英语: 中文:
具体实现如下:
静态本地化 : 加载的文件,如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中添加以下代码就可以了
英文版:
中文版:
效果图:
四、加载的字符串本地化,
原理:在代码中将加入的字符串加入NSLocalizedString宏中,启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件,当然你可以自己去创建这个文件,然后手动是添加对应的字符串。,
- labelName.text = NSLocalizedString(@"Name", @"The name is ");
- labelPassword.text = NSLocalizedString(@"Password:",@"The password is");
NSlocalizedString 第一个参数是内容,第二个参数将会转化为字符串文件里的注释。
转化方法如下 :先关闭项目,打开终端,进入到项目的目录,输入genStrings 文件名.m就可以将该文件中的宏转化为相应的字符串文件,如果存在多个.m文件的话,可以使用genStrings *.m。
在该目录下会看到生成"Localizable.strings",将"Localizable.strings"拖到“Supporting Files”文件夹下
选中该”Localizable.strings“后,在右侧进行其它语言的添加:
最后便可看到对应语言的”Localizable.strings“文件
打开文件,就可以交给翻译人员去翻译了.
五、如何在运行的时候判断现在运行环境是哪个语言?
5.1 获得所支持的语言
NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ]; // 取得 iPhone 支持的所有语言设置 NSArray *languages = [defaults objectForKey : @"AppleLanguages" ]; NSLog ( @"%@" , languages);
运行,打印结果:
(
en,
"zh-Hant",
"zh-Hans",
fr,
de,
ja,
nl,
it,
es,
pt,
"pt-PT",
da,
fi,
nb,
sv,
ko,
ru,
pl,
tr,
uk,
ar,
hr,
cs,
el,
he,
ro,
sk,
th,
id,
"en-GB",
ca,
hu,
vi
)
"zh-Hant" 繁体中文
"zh-Hans", 简体中文
这段代码获取当前系统支持的语言。
5.2 获取当前使用语言
NSArray *languages = [NSLocale preferredLanguages]; NSString *currentLanguage = [languages objectAtIndex:0]; NSLog ( @"%@" , currentLanguage);
打印结果:
en
用获取到的当前语言,和支持的语言做字符串对比,就可以知道是那种语言了。
if([currentLanguage isEqualToString:@"en"]) { NSLog(@"current Language:en"); }