我尝试查看本地化错误消息。但是,我似乎只能从默认的“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