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


258

如您所知,iOS 8需要NSLocationWhenInUseUsageDescription键才能使用用户的位置。我已将此密钥和一些常规信息添加到我的信息列表中。 在此处输入图片说明

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

-更新-

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


您是否解决过这个问题,我也在努力将NSLocationWhenInUseUsageDescription本地化吗?
奥利弗·皮尔曼

Answers:


489

您应该使用InfoPlist.stringsfile本地化的值Info.plist。为此,请转到File->New->FileStrings File在的Resource标签下选择iOS,为其命名InfoPlist并创建。打开并插入Info.plist要本地化的值,例如:

NSLocationWhenInUseUsageDescription = "Description of this";

现在,您可以InfoPlist.strings使用翻译本地化文件。祝好运!

编辑:

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

右侧编辑

您应该也可以在左侧编辑器中看到该文件。

左侧编辑器

编辑:

Info.plist密钥本地化的官方文档。

积分马可,感谢包括在这个答案的图片!


15
创建字符串文件之后,您是否还需要在Info.plist文件中包括该密钥,还是可以安全地从其中删除?
rounak

11
提示:完全使用名称“ InfoPlist.strings”,请勿使用其他名称。例如,我的原始infoplist文件被命名为其他名称,但是我需要完全使用此名称才能使其正常工作。
Sjoerd Perfors

22
在模拟器上测试本地化时。我不得不更改模拟器本身的语言,而不仅仅是xcode目标中的语言。只是对其他人的警告。
约翰·韦伯

10
正确的用法是keyname =“ your text”; 例如:NSLocationWhenInInUseUsageDescription =“您的文字”
Magurizio

10
警告:此文件中的密钥不应带有引号,这与常规本地化有所不同。例如:NSMicrophoneUsageDescription =“您的描述”;
Yuchao Zhou

33

以上所有内容都不适合我(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中创建文件的版本),在我的情况下,这种方式不起作用。


2
为什么不包括指向适当文档的链接?
侏罗纪'17

3
这里万一有人链接到苹果的文档的相关页面感兴趣:developer.apple.com/library/archive/documentation/General/...
弯头

以及我们如何确定xx?例如英语,可以是en,En,Eng,English等?抱歉,如果它是我的初学者,这是一个愚蠢的问题
Awais Nasir

您的答案对我有用,除了后备语言方案,应用程序总是使用后备语言而不是英语,尽管我的英语值出现在Info.plist文件中,但我也尝试过base.lproj
Awais Nasir

19

如果有任何问题,请确保您添加了:

“可以混合本地化的资源” =是

进入info.plist。在我的情况下,只是忽略了InfoPlist.strings文件。


15

提示

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

  2. 本地化字符串(请参阅此处的 Apple文档)应为

    NSLocationWhenInUseUsageDescription = "Description of this";

    而不是(带有引号“ ...”)

    "NSLocationWhenInUseUsageDescription" = "Description of this";

有价值的补充,但是我认为这应该是在各自答案下的评论,而不是新答案。还要注意,“ 363”不是帖子标识符,而是答案的投票数(此后此数字已更改)。
John J. Camilleri '18 October

7
我没有50信誉的评论。
朱塞佩·贝卡里

是否在密钥周围使用引号“ ...”并不重要,例如:("NSLocationWhenInUseUsageDescription"="description"有效)。可以有或没有。
mluisbrown

12

我强烈建议阅读Apple指南,并查看此处列出的WWDC资源: 国际化和本地化主题

为了专门回答您的问题,当您在项目中添加新语言时,您在此处输入图片说明就有机会选择要包含的InfoPlist文件(如果您有多个目标,则将有多个Info plist文件)。要获得以下屏幕,所有您需要做的就是点击Localizations(本地化)下的+,然后选择一种新的语言来添加对它的支持。 在此处输入图片说明

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

- 编辑 -

请注意,iOS会根据用户当前选择的语言,使用plist条目的键作为本地化字符串文件中的键,将Plist文件的字符串换出。


3
只翻译一个键就翻译整个plist是一个过大的杀伤力。在此处查找更多信息:bit.ly/1yBUTru
RGML 2014年

2
对于XCode 9而言,它根本不是真的。添加新语言时,它永远不会要求plist本地化。
汤姆(Tom)

我将需要针对Xcode 9进行调查-尚未有机会在新的Xcode中进行测试。
Matt S.

11

逐步本地化Info.plist:

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

“ NSLocationAlwaysAndWhenInInUseUsageDescription” =“ blabla”;

“ NSLocationAlwaysUsageDescription” =“ blabla2”;

就是所有的工作,您已经本地化了info.plist文件!


4

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

您需要使info.plist可本地化,方法是进入文件并单击文件检查器中的localize按钮,如下所示。

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

在此处输入图片说明


3
你有什么问题吗 当我向本地化添加两种语言时,我无法构建项目,因为xcode表示“由于没有这样的文件,无法打开文件info.plist。–
mkkrolik

2
@mkkrolik我现在遇到同样的问题。您找到解决方案了吗?
Todanley '18年

@Todanley跳过此解决方案,它不适用于我。请改用InfoPlist.strings。
mkkrolik '18年

@mkkrolik谢谢你的工作。而且,在使用模拟器进行测试时,我必须更改模拟器的语言设置而不是目标语言才能生效。
Todanley '18年

3

正如RGML所说,您可以创建一个InfoPlist.strings,对其进行本地化,然后添加您的密钥和值,如下所示:“ NSLocationWhenInUseUsageDescription” =“帮助找到我!

它将密钥添加到指定语言的info.plist中。


0

就我而言,一切都已正确设置,但仍然找不到InfoPlist.strings文件。

唯一有效的方法是,再次删除InfoPlist.strings文件并将其添加到项目中。


0

在我的情况下,本地化不起作用的原因是名称中的“-”符号。示例:“ aero-Info.plist”和本地化文件:“ aero-InfoPlist.strings”和“ aeroInfoPlist.strings”无效。


0

使用InfoPlist.strings文件时(在XCode中应将其放置在Info.plist文件旁边-实际文件位置可能在项目中的任何位置

在XCode中查看

),请谨慎使用键的简称进行翻译。

我正在尝试使用Privacy - Camera Usage Description,但是工作键是NSCameraUsageDescription

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.