[英]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.