csh (tcsh) を日本語化(UTF8)してもエラー出力は英語のままなので日本語化してみた
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
FreeBSDのデフォルトのシェルはtcsh です。その親とも言うべきシェルがCシェルと呼ばれる csh です。
そのcsh のユーザーインターフェイスの部分を中心に拡張されたのがtcsh で csh との上位互換を持ちます。
同じBSD系OSである Mac OS X も つい最近 ( Mac OS X 10.2 ) まで、デフォルトシェルをFreeBSDと同じtcsh としていました。
Mac OS X 10.3 以降は、Linuxのデフォルトシェルである bash (Bourne-Again Shell)が採用されています。
ここでの問題は、以下のようなケースです。
1
2
3
4
5
6
7
8
$ date
Thu Feb 2 03:54:49 JST 2012
$ setenv LANG ja_JP. UTF- 8
$ date
2012年 2月 2日 木曜日 03時56分58秒 JST
$ sss
sss: Command not found.
1 行目 : 日時を表示しています。ここでは、日本語化していないので、英語表記で日時が出力されています。
3 行目 : 言語の日本語(UTF8)に設定しています。
4 行目 : 日時を表示しています。ここでは、日本語化しているので、日本語表記で日時が出力されています。
ここで使っているシェルが、正しく日本語(UTF8)化できているのがわかるかと思います。
6 行目 : ありえないコマンドを投入しています。ここで期待しているのは、日本語でコマンドが見つかりません というものです。しかし、ここでは、英語のまま Command not found. が表示されています。
ここでは、このCommand not found. を単純に日本語で出力できるように対処してみます。
bash は、いわゆる Bシェルと呼ばれる Bourne Shell とごっちゃになりがちです。
そもそも Bourne Shell は、bash ( Bourne-Again Shell ) の親のようなもので、コマンド文法はかなりの部分をBourne Shellと後方互換性を持たせています。
そのため、Bourne Shell で記述されたスクリプトは、bash でも動作するとされています。
日本語のエラーが出力されない理由
これは、マルチランゲージ対応のためのtcsh用のUTF-8対応のカタログファイルが存在しないためです。
先のカタログファイルは、
/usr/share/nls/ja_JP.UTF-8 /
にtcsh.cat というファイル名で存在しないと環境設定を日本語(UTF-8)へ切り替えても日本語にはならないわけです。
$ ls / usr/ share/ nls/ ja_JP. UTF- 8/
libc.cat
$ ls / usr/ share/ nls/ ja_JP. eucJP/
libc.cat tcsh.cat
上記では、
日本語(EUC)の場合は、tcsh.cat が存在しますから、エラーが出力されるはずです。
$ setenv LANG ja_JP. eucJP
$ date
2012年 2月 2日 木曜日 04時49分41秒 JST
$ aaa
aaa: コマンドが見つかりません.
期待どおりの出力です。
もちろん、ここでのコンソールは、漢字コードをEUC-JP での送受信に切り替える必要があります。
このような結果を漢字コードがUTF-8でも得たいわけです。
そのためには、UTF-8で作成されたカタログファイル ( tcsh.cat ) を作成して、先のディレクトリへおいてあげればOKのはずですね。
では、早速、カタログファイル ( tcsh.cat ) を作成してみましょう。
tcshの日本語(UTF-8)カタログファイルを作成する
tcshの日本語(UTF-8)カタログファイルを作成するには、以下の手順で実施します。
tcshのバージョンを確認する。
tcshのバージョンは、tcシェルの中で $version を出力することで確認できます。
$ tcsh
$ echo $version
tcsh 6.17.00 (Astron) 2009-07-10 (i386-intel-FreeBSD) options wide,nls,dl,al,kan,sm,rh,color,filec
上記は、FreeBSD 9.0 で出力した様子です。
tcsh 6.17 であることをメモに控えておきます。
tcshのソースコードをダウロードする。
上記でバージョンの確認ができたので、そのバージョンのtcshのソースコード一式をダウンロードします。
$ wget ftp:// ftp. astron. com/ pub/ tcsh/ old/ tcsh- 6. 17. 00. tar. gz
--2012-02-03 13:00:00-- ftp://ftp.astron.com/pub/tcsh/old/tcsh-6.17.00.tar.gz
...
wget が存在しない場合は、pkg_add でインストールしましょう。
$ pkg_add - r wget
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/Latest/wget.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/All/libidn-1.22.tbz... Done.
こんな感じで簡単にインストールできます。
Linuxでは当たり前のようにインストールされているので、FreeBSDでも・・・と思いがちですが、そうそう思うようにならないのがFreeBSDです。
でも自分が思ったとおりの(やったとおりの)システムになるのが可愛くもありますね。
最新バージョンと以外の古いバージョンでは、ダウンロード先が異なります。
最新バージョンは、以下のURLからダウンロードできます。
ftp://ftp.astron.com/pub/tcsh/tcsh-バージョン.tar.gz
古いバージョンは、以下のURLからダウンロードできます。
ftp://ftp.astron.com/pub/tcsh/old/ tcsh-バージョン.tar.gz
ここでダウンロードした6.17は、既に古いバージョンでした。
ソースコードを展開し、メッセージセットをUTF8へ変換する
$ gunzip tcsh- 6. 17. 00. tar. gz
$ tar xf tcsh- 6. 17. 00. tar
$ cd tcsh- 6. 17. 00/ nls/ ja/
ソースコード一式を解凍したディレクトリ配下の ./nls/ja/ が、日本語メッセージセットのファイル一式があるところです。
バージョン 6.17 には、以下のファイルが存在します。
set1
set2
set3
set4
set5
set6
set7
set8
set10
set11
set12
set13
set15
set16
set17
set18
set21
set24
set29
set30
charset
– このファイルには、メッセージセットファイル作成時の文字コードが出力されています。このファイル自体は、メッセージに関連しないので今回は無視してもOKです。
メッセージセットとは、ここでは、文言(エラーメッセージを含むプログラムで出力するメッセージ)を日本語に翻訳したテキストファイル群のことを指します。
まずは、メッセージセットのファイル群を1つのファイルにまとめます。
$ cat set[ 0- 9] set[ 0- 9][ 0- 9] > set. tmp
次に、まとめたメッセージセットのファイルをUTF8へ変換します。
$ nkf - w set. tmp > set. tmp. utf8
これで、メッセージセットをすべてUTF8へ変換できたはずです。
nkf がインストールされていないようなら、pkg_add でインストールしましょう。
$ pkg_add - r ja- nkf
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-release/Latest/ja-nkf.tbz... Done.
パッケージ名が、
ja-nkf なので間違えないようにしましょう。
日本語(UTF-8)カタログファイルを作成する
最後に、先にUTF8へ変換したメッセージセットからカタログファイルを作成します。
$ gencat tcsh. cat set. tmp. utf8
[ フォーマット ]
gencat 出力ファイル名 入力ファイル名
パラメータの順番に注意してください。
また、
gencat は、入力文字コードを
LC_CTYPE で判断します。
実行する前に必ず誤りがないか確認しておきましょう。
$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_ALL=
もし、
ja_JP.UTF-8 でない場合は、以下のように設定しておきましょう。
$ setenv LC_CTYPE ja_JP. UTF- 8
% setenv LANG ja_JP.UTF-8
これでカタログファイルが作成できたました。このカタログファイル ( tcsh.cat ) を
/usr/share/nls/ja_JP.UTF-8 / へコピーして完了です。
$ cp tcsh. cat / usr/ share/ nls/ ja_JP. UTF- 8/.
コピーを終えたら、確認しておきましょう。
$ aaa
aaa: コマンドが見つかりません.
日本語が表示されましたね。
カタログファイルを意識することは、まず、ほとんどの場合ないと思います。
今回は、UTF8で日本語環境を設定していてたまたま気になったので調べてみたところ、ファイルが無いのにちょっと驚きました。
今まで、ほとんどがEUCの環境だったり、bash の環境だったりしたので、あまり問題にならなかったんですけど、
案外、FreeBSDのユーザもtcsh をそのまま使っている日本人は少ないのか、はたまた、UTF8の日本語環境でFreeBSDを使っている人が少ないのか・・・。
いずれにせよ、「こうやって日本語表示ができているんだ」という程度の話でした。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
関連記事 :
コメントを投稿 :