Подтвердить что ты не робот

Как получить локализованное имя CFBundleDisplayName

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

этот API возвращает отображаемое имя пакета в plist.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Swift 3.0

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

Ответ 4

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

Ответ 5

Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""

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