Linux - localization & internationalization



 ◆ ローカライゼーションとは

 国や地域に応じた言語、日付、通貨単位などは
ロケールと呼ばれる表記規則として扱われます。そして
 言語、日付、通貨単位などを国や地域に合わせることを、
ローカライゼーションと言います。国ごとに
 ローカライゼーションを行うのは大変ですが、最近のソフトウェアはあらかじめ多言語、多地域に対応
 するように作成されています。これを
国際化(internationalization)と言います。i18nとも呼ばれます。



 ◆ ロケール

 ロケール(利用者の地域情報)は以下の通りカテゴリに分類されており、これらのカテゴリは個々に
 設定することができるので、例えばメッセージは日本語であるが日付や通貨単位は英語にするという
 ようなことができます。全てのカテゴリに同じ値を適用するためには、環境変数
LANGまたはLC_ALL
 を設定する必要があります。主なロケール用の環境変数には以下のようなものがあります。

環境変数 説明
 LANG  言語の設定
 LC_CTYPE  文字の種類、大文字/小文字の変換などの文字属性を定義
 LC_MESSAGES  出力されるメッセージの言語を指定
 LC_MONETARY  通貨に関する規定
 LC_NUMERIC  数値の書式に関する規定
 LC_TIME  日付や時刻の書式に関する規定
 LC_ALL  ロケールの環境変数すべて



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

 ◆ 構文 : locale [ オプション ] ユーザー名

オプション 説明
 -a  設定できるロケールを全て表示
 -m  利用できる文字コードを全て表示


 $ locale

 LANG=en_US.UTF-8
 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設定は全てen_US.UTF-8(英語(米)/Unicode)であると分かります。
 en_US.UTF-8以外に設定できる主なロケール設定の値には、以下のような値があります。

ロケールの設定値 説明
 C  英語
 en_US.UTF-8  英語(米)/Unicode
 ja_JP.utf8  日本語/Unicode
 ja_JP.eucJP  日本語/EUC-JP
 ja_JP.shiftJIS  日本語/ShiftJIS


 ロケール環境変数全てをja_JP.utf8(日本語)にする設定例は以下の通りです。この設定を行った場合、
 LANGを除いて、LC_〜の全ての環境変数の値が以下のように変更されることになります。以下のように
 LC_ALLの環境変数を使用して設定した場合は、個別のロケール設定は行えなくなるで注意が必要です。


 $ export LC_ALL=ja_JP.utf8

 $ locale

 LANG=en_US.UTF-8
 LC_CTYPE="ja_JP.utf8"
 LC_NUMERIC="ja_JP.utf8"
 LC_TIME="ja_JP.utf8"
 LC_COLLATE="ja_JP.utf8"
 LC_MONETARY="ja_JP.utf8"
 LC_MESSAGES="ja_JP.utf8"
 LC_PAPER="ja_JP.utf8"
 LC_NAME="ja_JP.utf8"
 LC_ADDRESS="ja_JP.utf8"
 LC_TELEPHONE="ja_JP.utf8"
 LC_MEASUREMENT="ja_JP.utf8"
 LC_IDENTIFICATION="ja_JP.utf8"
 LC_ALL=ja_JP.utf8



 LANGについても、ja_JP.utf8(日本語)にしたい場合は以下のように設定を行います。

 $ export LANG=ja_JP.utf8


 ◆ 文字コード

 文字コードとは、コンピュータ上で文字を利用するために各文字に割り当てたバイトコードのことです。

