除了默认的C语言环境之外,是否有任何语言环境可以保证存在或至少默认安装在windows Linux或macOSX上的最终用户计算机上?我使用boost属性树,它可以从文件中读取XML,并将区域设置作为参数。如果我想写一个跨平台的应用程序,并且文件是德语和utf-8编码的,我应该使用哪个语言环境?
没有保证语言环境,但有C(这只是在POSIX中(。
各种Linux发行版允许您选择要安装的区域设置,通常它只安装国家(和地区(区域设置(现在是UTF8变体(。所以不,没有办法。我不希望在这方面有任何有用的东西:区域设置名称没有那么标准化(但现在我们有了一个RFC,OTOH,RFC与安装的区域设置无关(。
但是有一个Unicode;-(
Unicode联盟发布自己的区域设置定义:http://cldr.unicode.org/index,您可以使用此项目查找库。这解决了更多的问题,例如Python并没有为所有函数使用区域设置,因此您可能会得到错误的本地化数据。
另一方面,我认为你过于注重工程(或者找错问题了(。
区域设置是用户的选择,因此要尊重用户的选择。请尝试使用德语UTF8语言环境。您应该期望这样的本地安装在用户期望德语文本的计算机上。
如果用户没有德语区域设置,可能不希望有本地化的数字和日期,所以忽略它(所以让系统选择正确的默认值,应该使用它(。注意:在我的系统中,我使用DK语言环境来表示日期,因为我更喜欢ISO表示法(2020-11-26(,而不是德国日期。在Windows上,我倾向于选择","作为列表分隔符(而不是";",因为它很方便,所以我可以复制粘贴excel公式(。我希望程序尊重我的区域设置选择,而不是选择它们的区域设置。
显然也有例外(答案的第一部分是ans(:您为用户(例如web服务器(提供数据,因此您只关心系统本地消息(和日志(,而不关心服务数据。或者学习语言的程序(在开始上课时,可能不需要安装语言环境,但可能无论如何都需要安装正确的语言环境,因为需要键入元音变音符(德语(或汉字(日语(。
所以:对于跨平台程序,只需使用用户期望的内容,就可以初始化用户选择的区域设置。所以使用本地化的日期和数字。但不要强制设置区域设置。如果您需要向外部人员(如Web服务器(提供数据,请使用CLDR(系统区域设置……不太适合执行此类任务(。