Ответ 1
Вы пробовали -[NSBundle localizedInfoDictionary]
?
[[[NSBundle mainBundle] localizedInfoDictionary]
objectForKey:@"CFBundleDisplayName"]
[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]
этот API возвращает отображаемое имя пакета в plist.
Однако мое приложение локализовано и имеет другое отображаемое имя.
поэтому мне нужно получить локализованное отображаемое имя в InfoPlist.strings
, которое должно меняться в зависимости от настройки языка устройства.
Вы пробовали -[NSBundle localizedInfoDictionary]
?
[[[NSBundle mainBundle] localizedInfoDictionary]
objectForKey:@"CFBundleDisplayName"]
Я предлагаю использовать kCFBundleNameKey
:
[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey]
Swift 3.0
class Utils {
static var localizedAppName: String? {
return Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as! String?
}
}
Попробуйте это для 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)")
}
Также попробуйте сделать это, если вы отметили значение 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)")
Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""
Использование этого метода предпочтительнее других методов доступа, поскольку оно возвращает локализованное значение ключа, когда оно доступно.