iOS中代码支持多国语言切换的实现(Xcode5+iOS7)

为了增加程序的用户使用数量,那么程序的国际化是不可或缺的一步。在Xcode中要实现程序的国际化,其实非常简单,开发者只需要简单配置,并修改相应的字符串键值对即可。

        应用程序的国际化主要包括三个方面:A、程序名称国际化;B、程序内容国际化;C、程序资源国际化

  在Xcode中新建项目后,可以在project的info选项卡中找到Localization的项目,可以添加应用程序需要支持的国际语言。


  点击+添加时,Xcode会自动把相关文件的相应语言字符串或者文件复制一份,并放于相应语言目录下(en.lproj、zh_Hans.lproj对应英语和汉语)

回到项目中可以发现在InfoPlist.strings、Main.storyboard(Main.strings)增加了相应项,而Localizable.strings文件如果已经存在的情况也会增加对应的语言版本。(默认情况,Xcode5+iOS7下Localizable文件需要新建,如下图)

完成以上的设置和文件添加,来看应用程序国际化的ABC。
A、应用名称国际化(InfoPlist.strings)
在InfoPList.strings的不同语言版本的文件中设置相应语言下程序的显示名称
    英语版
     /* Localized versions of Info.plist keys */
     CFBundleDisplayName="test";
    中文版
     /* Localized versions of Info.plist keys */

CFBundleDisplayName="测试";

         这样程序在运行时,就会根据设备当前设置的语言版本显示对应语言的名称。
B、内容国际化(Localizable.strings)

同样,应用程序里面的内容(组件显示的名称、提示等)可以在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、资源国际化

        在iOS7中storyboard生成的对应语言文本文件可以通过配置相应组件的显示名称来完成国际化
/* 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/"];



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值