试图读取 InfoPlist.strings 文件...获取密钥(?)

Posted

技术标签:

【中文标题】试图读取 InfoPlist.strings 文件...获取密钥(?)【英文标题】:Trying to read InfoPlist.strings file... getting the key (?) 【发布时间】:2016-02-11 20:03:54 【问题描述】:

许多人不知道,在 ios 和 OSX 上本地化应用程序名称的方法是将 InfoPlist.strings 文件添加到包中并本地化该文件。人们将此文件与Info.Plist 文件混合在一起。本地化不在Info.plist 中完成,而是在InfoPlist.strings 文件中完成。

也就是说,我用两个键创建了这个文件:CFBundleDisplayNameCFBundleName,就像我一直做的那样。这非常有效,您可以在不同的本地化中为您的应用程序定义不同的名称。该文件可以无缝运行。您无需执行任何操作,只需将文件添加到项目中并进行本地化即可。

InfoPlist.strings 是这样的字符串文件:

"CFBundleDisplayName" = "My Localized App Name";
"CFBundleName" = "My Localized App Name";

对于这个项目,我还必须在运行时读取CFBundleDisplayName 的值。

我已尝试使用此代码:

NSString *appName = [[NSBundle mainBundle] localizedStringForKey:@"CFBundleDisplayName" value:nil table:@"InfoPlist"];

读取CFBundleDisplayName 键,但我得到的值是CFBundleDisplayName。换句话说,我提供密钥并接收返回的密钥,而不是值。我应该收到My Localized App Name

我错过了什么?

【问题讨论】:

【参考方案1】:

我在 Swift 中完全做到了这一点,它按预期工作。

let appname = NSBundle.mainBundle().localizedStringForKey("CFBundleDisplayName", value: nil, table: "InfoPlist")

但是,如果我从相应的 InfoPlist.strings 文件中删除 de 本地化字符串,它会返回 "CFBundleDisplayName"

所以,请检查您的 .strings 文件中是否缺少某些内容

在尝试了几种可能性之后..

BUG 是“项目中的 InfoPlist.strings 的第二个副本”

【讨论】:

哇,这很奇怪。我的strings 文件很完美,但我没有得到价值,我得到了钥匙!!!!!!!!!!!! 跳板图标下方的应用名称呢?显示正确吗? 你是对的。不。名称在设备上显示不正确!什么?怎么可能? 检查您的设备中设置的语言,如果该语言不在您的字符串中... 或者那个特定的语言文件确实有一个到目前为止你还没有发现的鬼鬼祟祟的错误。

以上是关于试图读取 InfoPlist.strings 文件...获取密钥(?)的主要内容,如果未能解决你的问题,请参考以下文章

InfoPlist.strings 命名约定

xcode 使用 Localizable.strings 而不是 InfoPlist.strings

如何手动本地化 InfoPlist.strings?

在 info.plist 上放置一个资源字符串(来自 infoPlist.strings)

框架项目上的 InfoPlist.strings

如何在运行时从 InfoPlist.string 获取值?