如何获取本地化的错误信息?

如何获取本地化的错误信息?

我尝试查看本地化错误消息。但是,我似乎只能从默认的“C”语言环境中获取消息。例如

$ cat /etc/shadow
cat: /etc/shadow: Permission denied

$ locale -a|grep fi
fi_FI.utf8

$ LC_MESSAGES=fi_FI.utf8 cat /etc/shadow
cat: /etc/shadow: Permission denied

此外,查看 cat 的 ltrace 输出,它确实调用setlocale(LC_ALL, ""),并使用 glibc error() 函数打印错误消息(该函数打印 strerror() 返回的错误消息,该消息应该是本地化消息)。

查看“LC_MESSAGES=fi_FI.utf8 cat /etc/shadow”的 strace 输出,可以看到它尝试打开 libc 消息目录,但针对的是英语语言环境而不是 fi_FI.utf8:

...
open("/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
...

我确实有一个文件 /usr/share/locale-langpack/fi/LC_MESSAGES/libc.mo,其中包含 fi_FI.utf8 语言环境的 libc 消息目录,但是,它似乎未被使用。language-pack-fi 和 language-pack-fi-base 软件包均已安装(相应的 gnome 和 kde 语言包也已安装,但我看不出它们与此相关)。

我错过了什么?

答案1

您缺少LANGUAGE环境变量,该变量在 Ubuntu 中经常设置,并且会LC_MESSAGES被 GNU 兼容程序覆盖。

尝试:

LANGUAGE=fi cat /etc/shadow

相关内容