可爱触摸 – iOS应用程序的非英语默认语言?

我正在为欧洲的客户开发一个应用程序。我是美国的英语讲师。我们的应用程序将支持多种语言,但不支持英语。我有我们的应用程序中的所有字符串翻译的Localized.strings文件,正确设置为不同的语言,它们都工作正常,当设备设置为正确的语言(设备的语言是德语=应用程序正确本地化为德语) 。

当设备未设置为我们支持的语言之一时,例如,在设置为英语的手机上,存在问题。我们希望手机回到德国在这样的情况下,但这不是发生。我们看到的是,手机正在使用在Settings.app的国际部分的语言列表中最高的语言。对于我的手机,列表上最高的非英语语言是法语,因此当我运行该应用程序时,它被本地化为法语。如果我将我的手机更改为德语,然后回到英语(更改语言列表中的顺序),应用程序然后本地化为德语。

如何确保应用程式内定为不支援语言的德文?我使用this tutorial来设置项目的区域设置。这包括删除在首次本地化文件时创建的默认“英语”区域设置。在项目文件中,我添加了:

developmentRegion = de;

此外,在Info.plist,我有

<key>CFBundleDevelopmentRegion</key>
<string>de</string>

没有成功。

任何想法将不胜感激!

默认为特定的语言不是你应该努力的。假设居住在法国并流利地说法语的日本用户的手机设置为日语。你的应用默认为德语,尽管它有一个法语翻译;我想这不是你想要的,它当然不是用户想要的。

因此,我建议尊重用户设置的语言优先级。

由于你不想支持英语,但已经用英语开发的应用程序,最简单的事情,你可以做的是只是摆脱编译后的en.lproj。这将使应用程序只有您计划支持的语言,iPhone将选择最适合用户的语言,如iPhone的默认设置。

删除特定本地化有一个非常简单的解决方案:

让Xcode使用所有当前的本地化构建应用程序,并在代码签名之前删除en.lproj文件夹,并且该语言的所有本地化文件都消失了。你可以通过添加一个运行脚本构建阶段到目标,很容易做到这一点,包含这一行代码(它是一个Bash脚本):

rm -r "${TARGET_BUILD_DIR}/${PRODUCT_NAME}.app/en.lproj"

代码签名总是在所有构建阶段完成后启动,因此只需将构建阶段放在当前阶段的末尾。

请注意,这会增加构建时间,因为Xcode会重新创建所有英语文件,因此您可能希望在测试期间禁用此步骤。

我希望这是一个可行的解决方案。

关于“在不存在适当的本地化的情况下,应用程序必须回到德语”:

问题是什么是适当的本地化?如果用户的第三个选择是法语(2种不支持的语言之后),此解决方案将使应用程序回退到法语,这是一个适当的本地化。比用用户的第五选择更合适,德语,用手。

应用程序启动时会发生什么:操作系统按照“首选项”中的设置下降用户语言列表,直到找到匹配的本地化,并使用此语言。许多应用程序默认为英语而不是德语的原因很简单,因为英语出现在德语以上的大多数用户语言列表上。系统没有固有的语言偏好。如果删除英语翻译,则只有您要支持的语言存在,并且在这些语言中,将采用用户列表中较高的语言。

http://stackoverflow.com/questions/4072349/non-english-default-language-for-ios-app

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:可爱触摸 – iOS应用程序的非英语默认语言?