如何获取本地化的 CFBundleDisplayName

发布于 2025-01-02 23:27:46 字数 242 浏览 2 评论 0原文

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

此 API 返回 plist 中的捆绑包显示名称。

但是我的应用程序已本地化并且具有不同的显示名称。

所以我需要在 InfoPlist.strings 中获取本地化的显示名称,该名称应随设备语言设置而变化。

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

this API returns Bundle Display Name in plist.

However my app is localized and has different display name.

so i need to get localized display name in InfoPlist.strings that should vary with device language setting.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

隱形的亼 2025-01-09 23:27:46

您尝试过 -[NSBundle localizedInfoDictionary] 吗?

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

Have you tried -[NSBundle localizedInfoDictionary]?

[[[NSBundle mainBundle] localizedInfoDictionary]
       objectForKey:@"CFBundleDisplayName"]
一桥轻雨一伞开 2025-01-09 23:27:46

对于 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)")

Try this for 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)")
}

Also try this, if you have not set 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)")
}

Useful trick:

// Print bundle info dictionary to get complete details about app
print("Bundle.main.infoDictionary - \(Bundle.main.infoDictionary)")
print("Bundle.main.localizedInfoDictionary - \(Bundle.main.localizedInfoDictionary)")
_畞蕅 2025-01-09 23:27:46

我建议使用 kCFBundleNameKey

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

I suggest to use kCFBundleNameKey:

[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey]
就像说晚安 2025-01-09 23:27:46
Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String ?? ""

使用此方法优于其他访问方法,因为它会在键可用时返回键的本地化值。

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

Use of this method is preferred over other access methods because it returns the localized value of a key when one is available.

人生百味 2025-01-09 23:27:46
class Utils {
    static var localizedAppName: String? {
        return Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String
    }
}
class Utils {
    static var localizedAppName: String? {
        return Bundle.main.localizedInfoDictionary?["CFBundleDisplayName"] as? String
    }
}
何其悲哀 2025-01-09 23:27:46

这在 Swift 5 中工作得很好:

extension Bundle {
    var displayName: String? {
        return Bundle.main.infoDictionary?["CFBundleName"] as? String
    }
}
  
if let displayName = Bundle.main.displayName {
    print("displayName : \(displayName)")
}

This works fine in Swift 5:

extension Bundle {
    var displayName: String? {
        return Bundle.main.infoDictionary?["CFBundleName"] as? String
    }
}
  
if let displayName = Bundle.main.displayName {
    print("displayName : \(displayName)")
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文