美文网首页iOS开发iOSiOS地图
iOS 设置APP的名称(浅述APP版本国际化与本地化)

iOS 设置APP的名称(浅述APP版本国际化与本地化)

作者: 霖溦 | 来源:发表于2016-03-07 16:52 被阅读17249次

    前言

    App的名字设置方式有很多种,如果在App打包上线时不做修改,最终App的名字就是Xcode在建立工程时的名字。好的习惯是工程建立时使用英文(pinyin),那么App也就是“英文”名字了,虽然Xcode也支持直接用中文命名工程(甚至是方法名……),但有时也会因此产生一些不必要的麻烦甚至莫名其妙的bug。
    本文主要介绍两种设置App名称的方法,第一种较为简单,第二种涉及简单的版本国际化与本地化(Localization)的问题。笔者对于两个方法的认知也是较为基础的,如有不妥之处,还望斧正。

    1.Bundle display name

    先看此方法的具体设置步骤:

    • 1.建立工程如下,如果不设置App名,默认的App名就是工程名了。
    • 2.点击工程-TARGETS-Info,添加“Bundle display name”,string值填写要设置的App名称。
    • 3.再次编译,效果如下,这个方法就是这么简单了。


    具体也没太多好说的,检索App名称设置时,大部分答案也是这个,因为比较简单。

    这里提一下Bundle name和Bundle display name:

    Bundle name - is folder name, where your app (including executable file and all resources) will be stored (Cool Program.app)。建议不要修改bundle name
    Bundle display name - is what will be shown on iPhone screen,即当你安装该app到iPhone上显示的name。
    注意:Bundle Display name must correspond to Bundle name,即bundle display name和bundle name不能相差太远。例如bundle name设置为 TheApplication, 而 bundle display name设置为“金瓶梅”,则apple会拒绝你的app。

    2.InfoPlist.strings->CFBundleDisplayName

    这种方法较为繁琐,但是可以支持多语言版本名称的设置,即Localization,也先看具体步骤:

    • 1.新建一个Strings File,命名为InfoPlist.strings(命名必须固定,感谢nyh1006同学纠正)。


    • 2.点击工程-PROJECT-Info-Localizations,添加简体中文支持,如果想支持繁体,也可继续添加,其他语言亦然。

    • 3.点击之前创建的InfoPlist.strings - 点击右边的“Localizion”- 添加简体中文

    可以选择支持英文



    • 4.分别设置中英文名字
      "CFBundleDisplayName" = "中文名字";
      "CFBundleDisplayName" = "EnglishName";
      名字字符串自己填写就好,这里只是示范

    • 5.编译工程
      分别切换模拟器的设置中的语言至中英文模式,分别查看appiocn下面的名字的变化:


    3.关于默认语言的设置:Localization native development region

    Xcode建立工程时,默认语言环境是英文,所以在调用一些系统空间时(例如相机相册),其控制按键的标题都是英文显示的状态,快速的设置方法就是设置Localization native development region的值,具体步骤可以参考此文:Localization native development region 更改语言无效 中的第一段内容。

    4. Localizations版本国际化

    这个就是为了让APP支持多国语言环境,最好的Demo应该是环信的官方Demo,这里只是介绍一下简单的用法:

    • 1.同添加InfoPlist.strings的做法相同,添加一个Localizable.strings文件(名字固定)

    • 2.对应中英文(其他语言自行添加),分别添加下列语句:
      "alertTitle" = "标题";
      "alertMessage" = "信息";
      "alertOk" = "确认";
      "alertOther" = "其他";

      "alertTitle" = "title";
      "alertMessage" = "message";
      "alertOk" = "confirm";
      "alertOther" = "other";
      

    关于上述的key和value,只是示范,可自行定义,调用这些key-value需要利用NSLocalizedString(<#key#>, <#comment#>)系统宏,例如:NSLocalizedString(@"alertTitle", @"这是一句注解,根据情况写"),第一个参数即在strings文件中自定义的key,根据不同的语言环境,系统会自动检测这个key对应的value(中文还是英文),第二个参数是注释,为了便于理解,可以为nil。
    实际用例:
    - (void)createAlertViewWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancel:(NSString *)cancel andOther:(NSString *)other
    {
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancel otherButtonTitles:other, nil];
    [alert show];
    }
    //调用
    [self createAlertViewWithTitle:NSLocalizedString(@"alertTitle", @"这是一句注解,根据情况写") message:NSLocalizedString(@"alertMessage", @"") delegate:nil cancel:NSLocalizedString(@"alertOk", nil) andOther:NSLocalizedString(@"alertOther", nil)];

    分别设置系统的语言环境至中英文模式,效果如下:



    上面的写法看起来比习惯上直接写string去设置标题要麻烦许多,但是常用的标题可以进行二次宏定义管理,那样不仅使用方便,还便于统一管理。
    看一下环信Demo中的示范:


    本文只是简单介绍相关的用法,至于详细的说明,可以参考文章最后列出的参考文章,里面有不少不错的详细讲义。

    参考文章:
    1.Localization native development region 更改语言无效
    2.在iOS中如何设置默认语言
    3.Xcode 6 关于 iOS App 国际化问题
    4.iOS学习之iOS程序名称及内容国际化(本地化)
    5.如何修改已完成的工程的app名?
    6.如何修改iOS APP的项目名称
    7.iOS修改app名称
    8.ios xcode如何修改应用的名称
    9.请问如何修改app显示的名字?
    10.Bundle Name and Bundle Display Name
    11.iOS应用国际化教程(2014版)

    ·转载请声明出处·

    相关文章

      网友评论

      • foxwithboy:困扰了我这么多,原来是命名问题,三楼大佬好样的
      • PZcoder:感谢分享。。。
      • 沙暴送葬:系统的控件怎么随着选择的语言改变,像调用相机 麦克风那些权限时的文字,如果用 Localization native development region 然后写成 China,就写死了啊 这样不行
      • 梁森的简书:能在AppStore上做国际化的处理吗?(在中国显示中文App名称在美国显示英文App名称)
      • 不会算卦的杨大仙:楼主 那样做外面的app名字是国际化了,但是通过infoDictionary拿到的displayName好像不能根据当前语言去改变的样子
        霖溦:@不会算卦的杨大仙 哦哦,谢谢啦
        不会算卦的杨大仙:@霖溦 :smiley:搞定了 用localizedInfoDictionary可以拿到
        霖溦:@不会算卦的杨大仙 嗯,好像是的
      • 孤单的道行天尊:问一下,如何在 APP内部获取 APP 的英文名称?我这边总是只能获取到中文的
        孤单的道行天尊:@霖溦 但是APP 名称没有错啊.
        孤单的道行天尊:@霖溦 CFBundleDisplayName么..是的
        霖溦:@孤单的道行天尊 app名称是自己设置的吧
      • 狗狗臭鸡蛋:https://developer.apple.com/library/content/samplecode/UsingPhotosFramework/Introduction/Intro.html#//apple_ref/doc/uid/TP40014575
        这个是demo的地址,点击all photos之后,点击右下角的删除,是英文的,如何改为中文的呢??
        霖溦:@狗狗臭鸡蛋 是系统控件文本的话,info.Plist里Localization native development region,设置为China
      • fbc8f2ec390f:为什么我设置了不行呢,但是APP的名称会随着系统语言改变而改变
        fbc8f2ec390f:@霖溦 是Xcode 8 不知道为什么 我昨天自己也有用自己电脑(Xcode 7 )去调试.但是也还只是App名字被改了 里面的没有变化不知道是不是哪里设置错了
        霖溦:@珍惜丨身边啲1丶切丶 什么系统?我不知道ios10是否有变动,可以研究下
      • SacredBillows:那个命名必须确定是关键点,提示的好。
      • cae1021f4938:您好,请教一下如果是启动图片需要做国际化,有什么好的方案呢?
        霖溦:@丿愛護丶v小白楊 嗯,这个需要处理下,具体自己查一下吧
        cae1021f4938:@霖溦 就是这样,根据不同语言加载不同的启动图片.但是会出现短暂黑屏
        霖溦:@丿愛護丶v小白楊 没有明白,是指启动时的launch吗?是想根据中英文环境动态加载喽,如果是iOS7.1之后,用系统的LaunchScreen.storyboard可能容易些,如果是静态图片,那就不知道了,没有弄过,一般动态的启动图都是假的,是一层view
      • Freedom_Coco:很好,刚好需要做一个国际化的app
      • nyh1006:命名必须确定
        霖溦:@nyh1006 感谢纠正,原文已经修改,试了下,确实如此,之前写的时候,把InfoPlist文件名字改成了InfoPlist2,发现仍旧有效,所以才认为这个名字是不固定的,检查发现,原来是同时设置了Bundle display name。。。忘记删掉了。。。貌似在旧版的Xcode中,InfoPlist.string文件是默认创建的,就像pch文件那样。
        nyh1006:InfoPlist.strings和Localizable.strings必须是这名字,不能随意修改
        霖溦:@nyh1006 什么命名?
      • 文木拭水:不错,

      本文标题:iOS 设置APP的名称(浅述APP版本国际化与本地化)

      本文链接:https://www.haomeiwen.com/subject/loiakttx.html