如何在iOS信息中本地化字符串。plist文件?

如你所知,iOS 8需要NSLocationWhenInUseUsageDescription键来使用用户的位置。我已经添加了这个键和一些一般信息到我的信息plist。 enter image description here

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

——更新——

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

193532 次浏览
我强烈推荐阅读苹果的指南,并查看以下列出的WWDC资源: 国际化与本土化主题 < / p >

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

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

——编辑

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

你应该使用InfoPlist.strings文件(保留I和amp;P大写)来本地化Info.plist的值。要做到这一点,去File->New->File,选择iOSResource选项卡下的Strings File,命名为InfoPlist,并创建。打开并插入你想本地化的Info.plist值,如下:

NSLocationWhenInUseUsageDescription = "Description of this";

现在你可以用翻译来本地化InfoPlist.strings文件。

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

右侧编辑器

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

left side editor

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

在这里Info.plist键本地化的官方文档。

学分< em >马可< / em >,谢谢你在这个回答中包含图片!

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

.

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

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

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

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

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

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

因此,我创建了一个名为InfoPlist.strings的字符串文件,并将其放在xx. xml文件中。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将被包含在文件资源中。

enter image description here

提示

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

  2. 本地化字符串(参见Apple docs 在这里)应该是

    NSLocationWhenInUseUsageDescription = "Description of this";
    

    而不是(引用“…”)

    "NSLocationWhenInUseUsageDescription" = "Description of this";
    

逐步本地化Info.plist:

  1. 在Xcode中找到Resources文件夹(位于根目录下)
  2. 选择文件夹“资源”
  3. 然后按主菜单文件->新建->文件…
  4. 在“资源”部分选择;字符串文件并按下一步
  5. 然后在Save As字段中写入InfoPlist ONLY ("I"(眼)大写和"P"capital - P后面的l (ell) 应该是大写的)
  6. 然后按创建
  7. 然后选择“InfoPlist”文件。在“资源”文件夹中创建的字符串,并按下右侧菜单中的“localizequot”按钮;
  8. 然后从项目导航器中选择项目,并从项目列表中选择项目
  9. 在底部的信息选项卡中,你可以选择你想要的语言(在本地化部分有)
  10. 您可以在资源文件夹中看到的语言
  11. 从info中本地化值("key")你可以用文本编辑器打开Plist文件,并获得你想本地化的所有键
  12. 您可以在任何InfoPlist中编写任意键作为示例。类似上面例子的字符串

“NSLocationAlwaysAndWhenInUseUsageDescription" =“;blabla";

“NSLocationAlwaysUsageDescription" =“;blabla2";

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

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

当使用InfoPlist.strings文件时(在XCode中,它应该放在Info.plist文件旁边-真实的文件位置可能在项目中的任何地方

View in XCode

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

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

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

我确实有文件夹Base.lprojen.lprojxx.kproj.等,每个文件夹都有InfoPlist.strings。 这个文件有这样的行(键周围没有引号,末尾有一个分号):

NSLocationWhenInUseUsageDescription = "My explanation why I need this";

检查你的项目中是否有你的语言;信息: enter image description here < / p > 同样,检查project.pbxproj文件,它在XXX.xcodeproj/project.pbxproj中: 它应该有你所有的语言代码(en, fr,等等)

enter image description here

但即便如此,它也没有起作用。最后,我注意到Info.plist文件中的CFBundleLocalizations键。(要在XCode中以原始键值的形式打开它- Info.plist文件上的鼠标右键->Open As ->源代码) 确保数组中的值是代码而不是完整的单词,例如fr而不是French
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ru</string>
<string>lv</string>
</array>

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

附注:“发展语言”;不会影响你的问题,别费心改了。

对于更新的XCode 12 / 13 /…

1. 在你的项目中创建一个新的InfoPlist.string文件。

选择你的项目,点击右键,选择新建文件 .

Select the type of file 'Strings file ' .

Name it 'InfoPlist' and create it

2. 选择您的文件,您应该会看到右边的边栏选项"Localize"

Select localalize in the right sidebar .

Done. < / >

3.如果你想在项目的Info >>本地化

它会自动创建一个“infoplist .string”的副本。对于您添加的新语言。

添加更多语言到您的项目。 < / >