NSLocationWhenInUseUsageDescription本地化使用.strings文件无法工作

16
我已使用基本本地化完成将我的应用程序翻译成土耳其语。但是,我还需要翻译Info.plist文件中的NSLocationWhenInUseUsageDescription键。对于其他所有内容,我所做的正是如此:
前往文件检查器并选中土耳其语。

enter image description here

然后我进入了新的字符串资源,并通过将此键添加到本地化文件中完成了翻译:

enter image description here

"NSLocationWhenInUseUsageDescription" = "[我的土耳其位置权限描述]";

已保存,编译,甚至从设备中删除应用程序并重新构建,但没有效果。当我的应用程序请求位置权限时,说明文字仍然是英文的(我尝试在基本翻译文件下包含英语翻译,但它没有改变任何东西)。

其他所有内容都是土耳其语,翻译得很好。只有位置权限无法翻译。我还看到了如何在iOS info.plist文件中本地化字符串?并将"Localized resources can be mixed" = YES键添加到我的原始plist中(当然,作为CFBundleAllowMixedLocalizations,而不是字面上的那句话),但也没有改变任何东西。

我该如何解决这个问题?


尝试使用make clean命令,然后从DerivedData文件夹中删除该项目。 - Daniele Candotti
@DanieleCandotti 清理了构建文件夹,删除了DerivedData中的所有内容,移除了应用程序,重新启动了Xcode,重新构建。但问题仍然存在。 - Can Poyrazoğlu
尝试移除基础,然后添加英语。 - Daniele Candotti
@DanieleCandotti 完成。没有变化。 - Can Poyrazoğlu
3个回答

22

以下是在 Xcode 7.1 中适用的解决方法。

首先,进入项目目录并手动创建两个 InfoPlist.strings 文件,一个放在 en.lproj 文件夹内,另一个放在 fr.lproj 文件夹内。

这两个文件的内容应该如下:

NSLocationWhenInUseUsageDescription = "YOUR TEXT HERE";

由于文件不会自动显示在 Xcode 中,您需要手动将两个文件添加到项目 bundle 中。操作方法是在 Xcode 中右键单击项目名称,选择 Add files to X 选项,然后选择刚创建的文件。


如果您想测试结果并确保一切正常,仅更改Edit Scheme > Run > Options下的 Application Language 不够。

您需要通过 Settings > General > Language & Region > iPhone Language 更改 模拟器设备 语言。


Xcode 从检查器中开启本地化时,不会自动创建相应的文件/文件夹吗?或者您是在说 Xcode 跟踪(更改/删除/创建等)存在错误吗? - Can Poyrazoğlu
2
我尝试通过使用检查器菜单中的本地化按钮来本地化Info.plist,但对我没有用,即使清理、删除并多次重新尝试也不行。 - Zack Braksa
1
本地化过程中肯定有某个漏洞,很高兴看到您在手动创建文件/文件夹时没有遇到它。我会尝试一下。 - Can Poyrazoğlu
1
是的,在Xcode 7中,我甚至无法在检查器中使用本地化“Info.plist”按钮,因为每次我触摸它时Xcode都会崩溃。谢天谢地,Xcode 7.1修复了崩溃问题,但我猜整个过程还没有完全解决。 - Zack Braksa
我已经花了将近两个小时来理解为什么它对我不起作用。没有意识到我还需要改变实际的手机语言。我以为我可以像使用 NSLocalizedString 一样改变应用程序语言。谢谢。 - crashoverride777
显示剩余2条评论

3

我重新开始了。删除了翻译,清理了项目,然后再试。这次成功了。虽然我不知道为什么刚开始没成功。


@Zak,由于问题的不确定性质,我无法给出确切的答案,但如果你想保险起见,在尝试这些之前重置模拟器是没有坏处的 :) - Can Poyrazoğlu
我曾经遇到过完全相同的问题。蓝牙权限请求被翻译了,但位置没有。这解决了问题。 - Maël Pedretti

0

我的问题似乎是大小写敏感的:

我的 InfoPlist.strings 文件在 Finder 和 Xcode 中有一个小写的“i”(infoPlist),但需要是大写。

我更改了文件名和源 Xcode 项目中的引用,它现在可以工作了(或删除并重新创建正确的名称)。


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