保证不同平台上的语言环境

Guaranteed locales on different platforms

除了默认的 C 区域设置之外,是否有任何区域设置保证存在或至少默认安装在 windows Linux 或 macOSX 上的最终用户计算机上? 我使用 boost 属性 树,它可以从文件中读取 XML 并将语言环境作为参数。如果我想编写跨平台应用程序并且文件是德语和 utf-8 编码,我应该使用哪个语言环境?

不能保证语言环境,但是 C(这只是在 POSIX)。

各种 Linux 发行版允许您选择要安装的语言环境,通常它只安装国家(和地区)语言环境(现在是 UTF8 变体)。所以不,没有办法。而且我不希望有任何有用的东西:语言环境名称不是那么标准化(但现在我们有一个 RFC,OTOH,RFC 与已安装的语言环境无关)。

但是有一个 Unicode ;-)

Unicode Consortium 发布了自己的语言环境定义:http://cldr.unicode.org/index,您可以查找使用该项目的库。这解决了更多的问题,例如Python 不要对所有功能都使用语言环境,因此您可能会得到错误的本地化数据。

另一方面,我认为你过度工程化了(或者看错了问题)。

Locale是用户的选择,所以尊重用户的选择。尝试使用德语 UTF8 语言环境。您应该期望这样的本地安装在用户期望德语文本的计算机上。

如果用户没有德语语言环境,可能不希望有本地化的数字和日期,所以忽略它(所以让系统选择正确的默认值,使用应该期望的)。注意:在我的系统上,我使用 DK 语言环境作为日期,因为我更喜欢 ISO 表示法 (2020-11-26) 而不是德语日期。在 Windows 上,我倾向于 select ',' 作为列表分隔符(而不是 ';',因为它很方便,所以我可以复制粘贴 excel 公式)。我希望程序尊重我的区域设置选择,而不是选择它们的区域设置。

显然有例外(ans 做答案的第一部分):你为用户提供数据(例如网络服务器),所以你只关心系统本地的系统消息(和日志),而不关心服务数据.或学习语言的程序(对于开始课程,可能不需要安装语言环境,但可能无论如何都需要安装正确的语言环境,只是因为需要键入变音符号(德语)或汉字(日语)。

所以:对于跨平台程序,只使用用户期望的,所以初始化用户 selected 的语言环境。所以使用本地化的日期、数字。但不要强制使用语言环境。如果您需要向外部人员(如网络服务器)提供数据,请使用 CLDR(系统区域设置...不太适合此类任务)。