如何本地化iOS 6新的Info.plist隐私目的字符串?

27

苹果推出了新的应用程序隐私设置,允许用户决定应用程序是否可以访问用户的联系人、日历、照片和提醒事项。当应用程序首次尝试访问这些资源时,用户将看到一个UIAlertView,类似于应用程序要求位置访问权限的机制。

还可以设置目的字符串,让用户知道应用程序为什么需要访问。但是,现在这是通过Info.plist中的键来完成的,例如“隐私-联系人使用说明”(NSContactsUsageDescription)用于联系人。

现在我想知道如何本地化这些值?对于位置目的文本,我曾经使用CLLocationManager实例的purpose属性与NSLocalizedString(...)一起设置。如何使用Info.plist中的这些新键执行类似的操作呢?

补充: 新的隐私键列在以下链接中,但总结列未将它们列为可本地化: https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW14

2个回答

47

将密钥添加到支持文件中本地化的InfoPlist.strings中。 为此目的,它应该如下所示:

/* Localized version of location services purpose for Info.plist */
NSLocationUsageDescription = "here is your purpose to use location service";

如果您仍在使用Xcode 3.x创建的项目上工作,则没有“InfoPlist.strings”文件。因此,您需要手动将该文件添加到您的项目中。 - Tafkadasoh
1
在此处找到您所需用途的键(最后更新于2014年2月 - 在InfoPlist.strings文件中使用key值或在常规Info.plist文件中使用Xcode名称):信息属性列表键参考:Cocoa Keys - leanne

11

通过本地化InfoPlist.strings文件来本地化您的Info.plist。


对我不起作用。在本地化 Info.plist 后,构建失败,并显示以下消息:“无法从 '/home/username/Git/iOS/AppName/Resources/AppName-Info.plist' 读取数据:因为没有这样的文件,所以无法打开文件“AppName-Info.plist”。 - Tafkadasoh
看起来你正在尝试打开Info.plist文件,而不是.strings文件。字符串文件位于它们各自的本地化文件夹中。请参考此示例https://github.com/Abizern/SimpleLocalisationTesting,在iOS项目中,您可以看到我如何在本地化的.lproj文件夹中使用InfoPlist.strings文件来为不同的本地化使用不同的应用程序名称。 - Abizern
好的,这对于CFBundleDisplayName部分有效。主屏幕显示来自InfoPlist.strings的本地化字符串,但是如果我想通过“[[[NSBundle mainBundle] infoDictionary] objectForKey:@”CFBundleDisplayName“]”以编程方式查询该值,则无法正常工作。关于NSContactsUsageDescription的本地化,我无法测试是否有效,因为对话框仅显示一次。(原因:删除应用程序并重新安装不会让系统忘记用户的决定,即是否允许应用程序访问联系人。) - Tafkadasoh
为什么不直接使用NSLocalizedString宏,将InfoPlist.strings文件作为要使用的表格,而不是使用NSBundle方法来加载字符串呢? - Abizern
由于在 Philipp 在下面回答之前我无法测试本地化 NSContactsUsageDescription 是否有效,因此我尝试通过 NSBundle 方法进行测试。对我来说,NSLocalizedString 宏似乎可以工作,但这是否保证对话框显示正确的字符串呢?在我看来不是。然而,我刚刚测试了一下,你的答案有效。将其标记为正确,非常感谢! - Tafkadasoh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接