「en」ロケールがありません。

「en」ロケールがありません。

私は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_REGIONen_USen_GBen_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"

%r12時間制、%T24時間制です。したがって、en_DKロケールには望ましい属性があります。おそらくテキストエンコーディングを指定できますen_DK.UTF-8

答え2

問題をさらに解決した後、ls /usr/share/localeこれが$(localectl list-locales)。同じループを実行すると、次のような答えが得られます。C.UTF8。私が知ることができる限り、これが私が望んだまさにそれです。

しかし、これが最善のアプローチであるかどうかはまだ疑問に思っています。

関連情報