您应该使用 InfoPlist.strings
文件(保留 I
和 P
大写)来本地化 Info.plist
的值。为此,请转到 File->New->File
,在 iOS
的 Resource
标签下选择 Strings File
,将其命名为 InfoPlist
,然后创建。打开并插入要本地化的 Info.plist
值,例如:
NSLocationWhenInUseUsageDescription = "Description of this";
现在您可以使用翻译本地化 InfoPlist.strings
文件。
选择本地化选项,或在需要时启用本地化,
https://i.stack.imgur.com/B4hNo.png
您应该也可以在左侧编辑器中看到该文件。
https://i.stack.imgur.com/mG8eT.png
注意:在模拟器上测试本地化时。您必须更改模拟器本身的语言,而不仅仅是 Xcode 目标中的语言。 (学分归于 John Webb)
Here 是 Info.plist
键本地化的官方文档。
感谢 Marco,感谢您在此答案中包含图片!
以上所有对我来说都不起作用(XCode 7.3),所以我阅读了 Apple 参考资料,了解如何做,它比上面描述的要简单得多。据苹果称:
本地化的值不存储在 Info.plist 文件本身中。相反,您将特定本地化的值存储在名为 InfoPlist.strings 的字符串文件中。将此文件放置在用于存储相同本地化的其他资源的特定语言项目目录中。
因此,我创建了一个名为 InfoPlist.strings 的字符串文件,并将其放在“xx”语言的 xx.lproj 文件夹中(并使用 File->Add Files to ... 将其添加到项目中)。而已。不需要键“可以混合本地化资源”= YES,也不需要 base.lproj 或 en.lproj 中的 InfoPlist.strings。
如果应用程序在语言特定文件中找不到键,则使用 Info.plist 键值作为默认值。因此,我将我的英语值放在 Info.plist 文件中,将翻译后的值放在语言特定文件中,经过测试,一切正常。
特别是,不需要本地化 InfoPlist.strings(它在 base.lproj、en.lroj 和 xx.lproj 中创建文件的一个版本),在我的情况下,这种方式不起作用。
逐步本地化 Info.plist:
在 Xcode 中找到文件夹 Resources(位于根目录中) 选择文件夹 Resources 然后按主菜单 File->New->File... 在“Resource” Strings File 部分中选择并按 Next 然后在 Save As 字段中写入 InfoPlist只有(“I”(眼睛)大写和“P”大写 - P 后面的 l(ell)不应该是大写)然后按 Create 然后选择在 Resources 文件夹中创建的文件 InfoPlist.strings 并在右侧菜单中按按钮“本地化”然后您从项目导航器中选择项目并从项目列表中选择项目在底部的信息选项卡中,您可以使用所需的任意语言(在“本地化”部分中有)您可以在资源中看到的语言文件夹 要本地化 info.plist 文件中的值(“键”),您可以使用文本编辑器打开并获取要本地化的所有键 您可以在任何 InfoPlist.strings 中编写任何键作为示例,如上面的示例
"NSLocationAlwaysAndWhenInUseUsageDescription"="blabla";
"NSLocationAlwaysUsageDescription"="blabla2";
这就是全部工作,您已经本地化了您的 info.plist 文件!
提示
请记住,iOS 模拟器默认会利用您的系统语言。请在 iOS 模拟器设置中更改语言(和地区)以测试您的翻译。本地化字符串(请参阅此处的 Apple 文档)应该是 NSLocationWhenInUseUsageDescription = "Description of this";而不是(带引号“...”)“NSLocationWhenInUseUsageDescription”=“这个描述”;
"NSLocationWhenInUseUsageDescription"="description"
有效)。它可以有或没有。
如果某些东西不起作用,请确保您添加了:
“本地化资源可以混合”=YES
进入 info.plist。在我的例子中,InfoPlist.strings 文件被忽略了。
我强烈建议您阅读 Apple 的指南,并查看此处列出的 WWDC 资源:Internationalization and Localization Topics
https://i.stack.imgur.com/tKc4E.png
添加后,它将在给定语言的相应 lproj 目录中创建必要的字符串文件。
- 编辑 -
为了清楚起见,iOS 将根据用户当前选择的语言,使用 plist 条目的键作为本地化字符串文件中的键,为您的 Plist 文件换出字符串。
对于在尝试添加本地化时遇到 info.plist 问题的任何人,例如在 Xcode 9 中。
您需要通过进入 info.plist 并单击文件检查器中的本地化按钮来使 info.plist 本地化,如下所示。
然后,info.plist 将包含在文件资源中,以供您添加新的本地化时使用。
https://i.stack.imgur.com/e17bt.png
除了接受的答案(该项目在 Flutter 上但与原生基本相同):
我确实有文件夹 Base.lproj
、en.lproj
、xx.kproj.
等,每个文件夹中都有 InfoPlist.strings
。这个文件有这样的行(键周围没有引号,末尾有分号):
NSLocationWhenInUseUsageDescription = "My explanation why I need this";
https://i.stack.imgur.com/kSDuZ.png
另外,检查 project.pbxproj
文件,它位于 XXX.xcodeproj/project.pbxproj:它应该包含所有语言的代码(en、fr 等)
https://i.stack.imgur.com/JatRz.png
但即便如此,它也没有奏效。最后,我注意到 Info.plist
文件中的 CFBundleLocalizations
键。 (在 XCode 中将其作为原始键值打开 - Info.plist
文件上的鼠标右键 -> 打开为 -> 源代码)确保数组中的值是代码而不是完整的单词,例如 {4 } 而不是 French
等。
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ru</string>
<string>lv</string>
</array>
并仔细检查您的设备是否设置为您正在测试的语言。干杯
PS“开发语言”不会影响您的问题,不要费心改变它。
正如 RGML 所说,您可以创建一个 InfoPlist.strings,对其进行本地化,然后添加您的键和值,如下所示:“NSLocationWhenInUseUsageDescription”=“帮助找到我!”;
它会将指定语言的密钥添加到您的 info.plist 中。
对于较新的 XCode 12 / 13 /...
1. 在您的项目中创建一个新的 InfoPlist.string 文件。
https://i.stack.imgur.com/egzN8.png
https://i.stack.imgur.com/fQbDO.png
https://i.stack.imgur.com/88PcT.png
2. 选择您的文件,您应该会看到右侧边栏选项“本地化”
https://i.stack.imgur.com/Ohyby.png
https://i.stack.imgur.com/wbg7G.png
3. 如果您想在项目的信息 >> 本地化中添加更多语言
它将自动为您添加的新语言创建“InfoPlist.string”的副本。
https://i.stack.imgur.com/abXYm.png
使用 InfoPlist.strings
文件时(在 XCode 中,它应放在 Info.plist
文件旁边 - 实际文件位置可能位于项目中的任何位置
https://i.stack.imgur.com/MfCAu.png
小心使用密钥的短名称进行翻译。
我试图使用 Privacy - Camera Usage Description
,但工作密钥是 NSCameraUsageDescription
在我的情况下,一切都设置正确,但仍然找不到 InfoPlist.strings 文件。
唯一真正起作用的是,删除 InfoPlist.strings 文件并将其再次添加到项目中。
在我的情况下,本地化不起作用的原因是名称中的“-”符号。示例:“aero-InfoPlist.plist”和本地化文件:“aero-InfoPlist.strings”和“aeroInfoPlist.strings”不起作用。
不定期副业成功案例分享