【iOS】App Store介绍页中显示的语言列表如何设置

前言

不知道大家有没有发现,我们平常在App Store下应用的时候,有一些App,明明是一个中文的App,不管是App名字、介绍图、描述等等都是中文的,而且下载之后打开一看,App里面也只支持中文。
但是在商店介绍页的【语言】列表,显示该App支持的语言是却是【英文】。是不是感觉很违和,甚至很Low?
比如下面的这个游戏(这货排在了免费游戏排行榜第二,权游IP的力量很强大啊)就是这样。

【语言】一栏显示为英文

再看下微信就比较正常,基本上支持啥语言就有啥语言。


微信能够显示正确的语言列表

苹果是如何判断App支持的语言列表的?

现在的问题是,苹果是根据什么来知道该App支持什么语言,进而在这里显示出来的?
相信很多人都会不假思索地说在苹果开发者后台。
但是,我翻了好几圈没找到对应的设置……
这个问题困扰了我很久,直到我在Stack Overflow上面看到了这个答案
https://stackoverflow.com/questions/1887590/what-controls-the-list-of-supported-languages-of-an-iphone-app-in-itunes/4146668#4146668
摘抄答案如下:

I used a technical support incident to ask this question of Apple directly. Here is the answer:
"The list of languages supported by the app, as shown in the iTunes store screenshot you sent, is automatically determined by inspecting the submitted application bundle. Typically, this comes from the .lproj folders in a bundle, as the process (and iOS) use this to determine what languages the application can support. However, it is also possible to provide your own localization support system in the application without using .lproj folders (although this is typically much more work) -- in this scenario, the list of supported languages is specified in the application's plist file, via the CFBundleLocalizations key. See the following docs (and the guide linked to in the docs) for more info on this:
http://developer.apple.com/library/ios/#documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html%23//apple_ref/doc/uid/TP40009249-109552-TPXREF111 "

也就是说,这个显示是由ipa包来决定的。首先苹果会从上传到开发者后台的ipa包里面找.lproj文件夹,如果找到了,就根据这些文件夹支持的语言来确定。如果没有这些文件夹,那么就去找Info.plist文件的CFBundleLocalizations这个key的设置。

对各种情况进行测试

上面的哥们的答案是苹果回复的,算是官方答案。但是我在实际上测试的时候发现,情况并没有这么简单。
除了上面说的.lproj文件和CFBundleLocalizations之外,还有两个东西是需要考虑的。
一个是比较特殊的.lproj文件,这个文件的名字是base.lproj,本身并不属于任何的一种语言(为什么要说这个,因为在我们使用默认的模板创建一个App的时候,系统默认就是有这个文件的,不然你创建一个App,然后打包看下ipa包里面的内容?)。
另外一个就是Info.plist里面的CFBundleDevelopmentRegion这个key,这个创建App的时候系统会默认设置的。
以下是我对这几个参数做测试的一些记录。

  • .lproj文件指是ipa包里面的.lproj文件夹
  • CFBundleDevelopmentRegion代表的是CFBundleDevelopmentRegion这个key设置的值
  • CFBundleLocalizations这个key代表的是CFBundleLocalizations设置的值
  • 显示结果这个代表的就是最终的结果了
    对各种情况进行测试的记录及结果

这里有几点可以了解下:

  • .lproj文件是如何设置的?
    大概设置的位置在这里,点下“+”就能添加一种新的语言了。
    添加及减少.lproj文件类型的位置
  • 修改了之后如何快速知道设置.lproj文件有没有生成?
    编译了之后,直接在Products目录上面右键->Show In Finder就能打开编译好的app文件了,里面能找到你想要的(注意每次修改之前最好删除这个文件,不然可能会有缓存)
    Products目录
  • 如何知道最终的结果?难道需要上架了之后才能知道?
    如果这么搞我得被人打屎.......
    其实不需要这么麻烦,稍加留意你就会发现,当你将ipa包上传到苹果开发者后台之后,找到对应的构建版本,滑到最后面,你会看到下面的这些信息,其中,本地化版本显示的信息跟用户在AppStore的介绍页上面显示的语言列表是一致的。所以,想要知道结果的话,把ipa包上传到开发者后台,然后看下这里显示什么就知道了。
    开发者后台上面的构建版本的详细信息下面会有本地化语言列表显示

结论

从我的测试结果可以得出来以下几个结论(结合我之前的一些经验):

  • App Store介绍页中显示的语言列表的设置是由App决定的,跟苹果开发者后台(App Store Connect)并没有什么关系。
  • 主要跟ipa包根目录中的的.lproj文件,Info.plist文件中配置的CFBundleLocalizations的值以及CFBundleDevelopmentRegion的值有关。
  • 不管什么情况下,优先级排序是.lproj文件>CFBundleLocalizations的值>CFBundleDevelopmentRegion的值
  • base.lproj这个特殊的.lproj文件需要配合CFBundleDevelopmentRegion这个key的值才能最终确定语言的类型。比如base.lproj+CFBundleDevelopmentRegion=en-US相当于en.lproj

可选方案

所以,我们在实际使用中就可以利用这些结论进行设置了

  • 一种比较好的方案就是从.lproj文件下手,有多少种语言就设置多少个.lproj文件。这样也比较合理,因为对Info.plist和Storyboard文件设置多语言的话是需要使用这种方式的。具体如何设置这里不做讲解。大概设置的位置在这里
    设置lproj多语言的位置
  • 对于单语言的App来说,因为在默认的情况下系统会自动创建base.lproj文件,所以我们只要设置CFBundleDevelopmentRegion为指定的语言就可以了。比如简体中文直接设置成zh-CN。
  • 对于没有.lproj文件的App来说,单语言的话直接设置CFBundleDevelopmentRegion这个值就OK
  • 如果要设置多语言,但是又不想使用.lproj文件设置,那么设置CFBundleLocalizations这个key的值就是一个比较好的方案了。这个key的值是一个数组来说,要设置什么就设置什么,比较方便。
  • 对于Unity游戏来说,因为生成的Xcode工程文件本身是没有.lproj文件的,所以想要设置什么语言,直接添加CFBundleLocalizations这个key,然后设置值就可以了。

语言标识

知道了如何设置,还剩下一个问题,CFBundleDevelopmentRegion和CFBundleLocalizations有哪些值可以供我们设置呢?

  • CFBundleDevelopmentRegion
    这个Xcode内置了一些值,这些基本上够用了。

    Xcode内置的CFBundleDevelopmentRegion的值

    可以看出,基本上是属于 语言标识+地区标识这样子的配合。具体的话可以看下苹果文档里面关于CFBundleDevelopmentRegion的介绍,里面有关于这个key的值的标准。
    另外,CFBundleDevelopmentRegion默认值为$(DEVELOPMENT_LANGUAGE),那么DEVELOPMENT_LANGUAGE的语言是在哪里设置的呢?这个可以看下这篇文章

  • CFBundleLocalizations
    这个key Xcode本身也有内置的值,直接设置就好了。

    Xcode内置的CFBundleLocalizations的值

    基本上就是遵循ISO 639-1和ISO 639-2语言标准了。具体可以看下苹果文档关于CFBundleLocalizations的介绍以及苹果关于语言代号的介绍

参考

stackoverflow关于AppStore语言显示列表显示的答案
苹果文档里面关于CFBundleDevelopmentRegion的介绍
苹果文档关于CFBundleLocalizations的介绍
苹果关于语言代号的介绍
Xcode8.3 修改默认开发语言(Development Language)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容