gpt4 book ai didi

c - setlocale() 有什么用?

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:20 25 4
gpt4 key购买 nike

我正在学习 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

但在 macO 上它会打印:

Locale is: C 这个 C 是什么意思?

在什么情况下应该如何使用它?

最佳答案

在 Linux 上阅读 setlocale(3)locale(7)手册页。另请阅读 internationalization and localization维基页面。

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

然后您可以设置您的 LANG(和 LC_ALL 和其他)环境变量(参见 environ(7))来更改消息的语言。

例如,我安装了法语 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)。

如果您正在编写一个您想要国际化的程序(例如,让只懂法语或中文的人可以轻松使用),您至少需要使用gettext(3)。 (特别是 printf 格式字符串!)或许还有 textdomain(3)你需要使用 msgfmt(1)用于处理消息目录。当然,您需要构建已翻译消息的目录。

本地化还会影响数字的解析和打印方式(用逗号或点分隔千位或小数位)以及金钱和时间的打印和解析方式(例如 strftime(3))。

关于c - setlocale() 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46939891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com