我使用 buildroot 和 busybox 一起构建 Linux(没有 systemd)。如何默认设置 en_US 语言环境?
我的 buildroot 配置类似于 qemu_x86_defconfig 但有额外的
BR2_ENABLE_LOCALE_WHITELIST="en_US"
BR2_GENERATE_LOCALE="en_US"
在我尝试启动我的 hello world Qt 应用程序后,但收到嘈杂的警告
Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
Qt depends on a UTF-8 locale, but has failed to switch to one.
If this causes problems, reconfigure your locale. See the locale(1) manual
for more information.
来检查
# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
但是如果我这样做
export LC_ALL=en_US.utf8 && ./myQt_app
然后在没有警告的情况下工作。而且
locale
还可以看到en_US.utf8...如何自动导出?
没有用于指定默认语言环境的 Unix 标准。
systemd
使用 /etc/locale.conf
配置默认区域设置。您可以在运行时使用 localectl
操作此文件,也可以将其放入 rootfs 覆盖层中。
对于非 systemd init 系统,您必须通过设置 区域设置环境变量来自己编写一些东西。您可以将其放入
/etc/profile
中,但这仅适用于通过 shell 启动的程序。如果您直接从inittab
启动程序,则无法传入环境变量,因此您需要一个包装脚本。