2012-02-06 4 views
27
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"] 

Этот API возвращает отображаемое имя пакета в plist.Как получить локализованное имя CFBundleDisplayName

Однако мое приложение локализовано и имеет другое отображаемое имя.

поэтому мне нужно получить локализованное отображаемое имя в InfoPlist.strings, которое должно отличаться в зависимости от настройки языка устройства.

ответ

50

Вы попробовали -[NSBundle localizedInfoDictionary]?

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

простого решения :(спасибо – Umgre

+0

@Umgre вы радушны есть тонна АФИ - много запоминать =) – justin

+8

Этот метод более непосредственно возвращает локализованную строку тоже: '[[NSBundle mainBundle] objectForInfoDictionaryKey: @ "CFBundleDisplayName"] ' – artur

2

Я предлагаю использовать kCFBundleNameKey:

[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey] 
0

Swift 3,0

class Utils { 
    static var localizedAppName: String? { 
     return Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as! String? 
    } 
} 
1

Попробуйте это для 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)") 
} 

Также попробуйте это, если у ou've примечание установить Display Name

// 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)") 
0
Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? "" 

Использование этого метода является предпочтительным по сравнению с другими методами доступа, поскольку он возвращает локализованное значение ключа, когда один доступен , .