web-dev-qa-db-ja.com

ローカライズされたCFBundleDisplayNameを取得する方法

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

このAPIは、plistでバンドル表示名を返します。

ただし、私のアプリはローカライズされており、表示名が異なります。

そのため、InfoPlist.stringsでローカライズされた表示名を取得する必要があります。これは、デバイスの言語設定によって異なります。

32
Umgre

やってみました -[NSBundle localizedInfoDictionary]

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

kCFBundleNameKey を使用することをお勧めします:

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

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

このメソッドの使用は、キーが使用可能な場合にキーのローカライズされた値を返すため、他のアクセスメソッドよりも優先されます。

1
Diven Lee

Swift 3.

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