在iOS上编程实现info.plist的本地化

5
我在iOS上遇到了一个特定的翻译问题。我目前正在开发的应用程序从Web服务获取其显示的所有文本。除了以下情况,我已经能够实现这一点:
我还没有找到一种方法来以编程方式更改info.plist中使用的文本,该文本在我无法控制的代码中使用系统。我需要处理的是“隐私-相机使用说明”。到目前为止,我找到的所有文档都告诉我添加info.plist的本地化文本版本,但在这种特殊情况下,这对我没有帮助,因为不同的客户可能会为相同的语言指定不同的文本,有时我甚至不知道文本所处的语言,因此我不能仅仅依靠应用程序中的静态数据来选择适当的文本版本。
是否有任何方法可以通过编程方式设置此类文本,或者如果不可能捕获显示它的警报并将其替换为自己的警报?

1
info.plist 像 InfoPlist.strings 和 Localizable.strings 一样是可以本地化的。如果这不起作用,那么你别无选择。而且进一步讨论也没有意义。 - El Tomato
@ChristophO 这些字符串是请求权限的,因此它们是敏感的,并且在您发布应用程序之前会由苹果进行审核。出于安全考虑,您无法在不重新上传新版本到iTunes Connect的情况下更改它们。 - Cœur
2个回答

1
不,这是不可能的,我们不能在运行时更改Info.plist。但如果我在你的位置上,我会做一件事作为解决方案。从api中显示一个自定义的警报视图,其中包含您指定的文本。它将询问“我们将使用您的相机”。如果用户说“好”,则显示具有静态本地化字符串的系统警报视图以获取权限。它需要2次交互,但可以全面指导用户。

感谢您的提示。我猜这就是我要建议给客户的。我觉得很奇怪,从未考虑过这些文本可能在编译时无法确定。对于我所处理的事情,通常的程序是客户获得一个Web界面,在该界面上他们可以输入自定义版本的文本,以便与静态默认值不同,然后这些文本会在登录时发送到应用程序中,但我发现在iOS上使其工作非常复杂,因为它全部针对静态提供的翻译。 - ChristophO

0

您可以本地化info.plist文件本身。 从项目中,进入您的info.plist文件并打开实用程序选项卡,然后点击本地化。 对于不同的本地化,请在指定的键上使用不同的字符串。

注意

我自己没有尝试过,只是检查了一下是否可以本地化。还有一件事,使用这种方式,应用程序将使用设备的本地化(您无法使用库来切换应用程序使用的字符串表)


我确实知道这个问题,但它并不能帮助我在编译时指定文本的实际情况。就像我说的,我从 Web 服务获取所有文本。对于同一项,可能会有不同的文本,这取决于客户的配置。 - ChristophO
哦,那么你必须按照其他人建议的做法去做。因为它是在核心操作系统级别实现的,无论如何都无法访问它(除非使用私有API),你可以将其放置为空字符串,并弹出另一个警报或特定页面以进行警报(就像Facebook所做的那样)。苹果不会拒绝这种方法,苹果只强调用户知道他为什么要给予权限,如果您事先呈现描述为什么需要此权限的页面或警报,则他们会接受它。 - farzadshbfn

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