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

Soh*_*eil 237 beta xcode plist ios

您可能知道iOS 8需要NSLocationWhenInUseUsageDescription键才能使用用户的位置.我已将此密钥和一些常规信息添加到我的信息plist中. 在此输入图像描述

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

- 更新 -

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

Fah*_*mov 444

您应该使用InfoPlist.stringsfile来本地化值Info.plist.要执行此操作,请转到File->New->File,Strings FileResource选项卡下选择iOS,命名InfoPlist并创建.打开并插入Info.plist要本地化的值,如:

NSLocationWhenInUseUsageDescription = "Description of this";
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

右侧编辑

你应该能够在左侧编辑器中看到该文件.

左侧编辑

编辑:

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

  • 在模拟器上测试本地化时.我不得不改变模拟器本身的语言而不仅仅是xcode目标中的语言.只是警告其他人. (18认同)
  • 创建字符串文件后,您是否还需要在Info.plist文件中包含该密钥,或者从那里删除是否安全? (13认同)
  • 提示:使用名称"InfoPlist.strings",而不是其他任何内容.例如,我的原始infoplist文件被命名为其他东西,但我需要完全使用此名称才能使其工作. (9认同)
  • 正确的用法是keyname ="your text"; 例如:NSLocationWhenInUseUsageDescription ="您的文字" (8认同)
  • 注意:此文件中的密钥不应带引号,这与正常的本地化不同.例如:NSMicrophoneUsageDescription ="您的描述"; (7认同)
  • 请注意,文件名 InfoPlist.strings **区分大小写**。我花了 2 个小时调试某人将其命名为 infoPlist.strings 的错误(缺少大写的“I”) (6认同)
  • 作品.不要忘记先清理项目,并确保它是iDevcie上新安装的版本或重置模拟器上的内容. (4认同)
  • 创建InfoPlist.strings文件并将其添加到项目后,我选择Info.plist的本地化选项时出错.相反,我们应该本地化"InfoPlist.strings"文件.(它们是不同的文件) (3认同)
  • 请注意,左侧的字符串必须与此答案中的字符串完全相同,而不是描述的基本语言版本. (3认同)
  • 花了30分钟后,你需要添加到那个`InfoPlist.strings`作为KEY(左边的值)是该权限的KEY,它始终是权限名称(例如NSPhotoLibraryAddUsageDescription),而不是值你放入那个信息plist. (3认同)
  • @TejaNandamuri,不,您可以通过选择并转到文件检查器-> 本地化,按“本地化”按钮并选择正确的本地化来本地化该文件。 (2认同)
  • 请注意,Info.plist由属性keyex翻译:`NSLocationWhenInUseUsageDescription"="您的文本";`或`"CFBundleDisplayName"="应用程序名称";` (2认同)
  • 要回答之前的评论,您应该将键/值保留在实际的 plist 文件中。如果在 InfoPlist.strings 的本地化版本中找到相应的值,则将使用该值。如果某些键不在实际的 Info.plist 文件本身中,iTunes Connect 将在您提交应用程序时触发警告。 (2认同)

Zvi*_*Zvi 31

以上所有内容对我来说都不起作用(XCode 7.3)所以我阅读了Apple如何做的参考,它比上面描述的要简单得多.根据Apple的说法:

本地化的值不存储在Info.plist文件本身中.而是将特定本地化的值存储在名为InfoPlist.strings的字符串文件中.将此文件放在与用于存储同一本地化的其他资源相同的特定于语言的项目目录中.

因此,我创建了一个名为InfoPlist.strings的字符串文件,并将其放在"xx"语言的xx.lproj文件夹中(并使用File-> Add Files to ...将其添加到项目中).而已.不需要键"Localized resources can mixed"= YES,并且不需要base.lproj或en.lproj中的InfoPlist.strings.

如果无法在特定于语言的文件中找到密钥,则应用程序将使用Info.plist键值作为默认值.因此,我将我的英文值放在Info.plist文件中,并将已翻译的文件放在特定于语言的文件中,进行测试,一切正常.

特别是,不需要本地化InfoPlist.strings(在base.lproj,en.lroj和xx.lproj中创建该文件的版本),在我的情况下,这样做不起作用.

  • 如果有人感兴趣,这里是苹果文档相关页面的链接:https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html (4认同)
  • 为什么不包含指向相应文档的链接? (2认同)

Ale*_*age 31

对于较新的 Xcode 12 / 13 /...

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

选择您的项目,单击右键并选择“新建文件”

选择文件类型“字符串文件”

将其命名为“InfoPlist”并创建它

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

在右侧边栏中选择本地化

完毕。

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

它会自动为您添加的新语言创建“InfoPlist.string”的副本。

向您的项目添加更多语言。


tuv*_*vok 15

如果某些东西不起作用,请确保添加:

"可以混合本地化资源"= YES

进入info.plist.在我的例子中,InfoPlist.strings文件被忽略了.


Yod*_*ama 14

您可以使用字符串目录,

Xcode 15 +

只需创建一个名为 的字符串目录文件InfoPlist

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述


Mat*_* S. 11

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

要在项目中添加新语言时专门回答您的问题在此输入图像描述,您有机会选择要包含的InfoPlist文件(如果您有多个目标,则您将拥有多个Info plist文件).获取以下屏幕所需要做的就是点击本地化下的+并选择一种新语言来添加支持. 在此输入图像描述

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

- 编辑 -

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

  • 将整个plist翻译成一把钥匙是一种过度杀伤力.在这里找到更多信息:bit.ly/1yBUTru (3认同)
  • 对于XCode 9来说,情况并非如此.在添加新语言时,它会要求plist本地化. (2认同)

Giu*_*ari 9

提示

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

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

    NSLocationWhenInUseUsageDescription = "Description of this";
    
    Run Code Online (Sandbox Code Playgroud)

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

    "NSLocationWhenInUseUsageDescription" = "Description of this";
    
    Run Code Online (Sandbox Code Playgroud)

  • 我没有50信誉的评论。 (4认同)
  • 是否在键周围使用引号“...”并不重要,例如:(`“NSLocationWhenInUseUsageDescription”=“description”`有效)。它可以有或没有。 (2认同)

Kir*_*zin 9

除了已接受的答案(该项目是在 Flutter 上但与原生基本相同):

我确实有文件夹Base.lprojen.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>
Run Code Online (Sandbox Code Playgroud)

并仔细检查您的设备是否设置为您正在测试的语言。干杯

PS“开发语言”不会影响你的问题,不用费心去改变它。


Cos*_*ias 6

逐步本地化Info.plist:

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

“ NSLocationAlwaysAndWhenInInUseUsageDescription” =“ blabla”;

“ NSLocationAlwaysUsageDescription” =“ blabla2”;

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

  • 如果您在某些步骤中迷失方向,我推荐这个简短的 YouTube 视频教程:https://www.youtube.com/watch?v=e-T_8jZTrv0 (4认同)

Edw*_*ard 5

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

您需要通过进入并单击文件检查器中的本地化按钮来使 info.plist 本地化,如下所示。

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

在此处输入图片说明

  • 你有遇到什么问题吗?当我向本地化添加两种语言时,我无法构建项目,因为 xcode 说“无法打开文件 info.plist,因为没有这样的文件。 (4认同)
  • @mkkrolik 我现在遇到了同样的问题。你找到解决办法了吗? (3认同)