不出所料,我所看到的有关 iPhone 本地化的一切都在 Objective-C 中。我正在从事的项目已经在 iPhone 上编写并在 iPhone 上运行,几乎完全使用 C++,并且我们已经完成了一些完整的翻译。我们现在需要的是一种找出语言环境/语言代码的方法。在计算机上,这是使用 getenv
完成的,检查“LANG”,或者如果没有设置“LC_ALL”。这似乎在 iPhone 上不起作用(都没有设置为任何值),所以我需要一些其他方法。
据我所知,使用 Objective-C 的最佳方法是:
NSString* languageCode = [[NSLocale preferredLanguages] objectAtIndex:0];
但之后我必须将 NSString*
转换为 char*
/std::string
(这可以完成,但是这通常很烦人/困惑)。所以我想知道,是否有更简单的方法直接从 C++ 获取语言环境?
这是我最终做的:
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
#include <CoreFoundation/CoreFoundation.h>
#endif
/* ... */
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
CFArrayRef localeIDs = CFLocaleCopyPreferredLanguages();
if (localeIDs)
{
CFStringRef localeID = (CFStringRef)CFArrayGetValueAtIndex(localeIDs, 0);
char tmp[16];
if (CFStringGetCString(localeID, tmp, 16, kCFStringEncodingUTF8))
locale = std::string(tmp); //this is the std::string
CFRelease(localeIDs);
}
#endif
最佳答案
可能您想使用 CFLocaleGetValue()
关于iphone - 如何在 C++ 中获取 iPhone 上的语言环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4820545/