iphone - 如何在 C++ 中获取 iPhone 上的语言环境?

标签 iphone c++ objective-c ios internationalization

不出所料,我所看到的有关 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/

相关文章:

c++ - 内部类访问外部类成员

c++ - 圆的碰撞解决问题

objective-c - 获取正确的 Node Json objective c

iphone - 如何检查 rootViewController 是否属于特定类?

iphone - 使用 Applescript 递归地将资源添加到 Xcode 项目

iphone - 用户更改应用商店时是否有通知?

iphone - tabBar 应用程序在 iPhone 设备上启动非常缓慢

c++ - 如何在 C++ 中使父类(super class)的虚函数可被孙子覆盖?

ios - 如何与多个 iOS View Controller 共享一个数组

ios - UISearchDisplayController 搜索栏重叠导航栏并自行调整大小 IOS 7