如何在iOS中实现代码支持多国语言切换?
如何在iOS中实现代码支持多国语言切换?
为了增加程序的用户使用数量,那么程序的国际化是不可或缺的一步。在Xcode中要实现程序的国际化,其实非常简单,开发者只需要简单配置,并修改相应的字符串键值对即可。
应用程序的国际化主要包括三个方面:A、程序名称国际化;B、程序内容国际化;C、程序资源国际化
在Xcode中新建项目后,可以在project的info选项卡中找到Localization的项目,可以添加应用程序需要支持的国际语言。
英语版
/* Localized versions of Info.plist keys */ CFBundleDisplayName="test";
中文版
/* Localized versions of Info.plist keys */
CFBundleDisplayName="测试";
这样程序在运行时,就会根据设备当前设置的语言版本显示对应语言的名称。同样,应用程序里面的内容(组件显示的名称、提示等)可以在Localizable.strings的对应文件以键值对的形式配置;
英文
/*
Localizable.strings
LocalizeMe
Created by gisxy on 14-3-5.
Copyright (c) 2014年 esrixa. All rights reserved.
*/
"abc"="cba";
"message"="this is english";
"ok"="ok";
中文
/*
Localizable.strings
LocalizeMe
Created by gisxy on 14-3-5.
Copyright (c) 2014年 esrixa. All rights reserved.
*/
"abc"="我是测试";
"message"="这是中文信息提示";
"ok"="确定";
需要注意的是代码里面:对于相应提示的代码应该使用NSLocalizedString(@"键值", nil)
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"abc", nil)
message:NSLocalizedString(@"message", nil)
delegate:self
cancelButtonTitle:NSLocalizedString(@"ok", nil)
otherButtonTitles:nil];
[alert show];
C、资源国际化
/* Class = "IBUIButton"; normalTitle = "定位"; ObjectID = "qpS-qC-Lcy"; */ "qpS-qC-Lcy.normalTitle" = "定位";对于使用xib文件组织布局的情况下,以上方法并不好使,个人建议是:复制xib文件改名,修改显示的名称,然后在代码里面来根据语言版本来加载对应的资源,该方法同样使用图片等资源。
NSArray *languages = [NSLocale preferredLanguages]; NSString *currentLanguage = [languages objectAtIndex:0]; NSLog(@"language is %@",currentLanguage);
如不同语言的图片资源位于不同文件夹下,然后可以根据语言版本来动态加载:
_chineseImagesPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Images_Chinese/"]; _englishImagesPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingString:@"/Images_English/"];