日本語でmanをみようと思ったら、ちょっと調べておかなきゃならないことがありそうな気がしてきた。
問題発生時にエラー表示が日本語だと、それを使って検索しても表示される情報が限定的。
なので多くのシーンで英語がいいと思うのだけれど、manページは日本語で見たいと思ったのだった。
また、デスクトップを日本語でインストールすると、ホームディレクトリの下にあるディレクトリ名が日本語になってしまう。
これが嫌だなと思うときはデスクトップを英語でインストールしていた。
ロケールを変更すると、一括で言語が変わってしまうのが悩み。
結論
これでいいのかなと。
$ sudo apt install language-pack-ja manpages-ja
$ echo "alias manja='LC_MESSAGES=ja_JP.UTF8 man'" >> .bash_aliases
ログインし直して…
$ manja man
特徴としては…
- 日本語のmanページが用意されているものが限られている。ない時は英語で表示される。
- 日本語のmanページは古いこともある。英語のmanページをあわせて見てみるのもオススメ。
といったところかと思う。
この特徴を考慮してmanjaというエイリアスにしたので、manコマンドで英語版のマニュアルが見られる。
ロケールについて
Geminiさんによると…
ロケールとは、プログラムの動作を地域や文化に合わせて調整するための設定の集合体です。これには、以下の情報が含まれます。
- 言語: 使用される言語(例:日本語、英語)
- 国: 地理的な場所(例:日本、アメリカ)
- 文字コード: テキストのエンコーディング(例:UTF-8)
例えば、ja_JP.utf8というロケールは「日本で使われる日本語で、文字コードはUTF-8」を意味します。
localeコマンドで現在のロケールに関する情報を教えてくれる。
システム全体のロケール
ここに設定が入っている。
$ cat /etc/default/locale
LANG=en_US.UTF-8
日本語でインストールした環境では、こんな設定になっていた。
$ cat /etc/default/locale
LANG=ja_JP.UTF-8
利用可能なロケール
利用可能なロケールは以下。
$ locale -a
C
C.utf8
en_US.utf8
POSIX
日本語のロケールがないのでインストールした。
$ sudo apt install language-pack-ja
日本語のロケールが追加された。
$ locale -a
C
C.utf8
en_US.utf8
ja_JP.utf8
POSIX
$ locale -av ja_JP.UTF-8
...
locale: ja_JP.utf8 archive: /usr/lib/locale/locale-archive
-------------------------------------------------------------------------------
title | Japanese language locale for Japan
source | HANATAKA, Shinya, hanataka@abyss.rim.or.jp
email | bug-glibc-locales@gnu.org
language | Japanese
territory | Japan
revision | 1.0
date | 2000-07-20
codeset | UTF-8
...
現在のロケール
現在のロケール設定をロケールカテゴリーごとに表示してくれる。
$ locale
LANG=en_US.UTF-8
LANGUAGE=
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(5)とlocale(7)を見た感じと、テストした結果ではこんなところ。
ロケールカテゴリー | POSIXで定義 | 説明 |
---|---|---|
LANGUAGE | 優先順位を付けて:で区切ってロケールを指定。 LC_MESSAGESが"C"以外の有効なロケールに設定されている場合、GNU gettext関数群は環境変数LANGUAGEにも従う。 | |
LC_ALL | LC_hogeのすべてを上書きする。 | |
LC_CTYPE | ○ | 大文字小文字、数字、空白として使用する文字等。 |
LC_NUMERIC | ○ | 桁区切り文字、小数点文字等。 |
LC_TIME | ○ | 曜日、月、日付表記順等。 |
LC_COLLATE | ○ | 並び替えや正規表現で使用される照合順序。 |
LC_MONETARY | ○ | 通貨記号、桁区切り文字、小数点文字等。 |
LC_MESSAGES | ○ | yes/noの表記。 |
LC_PAPER | 用紙サイズ。 | |
LC_NAME | 名前の書き方、男性・女性の呼び方等。 | |
LC_ADDRESS | 郵便の住所。 | |
LC_TELEPHONE | 国際番号、国内番号のフォーマット等。 | |
LC_MEASUREMENT | 標準の単位系(メートル、米国慣用単位) | |
LC_IDENTIFICATION | このロケール文書のタイトル、管理者、説明等。 | |
LANG | LC_hogeが未設定の時に使用される。 |
なるほど…実験してみよう。
$ LANG=ja_JP.UTF-8 LC_MESSAGE=ja_JP.UTF-8 ls dummy
ls: 'dummy' にアクセスできません: そのようなファイルやディレクトリはありません
$ LANG= LC_MESSAGES= ls dummy
ls: cannot access 'dummy': No such file or directory
$ LANG= LC_MESSAGES=ja_JP.UTF-8 ls dummy
ls: 'dummy' ??????????: ??????????????????????
LANG | LC_MESSAGES | lsのエラーメッセージ | manの表示 |
---|---|---|---|
ja_JP.UTF-8 | ja_JP.UTF-8 | 日本語 | 日本語 |
ja_JP.UTF-8 | en_US.UTF-8 | 英語 | 英語 |
ja_JP.UTF-8 | C | 英語 | 英語 |
ja_JP.UTF-8 | 未指定 | 日本語 | 日本語 |
en_US.UTF-8 | ja_JP.UTF-8 | 日本語 | 日本語 |
C.UTF-8 | ja_JP.UTF-8 | 日本語 | 日本語 |
C | ja_JP.UTF-8 | 不定? | 英語 |
未指定 | ja_JP.UTF-8 | 不定? | 英語 |
未指定 | 未指定 | 英語 | 英語 |
ja_JP.UTF-8について、未指定とかCとの組み合わせで、上手く表示ができないことがあった。EUCなのかな?
時々、LANG=Cとしてコマンドを実行していたけれど、C.UTF-8とかen_US.UTF-8との組み合わせが安定していそうだった。
ロケールの設定変更
日本語ロケールが入っていない場合はインストールするとして、こんな状態であることを前提として進める。
$ sudo apt install language-pack-ja
$ locale -a
C
C.utf8
en_US.utf8
ja_JP.utf8
POSIX
いずれにしても、ja_JP.UTF8とen_US.UTF-8が入った状態。
システム全体のロケール
en_US.UTF-8の環境では、以下を実施。
$ cat /etc/default/locale
LANG=en_US.UTF-8
$ sudo update-locale LANG=ja_JP.UTF-8
$ cat /etc/default/locale
LANG=ja_JP.UTF-8
これで、新たに接続したプロセスはja_JP.UTF-8になっていた。
再起動すればシステム全体がja_JP.UTF-8になると思われる。
コンソールのロケール
システム全体のロケールはen_US.UTF-8にしておいて、コンソールをja_JP.UTF-8にしたいと思ったら、以下で良さそうだった。
$ echo "LANG=ja_JP.UTF-8" >> .bashrc
これで、SSHとかで接続し直すとこうなる。
$ locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="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=
$ sudo su
# locale
LANG=en_US.UTF-8
LANGUAGE=
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=
これはちょっと大げさ…いくつかのコマンドだけを日本語で使いたいと思ったら、冒頭の設定で良いかと思う。
デスクトップのロケール
デスクトップの場合だと、en_US.UTF-8が入っていないので、language-pack-enをインストールした。
en_USだけあれば良いのだけれど、他のも入ってくる。
$ sudo apt install language-pack-en
$ locale -a
C
C.utf8
POSIX
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
ja_JP.utf8
システム全体のロケール
システム全体のロケールを変更するには、以下を実施。
$ cat /etc/default/locale
LANG=ja_JP.UTF-8
$ sudo update-locale LANG=en_US.UTF-8
$ cat /etc/default/locale
LANG=en_US.UTF-8
再起動すると、全体が英語になった。
ディレクトリ名の変更
システムは日本語で動かすとして、ディレクトリ名を英語にするときには以下。
$ LANG=en_US.UTF-8 xdg-user-dirs-gtk-update
$ cat ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
$ cat ~/.config/user-dirs.locale
en_US
日本語に戻すときは以下。
$ LANG=ja_JP.UTF-8 xdg-user-dirs-gtk-update
$ cat ~/.config/user-dirs.dirs
# This file is written by xdg-user-dirs-update
# If you want to change or add directories, just edit the line you're
# interested in. All local changes will be retained on the next run.
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
# absolute path. No other format is supported.
#
XDG_DESKTOP_DIR="$HOME/デスクトップ"
XDG_DOWNLOAD_DIR="$HOME/ダウンロード"
XDG_TEMPLATES_DIR="$HOME/テンプレート"
XDG_PUBLICSHARE_DIR="$HOME/公開"
XDG_DOCUMENTS_DIR="$HOME/ドキュメント"
XDG_MUSIC_DIR="$HOME/ミュージック"
XDG_PICTURES_DIR="$HOME/ピクチャ"
XDG_VIDEOS_DIR="$HOME/ビデオ"
$ cat ~/.config/user-dirs.locale
ja_JP
変更前にファイルが保管されているディレクトリは、リネームされなかった。
手でファイルを移動させてしまえばOK。
ディレクトリ名の変更を何度も聞かれるのは面倒なので「次回から表示しない」「Don't ask me this again」にチェックを入れる。
そうすると、その後にxdg-user-dirs-gtk-updateを実行しても、何も聞いてこなくなる。
もしも、再度質問して欲しくなったら、user-dirs.localeの中身を壊す。
ファイルを削除しても、ファイルを0バイトに切り詰めても何も反応しないので、おかしな内容を書き込む。
$ echo destroy > .config/user-dirs.locale
これでxdg-user-dirs-gtk-updateを実行すると、ディレクトリ名の変更が必要になった場合に質問してくれる。
さいごに
ただ日本語マニュアルを見たいと思っただけなんだけれど、ロケールについても確認することになった。
表示ができればいいじゃん、という発想もあったりする結果、こういう基本的なところの知識が足らない。
xdg-user-dirs-gtk-updateで検索してみると、過去の自分の記事が見つかったので読み直してみた。
色々試しているのだけれど、ロケールについて調べていなかった。
ま、そんなもんだよね。気が付いたときに補完していけばいいか。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他