iOS 国际化 支持app多种语言

本文详细介绍了如何实现iOS应用的国际化,包括理解国际化原理、添加支持的语言、创建Localizable.strings文件、文本和图片的国际化处理,以及如何获取设备当前语言。通过设置不同语言的资源文件和使用NSLocalizedString方法,可以轻松地使应用适应多种语言环境。

    国际化,顾名思义就是让各国人使用你的app,能显示本国的语言。国际化,没有想象中那么难,只知道通NSLocalizedString方法将相应语言的字符串加载进来即可。


本篇来自:http://blog.youkuaiyun.com/VictorMoKai/article/details/48894873

                  http://blog.sina.com.cn/s/blog_7b9d64af0101jncz.html


  开发环境 :Xcode 5以上 & Object C

   一、 iOS国际化原理分析

           国际化其实都大同小异,其核心思想就是为每种语言单独定义一份资源

           iOS就是通过xxx.lproj目录来定义每个语言的资源,这里的资源可以是图片,文本,Storyboard,Xib等。我们可以看看              LocalDemo源代码的物理目录结构


每种语言都有自己的 语言代码.lproj文件夹,加载资源时只需要加载相应语言文件夹下的资源就OK,这步可以系统为我们完成(图一),也可以手动去做(图二)。

  图一:



   图二:



 

 二 、国际化开始步骤

       1. 首先点击项目->PROJECT->Info->Localizations中添加要支持的语言



注:此处Use Base Internationalization开启状态下,每个国际化资源文件会有个Base选项,主要针对String,Storyboard,Xib作为   一个基础的模板,像后述storyboard国际化中方案二就是基于Base StoryBoard进行改动。

        在点击+添加相应语言时会弹出以下对话框,意思是为现有的资源添加语言文件,我们点击Finish就行了



        2. 然后创建国际化语言文件(Xcode 5以下自动会生成)文件名必须为:Localizable.strings



          选中Localizable.strings文件,在Utilites中,点击Localizable选项



           创建English语言包。



创建后,你的Localizable.strings文件下将挂在英文的语言支持文件。


       三、文本的国际化

             文本的国际化是通过一个Localizable.strings文件来存储每个语言的文本,它是iOS默认加载的文件。

            每个资源文件如果想为一种语言添加支持,通过其属性面板中的Localization添加相应语言就行了,此时Localizable.strings

   于可展开状态,子级有着相应语言的副本。我们把相应语言的文本放在副本里面就行了



注:此处Base与前面提过到的开启Use BaseInternationalization是有关联的,只有开启了全局Use Base Internationalization此处才会显示。那为什么这里没有勾选Base?Base做为一个基础模板,作用于Strings文件是没有太大意义的,另外去掉Base意义着在Base.lproj中少了一个strings文件,APP大小也所有下降,这点对于图片的Base更是如此。


        代码中这样写就行了


另外中文strings【Localizable.strings(Simplified)】可以不要的(可以理解为中文为APP的默认语言),因为key就是value,当找不到相应的语言strings或value时会直接返回key。nice!这样一来我们做文本的国际化就只要维护一个英文副本strings就O了

 

         四、图片的国际化

               图片的国际化可以通过原生支持与自定义命名



同上,Base副本去掉。另外需要注意的是,使用这种方式,在XIB或Storyboard中引用图片时如果只使用名称是实时显示不了的,一定要加上后缀名。如avater.png


       代码中使用方式不变,iOS会自动找相应语言(xxx.lproj)下的图片


对于图片的放置,正确姿态应该是需要国际化的图片放在自定义Group里面,不需要国际化的图片放在Images.xcassets

 

        五、获得当前设备的语言

            你可以在AppDelegate的didFinishLaunchingWithOptions方法中获取当前的语言。

    //取得用户默认信息

    NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults ];

    // 取得 iPhone 支持的所有语言设置

    NSArray *languages = [defaultsobjectForKey :@"AppleLanguages" ];

    // 获得当前iPhone使用的语言

    NSString* currentLanguage =[languagesobjectAtIndex:0];

    NSLog(@"当前使用的语言:%@",currentLanguage);

注:1.代码有冲突,建议使用(图一)设置方式。

       2.切记不要以为改变AppleLanguages值,就改变系统的设置语言,苹果官方API没有提供我们直接修改的AIP.



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值