如何本地化iOS info.plist文件中的字符串?

时间:2014-09-09 04:28:16

标签: ios xcode plist beta

您可能知道 iOS 8 需要 NSLocationWhenInUseUsageDescription 键才能使用用户的位置。我已将此密钥和一些常规信息添加到我的信息plist中。 enter image description here

如何在plist文件中使用翻译字符串?

- 更新 -

我已经有了一个Localizable字符串。我只是想知道我可以使用类似的东西 plist字符串内的NSLocalizedString(MYSTRING,nil)。我知道我可以创建多个info.plist文件进行本地化,但我想知道可能有一种更简单的方法。

12 个答案:

答案 0 :(得分:415)

您应该使用InfoPlist.strings文件来本地化Info.plist的值。要执行此操作,请转到File->New->File,在Strings File的{​​{1}}标签下选择Resource,将其命名为iOS,然后创建。打开并插入要本地化的InfoPlist值,如:

Info.plist

现在您可以使用翻译本地化NSLocationWhenInUseUsageDescription = "Description of this"; 文件。祝你好运!

编辑:

选择本地化选项,或根据需要启用本地化

right side editor

您应该能够在左侧编辑器中看到该文件。

left side editor

修改

HereInfoPlist.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

要专门回答您的问题,当您向项目enter image description here添加新语言时,您有机会选择要包含的InfoPlist文件(如果您有多个目标,则会有多个Info plist文件)。获取以下屏幕所需要做的就是点击本地化下的+并选择一种新语言来添加支持。 enter image description here

一旦添加,它将在给定语言的相应lproj目录中创建必要的字符串文件。

- 编辑 -

为了清楚起见,iOS将使用plist条目的键作为本地化字符串文件中的键,根据用户当前选择的语言替换Plist文件的字符串。

答案 4 :(得分:4)

对于在尝试添加本地化时遇到info.plist问题的人,例如在Xcode 9中。

您需要进入info.plist localiazble,然后单击文件检查器中的localize按钮,如下所示。

当您添加新的本地化时,info.plist将包含在文件资源中。

enter image description here

答案 5 :(得分:4)

提示

  1. 请记住,默认情况下,iOS Simulator利用系统语言。请同时在iOS模拟器设置中更改语言(和地区),以便测试翻译。

  2. 本地化字符串(请参阅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文件旁边-实际文件位置可能在项目中的任何位置

View in XCode

)在翻译时请谨慎使用键的简称。

我尝试使用Privacy - Camera Usage Description,但是工作密钥为NSCameraUsageDescription

答案 8 :(得分:1)

逐步本地化Info.plist:

  1. 在x代码中找到“资源”文件夹(位于根目录中)
  2. 选择文件夹“资源”
  3. 然后按主菜单File-> New-> File ...
  4. 在“资源”字符串文件部分中选择,然后按Next
  5. 然后在“另存为”字段中仅写入InfoPlist(“ I”大写和“ P”大写)
  6. 然后按创建
  7. 然后选择在Re​​sources文件夹中创建的InfoPlist.strings文件,并在右侧菜单中按“本地化”按钮
  8. 然后从“项目导航器”中选择项目,然后从项目列表中选择“项目”。
  9. 在底部的信息标签中,您可以根据需要选择尽可能多的语言(在“本地化”部分中)
  10. 您可以在资源文件夹中看到的语言
  11. 要从info.plist文件本地化值(“键”),可以使用文本编辑器打开并获取所有要本地化的键
  12. 您可以像上面的示例一样在任何InfoPlist.strings中编写任何密钥作为示例

“ 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.lprojen.lprojxx.kproj.等,每个文件夹中都有InfoPlist.strings。 该文件具有这样的行(密钥周围没有引号,并在末尾加分号):

NSLocationWhenInUseUsageDescription = "My explanation why I need this";

检查您的语言中是否包含您的语言>信息: enter image description here

还要检查project.pbxproj文件,它位于XXX.xcodeproj / project.pbxproj中: 它应该使用您的所有语言编写代码(例如en,fr等)

enter image description here

但是即便如此,它还是没有用。最后,我注意到CFBundleLocalizations文件中的Info.plist键。 (要在XCode中将其作为原始键值打开-在Info.plist文件上单击鼠标右键->打开方式->源代码) 确保数组中的值是代码而不是完整的单词,例如fr而不是French等。

<key>CFBundleLocalizations</key>
<array>
    <string>en</string>
    <string>ru</string>
    <string>lv</string>
</array>

然后再次检查您的设备是否设置为您要测试的语言。干杯

P.S。 “开发语言”不会影响您的问题,不必费心更改它。