- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 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/
我想弄清楚 C++ 是如何支持 Unicode 的。 当我想将多语言文本输出到控制台时,我调用 std::setlocale .但是我注意到结果取决于之前对 setlocale 的调用. 考虑以下示例
如果我不使用fputws使用setlocale,则仅输出ASCII字母。似乎setlocale是必需的,并且根据this site,setlocale(LC_CTYPE, "UTF-8")和setlo
不允许在共享CentOS服务器上进行编译。因此,我在我的 Debian 计算机上编译我的程序,将其与 Debian 的系统库(如 libc 等)链接。然后我上传我的程序和 Debian 系统库,我的程
我需要为我的应用程序创建一个 SQLite 数据库。我需要用几种欧洲语言存储文本,因此会有大量重音字符和其他奇怪的标记。我正在扩展 SQLiteOpenHelper。 检查 .db 文件时,我注意到有
This paper说 setlocale() 是线程不安全的。是否有任何线程安全的方法来设置语言环境。 我正在用 C++ 编写代码,但如果有任何不同,C 库中的函数将使用语言环境。 这基本上就是我现
这个问题在这里已经有了答案: Is setlocale thread-safe function? (6 个答案) 关闭 6 年前。 CppRef states 2016-12-13 09:00 U
我编写了一个将 wstring 转换为字符串的函数。如果我删除代码 setlocale(LC_CTYPE, ""),程序就会出错。我引用了 cplusplus阅读文档。 C string contai
以下程序使用 setlocale() 从环境变量中获取区域设置,并打印时间。 locale_test.c: // locale test #include #include #include /
我正在学习 C++,我发现了 C++ 库的这个功能:setlocale ( http://www.cplusplus.com/reference/clocale/setlocale/ ) 但我无法理解
我有一个 Linux 系统,该系统设置为某个语言环境并运行一个 C++ 应用程序。我可以从 C++ 应用程序或操作系统本身执行 std::setlocale(LC_NUMERIC, "en_US.UT
我们目前面临的问题是,当使用 Windows 文件打开/保存对话框时加载的外部组件(不幸的是我们不知道是哪个)一些系统更改了进程的区域设置,可能是通过调用 setlocale(LC_ALL, "").
我需要更改线程中的区域设置以正确解析带有 strtod() 的 double ,为此我使用 setlocale() (C++)。它是线程安全的吗? 更新:另一个问题。当我在 main() 函数中调用
我有一些带有(瑞士)法语字符的字符串,我想大写(PHP 5.3)。 echo strtoupper('société'); 由于 strtoupper() 不适用于重字符,我做了一个 setlocal
根据 PHP,“语言环境信息由每个进程维护”。我的理解是否正确,这与使用 Apache 服务器的每个脚本实例相同? 换句话说,如果我有几个使用不同区域设置的并发 session ,一个用户区域设置的更
问题已解决(见下文) 我已经在我的服务器上生成了区域设置,我已经确认它们存在(我的区域设置 -a 在下面提供),但是当我使用时: setlocale(LC_TIME,'fr_FR');
我想在 php 中对包含德语“umlaute”的数组进行排序。这对于php来说似乎不是一件容易的事。我在网上找到了以下示例: $oldLocale=setlocale(LC_COLLATE, "0")
setlocale() 的默认设置是什么意思? setlocale()默认为“C”(“POSIX”)。但这到底是什么意思呢?它的默认字符集和语言是什么?是“en_US.utf8”吗? 最佳答案 来自
setlocale() 函数没有设置所需的语言(德语)。 目标是输出月份名称。 这是我到目前为止的测试代码:
JSTL 标签用于设置用户本地化环境。 语法 JSP 标签的语法如下: 其中: localcode:代表语言代码,例如,ZH、EN。也可以在后面加上国家或者地区的两位数代码,中间用_连接,如
#include #include #include "mainwindow.hpp" #include "../RegisterOfErrors.hpp" #include extern st
我是一名优秀的程序员,十分优秀!