This gives you the localized display name:
static void KeyArrayCallback(const void* key, const void* value, void* context) { CFArrayAppendValue(context, key); }
- (NSString*)localizedDisplayProductName
{
NSDictionary* screenDictionary = [[NSScreen mainScreen] deviceDescription];
NSNumber* screenID = [screenDictionary objectForKey:@"NSScreenNumber"];
CGDirectDisplayID aID = [screenID unsignedIntValue];
CFStringRef localName = NULL;
io_connect_t displayPort = CGDisplayIOServicePort(aID);
CFDictionaryRef dict = (CFDictionaryRef)IODisplayCreateInfoDictionary(displayPort, 0);
CFDictionaryRef names = CFDictionaryGetValue(dict, CFSTR(kDisplayProductName));
if(names)
{
CFArrayRef langKeys = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks );
CFDictionaryApplyFunction(names, KeyArrayCallback, (void*)langKeys);
CFArrayRef orderLangKeys = CFBundleCopyPreferredLocalizationsFromArray(langKeys);
CFRelease(langKeys);
if(orderLangKeys && CFArrayGetCount(orderLangKeys))
{
CFStringRef langKey = CFArrayGetValueAtIndex(orderLangKeys, 0);
localName = CFDictionaryGetValue(names, langKey);
CFRetain(localName);
}
CFRelease(orderLangKeys);
}
CFRelease(dict);
return [(NSString*)localName autorelease];
}