私はopenSUSE Tumbleweedを使用しており、時間をすべて24時間形式に変更したいと思います。主にKDEロック画面に使用されますが、他の目的にも使用されます。
私の最初の試みは、/etc/sysconfig/言語(YaST経由)でRC_LC_TIME = "en_GB"を設定することでしたが、 "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
以前%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
。