许多人不知道,在iOS和OSX上本地化应用程序名称的方法是在包中添加InfoPlist.strings
文件并本地化该文件。人们将此文件与Info.Plist
文件混合在一起。未在Info.plist
中完成本地化,在InfoPlist.strings
文件中完成。
说,我用两个键创建了这个文件:CFBundleDisplayName
和CFBundleName
,就像我一直做的那样。这非常有效,您可以在不同的本地化中为您的应用定义不同的名称。此文件无缝地工作。您不必做任何事情,只需将文件添加到项目并进行本地化即可。
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
。
我错过了什么?
答案 0 :(得分:2)
我在Swift中做到了这一点,它按预期工作。
let appname = NSBundle.mainBundle().localizedStringForKey("CFBundleDisplayName", value: nil, table: "InfoPlist")
但是,如果我从相应的InfoPlist.strings
文件中删除de localization string,则返回" CFBundleDisplayName" 。
因此,请检查您是否遗漏了.strings
个文件
尝试了几种可能性后......
BUG是"项目内的第二个InfoPlist.strings副本"