文字コード 説明
 ASCII  7ビットで表現される。128種類の英数字、記号、制御コードで構成される。
 Unicode  32ビットで表現される。1つの文字コード体系で多言語処理を可能にするための文字コード。
 UTF-8  Unicodeを使用した文字コード。1文字を1バイトから6バイトで表示する。
 EUC-JP  UNIX環境で標準的に使用していた日本語の文字コード
 ShiftJIS  WindowsやMacOSで使用される日本語の文字コード
 ISO-2022-JP  電子メールなどでよく使用される日本語の文字コード(JISコード)
 ISO-8859  ASCIIを拡張した8ビットの文字コードで256種類の文字を表現できる。


 多くのディストリビューションでは、文字コードとしてUTF-8が使用されていますが、日本ではいくつかの
 文字コードが混在しているのでWindowsで作成したファイルをLinuxで開くと文字化けすることがあります。
 また、ディストリビューションによってはUTF-8以外の文字コードを使用しているものもあり、文字コード
 を変換させる必要もあります。文字コードを変換するためには、
iconvコマンドを使用します。

 ◆ 構文 : iconv [ オプション ] [ファイル名]

オプション 説明
 -l  変換できる文字コードの一覧を表示
 -f 入力文字コード  変換元の文字コード。from。
 -t 出力文字コード  変換後の文字コード。to。
 -o ファイル名  文字コード変換した文字列を出力するファイル名。


 ◆ 実行例 : EUC-JPで作成されたファイル「 abc.txt 」を、UTF-8に変換してファイル「 def.txt 」として保存
 $ iconv -f eucjp -t utf8 abc.txt > def.txt




 ◆ タイムゾーン

 地域ごとに区分された標準時間帯を
タイムゾーンと言います。タイムゾーンの情報は /usr/share/zoneinfo
 ディレクトリ配下のバイナリファイルに格納されています。Linuxで利用するタイムゾーンは上記ファイル
 を、/etc/localtimeにコピーすることで設定するか、シンボリックリンクを作成することで定義できます。

 ◆ 実行例 : 日本のタイムゾーンの設定
 # cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


 ◆ 実行例 : 日本のタイムゾーンの設定 - シンボリックリンクによる作成
 # ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


 または、tzselectコマンドを使用することで、一覧から表示される情報をもとにタイムゾーンを設定できます。


 $ tzselect

 Please identify a location so that time zone rules can be set correctly.
 Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
 10) Pacific Ocean
 11) none - I want to specify the time zone using the Posix TZ format.


#? 5


 Please select a country.
 1) Afghanistan 18) Israel 35) Palestine
 2) Armenia 19) Japan 36) Philippines
 3) Azerbaijan 20) Jordan 37) Qatar
 4) Bahrain 21) Kazakhstan 38) Russia
 5) Bangladesh 22) Korea (North) 39) Saudi Arabia
 6) Bhutan 23) Korea (South) 40) Singapore
 7) Brunei 24) Kuwait 41) Sri Lanka
 8) Cambodia 25) Kyrgyzstan 42) Syria
 9) China 26) Laos 43) Taiwan
 10) Cyprus 27) Lebanon 44) Tajikistan
 11) East Timor 28) Macau 45) Thailand
 12) Georgia 29) Malaysia 46) Turkmenistan
 13) Hong Kong 30) Mongolia 47) United Arab Emirates
 14) India 31) Myanmar (Burma) 48) Uzbekistan
 15) Indonesia 32) Nepal 49) Vietnam
 16) Iran 33) Oman 50) Yemen
 17) Iraq 34) Pakistan

 #?
19


 Therefore TZ='Asia/Tokyo' will be used.
 Local time is now: 2013年 11月 11日 月曜日 23:57:56 JST.
 Universal Time is now: 2013年 11月 11日 月曜日 14:57:56 UTC.
 Is the above information OK?
 1) Yes
 2) No

 #? 1



 また、tzconfigコマンドでもタイムゾーンを設定することができます。tzconfigコマンドを実行すると
 /etc/localtime と /etc/timezone の値をまとめて変更することになります。tzconfigコマンド処理は
 以下の順番で処理されます。

 1. tzconfigコマンド実行時に選択したタイムゾーンファイルを /etc/localtimeファイルにセットする。
 2. /etc/timezone ファイル内に、tzconfigコマンド実行時に選択したタイムゾーン設定を書き込む。



Linux 技術入門

Copyright(C) 2002-2024 ネットワークエンジニアとして All Rights Reserved