如何从第一个首选语言中获取 Windows 区域设置代码?
目前,它返回我 12(十进制),它不对应于任何 Windows 区域设置(请参阅:https://learn.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698- 4e12-9d4d-c3b0ee3dbc4a)
#include <CoreFoundation/CoreFoundation.h>
int main() {
CFArrayRef preferredLanguages = CFLocaleCopyPreferredLanguages();
if (CFArrayGetCount(preferredLanguages) > 0) {
CFStringRef firstLanguage = CFArrayGetValueAtIndex(preferredLanguages, 0);
CFLocaleIdentifier localeIdentifier = CFLocaleCreateCanonicalLanguageIdentifierFromString(NULL, firstLanguage);
uint32_t windowsLocaleCode = CFLocaleGetWindowsLocaleCodeFromLocaleIdentifier(localeIdentifier);
printf("Windows locale code %d.\n", windowsLocaleCode);
} else {
printf("No preferred languages found.\n");
}
CFRelease(preferredLanguages);
return 0;
}
https://ss64.com/locale.html
显得更完整,并将 12 列为 fr
(法语)。根据您非常法国的用户名,这似乎是一个非常明智的结果。所以您的代码似乎可以工作。[1] 您只是查看了不正确的文档,或者文档不完整。
"%d"
不是 uint32_t
的正确转换说明符。正确的说明符是 "%" PRIu32
,它需要 inttypes.h
。