Reputation: 16121
I try to get the localized name of an app on MacOS.
static void printBundleInfo(NSBundle *bundle)
{
auto printNSString = [](NSString *s){ INFO << QString::fromNSString(s); };
INFO << "------ BundleInfo ------";
printNSString(bundle.bundlePath);
//printNSString(bundle.bundleURL);
printNSString(bundle.bundleIdentifier);
printNSString([bundle objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey]);
printNSString([bundle objectForInfoDictionaryKey:(NSString*)kCFBundleVersionKey]);
// printNSString([bundle objectForInfoDictionaryKey:(NSString*)kCFBundleLocalizationsKey]);
printNSString([bundle.localizedInfoDictionary objectForKey:(NSString*)kCFBundleNameKey]);
printNSString(bundle.localizedInfoDictionary[@"CFBundleDisplayName"]);
//NSString *language = bundle.preferredLocalizations.firstObject;
//printNSString(language);
NSString *countryCode = [NSLocale.currentLocale objectForKey:NSLocaleCountryCode];
printNSString(countryCode);
NSString *preferred_language = NSLocale.preferredLanguages[0];
printNSString(preferred_language);
// NSString *local_ns_name = [bundle objectForInfoDictionaryKey:(NSString*)kCFBundleNameKey];
// printNSString(local_ns_name);
DEBG << "bundle.localizations";
for (NSString *nss in bundle.localizations)
printNSString(nss);
}
If i run this for the clock.app i get
23:20:33 [info:applications] ------ BundleInfo ------
23:20:33 [info:applications] /System/Applications/Clock.app
23:20:33 [info:applications] com.apple.clock
23:20:33 [info:applications] Clock
23:20:33 [info:applications] 62
23:20:33 [info:applications] Clock
23:20:33 [info:applications] Clock
23:20:33 [info:applications] DE
23:20:33 [info:applications] de
23:20:33 [debg:applications] bundle.localizations
23:20:33 [info:applications] de
23:20:33 [info:applications] he
23:20:33 [info:applications] en_AU
23:20:33 [info:applications] ar
23:20:33 [info:applications] el
23:20:33 [info:applications] ja
23:20:33 [info:applications] en
23:20:33 [info:applications] uk
23:20:33 [info:applications] es_419
23:20:33 [info:applications] zh_CN
23:20:33 [info:applications] es
23:20:33 [info:applications] da
23:20:33 [info:applications] it
23:20:33 [info:applications] sk
23:20:33 [info:applications] pt_PT
23:20:33 [info:applications] ms
23:20:33 [info:applications] sv
23:20:33 [info:applications] cs
23:20:33 [info:applications] ko
23:20:33 [info:applications] no
23:20:33 [info:applications] hu
23:20:33 [info:applications] zh_HK
23:20:33 [info:applications] tr
23:20:33 [info:applications] pl
23:20:33 [info:applications] zh_TW
23:20:33 [info:applications] en_GB
23:20:33 [info:applications] vi
23:20:33 [info:applications] ru
23:20:33 [info:applications] fr_CA
23:20:33 [info:applications] fr
23:20:33 [info:applications] fi
23:20:33 [info:applications] id
23:20:33 [info:applications] nl
23:20:33 [info:applications] th
23:20:33 [info:applications] pt
23:20:33 [info:applications] ro
23:20:33 [info:applications] hr
23:20:33 [info:applications] hi
23:20:33 [info:applications] ca
Obviously something is wrong. Preferred localization is de, but localizedInfoDictionary returns the english version. Launchpad shows the german localization Uhr.app. How can I get a localized name?
Upvotes: 1
Views: 97