【问题标题】:How to get locale on iPhone in C++?如何在 C++ 中获取 iPhone 上的语言环境?
【发布时间】:2011-01-27 18:54:43
【问题描述】:

不出所料,我所看到的有关 iPhone 本地化的所有内容都在 Objective-C 中。我正在处理的项目已经使用几乎完全 C++ 编写并在 iPhone 上运行,并且我们已经有了一些完整的翻译。我们现在需要的只是一种找出语言环境/语言代码的方法。在计算机上,这是使用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

【问题讨论】:

  • 您可以将其包装到 C++ 类/函数中。
  • 你为什么需要多次这样做?
  • 我什么时候说过我想做不止一次?是的,我想我可以使用 Objective-C++ 来创建一个新文件,但它仍然很麻烦。
  • 我想如果你只做一次,那没什么大不了的。我无法想象你的 iPhone 应用程序有 Objective-C 到 C++ 层。在某些地方,它必须直接与 Cocoa 交互。我只是把它放在那里然后继续。
  • 嗯,它主要使用 SDL,它完成了大部分工作。所以只有一些桥梁,用于音乐、获取屏幕尺寸等。

标签: iphone c++ objective-c ios internationalization


【解决方案1】:

可能你想使用 CFLocaleGetValue()

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多