![缺少“en”区域设置](https://linux22.com/image/199736/%E7%BC%BA%E5%B0%91%E2%80%9Cen%E2%80%9D%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE.png)
我正在使用 openSUSE Tumbleweed,并且正在尝试将我的时间全部更改为 24 小时格式。主要用于 KDE 锁屏,但也有其他用途。
我的第一次尝试是在 /etc/sysconfig/language 中设置 RC_LC_TIME="en_GB" (通过 YaST),没有意识到“TIME”也会影响日期,所以现在 Thunderbird 中的日期字段是 DD/MM/YYYY,即令人迷失方向。
接下来,我尝试循环遍历所有区域设置,看看还有哪些其他选项可能有效:
cd /usr/share/locale
for f in *; do echo -e "$f\t$(LC_TIME=$f date +"%A %B %c")";done | grep "Tuesday December Tue Dec" | grep -v "[AP]M" | less
这给了我很多选择,其中最明显的是“en”。所以我尝试了,但现在登录时出现以下错误:
-bash: warning: setlocale: LC_TIME: cannot change locale (en): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en)
/usr/bin/manpath: can't set the locale; make sure $LC_* and $LANG are correct
因此,在我根据区域设置列表进行反复试验以查看哪些方法有效之前,正确的方法是什么?我只想要 en_US 但有 24 小时时间。
答案1
en
不是区域设置名称。并非所有目录/usr/share/locales
都是语言环境名称。有些包含由多个区域设置共享的数据。例如,en
包含所有英语变体使用的文件。
大多数语言环境名称的形式为,例如(美国英语)、(英国英语)、(加拿大英语)等。language_REGION
en_US
en_GB
en_CA
要获取您的(基于 Glibc,即非嵌入式 Linux)系统上可用的语言环境列表,请运行
locale -a
在某些系统上(至少在 Debian 及其衍生系统上),并非所有语言环境都默认可供使用。locale -a
仅列出可供使用的区域设置。语言环境的完整列表可在 中找到/usr/share/i18n/SUPPORTED
。如果您想准备好语言环境,请运行locale.gen
. (检查您系统上的手册页:不同版本有不同的语法。)
您可以在可用的区域设置中搜索具有所需属性的区域设置。有关区域设置的信息位于/usr/share/i18n/locales/
.您需要默认日期格式为%m
before %d
,默认时间格式为 24 小时时间,并且工作日名称为英文。下面是一个脚本,用于搜索可用的区域设置并报告具有上月日期和英语工作日的区域设置。
for x in /usr/share/i18n/locales/*; do
awk '
$1=="t_fmt" {t = $0}
$1 == "d_fmt" && /%m.*%d/ {mdy=1}
$1=="day" && (/Sunday/ || /Monday/) {english=1}
END {if (english && mdy) {print FILENAME, t}}
' $x;
done
我的系统上的输出:
/usr/share/i18n/locales/en_CA t_fmt "%r"
/usr/share/i18n/locales/en_DK t_fmt "%T"
/usr/share/i18n/locales/en_US t_fmt "%r"
%r
是12小时制,%T
是24小时制。所以该en_DK
语言环境具有您想要的属性。您可能想要指定文本编码,可能是en_DK.UTF-8
.
答案2
经过进一步的故障排除后,我意识到这ls /usr/share/locale
不是我应该测试的,而是$(localectl list-locales)
。运行相同的循环给了我一个答案:C.UTF8。据我所知,这正如我所希望的那样。
但我仍然想知道这是否是最好的方法。