Ubuntu 22.04 LTSにおけるロケール設定

Ubuntu Jammy Jellyfish Setup 2/N

公開日: 2023-08-14
更新日: 2024-02-26

  Table of Contents

Localeとは?

Def: Locale

Localeとは言語や単位, 記号, 日付, 通貨などの表示規則の集合のこと. ソフトウェアはロケールで指定された方式でデータの表記や処理を行う.

Ubuntuではインストール時に, 言語の設定ウィザードでの設問回答に合わせて自動的にLocaleの初期設定(locale-genコマンドに対応)がされます. 初期設定のロケールを確認する場合, デフォルトで提供されているlocaleコマンドを用います.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
% locale   
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

Locale情報の格納場所

Locale設定はユーザー固有 or システム全体に応じて異なったファイルに保存されます.

  • ~/.pam_environment: ユーザー固有のロケール設定ファイル
  • /etc/default/locale: システム全体のロケール設定ファイル

localeコマンドはユーザー固有の設定を優先して参照する形となっています.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
% cat /etc/default/locale 
LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.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

% cat ~/.pam_environment                 
LANGUAGE        DEFAULT=en_US:en
LANG    DEFAULT=en_US.UTF-8
LC_NUMERIC      DEFAULT=en_US.UTF-8
LC_TIME DEFAULT=en_US.UTF-8
LC_MONETARY     DEFAULT=en_US.UTF-8
LC_PAPER        DEFAULT=en_US.UTF-8
LC_NAME DEFAULT=en_US.UTF-8
LC_ADDRESS      DEFAULT=en_US.UTF-8
LC_TELEPHONE    DEFAULT=en_US.UTF-8
LC_MEASUREMENT  DEFAULT=en_US.UTF-8
LC_IDENTIFICATION       DEFAULT=en_US.UTF-8
PAPERSIZE       DEFAULT=letter

% locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_US.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_US.UTF-8
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

Localeの設定項目

Localeの設定は以下のフォーマットで指定します

1
Locale変数=languiage(_territory)(.encoding)(@modifier)

ロケールの構成項目は以下です:

項目 説明
language 言語の指定, 日本語の場合はjp
territory 国/値域の指定, 日本語の場合はJP
encoding エンコーディングの指定
modifier 通貨表記などの修飾子の指定

利用可能なロケール一覧はlocale -aで表示できます. この表示結果は

1
2
3
4
5
6
7
8
% locale -a
C
C.utf8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
...

のようにlowercased & removing special charactersで正規化されていますが, en_US.utf8en_US.UTF-8と同じ意味となります.

ロケール変数

ロケール変数 説明
LANG LC_* variablesのデフォルト値
LANGUAGE GNU gettext の方式に対応したプログラムの言語のデフォルト設定値, :区切りで複数設定可能
LC_ADDRESS アドレスフォーマット
LC_COLLATE sort順番
LC_CTYPE 文字の種類
LC_IDENTIFICATION メタデータのフォーマット
LC_NUMERIC 小数点などの数値表現のフォーマット

LANG vs LANGUAGE

ロケール設定の基本は, 環境変数 LANG で, 通常はLANGさえ設定しておけばそのロケールに合った処理や表示が行われます. 一方, LANGUAGEはGNU gettextを用いて翻訳を表示するプログラムに対して, 表示する翻訳の優先順位を指定します.

使い方としては, 第一言語が日本語, 第二言語がドイツ語のユーザーを想定したとき, 日本語のLANG=jp_JP.UTF-8とすることで基本的には日本語表示されますが, もし日本語翻訳が存在しなかった場合, 英語でメッセージが表示されてしまいます. このとき, LANGUAGE=jp:de:enと設定すると, 日本語を最初に参照し, なければドイツ語, なければ英語の優先順位で表示という動作になります.

Locale変数の優先順番

GNU gettext の方式に対応したプログラムがロケール環境変数を参照(look up)するとき, 環境変数を以下の順番で見に行きます

  1. LANGUAGE
  2. LC_ALL
  3. LC_xxx
  4. LANG

ロケール変数の変更

一時的に変更するだけならばcommand lineにて環境変数を変更するだけで事足ります.

1
2
3
4
5
6
7
$ date
Sat May 14 15:59:12 CEST 2011

$ LC_TIME=zh_CN.UTF-8 

$ date
2011年 05月 14日 星期六 16:00:13 CEST 2011

permanentlyに変更する場合,

  • /etc/default/locale, ~/.pam_environmentをマニュアルで修正
  • bash_profileexportコマンドを用いいて修正
  • update-localeコマンドで修正

という方法が考えられます.

1
$ update-locale LANG=de_DE.UTF-8 LC_MESSAGES=POSIX

というようにupdate-localeコマンドで修正は可能ですが, この修正は/etc/default/localeに書かれてしまうので サーバーで自分個人ユーザーの範囲内で修正する場合は~/.pam_environment.bash_profileへの記載にとどめたほうが良いと思います.

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)