你可能知道iOS 8需要NSLocationWhenInUseUsageDescription键来使用用户的位置。我已经添加了这个键和一些一般信息到我的信息plist。

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

——更新——

我已经有一个Localizable字符串。我只是想知道我能不能用一些 NSLocalizedString(MYSTRING,nil)在plist字符串内。我知道我可以创建多个文件的信息。plist的本地化,但我想知道是否有一个更简单的方法。


我强烈建议阅读苹果的指南,并查看以下列出的WWDC资源: 国际化与本土化主题

具体来说,当您向项目中添加一种新语言时,您有机会选择要包含哪些InfoPlist文件(如果您有多个目标,则会有多个Info plist文件)。你所需要做的就是点击本地化下的+,并选择一种新的语言来添加支持。

添加完成后,它将在适当的lproj目录中为给定语言创建必要的字符串文件。

——编辑

需要明确的是,iOS会根据用户当前选择的语言,将Plist条目的键作为本地化字符串文件中的键,为Plist文件替换字符串。


你应该使用InfoPlist。字符串文件(保留I和P大写)来本地化Info.plist的值。进入“File->New->File”,在iOS的“Resource”页签下选择“Strings File”,命名为InfoPlist,进行创建。打开并插入信息。你想本地化的Plist值:

NSLocationWhenInUseUsageDescription = "Description of this";

现在可以本地化InfoPlist了。带有翻译的字符串文件。

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

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

注意:在模拟器上测试本地化时。你需要改变模拟器本身的语言而不仅仅是Xcode目标中的语言。(约翰·韦伯致谢)

这是信息的官方文档。Plist键本地化。

感谢马可,感谢你在这个回答中包含的照片!


正如RGML所说,您可以创建一个InfoPlist。字符串,本地化它,然后添加你的键和值,像这样: "NSLocationWhenInUseUsageDescription" = "Help To locate me!";

它将添加到您的信息的关键。Plist指定的语言。


如果有些东西不工作,请确保您添加:

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

进入info.plist。在我的例子中是InfoPlist。Strings文件被忽略了。


以上所有的都不适合我(XCode 7.3),所以我阅读了苹果的参考资料,它比上面描述的要简单得多。苹果公司表示:

本地化值不存储在信息中。Plist文件本身。 方法中存储特定本地化的值 InfoPlist.strings文件。你把这个文件放进去 与用于存储的特定于语言的项目目录相同 相同本地化的其他资源。

因此,我创建了一个名为InfoPlist的字符串文件。字符串,并将其放在xx中。xx语言的lproj文件夹(并使用File->Add Files to…将其添加到项目中)。就是这样。不需要“本地化资源可以混合”键= YES,也不需要InfoPlist。基音字符串。Lproj或en.lproj。

应用程序使用Info。如果在特定语言的文件中找不到键,则Plist key-value作为默认值。因此,我把我的英语价值放在信息。Plist文件和翻译的语言特定文件,测试和一切工作。

特别是,不需要对InfoPlist进行本地化。字符串(它在基类中创建文件的一个版本。lproj, en。Lroj和xx.lproj),在我的情况下,这样做是行不通的。


在我的例子中,所有的设置都是正确的,但仍然是InfoPlist。字符串文件未找到。

唯一真正起作用的是,删除并添加InfoPlist。将文件再次字符串到项目。


对于任何遇到信息问题的人。当尝试添加本地化时,plist不被包括,比如在Xcode 9中。

你需要制作信息。Plist localiazble通过进入它并单击文件检查器中的本地化按钮,如下所示。

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


Tips

记住,iOS模拟器在默认情况下使用你的系统语言。请在iOS模拟器设置中更改语言(和地区),以便测试您的翻译。 本地化字符串(见苹果文档)应该是 NSLocationWhenInUseUsageDescription = "此描述"; 而不是(引用“…”) "NSLocationWhenInUseUsageDescription" = "此描述";


逐步本地化Info.plist:

Find in the Xcode the folder Resources (is placed in root) Select the folder Resources Then press the main menu File->New->File... Select in section "Resource" Strings File and press Next Then in Save As field write InfoPlist ONLY ("I" (eye) capital and "P" capital - the l (ell) after the P should not be capital) Then press Create Then select the file InfoPlist.strings that created in Resources folder and press in the right menu the button "Localize" Then you Select the Project from the Project Navigator and select the The project from project list In the info tab at the bottom you can as many as language you want (There is in section Localizations) The language you can see in Resources Folder To localize the values ("key") from info.plist file you can open with a text editor and get all the keys you want to localize You write any key as the example in any InfoPlist.strings like the above example

“NSLocationAlwaysAndWhenInUseUsageDescription”=“blabla”;

“NSLocationAlwaysUsageDescription”=“blabla2”;

这就是所有的工作,你已经本地化了你的信息。plist文件!


在我的情况下,本地化没有工作,原因是名称中的'-'符号。 例如:“aero-Info.plist” 和本地化文件:“aero-InfoPlist。字符串”和“aeroInfoPlist。字符串“没有工作。


使用InfoPlist时。字符串文件(在XCode中,它应该放在信息旁边。Plist文件-真实的文件位置可能在项目中的任何地方

)小心使用键的短名称进行翻译。

我试图使用隐私-相机使用描述,但工作密钥是NSCameraUsageDescription


除了已接受的答案(项目在Flutter上,但基本与本地相同):

我有文件夹Base。lproj, en。lproj xx.kproj。等等。每个字符串。 这个文件有这样的行(键周围没有引号,末尾有一个分号):

NSLocationWhenInUseUsageDescription = "我解释为什么我需要这个";

检查你的你的项目>你的语言:

另外,检查项目。pbxproj文件,位于XXX.xcodeproj/project.pbxproj: 它应该有你所有的语言代码(en, fr等)

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

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

再次检查您的设备是否设置为您正在测试的语言。干杯

注:“开发语言”不会影响您的问题,不要费心更改它。


对于更新的XCode 12 / 13 /…

1. 创建一个新的InfoPlist。项目中的字符串文件。

2. 选择您的文件,您应该会看到右边的边栏选项“本地化”

3.如果您想在项目的Info >>本地化中添加更多语言

它会自动创建一个“InfoPlist”的副本。字符串”为您添加的新语言。


iOS本地化。plist

如果在InfoPlist.string中设置key,可以跳过在.plist中定义key

.plist

InfoPlist.string

"NSPhotoLibraryAddUsageDescription" = "To download image";