您可能知道 iOS 8 需要 NSLocationWhenInUseUsageDescription 键才能使用用户的位置。我已将此密钥和一些常规信息添加到我的信息plist中。
如何在plist文件中使用翻译字符串?
- 更新 -
我已经有了一个Localizable字符串。我只是想知道我可以使用类似的东西 plist字符串内的NSLocalizedString(MYSTRING,nil)。我知道我可以创建多个info.plist文件进行本地化,但我想知道可能有一种更简单的方法。
答案 0 :(得分:415)
您应该使用InfoPlist.strings
文件来本地化Info.plist
的值。要执行此操作,请转到File->New->File
,在Strings File
的{{1}}标签下选择Resource
,将其命名为iOS
,然后创建。打开并插入要本地化的InfoPlist
值,如:
Info.plist
现在您可以使用翻译本地化NSLocationWhenInUseUsageDescription = "Description of this";
文件。祝你好运!
编辑:
选择本地化选项,或根据需要启用本地化
您应该能够在左侧编辑器中看到该文件。
修改强>
Here是InfoPlist.strings
键定位的官方文档。
答案 1 :(得分:26)
以上所有内容对我来说都不起作用(XCode 7.3)所以我读了Apple如何做的参考,它比上面描述的要简单得多。根据Apple的说法:
本地化值不存储在Info.plist文件本身中。 相反,您将特定本地化的值存储在 名为InfoPlist.strings的字符串文件。您将此文件放入 用于存储的特定于语言的项目目录 其他资源用于相同的本地化。
因此,我创建了一个名为 InfoPlist.strings 的字符串文件,并将其放在“xx”语言的xx.lproj文件夹中(并使用File-> Add Files将其添加到项目中)至 ...)。而已。不需要键“本地化资源可以混合”= YES,并且不需要base.lproj或en.lproj中的InfoPlist.strings。
如果无法在特定于语言的文件中找到密钥,则应用程序将使用Info.plist键值作为默认值。因此,我将我的英文值放在Info.plist文件中,并将翻译后的文件放在特定语言文件中,进行测试,一切正常。
特别是,没有必要本地化InfoPlist.strings(在base.lproj,en.lroj和xx.lproj中创建该文件的版本),在我的情况下,这样做不起作用
答案 2 :(得分:15)
如果某些内容无效,请确保添加:
“可以混合本地化资源”= YES
进入info.plist。就我而言,InfoPlist.strings文件只是被忽略了。
答案 3 :(得分:8)
我强烈建议您阅读Apple的指南,并查看此处列出的WWDC资源: Internationalization and Localization Topics
要专门回答您的问题,当您向项目添加新语言时,您有机会选择要包含的InfoPlist文件(如果您有多个目标,则会有多个Info plist文件)。获取以下屏幕所需要做的就是点击本地化下的+并选择一种新语言来添加支持。
一旦添加,它将在给定语言的相应lproj目录中创建必要的字符串文件。
- 编辑 -
为了清楚起见,iOS将使用plist条目的键作为本地化字符串文件中的键,根据用户当前选择的语言替换Plist文件的字符串。
答案 4 :(得分:4)
对于在尝试添加本地化时遇到info.plist问题的人,例如在Xcode 9中。
您需要进入info.plist localiazble,然后单击文件检查器中的localize按钮,如下所示。
当您添加新的本地化时,info.plist将包含在文件资源中。
答案 5 :(得分:4)
提示
请记住,默认情况下,iOS Simulator利用系统语言。请同时在iOS模拟器设置中更改语言(和地区),以便测试翻译。
本地化字符串(请参阅Apple文档here)应为
NSLocationWhenInUseUsageDescription = "Description of this";
而不是(带引号“ ...”)
"NSLocationWhenInUseUsageDescription" = "Description of this";
答案 6 :(得分:3)
正如RGML所说,您可以创建一个InfoPlist.strings,对其进行本地化,然后添加您的密钥和值,如下所示: “NSLocationWhenInUseUsageDescription”=“帮助找到我!”;
它会为指定语言的info.plist添加密钥。
答案 7 :(得分:2)
使用InfoPlist.strings
文件时(在XCode中应将其放置在Info.plist
文件旁边-实际文件位置可能在项目中的任何位置
)在翻译时请谨慎使用键的简称。
我尝试使用Privacy - Camera Usage Description
,但是工作密钥为NSCameraUsageDescription
答案 8 :(得分:1)
逐步本地化Info.plist:
“ NSLocationAlwaysAndWhenInUseUsageDescription” =“ blabla”;
“ NSLocationAlwaysUsageDescription” =“ blabla2”;
就可以了,您已经本地化了info.plist文件!
答案 9 :(得分:0)
在我的情况下,一切都设置正确但仍然找不到InfoPlist.strings文件。
唯一真正有效的方法是,删除并再次添加InfoPlist.strings文件到项目中。
答案 10 :(得分:0)
在我的情况下,本地化不起作用的原因是名称中的“-”符号。 示例:“ aero-Info.plist” 本地化文件“ aero-InfoPlist.strings”和“ aeroInfoPlist.strings”无效。
答案 11 :(得分:0)
除了可接受的答案(该项目在Flutter上,但与本地项目基本相同):
我确实有文件夹Base.lproj
,en.lproj
,xx.kproj.
等,每个文件夹中都有InfoPlist.strings
。
该文件具有这样的行(密钥周围没有引号,并在末尾加分号):
NSLocationWhenInUseUsageDescription = "My explanation why I need this";
还要检查project.pbxproj
文件,它位于XXX.xcodeproj / project.pbxproj中:
它应该使用您的所有语言编写代码(例如en,fr等)
但是即便如此,它还是没有用。最后,我注意到CFBundleLocalizations
文件中的Info.plist
键。 (要在XCode中将其作为原始键值打开-在Info.plist
文件上单击鼠标右键->打开方式->源代码)
确保数组中的值是代码而不是完整的单词,例如fr
而不是French
等。
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ru</string>
<string>lv</string>
</array>
然后再次检查您的设备是否设置为您要测试的语言。干杯
P.S。 “开发语言”不会影响您的问题,不必费心更改它。