繁体   English   中英

如何获取本地化的 CFBundleDisplayName

[英]How to get localized CFBundleDisplayName

[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]

此 API 在 plist 中返回捆绑显示名称。

但是我的应用程序已本地化并具有不同的显示名称。

所以我需要在InfoPlist.strings中获取本地化的显示名称,该名称应随设备语言设置而变化。

你试过-[NSBundle localizedInfoDictionary]吗?

[[[NSBundle mainBundle] localizedInfoDictionary]
       objectForKey:@"CFBundleDisplayName"]

为 Swift 试试这个:

// Localized
if let displayName = Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String {
    print("App Display Name - \(displayName)")
}

// Non-Localized
if let displayName = Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String {
    print("App Display Name - \(displayName)")
}

也试试这个,如果你还没有设置显示名称

// Localized
if let appName = Bundle.main. localizedInfoDictionary?["CFBundleName"] as? String {
    print("App Name - \(appName)")
}

// Non-Localized
if let appName = Bundle.main.infoDictionary?["CFBundleName"] as? String {
    print("App Name - \(appName)")
}

有用的技巧:

// Print bundle info dictionary to get complete details about app
print("Bundle.main.infoDictionary - \(Bundle.main.infoDictionary)")
print("Bundle.main.localizedInfoDictionary - \(Bundle.main.localizedInfoDictionary)")

我建议使用kCFBundleNameKey

[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey]
class Utils { static var localizedAppName: String? { return Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String } }
Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""

使用此方法优于其他访问方法,因为它会在键可用时返回键的本地化值。

这在 Swift 5 中运行良好:

extension Bundle {
    var displayName: String? {
        return Bundle.main.infoDictionary?["CFBundleName"] as? String
    }
}
  
if let displayName = Bundle.main.displayName {
    print("displayName : \(displayName)")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM