ubuntu 20.04 localeの設定について

Linuxでは、その国に最適化された環境を「ローカリゼーションされた環境」といい、その地域情報を「ロケール」といいます。また、そのロケールは「ロケール環境変数」によって制御されます。

localeコマンドによるロケール環境変数に設定された値の確認

現在のロケール設定を確認するには、localeコマンドで確認できます。

表示される値で、「”(ダブルクォート)」で囲まれているものは値として有効になっておらず、下記の例では、LANG環境変数の値が適用されます。

$ locale
LANG=en_US.UTF-8  ← LC_*に適用できる値が設定されていない場合に使用される
LANGUAGE=  ← 「GNU gettext」を用いて翻訳を表示するプログラムで、表示する翻訳の優先順位
LC_CTYPE="en_US.UTF-8"  ← 文字の種別および大文字と小文字の変換
LC_NUMERIC=ja_JP.UTF-8  ← 非通貨数値フォーマット
LC_TIME=ja_JP.UTF-8  ← 日時フォーマット
LC_COLLATE="en_US.UTF-8"  ← ソートの順序
LC_MONETARY=ja_JP.UTF-8  ← 通貨フォーマット
LC_MESSAGES="en_US.UTF-8"  ← 通知フォーマットと対話式応答フォーマット
LC_PAPER=ja_JP.UTF-8  ← 用紙サイズ
LC_NAME=ja_JP.UTF-8  ← 名前フォーマット
LC_ADDRESS=ja_JP.UTF-8  ← 住所フォーマット
LC_TELEPHONE=ja_JP.UTF-8  ← 電話番号フォーマット
LC_MEASUREMENT=ja_JP.UTF-8  ← 計算単位
LC_IDENTIFICATION=ja_JP.UTF-8  ← ロケール情報に関するメタデータ
LC_ALL=  ← LC_*環境変数を指定の値でオーバーライドする

設定の変更

LC_ALL環境変数に、「en_US.UTF8」を設定して、すべてを英語圏にしてみます。

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=ja_JP.UTF-8
LC_TIME=ja_JP.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ja_JP.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ja_JP.UTF-8
LC_NAME=ja_JP.UTF-8
LC_ADDRESS=ja_JP.UTF-8
LC_TELEPHONE=ja_JP.UTF-8
LC_MEASUREMENT=ja_JP.UTF-8
LC_IDENTIFICATION=ja_JP.UTF-8
LC_ALL=
$ cd /etc/default
$ cat locale ← 現在のlocale設定確認
#  File generated by update-locale
LANG="en_US.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
$ sudo cp -p locale BK_locale.original ← 設定情報のバックアップ
$ sudo update-locale LC_ALL=en_US.UTF8 ← ロケール環境変数の変更
$ diff BK_locale.original locale
11a12
> LC_ALL=en_US.UTF8
$ cat locale
#  File generated by update-locale
LANG="en_US.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=en_US.UTF8 ← 設定された
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF8"
LC_NUMERIC="en_US.UTF8"
LC_TIME="en_US.UTF8"
LC_COLLATE="en_US.UTF8"
LC_MONETARY="en_US.UTF8"
LC_MESSAGES="en_US.UTF8"
LC_PAPER="en_US.UTF8"
LC_NAME="en_US.UTF8"
LC_ADDRESS="en_US.UTF8"
LC_TELEPHONE="en_US.UTF8"
LC_MEASUREMENT="en_US.UTF8"
LC_IDENTIFICATION="en_US.UTF8"
LC_ALL=en_US.UTF8

locale環境変数の優先順位

locale環境変数には、優先順位があります。

LC_ALL ・・・ すべてのカテゴリーに優先される環境変数
LC_* ・・・ カテゴリーごとに優先される環境変数
LANG ・・・ 上記の環境変数が設定されていない時の環境変数

実運用での設定内容

私が使っている環境では、インストール時に英語を選択して行い、キーボードやその他もろもろは、日本語圏となっています。ただし、「ls -l」コマンドで表示するときは、英語圏の表示を好むので、下記のような設定で使っています。

$ ls -ld /tmp
drwxrwxrwt 20 root root 4096  1月 18 12:39 /tmp ← 「月」って表記されるのがイヤ
$ sudo update-locale LC_TIME=en_US.UTF8
$ su - takam ← 設定を有効にするには再ログインが必要
Password: xxxx
$ ls -ld /tmp
drwxrwxrwt 20 root root 4096 Jan 18 12:39 /tmp  ← 英語で表記された
タイトルとURLをコピーしました