簡體   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