ManuelSchneid3r
ManuelSchneid3r

Reputation: 16121

How to get localized name of NSBundle*

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

Answers (0)

Related Questions