我正在学习c ++,我发现了C ++库的这个功能:
setlocale
(http://www.cplusplus.com/reference/clocale/setlocale/)但我无法理解它的用途。
我用过Ubuntu:
printf ("Locale is: %s\n", setlocale(LC_ALL,"") );
打印Locale is: en_US.UTF-8
但在macOs上打印:
Locale is: C
这个C意味着什么?
在什么情况下应该如何使用?
答案 0 :(得分:1)
在Linux上阅读setlocale(3)和locale(7)手册页。另请阅读internationalization and localization wikipage。
在Debian和Ubuntu上,您可以(以root身份)运行LANG
以添加更多区域设置。
然后,您可以设置LC_ALL
(以及% env LC_ALL=fr_FR.UTF-8 ls /tmp/nonexisting
和其他)环境变量(请参阅environ(7))以更改消息的语言。
例如,我安装了法语UTF-8语言环境。如果我做
ls: impossible d'accéder à '/tmp/nonexisting': Aucun fichier ou dossier de ce type
我收到法语错误消息:
C
如果我使用% env LC_ALL=C ls /tmp/nonexisting
ls: cannot access '/tmp/nonexisting': No such file or directory
语言环境(默认语言环境),则使用英语:
export LC_ALL=C LANG=C
根据经验,在运行您在此论坛上展示的命令之前,您需要printf
(例如,因为您不希望以法语显示来自编译器或shell的错误消息)。
如果您编码您希望国际化的程序(例如,只有了解法语或中文的人才能轻松使用),您至少需要使用gettext(3) (特别是对于const logger = new (winston.Logger)({
transports : [
new winston.transports.PostgreSQL({
connString : 'xxxxxxxxxxx',
schema : 'public',
//tableName : 'logEntry',
customSql:'INSERT INTO public."logEntry"(logLevel, msg, meta) VALUES ($1, $2, $3);',
})
];
});
格式字符串!)和textdomain(3),您需要使用msgfmt(1)来处理消息目录。当然,您需要构建已翻译消息的目录。
本地化也会影响数字的分析和打印方式(用逗号或点分隔数千或十进制数字)以及如何打印和解析金钱和时间(例如strftime(3))。
答案 1 :(得分:0)
它的特定于语言环境的设置。例如,在某些国家/地区,逗号用于小数点分隔符,而在其他国家/地区,则使用逗号。在美国,22,001通常被理解为22,000和1,在一些欧洲国家,22点001。
日期可以DD / MM / YYYYY(欧洲大部分地区)或MM / DD / YYYY(美国)格式提供,依此类推。