setlocale()的作用是什么? 我正在学习C++,我发现了C++库的这个功能: setlocale()但我不明白它是干什么用的

setlocale()的作用是什么? 我正在学习C++,我发现了C++库的这个功能: setlocale()但我不明白它是干什么用的,c,locale,setlocale,C,Locale,Setlocale,我在Ubuntu上使用过: printf(“区域设置为:%s\n”,setlocale(LC\u ALL,”) 它打印的区域设置为:en_US.UTF-8 但在macOs上,它会打印: 语言环境是:C这个C是什么意思 在什么上下文中以及如何使用它?这是特定于语言环境的设置。例如,在一些国家,逗号用作十进制分隔符,在另一些国家,逗号是点。在美国,22001通常被理解为22001,在一些欧洲国家,这是22点001 日期可以以DD/MM/YYYYY(欧洲大部分地区)或MM/DD/YYYY(美国)格式给

我在Ubuntu上使用过:

printf(“区域设置为:%s\n”,setlocale(LC\u ALL,”)

它打印的
区域设置为:en_US.UTF-8

但在macOs上,它会打印:

语言环境是:C
这个C是什么意思


在什么上下文中以及如何使用它?

这是特定于语言环境的设置。例如,在一些国家,逗号用作十进制分隔符,在另一些国家,逗号是点。在美国,22001通常被理解为22001,在一些欧洲国家,这是22点001

日期可以以DD/MM/YYYYY(欧洲大部分地区)或MM/DD/YYYY(美国)格式给出,以此类推

阅读Linux和手册页。请阅读维基页面

在Debian和Ubuntu上,您可以(以root用户身份)运行
dpkg重新配置语言环境
,以添加更多的语言环境

然后,您可以设置
LANG
(和
LC\u ALL
和其他)环境变量(请参阅),以更改消息的语言

例如,我安装了法语UTF-8语言环境。如果我这样做

% env LC_ALL=fr_FR.UTF-8 ls /tmp/nonexisting 
我收到了法语的错误信息:

ls: impossible d'accéder à '/tmp/nonexisting': Aucun fichier ou dossier de ce type
如果我使用
C
locale(这是默认设置),它是英文的:

% env LC_ALL=C ls /tmp/nonexisting
ls: cannot access '/tmp/nonexisting': No such file or directory
根据经验,在运行在此论坛上展示的命令之前,您需要导出LC_ALL=C LANG=C
(例如,因为您不想用法语显示来自编译器或shell的错误消息)

如果你正在编写一个你想国际化的程序(ez.g.让只懂法语或汉语的人很容易使用),你至少需要使用(特别是对于
printf
format strings!),也许还需要使用它来处理消息目录。当然,您需要建立翻译消息的目录


本地化还影响数字的解析和打印方式(用逗号或点分隔千位或十进制数字),以及货币和时间的打印和解析方式(例如)。

它似乎与货币、日期和其他特定于区域的输入解释有关,因为“C”区域设置是最小的区域设置。它是一个相当中性的区域设置,在所有系统和编译器中具有相同的设置,因此使用此区域设置的程序的确切结果是可预测的。这是默认情况下所有C程序在什么上下文中使用的语言环境,应该如何使用?当您希望您的程序在使用不同约定的地方执行时问题:当我尝试
LC_all=fr_fr.UTF-8 ls/tmp/nonexisting
时,我收到法语和英语混合的消息:
ls:impossable d'accéderá'/tmp/nonexisting':否这样的文件或目录
。有没有办法让答案中的所有东西都像法语一样?我的bash版本是5.0.11。任何帮助都将不胜感激。