【问题标题】:How to localize iOS 6 new Info.plist Privacy purpose strings?如何本地化 iOS 6 新的 Info.plist 隐私目的字符串?
【发布时间】:2012-09-15 20:56:18
【问题描述】:

Apple 为每个应用引入了新的隐私设置,允许用户决定是否允许应用访问用户的通讯录、日历、照片和提醒事项。当应用首次尝试访问这些资源之一时,用户将看到 UIAlertView,类似于应用想要访问位置时的已知机制。

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

现在我问自己如何本地化这些值?对于位置目的文本,我曾经使用 NSLocalizedString(...) 设置 CLLocationManager 实例的目的属性。如何使用 Info.plist 中的这些新键做类似的事情?

附录: 新的隐私密钥在以下链接中列出,但摘要列并未将它们列为可本地化: https://developer.apple.com/library/mac/#documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW14

【问题讨论】:

    标签: ios ios6 localization


    【解决方案1】:

    将密钥添加到支持文件中的本地化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”文件。所以你必须手动将文件添加到你的项目中。
    • 在此处查找用于您给定目的的密钥(最后更新于 2014 年 2 月 - 使用 InfoPlist.strings 文件中的 key 值或 Xcode 名称在您的常规 Info.plist 文件中):Information Property List Key Reference: Cocoa Keys
    【解决方案2】:

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

    【讨论】:

    • 对我不起作用。本地化 Info.plist 后构建失败并显示以下消息“无法从 '/home/username/Git/iOS/AppName/Resources/AppName-Info.plist' 读取数据:文件“AppName-Info.plist”无法因为没有这样的文件而被打开。”
    • 看起来您正在尝试打开 Info.plist 文件,而不是 .strings 文件。字符串文件位于它们各自的本地化文件夹中。看看这个例子github.com/Abizern/SimpleLocalisationTesting 在 iOS 项目中,你可以看到我如何使用本地化 .lproj 文件夹中的 InfoPlist.strings 文件来为不同的本地化使用不同的应用程序名称。
    • 好的,这适用于 CFBundleDisplayName,但只是部分。主屏幕显示来自 InfoPlist.strings 的本地化字符串,但如果我想使用 '[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]' 以编程方式查询该值,则此方法不起作用。关于 NSContactsUsageDescription 的本地化,我无法测试这是否有效,因为对话框只显示一次。 (原因:删除App重装不会让系统忘记用户是否允许App访问通讯录的决定。)
    • 与其使用 NSBundle 方法加载字符串,不如直接使用带有 InfoPlist.strings 文件的 NSLocalizedString 宏作为要使用的表?
    • 因为我无法测试这是否适用于本地化 NSContactsUsageDescription,直到 Philipp 在下面的回答,我尝试通过 NSBundle 方法对其进行测试。 NSLocalizedString 宏对我来说似乎是合乎逻辑的,但这是保证对话框显示正确的字符串吗?恕我直言,没有。但是,我可以对其进行测试,并且您的答案有效。将其标记为正确,非常感谢!
    猜你喜欢
    • 2020-06-04
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多