setlocale() 的用途是什么?

2024-04-19

我正在学习c++,我发现了C++库的这个函数:setlocale (http://www.cplusplus.com/reference/clocale/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是什么意思?

在什么情况下以及如何使用它?


在 Linux 上阅读设置语言环境(3) http://man7.org/linux/man-pages/man3/setlocale.3.html and 语言环境(7) http://man7.org/linux/man-pages/man7/locale.7.html手册页。另请阅读国际化和本地化 https://en.wikipedia.org/wiki/Internationalization_and_localization维基页面。

在 Debian 和 Ubuntu 上,您可以(以 root 身份)运行dpkg-reconfigure locales添加更多语言环境。

然后你可以设置你的LANG (and LC_ALL和其他)环境变量(参见环境(7) http://man7.org/linux/man-pages/man7/environ.7.html) 更改消息语言。

例如,我安装了法语 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语言环境(这是默认的),它是英文的:

% env LC_ALL=C ls /tmp/nonexisting
ls: cannot access '/tmp/nonexisting': No such file or directory

根据经验,您想要export LC_ALL=C LANG=C在运行您在此论坛上展示的命令之前(例如,因为您不想用法语显示来自编译器或 shell 的错误消息)。

如果你是coding一个你想要国际化的程序(例如,让只懂法语或中文的人可以轻松使用),你至少需要使用获取文本(3) http://man7.org/linux/man-pages/man3/gettext.3.html(特别是对于printf格式化字符串!)也许文本域(3) http://man7.org/linux/man-pages/man3/textdomain.3.html你需要使用消息(1) http://man7.org/linux/man-pages/man1/msgfmt.1.html用于处理消息目录。当然,您需要构建翻译消息的目录。

本地化还影响数字的解析和打印方式(用逗号或点分隔千位或小数位)以及金钱和时间的打印和解析方式(例如时间(3) http://man7.org/linux/man-pages/man3/strftime.3.html).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setlocale() 的用途是什么? 的相关文章

随机推荐