setlocale在iOS模拟器中工作但在设备

时间:2015-09-15 19:45:20

标签: ios localization

this previous question的作者不同,我遇到了相反的问题。我试图在我的iPad应用程序中使用C ++编写的组件,该组件使用标准C库中的setlocale()。当通过模拟器(i386或x86_64)运行时,我能够成功设置语言环境并获得预期的返回值:

(lldb) p (const char *)setlocale(2, "ja_JP")
(const char *) $1 = 0x000000010e776bd0 "ja_JP"

但是,当在设备上运行时(在iOS8或iOS9上,在armv7和arm64设备上),此调用似乎总是失败并返回null。

(lldb) p (const char *)setlocale(2, "ja_JP")
(const char *) $0 = 0x00000000

实际上在iOS设备上设置区域和语言似乎也有所不同。

这是iOS9阻止使用sysctl()之类的例子,还是我错过了更大的东西?

1 个答案:

答案 0 :(得分:0)

最近在Apple Dev论坛上回答了这个问题,并在此处分享:

  

这里的问题本身不是setlocale,而是阅读   区域设置首先。值得注意的是,newlocale也会返回NULL   你用类似的参数调用它。这失败了,因为没有C风格   您可以在iOS上使用区域设置。在模拟器上这是有效的   因为语言环境代码从OS X中获取语言环境数据(in   的/ usr /共享/环境)。我不确定是否填充了此目录   iOS(我怀疑没有),但这并不重要,因为沙盒不会   让你的过程得到它。