iOS 国际化 支持app多种语言

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


本篇来自:http://blog.csdn.net/VictorMoKai/article/details/48894873

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


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

   一、 iOS国际化原理分析

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

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

iOS 国际化 支持app多种语言_第1张图片

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

  图一:

iOS 国际化 支持app多种语言_第2张图片


   图二:

iOS 国际化 支持app多种语言_第3张图片


 

 二 、国际化开始步骤

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

iOS 国际化 支持app多种语言_第4张图片


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

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

iOS 国际化 支持app多种语言_第5张图片


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

iOS 国际化 支持app多种语言_第6张图片


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

iOS 国际化 支持app多种语言_第7张图片


           创建English语言包。

iOS 国际化 支持app多种语言_第8张图片


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


       三、文本的国际化

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

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

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

iOS 国际化 支持app多种语言_第9张图片


注:此处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了

 

         四、图片的国际化

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

iOS 国际化 支持app多种语言_第10张图片


同上,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.



你可能感兴趣的:(ios国际化)