• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ std::locale ("en") 在 iOS 上抛出异常

[复制链接]
菜鸟教程小白 发表于 2022-12-13 04:35:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在 iOS 上,当我尝试从有效标识符构造 C++ 语言环境时,我的程序崩溃:

Terminating app due to uncaught exception 'collate_byname::collate_byname failed to construct for en', reason: 'collate_byname::collate_byname failed to construct for en'

在这一行:

std::locale loc("en");

这在其他平台上运行良好。这是平台上存在的有效语言环境标识符(我尝试使用来自 CFLocale 的标识符)。

我的程序需要一个 C++ std::locale 以便格式化日期和数字等。

也许我需要在构建中包含其他库?

我使用的是最新的 XCode 9.4.1 及其包含的 libc++,它在 iOS 11.4.1 上运行。其他 C++ 功能在那里运行良好。

不幸的是,没有办法用可移植 C++ 列出可用的语言环境,尽管我尝试过的所有语言都在 NSLocale.availableLocaleIdentifiers 中列出



Best Answer-推荐答案


经过一番研究,我了解到 C 语言环境不包含在 iOS 版本中。没有。

我的解决方案(因为我想用 C++ 格式化价格、时间和日期),它在我的应用程序中提供语言环境定义。在第一次启动时解压缩它们,并将 PATH_LOCALE 环境变量设置为新创建的目录。 (PATH_LOCALE 是 C 库用于定位语言环境定义的 BS​​D 环境变量,而不是像 GNU/Linux 上的 LOCPATH)

PATH_LOCALE 是语言环境文件的基本路径,每个语言环境都在一个子目录中,例如:

fr/LC_TIME FR/.. zh/LC...

所以我需要子目录,iOS bundle 不支持子目录。

当你这样做时

setlocale(LC_CTYPE,"en_US.UTF-8");

C 库在 PATH_LOCALE 中查找名为“en_US.UTF-8”的目录。

NSString* documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    NSString* localeDir = [documentsPath stringByAppendingPathComponent"/locale"];
    BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:localeDir];

    if (!fileExists) {
        NSString *filepath = [[NSBundle mainBundle] pathForResource"locale" ofType"zip"];
        ZipArchive *zipArchive = [[ZipArchive alloc] init];
        [zipArchive UnzipOpenFile:filepath];
        [zipArchive UnzipFileTo:documentsPath overWrite:YES];
        [zipArchive UnzipCloseFile];
    }
    setenv("ATH_LOCALE", [[NSString stringWithFormat"%@/locale", documentsPath] cString], 1);

这使用您必须包含在项目中的 Ziparchive。

https://code.google.com/archive/p/ziparchive/

关于C++ std::locale ("en") 在 iOS 上抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949128/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap