• 在新建项目完成后,会出现这么几个文件 Info.plist、InfoPlist.strings、.pch文件。 其中Info.plist现版本Xcode新建项目后还存在,其余两个文件现在已经找不到了。 ——————————————————————...

    在新建项目完成后,会出现这么几个文件 Info.plist、InfoPlist.strings、.pch文件。

    其中Info.plist现版本Xcode新建项目后还存在,其余两个文件现在已经找不到了。

    ————————————————————————————————————————————————————————

    Info.plist 文件:(现版本)


    Localiztion native development region --- CFBundleDevelopmentRegion 本地化相关,如果⽤户所在地没有相应的语言资源,则用这个key的value来作为默认

    Bundle display name --- CFBundleDisplayName 设置程序安装后显示的名称。应⽤程序名称限制在10-12个字符,如果超出,将被显示缩写名称。

    Executaule dile -- CFBundleExecutable 程序安装包的名称

    Bundle identidier --- CFBundleIdentidier 该束的唯一标识字符串,该字符串的格式类似 com.yourcompany.yourapp,如果使⽤用模拟器跑你的应用,这个字段没有用处,如果你需要把你的应⽤部署到设备上,你必须⽣成一个证书,⽽而在⽣生成证书的时候,在apple的⽹网站上需要增加相应的app IDs.这⾥有一个字段Bundle identidier,如果这个Bundle identidier是一个完整字符串,那么文件中的这个字段必须和后者完全相同,如果app IDs中的字段含有通配符*,那么文件中的字符串必须符合后者的描述。

    InfoDictionary version --- CFBundleInfoDictionaryVersion Info.plist 格式的版本信息

    Bundle name --- CFBundleName 产品名称

    Bundle OS Type code -- CFBundlePackageType ⽤来标识束类型的四个字母长的代码

    Bundle versions string, short --- CFBundleShortVersionString ⾯向用户市场的束的版本字符串

    Bundle creator OS Type code --- CFBundleSignature 用来标识创建者的四个字母长的代码

    Bundle version --- CFBundleVersion 应⽤程序版本号,每次部署应用程序的一个新版本时, 将会增加这个编号,在app store上用的。

    Application require iPhone environment -- LSRequiresIPhoneOS 用于指示程序包是否只能运行在iPhone OS 系统上。Xcode自动加入这个键,并将它的值设置为true。您不应该改变这个键的值。

    Main storybard dile base name -- UIMainStoryboardFile 这是一个字符串,指定应用程序主nib文件的名称。

    supported interface orientations -- UISupportedInterfaceOrientations 程序默认支持的设备方向。

    ————————————————————————————————————————————————————————

    InfoPlist.strings 文件:


    这个文件跟Info.plist文件的本地化有关。

    ————————————————————————————————————————————————————————

    .pch 文件:(原版本)


    项目的Supporting files文件夹下面有个“工程名-Prefix.pch”文件,也是一个头文件。
    pch头文件的内容能被项目中的其他所有源文件共享和访问。
    一般在pch文件中定义一些全局的宏。
    在pch文件中添加下列预处理指令,然后在项目中使用Log(…)来输出日志信息,就可以在发布应用的时候,一次性将NSLog语句移除(发布应用就不需要打印了!)

    #ifdef DEBUG
    #define  Log(...)  NSLog(__VA_ARGS__)
    #else
    #define  Log(...) 
    #endif

    展开全文
  • Localizable.strings 文件

    2014-08-13 14:57:09
    1、在Supporting Files文件夹右键,NewFile… -> iOS -> Resources -> String Files,命名为Localizable.strings(不要换成别的名字,我测试时,改成其它名字,不能实现本地化); 2、选中Localizable.strings 点击 XCode...

    1、在Supporting Files文件夹右键,NewFile… -> iOS -> Resources -> String Files,命名为Localizable.strings(不要换成别的名字,我测试时,改成其它名字,不能实现本地化);
    2、选中Localizable.strings 点击 XCode-> View-> Utilities -> File Inspector,在Localization中点+添加语言(zh-hans是简体中文 )

    3、添加后,点击Localizable.strings左边的三角形符号展开,分别编辑下面两个文件 

    Localizable.strings(English)   文件: 添加“ok” = “OK”;

    Localizable.strings(Chinese)  文件: 添加 “ok” = “成功”;   注意双引号一定要是英文状态的双引号,否则编译会出错

    然后在程序中就可以用NSLocalizedString(@"ok"nil)

    实现本地化                   



    步骤:一。先做准备:设置程序本地化

    在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中添加以下代码就可以了
    英文版:C代码
    1. CFBundleDisplayName = "Localization";  
    复制代码
    C代码
    1. CFBundleDisplayName = "本地化";
    复制代码

     
    效果图:

     


    四、加载的字符串本地化,
          原理:在代码中将加入的字符串加入NSLocalizeString宏中,启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件,当然你可以自己去创建这个文件,然后手动是添加对应的字符串。,
    1. labelName.text = NSLocalizedString(@"Name", @"The name is ");  
    2. labelPassword.text  = NSLocalizedString(@"Password:",@"The password is");
    复制代码
    NSlocalizeString 第一个参数是内容,第二个参数将会转化为字符串文件里的注释。
    转化方法如下 :先关闭项目,打开终端,进入到项目的目录,输入genStrings 文件名.m就可以将该文件中的宏转化为相应的字符串文件,

    效果如下:会看到生成"Localizable.strings",
    打开文件,就可以交给翻译人员去翻译了





    ===================
    1、本地化字符串,网上那些方法我就不说了,我只更正一点:如果你的Classes下面有子文件夹会报错,使用下面的命令:
    find . -name *.m | xargs genstrings -o /Users/apple/(你目标的文件夹)
    2、本地化软件的名字:
    (1)在info.plist文件里做如下设置:

    (2)创建一个InfoPlist.strings文件,里面写如下内容:
    "CFBundleDisplayName"="你软件的名称";
    "CFBundleName"="你软件的名称";
    (3)本地化这个文件即可。
    3、本地化资源,不必细说了,网上资料很多,这里我只说下我的疑惑:图片资源貌似只能用zh-Hans。
    4、本地化icon,目前不支持,所以不要费劲的去本地化icon了。
    5、商店的本地化,也不必细说了,很简单,按照苹果需要的填就可以了。
    ====================



    应用genstrings和NSLocalizedString实现App文本的本地化
    Admin
    2012年3月20日

    App本地化的须要不消讲大师也都熟悉打听,本文将介绍一种简单的办法来实现字符串的本地化。

    在不推敲本地化的景象下,我们若是在代码中给一个Button定义title,一般会如许写:


    btn.titleLable.text = @"Example Button";




    也许我们已经写了很长的代码才推敲到本地化的题目,大可不必头疼,这时辰,我们要做的是把代码从头扫一遍,然后把每个会显示给用户看的字符串做如下批改:
    (对于内部应用的字符串就用不着本地化了)


    btn.titleLable.text = NSLocalizedString(@"btn_title", nil);


    NSLocalizedString是一个定义在NSBundle.h中的宏,其用处是寻找当前体系说话对应的Localizable.strings文件中的某个key的值。
    第一个参数是key的名字,第二个参数是对这个“键值对”的注释,在用genstrings对象生成Localizable.strings文件时会主动加上去。



    到今朝为止,我们还没有生成Localizable.strings文件。这是一个逆向的过程,也就是先写好调用过程,再生成strings资料文件。

    当我们把所有的.m文件都修发好了,就该genstrings对象出场了。
      1. 启动终端,进入工程地点目次。
      2. 新建两个目次,推荐放在资料目次下。
        目次名会感化到Localizable.strings文件对应的说话,不克不及写错了。这里zh-Hans指简体中文,重视不克不及用zh.lproj默示。


    mkdir zh-Hans.lproj
    mkdir en.lproj


      3. 生成Localizable.strings文件


    genstrings -o zh-Hans.lproj *.m
    genstrings -o en.lproj *.m


      -o <文件夹>,指定生成的Localizable.strings文件放置的目次。
      *.m,扫描所有的.m文件。这里支撑的文件还包含.h, .java等。

      4. 右键点击工程的Resources目次,选择“New Group”,添加两个目次zh-Hans.lproj和en.lproj。
      5. 在新建的group中添加方才生成的Localizable.strings文件。
      6. 最后在Localizable.strings文件中,批改每个key所对应的内容,就大功成功了。



    说了一大堆,其实操纵起来还是很简单的,总的来讲就是两条:
      1. 在代码里用NSLocalizedString获取要本地化的字符串
      2. 用genstrings扫描代码文件,生成Localizable.strings,然后加到工程中。




    展开全文
  • IOS之Info.plist文件简介

    2015-04-17 17:45:08
     为了提供更好的用户体验,IOS 和 OS X的每个app或bundle都依赖于特殊的元信息(meta Information).  元信息有多种用途,包括 直接向用户展示信息系统内部用来标识你的app或其支持的文档类型系统框架用来辅助...

    元信息简介

        为了提供更好的用户体验,IOS 和 OS X的每个app或bundle都依赖于特殊的元信息(meta Information).

        元信息有多种用途,包括

    • 直接向用户展示信
    • 系统内部用来标识你的app或其支持的文档类型
    • 系统框架用来辅助app的加载
          通过一种特殊的信息属性列表文件,app向系统提供自己的元信息。 

          属性列表可用来构建任意数据,这些数据在运行时是可访问的。每个属性列表都包含了一个bundle的配置信息。文件中的keys和values描述了许多要应用于该bundle的行为以及配置选项。Xcode通常会为每个基于bundle的工程自动创建该属性列表文件,并且提供许多合适的keys以及其对应的默认的values。之后可以编辑该文件,添加任何工程所需的keys和values,或修改现有的keys所对应的values。 

    Info.plist文件 

          每个application都使用Info.plist文件来存储以上的元信息,从名称上也可以判断出Info.plist就是以上提到的“属性列表”。IOS用Info.plist来决定bundle所显示的icon,当前app支持打开的文档类型,等等其它的信息。正如以上所提到的,Info.plist本身是一种结构化的文本文件,它包含了一些重要的配置信息。Info.plist文件多数情况下是以UTF-8进行编码,并且其内部的配置内容其实是以XML格式进行组织。XML的根节点是一个词典(dictionary),包含描述bundle各个方面的keys和values。系统读取该文件,并获取app的配置信息。 

          按照约定,属性列表文件的名称就是Info.plist。该文件名称时大小写敏感的,并且首字母必须是大写的"I".在IOS的apps中,当新工程创建完毕后,会自动创建一个名为<project>-Info.plist文件,该文件位于bundle目录(Supporting Files)的顶部,在工程构建时,该文件用以生成Info.plist文件,之后添加至bundle中。我们以TestPro为例,当用Xcode创建名为TestPro工程后,其目录结构如下: 



         我们以TestPro为例,当用Xcode创建名为TestPro工程后,其目录结构如下



    在Info.plist中添加key

         创建新工程时生成的Info.plist文件,默认情况下会提供支持app加载和运行所需要的多数重要的keys以及初始化对应的values。在App的加载运行时,系统会收集Info.plist文件中所包含的配置信息。根据App的需要,我们可以添加所需的额外的keys,当我们选中每行配置选项时,在key所属列的右侧,会出现“+”“-”示意的标记,

        单击加号,会在当前行的下一行插入新行,之后可以选择性的添加新key,并设置其value.plist的type一栏提供了value的可选数据类型,包括:String,Date,Array,Number,Data,Boolean,Dictionary。

     
           因为plist也属于文本文件,并以XML格式进行内容的组织,我们可以用任何支持UTF-8的文本编辑器打开并对其进行各种编辑操作。但因为Xcode本身提供的对于plist文件内容的操作已经非常方便,基本上利用Xode编辑plist还是首选。要查看XML下plist文件的内容我们可以选中TestPro-Info.plist文件然后右键——>Open As ——>Source Code 



         之后打开的文件格式如下:



    Info.plist中key的类型分类

    根据功能的分类,Info.plist文件的keys大致划分为以下几类

             Core Foundation Keys              

              该类的keys的特点是以CF为前缀,用以代表Core Foundation,描述了一些常用的行为项

             Lanch Services Keys 
                加载服务项,提供了App加载所依赖的配置,描述了app启动的方式选择。 

             Cocoa Keys 
                Cocoa框架或Cocoa Touch框架依赖这些keys来标识更高级别的配置项目,如app的main nib文件,主要类。这些key描述影响着Cocoa和Cocoa Touch框架初始化和运行app的运行方式 

             UIKit Keys 
                描述IOS Apps的行为,每个IOS应用都依赖于Info.plist的keys来与IOS系统通信。Xcode提供了生成的plist文件提供了所有app所需的那些比较重要的keys。 
                但app可能需要扩展默认的plist来描述更多的信息,如定制app启动后的默认旋转方向,标识app是否支持文件共享等等。 

             OS X Keys 
                描述了Mac Apps的行为,本章不描述。 

    Info.plist配置项说明

    1、设置启动图标(CFBundleIcons)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <key>CFBundleIcons</key>
    <dict>
      <key>CFBundlePrimaryIcon</key>
      <dict>
          <key>CFBundleIconFiles</key>
          <array>
              <string>Icon</string>
              <string>Icon@2x</string>
              <string>Icon_120@2x</string>
          </array>
      </dict>
    </dict>

    2、设置启动闪屏图片(UILaunchImages)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    <key>UILaunchImages</key>
    <array>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>7.0</string>
          <key>UILaunchImageName</key>
          <string>Default</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>{320, 568}</string>
      </dict>
      <dict>
          <key>UILaunchImageMinimumOSVersion</key>
          <string>7.0</string>
          <key>UILaunchImageName</key>
          <string>Default</string>
          <key>UILaunchImageOrientation</key>
          <string>Portrait</string>
          <key>UILaunchImageSize</key>
          <string>{320, 480}</string>
      </dict>
    </array>

    3、设置版本号相关

    (1)设置Bundle的版本号(Bundle versions string, short)。

    一般包含该束的主、次版本号,这个字符串的格式通常是“n.n.n”(n表示某个数字,如1.1.1)。第一个数字是束的主要版本号,另两个是次要版本号。该关键字的值会被显示在Cocoa应用程序的关于对话框中。该关键字不同于CFBundleVersion,它指定了一个特殊的创建号。而CFBundleShortVersionString的值描述了一种更加正式的并且不随每一次创建而改变的版本号。

    1
    2
    
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>

    (2)设置应用程序版本号(Bundle version)。

    每次部署应用程序的一个新版本时,将会增加这个编号,用于标识不同的版本。

    1
    2
    
    <key>CFBundleVersion</key>
    <string>1.0</string>

    4、设置字体相关(Fonts provided by application)

    在iOS应用中需要使用系统提供的字体之外的字体,可以将字体文件(.ttf/.odf)复制到项目文件中,另外需要在Info.plist中添加Fonts provided by application的项,对应的源码文件如下:

    1
    2
    3
    4
    5
    6
    
    <key>UIAppFonts</key>
    <array>
      <string>华文行楷.ttf</string>
      <string>华文新魏.ttf</string>
      <string>黑体_GB2312.ttf</string>
    </array>

    P.S关于如何使用系统支持的字体信息:

    (1)在调用字体的时候,要使用字体名。字体名不是文件名,而是字体的Family Name。Family Name可以在Font Book中查看。

    label.font = [UIFont fontWithName:@"字体名称" size:16.0];

    (2)遍历出系统支持的全部字体

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
    for(int indFamily = 0; indFamily < familyNames.count; ++indFamily)
    {
      NSLog(@"Family Name: %@", [familyNames objectAtIndex:indFamily]);
      NSString *fontFamilyName = [familyNames objectAtIndex:indFamily];
      NSArray *fontNames = [[NSArray alloc] initWithArray:[UIFont fontNamesForFamilyName:fontFamilyName]];
      for(int indFont = 0; indFont < fontNames.count; ++indFont)
      {
          NSLog(@"   Font Name: %@", [fontNames objectAtIndex:indFont]);
      }
    }

    5、设置应用名称(Bundle display name)

    1
    2
    
    <key>CFBundleDisplayName</key>
    <string>应用程序名称</string>

    可以通过在InfoPlist.strings中使用配置让应用在不同的语言环境下显示不同的应用名称,如在English中使用CFBundleDisplayName="Hello World";配置应用程序的名称为Hello World,在Chinese的环境下使用CFBundleDisplayName="你好世界";配置应用程序的名称为你好世界

    6、设置应用标识号(Bundle identifier)

    1
    2
    
    <key>CFBundleIdentifier</key>
    <string>com.devzeng.demo</string>

    7、设置应用支持的屏幕方向(Supported interface orientations)

    iOS应用程序支持以下四个方向的设置:UIInterfaceOrientationPortrait(默认竖直方向,HOME键向下)、UIInterfaceOrientationLandscapeLeft(横屏靠左)、UIInterfaceOrientationLandscapeRight(横屏向右)和UIInterfaceOrientationPortraitUpsideDown(竖直方向倒置,HOME键向上)

    对应的配置源码如下:

    1
    2
    3
    4
    5
    6
    7
    
    <key>UISupportedInterfaceOrientations</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
      <string>UIInterfaceOrientationPortraitUpsideDown</string>
    </array>

    8、设置应用程序是否支持后台运行(Application does not run in background)

    通过UIApplicationExitsOnSuspend可以设置iOS的应用程序进入到挂起状态下是否立即退出,设置为YES表示不支持后台运行退出到后台立即退出,设置为NO表示支持后台运行。

    (1)设置支持后台运行

    1
    2
    
    <key>UIApplicationExitsOnSuspend</key>
    <false/>

    (2)设置不支持后台运行

    1
    2
    
    <key>UIApplicationExitsOnSuspend</key>
    <true/>

    参考资料

    1、《Information Property List Key Reference》

    2、《iOS工程中的info.plist文件的完整研究》

    3、《在iOS程序中使用自定义字体》

    展开全文
  • 2017-01-22 14:37 编辑: suiling 分类:iOS开发 来源:VV木公子的简书 46 27291 国际化iOS语言本地化 招聘信息: 技术合伙人 移动应用开发项目经理 iOS Developer 微信书城开发 数字图书商城开发 iOS维护 ...

    2017-01-22 14:37 编辑: suiling 分类:iOS开发 来源:VV木公子的简书

    46 27291

    国际化iOS语言本地化

    招聘信息:

     

    原文

    前言

    语言本地化,又叫做语言国际化。是指根据用户操作系统的语言设置,自动将应用程序的语言设置为和用户操作系统语言一致的语言。往往一些应用程序需要提供给多个国家的人群使用,或者一个国家有多种语言,这就要求应用程序所展示的文字、图片等信息,能够让讲不同语言的用户读懂、看懂。进而提出为同一个应用程序适配多种语言,也即是国际化。语言国际化之所以又叫做语言本地化,这是站在每个用户的角度而言的,是指能够让用户本地、本土人群能够看懂的语言信息,顾名思义,语言本地化。其实语言本地化 == 语言国际化!

    本文将分如下7个主要章节一步一步讲解如何完全本地化一个App。

    • 配置需要国际化的语言(国际化的准备工作)
    • App名称本地化
    • 代码中字符串本地化
    • 多人开发情况下的字符串本地化
    • 图片本地化(两种方式两种方式)
    • 查看/切换本地语言
    • storyboard/xib本地化

    配置需要国际化的语言

    配置需要国际化的语言,这也是国际化之前的准备工作,无论我们是国际化App名称、代码中的字符串、图片、还是storyboard和xib,都需要进行这一步的准备工作(一个项目中需要且仅需要配置一次)。

    选中project->Info->Localizations,然后点击"+",添加需要国际化/本地化的语言,如下图(默认需要勾选Use Base Internationalization):

    此处以添加法语为例,如下图:

    弹出如下对话框,直接点击finish,如下图:

    同理,添加简体中文、繁体中文、韩语,最终结果如下图:

    备注: “zh-Hans”和“zh-Hant”是简体中文和繁体中文的缩写。这是标准的缩写。H可大写也可小写。"en"是英语的缩写。ko是韩语的缩写,fr是法语的缩写。其他语言请百度各国语言缩写即可查询。

    (一)应用名称本地化/国际化

    应用名称本地化,是指同一个App的名称,在不同的语言环境下(也就是手机设备的语言设置)显示不同的名称。比如,微信在简体中文环境下App名称显示为“微信”,在英语环境下显示为“weChat”。下面就开始进行应用名称本地化。

    选中Info.plist,按下键盘上的command + N,选择Strings File(iOS->Resource->Strings File)

    文件名字命名为InfoPlist,且必须是这个名字(因每个人电脑设置差异,此处本人电脑没有显示strings后缀名):

    点击create后,Xcode左侧导航列表就会出现名为InfoPlist.strings的文件,如下图:

    选中InfoPlist.strings,在Xcode的File inspection(Xcode右侧文件检查器)中点击Localize,目的是选择我们需要本地化的语言,如下图:

    注意:在点击Localize之前,一定要保证我们已经添加了需要本地化的语言,也就是上面配置需要国际化的语言那一步(步骤:project->Info->Localizations,然后点击"+",添加需要国际化/本地化的语言)。

    点击Localize后,会弹出一个对话框,展开对话框列表,发现下拉列表所展示的语言正是我们在上面配置的需要国际化的语言,选择我们需要本地化的语言,然后点击对话框的Localize按钮,如下图:

    注意:如果我们没有在 PROJECT 中配置需要国际化的语言(project->Info->Localizations,然后点击"+"),上图下拉列表中将只会出现"Base"和"English"选项,English语言是系统默认的语言,其他需要国际化的语言(例如中文简体、法语)必须通过上面的配置本地化语言那一步手动添加。

    然后我们发现Xcode右侧的File inspection变成了下图的样式:

    接下来,勾选French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下图:

    此时,Xcode左侧的InfoPlist.stirings左侧多了一个箭头,点击箭头可以展开,如下图所示:

    从上图可以看出,InfoPlist.strings文件下包含了English、French、Chinese(Simplified)、Chinese(Traditional)、Korean这五种语言的文件。

    原理:程序启动时,会根据操作系统设置的语言,自动加载InfoPlist.strings文件下对应的语言文件,然后显示应用程序的名字。

    接下来,我们分别用不同的语言给InfoPlist.strings下的文件设置对应的名字。

    (1)在InfoPlist.strings(english)中加入如下代码:

    1

    2

    // Localizable App Name是App在英语环境环境下显示的名称

    CFBundleDisplayName = "Localizable App Name";

    备注:CFBundleDisplayName可以使用双引号,也可以不使用双引号!

    (2)在InfoPlist.strings(French)中加入如下代码:

    1

    CFBundleDisplayName = "Le nom de la localisation de l'App";

    (3)在InfoPlist.strings(Chinese(Simplified))中加入如下代码:

    1

    CFBundleDisplayName = "国际化App名称";

    (4)在InfoPlist.strings(Chinese(Traditional))中加入如下代码:

    1

    CFBundleDisplayName = "國際化App名稱";

    (5)在InfoPlist.strings(Korean)中加入如下代码:

    修改模拟器语言环境为English。App名称如下图:

    修改模拟器语言环境为Chinese(Simplified)。App名称如下图:

    修改模拟器语言环境为Chinese(Traditional)。App名称如下图:

    修改模拟器语言环境为Franch。App名称如下图:

    修改模拟器语言环境为Korean。App名称如下图:

    备注:过去本地化App名称,需要在Info.plist文件中增加一个名为“Application has localized display name”的BOOL类型的Key,并且需要将其值设置为YES(如下图)。目的是让App支持本地化App名称。但现在可以忽略这一步。

    至此,本地化App名称已经演示完毕,其步骤就是:

    • 在Project的设置中通过点击"+"添加需要本地化的语言。
    • 然后在Xcode右侧的File inspection中点击Localize,选中需要本地化App名称的语言。
    • 最后在每个语言对应的文件中以key = value(CFBundleDisplayName = "App名称";);的形式设置App的名称。

    (二)代码中字符串的本地化

    所谓字符串本地化,就是指App内的字符串在不同的语言环境下显示不同的内容。比如,"主页"这个字符串在中文语言环境下显示“主页”,在英语环境下显示“home”。下面就开始进行字符串本地化。

    其实字符本地化和App名称本地化过程如出一辙,只是创建的文件名成不一样(连同后缀一起,文件名必须是Localizable.strings),其他步骤完全相同。为了能够让大家彻底了解,此处还是会把步骤一一贴出来。

    和应用名称本地化一样,首先需要command + N,选择iOS -> Resource -> Strings File

    文件名必须命名为Localizable

    备注:因本人电脑取消隐藏文件后缀名,所以会自动补全.strings后缀名。

    文件创建成功,查看Xcode左侧导航列表,发现多了一个名为Localizable.strings的文件,如下图:

    选中Localizable.strings文件,在Xcode的File inspection中点击Localize,目的是选择我们需要本地化的语言(和本地化App名称同理),如下图:

    依次选择English->Localize,如下图:

    然后我们发现Xcode右侧的File inspection变成了下图的样式:

    然后勾选French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下图:

    此时,Xcode左侧的Localizable.stirings左侧多了一个箭头,展开后,如下图所示:

    然后我们只需要在Localizable.strings下对应的文件中,分别以Key-Value的形式,为代码中每一个需要本地化的字符串赋值,如下图:

    本地化代码中的字符串,如下图:

    我们只需要使用Foundation框架自带的NSLocalizedString(key, comment)这个宏根据Key获取对应的字符串,然后赋值给代码中的字符串。

    1

    2

    3

    // NSLocalizedString(key, comment) 本质

    // NSlocalizeString 第一个参数是内容,根据第一个参数去对应语言的文件中取对应的字符串,第二个参数将会转化为字符串文件里的注释,可以传nil,也可以传空字符串@""。

    #define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

    不同语言环境下运行效果,如下图:

    英语环境下:

    法语环境下:

    简体中文环境下:

    繁体中文环境下:

    韩语环境下:

    如此一来,我们就实现了代码中字符串的本地化。

    技巧

    • 其实,我们不需要给Localizable.strings(English)文件添加Key-Value。原因如下:系统根据某个key去获取对应的字符串时,如果没有找到,那么就会以key作为value返回。所以如果我们在Localizable.strings(English)文件中没有添加 click = "hit";那么在english环境下btn最终显示的title会是click.
    • 切换语言无需在模拟器中设置,只需要在Xcode中进行如下设置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (语言代码)。例如,我们模拟器此时虽然是韩语,如果通过上述步骤设置为zh-Hans,那么语言环境将会变为汉语,如下图:

    运行效果:

    如此一来,切换语言变得更加简单,无需在模拟器的设置中进行繁琐的语言切换。

    (三)多人开发情况下的字符串本地化

    项目开发中,独立开发的还是少数。经常会有多人开发的情况,这种情况,如果多人同时操作本地化文件,极有可能会存在冲突。另一方面,我们又不希望自己的本地化文件受到对方的污染,也就是说,我们不希望对方操作我们的本地化文件。但是上面介绍的代码中字符串的本地化是使用的是默认的文件名"Localizable",因为启动程序时,系统将根据语言加载相应的文件得到其对应的字符串文件,这个字符串可以通过系统将NSLocalizedString中的宏生成名为“Localizable.strings”的文件。那么如何让系统加载我们自己命名的本地化文件而非系统默认的Localizable.strings呢?这就是 NSLocalizedStringFromTable(<#key#>, <#tbl#>, <#comment#>)的用处。

    也就是说,如果你的strings文件名字不是Localizable而是自定义的话,如VVS.strings,那么你就得使用NSLocalizedStringFromTable这个宏来读取本地化字符串。

    1

    2

    3

    4

    // key:系统根据key取字符串

    // tbl:自定义strings文件的名字

    // comment:可以不传

        NSLocalizedStringFromTable(, , )

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    #import "ViewController.h"

     

    @interface ViewController ()

    @property (weak, nonatomic) IBOutlet UIButton *btn;

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        NSString *title = NSLocalizedStringFromTable(@"click", @"VVS", nil);

        [self.btn setTitle:title forState:UIControlStateNormal];

    }

     

    @end

     

     

    /Users/wangyanping/Desktop/兔兔有/兔兔有/zh-Hans.lproj/Localizable.strings:-1: read failed: Couldn't parse property list because the input data was in an invalid format

    运行效果,如下图:

    如此一来,我们就可以挣脱别人的strings文件和系统默认的Localizable.strings文件,自己另起炉灶。

    (四)图片本地化

    本地化图片,有两种方式,第一种方式和本地化代码中的字符串一样,通过NSLocalizedString(key,comment)来获取相应的字符串,然后根据这个字符串再获取图片。

    • 方式一

    1

    2

    3

    NSString *imageName = NSLocalizedString(@"icon", nil);

    UIImage *image = [UIImage imageNamed:imageName];

    self.imageView.image = image;

    • 方式二

    首先需要添加需要本地化的语言,具体步骤参考第一章配置需要国际化的语言。因为我演示的demo中在本地化App名称时已经添加了需要国际化的语言。所以不需要再设置。

    将图片拖入工程中,例如“icon.png”,然后选中icon.png,展开Xcode右侧的file Inspection,点击Localize,如下图:

    然后,右击icon.png->show in Finder,我们发现在en.Iproj文件中多了一个名为icon.png的图片,如下图:

    当然,zh-Hans.Iproj文件夹下并没有图片,如下图:

    我们只需给zh-Hans.Iproj添加一个名字也为icon.png的图片。如下图:

    然后把zh-Hans.Iproj中的icon.png拖到Xcode中,如下图:

    然后发现,icon.png左边出现了一个可以展开的三角形。如下图:

    展开后发现里面包含两张图片,如下图:

    然后控制器中添加如下代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    #import "ViewController.h"

     

    @interface ViewController ()

    @property (weak, nonatomic) IBOutlet UIImageView *imageView;

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        NSString *imageName = NSLocalizedString(@"icon", nil);

        UIImage *image = [UIImage imageNamed:imageName];

        self.imageView.image = image;

    }

     

    @end

    english环境下运行效果如下:

    中文环境改下运行效果如下:

    其他语言环境,例如法语、中文繁体、韩语,操作步骤完全和上面相同。都是在对应的.Iproj文件夹下添加同名的图片,然后把图片拖放到Xcode中,不再赘述。

    (五)查看/切换本地语言

    原理:应用启动时,首先会读取NSUserDefaults中的key为AppleLanguages对应的value,该value是一个String数组,也就是说,我们访问这个名为AppleLanguages的key可以返回一个string数组,该数组存储着APP支持的语言列表,数组的第一项为APP当前默认的语言。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    #import "ViewController.h"

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        NSArray *languages = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];

        NSString *currentLanguage = languages.firstObject;

        NSLog(@"模拟器当前语言:%@",currentLanguage);

    }

    @end

    -控制台打印结果:

    同理,既然我们可以通过AppleLanguages这个key从NSUserDefaults中取出语言数组,那么我们也可以给AppleLanguages这个key赋值来达到切换本地语言的效果,从此以后,我们就无需频繁的去模拟器的设置->通用->语言与地区 中切换语言。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    #import "ViewController.h"

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

        // 切换语言前

        NSArray *langArr1 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];

        NSString *language1 = langArr1.firstObject;

        NSLog(@"模拟器语言切换之前:%@",language1);

     

        // 切换语言

        NSArray *lans = @[@"en"];

        [[NSUserDefaults standardUserDefaults] setObject:lans forKey:@"AppleLanguages"];

     

        // 切换语言后

        NSArray *langArr2 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];

        NSString *language2 = langArr2.firstObject;

        NSLog(@"模拟器语言切换之后:%@",language2);

    }

    @end

    回想一下,我在上面的技巧一节中提过:切换语言无需在模拟器中设置,只需要在Xcode中进行如下设置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (语言代码)。其实本质上就是给NSUserDefaults中名为AppleLanguages的key赋值。

    未完待续...

     

    展开全文
  • App本地化的需要不用讲大家也都明白,本文将介绍一种简单的方法来实现字符串的本地化。 在不考虑本地化的情况下,我们如果在代码中给一个Button定义title,一般会这样写: btn.titleLable.text = @"Example ...

    App本地化的需要不用讲大家也都明白,本文将介绍一种简单的方法来实现字符串的本地化。

    在不考虑本地化的情况下,我们如果在代码中给一个Button定义title,一般会这样写:

    btn.titleLable.text = @"Example Button";

     

    也许我们已经写了很长的代码才考虑到本地化的问题,大可不必头疼,这时候,我们要做的是把代码从头扫一遍,然后把每个会显示给用户看的字符串做如下修改:
    (对于内部使用的字符串就用不着本地化了)

    btn.titleLable.text = NSLocalizedString(@"btn_title", nil);

    NSLocalizedString是一个定义在NSBundle.h中的宏,其用途是寻找当前系统语言对应的Localizable.strings文件中的某个key的值。
    第一个参数是key的名字,第二个参数是对这个“键值对”的注释,在用genstrings工具生成Localizable.strings文件时会自动加上去。

     

    到目前为止,我们还没有生成Localizable.strings文件。这是一个逆向的过程,也就是先写好调用过程,再生成strings资源文件。

    当我们把所有的.m文件都修发好了,就该genstrings工具出场了。
      1. 启动终端,进入工程所在目录。
      2. 新建两个目录,推荐放在资源目录下。
        目录名会作用到Localizable.strings文件对应的语言,不能写错了。这里zh-Hans指简体中文,注意不能用zh.lproj表示。

    mkdir zh-Hans.lproj
    mkdir en.lproj

      3. 生成Localizable.strings文件

    genstrings -o zh-Hans.lproj *.m
    genstrings -o en.lproj *.m

      -o <文件夹>,指定生成的Localizable.strings文件放置的目录。
      *.m,扫描所有的.m文件。这里支持的文件还包括.h, .java等。

      4. 右键点击工程的Resources目录,选择“New Group”,添加两个目录zh-Hans.lproj和en.lproj。
      5. 在新建的group中添加刚刚生成的Localizable.strings文件。
      6. 最后在Localizable.strings文件中,修改每个key所对应的内容,就大功告成了。

     

    说了一大堆,其实操作起来还是很简单的,总的来讲就是两条:
      1. 在代码里用NSLocalizedString获取要本地化的字符串
      2. 用genstrings扫描代码文件,生成Localizable.strings,然后加到工程中。 

    最后祝大家的产品早日走向世界。

    展开全文
  • ios info plist配置说明

    2014-10-21 15:51:46
    基础没打牢,写点东西就要查询
  • 前些天升级到Xcode4.5,现在正在用Xcode4.5+IOS6开发项目,当使用国际化时,遇到了一点问题,之前版本Xcode上新建Localizable.strings后,添加语言的“+”号不见了,找了半天无果,自己研究了下,后来在...
  • Key: Application can be killed immediately after launch (NSSupportsSuddenTermination) Value:BOOL ... 指定应用程序是否可以被杀死,以便更快地关闭或注销操作。... 表示系统是否可以彻底杀死的应用程序以...
  • 1代理delegation 2通知中心Notification Center 3键值观察key value observing,KVO 下面分析比较一下这三者: 上面的三种模式是什么? 三种模式都是一个对象传递事件给另外一个对象,并且不要他们有耦合。...
  • 风险点 1、class-dump有些文件会报错,需要查看下 ...4、9.2.5的iOS系统对应的Xcode 8是有docset的,后面的Xcode都有新的文件格式了,下面有介绍,需要自己分析,但是数据结构有点乱,可能我我还...
  • 苹果UTI 统一类型标识符,通过文件后缀打开对应APP
  • iOS NSLocalizedString

    2016-12-29 14:43:13
    首先选择Localizable.strings(English)文件,添加如下内容: "loading" ="Loading..."; "title.conversation" = "Conversations"; "title.addressbook" = "AddressBook"; "title.setting" = "Setting"; ...
  • . 在创建一个新的Xcode工程后,会 在Supporting Files文件夹下自动生成一个工程名-Info.plist的文件,这个是对工程做一些运行期配置的...Source Code或者Property List可以进行编辑,本文会重点介绍一些在iOS开发...
  • plist配置说明

    2013-11-11 11:43:44
    Key: Application can be killed immediately after launch (NSSupportsSuddenTermination) Value:BOOL ... 指定应用程序是否可以被杀死,以便更快地关闭或注销操作。... 表示系统是否可以彻底杀死的应用程序以...
  • 首先新建一个名为Localizable.strings的资源文件 完成后选中该文件,在属性选择器中可以看到多了个按钮: 点击这个按钮后,出现国际化语言选择框,但只有一个English的选项: 没关系,继续,点击...
  • 首先选择Localizable.strings(English)文件,添加如下内容: "loading" ="Loading..."; 然后选择Localizable.strings(Chinese)文件,添加如下内容: "loading" ="加载中..."; 内容注意一定要...
  • ios 本地化国际化

    2017-11-02 18:59:21
    文本信息国际化(代码国际化):包括应用名称(InfoPlist.strings),按钮,警告提示信息以及界面中显示的静态文字; Xib/Storyboard 国际化:同一个界面和场景可以提供多个本地化版本的xib和storyboard 文件; 资源...
1 2 3 4 5 ... 20
收藏数 886
精华内容 354
关键字:

.strings的用处 ios