# Linux における日本語ロケールに関する指針

Linux Japanese Locale Working Group

    linux-tech@linux.or.jp

1999年12月15日
1.03
1999年12月15日
公開版
1999
Linux Japanese Locale Working Group

この文書は Linux で使用する日本語ロケールの名称を提案する。またその ロケールがどのような機能を提供すべきかの指針と、日本語ロケールにおけ るアプリケーションプログラムをどのように実装すべきかの指針を述べる。 さらに各指針に対して背景を示す。

## Preface

### この文書の目的について

この文書は Linux における当面の日本語ロケールの運用に関する指針を提 供することにより、ディストリビューション間の不必要な差異をなくし、 Linux においてより積極的に日本語を利用可能とすることを目的とする。ま た文書として公開することにより、現状の問題点が明らかになり将来の改訂 による日本語環境の改善に役立つことを期待する。

### 著作権等

Copyright (C) 1999 Linux Japanese Locale Working Group

この文書の著作権は Japanese Locale Working Group に帰属します。 内容の変更を行わない限りにおいて、複製、再配布を許可します。こ の文書の一部を引用する場合には、バージョン、日付け、全文の入手 方法を付記してください。

#### 補足

Linux Japanese Locale Working Group は linux-tech@linux.or.jp メーリングリストの参加者のうちの有志で構成されます。linux-tech メーリングリストは Linux ディストリビューション間で共通の技術 的な情報を交換するための場です。

### 履歴

- 1999年12月10日
- バージョン 1.0
- 決定稿候補
- 1999年12月11日
- バージョン 1.01
- 著作権表記、履歴を追加
- 1999年12月13日
- バージョン 1.02
- 参考文献を追加
- 1999年12月15日
- バージョン 1.03
- 公開版

### 要約

この文書は Linux で使用する日本語ロケールの名称を提案する。またその ロケールがどのような機能を提供すべきかの指針と、日本語ロケールにおけ るアプリケーションプログラムをどのように実装すべきかの指針を述べる。 さらに各指針に対して背景を示す。

### この文書の対象範囲

この文書は 1999 年 12 月時点における Linux 日本語環境を念頭において 記述したものであり、その時点でのロケールの名称とその運用に関する指針 を提供するものである。したがって本文書の記述は現時点での過渡的運用の 指針を示したものであって、将来における運用を規定するものではない。実 状が変化した場合には、当然この文書も改訂することになる。またこの文書 が提供するのは日本語ローカライゼーションについての指針だけである。こ の文書はインタナショナライゼーションについての指針を提供するものでは ない。

### 関連規格

この文書におけるロケール(locale)とは、以下に挙げる規格の文化圏固有操 作(locale)を指す。

- POSIX.1

  - (IEEE 1003.1:1990, ISO/IEC 9945-1:1990s)
  - (翻訳規格 JIS X 3030-1994)

- Programing Language C

  - (ISO/IEC 9899:1990)
  - (翻訳規格 JIS X 3010-1993)

- Programing Language C (Amendment 1)

  - (ISO/IEC 9899:1990/Amd.1:1995)
  - (翻訳規格 JIS X 3010:1996)

#### 注)

locale という単語の英語本来の発音は「ロケール」というよりはむしろ 「ロウカール」のような音である。また「ロカール」と表記されることも ある。しかし既に「ロケール」という訳語が定着しているため、本文書で も JIS 規格の表記に倣い「ロケール」を使用している。

## はじめに

Linux における日本語ロケールには統一された名称が存在せず、どのような ロケール名称を使用すべきかについて色々な場所でたびたび議論されてきた。

日本の Linux の黎明期には真鍋氏の手による JE がほぼ唯一の日本語環境 であり、それが採用していた "ja_JP.ujis" が事実上の標準のロケール名称 であったという歴史的経緯がある。しかし現在では、様々な Linux ディス トリビューションが提供されるようになってきており、これにともなって日 本語環境も多様になってきた。

また過去においては Linux の C Library にはロケール機構の実装は行われ ておらず X Window System の提供するロケール機構を使用していた。近年 になって X のロケールから GNU C Library version 2 に実装されたロケー ルへの移行が進んでいる。残念ながら現時点では日本語をはじめとする多バ イト文字のロケール機構は機能していないが実装作業が進行中であり、近日 中に利用可能になるものと思われる。

この時期に日本語ロケール名称の不統一という状況を放置していた場合には 各ディストリビューションの日本語環境で独自の名称や機能が採用されるこ とになり、不要な差異をもたらすことになる。このためアプリケーションの 開発者や利用者に混乱をもたらすことにもなりかねない。この問題を指摘し、 混乱を事前に防ぐのがこの文書の目的である。

## ロケール名称

ここでのロケール名称とは環境変数 LANG や LC_ALL 等に設定すべき値であ り、 C ライブラリ関数 setlocale() に与えるべき値である。

・Linux における日本語環境において使用する文字コードは日本語 EUC と し、そのロケール名称は

      ja_JP.eucJP

を推奨する。eucJP の部分の大文字/小文字の区別を期待しないことが望 ましい。

その他の名称に関しては以下の指針を示す。

ja_JP

  現時点では ja_JP.eucJP の別名として解釈することが望 ましい。この規定は主流となる文字コードの変更に伴って、 将来変更される可能性が高い。

ja_JP.ujis

  ja_JP.eucJP の別名とみなす。今後の使用は推奨されない が歴史的な経緯から当面は使用可能とするのが望ましい。

ja_JP.SJIS

  文字コードとして shift JIS を使用する場合のロケール 名称とする。

ja_JP.ISO-2022-JP

  文字コードとして ISO-2022-JP を使用する場合のロ ケール名称とする。実質的にはサポートされないと思われ る。

ja_JP.UTF-8

  文字コードとして UTF-8 を使用する場合のロケール名称 とする。現状では実質的にサポートされていない。

ja

  ロケール名称としては使用しないことを推奨する。しかし ながら現時点では互換性の目的で、他に特に指定がない場 合には ja_JP.eucJP が指定されたかのように動作するこ とが望ましい。この規定も将来変更される可能性が高い。

japanese

  ロケール名称として推奨しない。

japanese.euc

  ロケール名称として推奨しない。

ja_JP.JIS

  ロケール名称として推奨しない。

ja_JP.EUC

  ロケール名称として推奨しない。

### 補足

これまで Linux で広く使用されてきた ja_JP.ujis を廃して、敢えて ja_JP.eucJP を推薦するのは以下の理由からである。

ujis は通産省のシグマプロジェクト用に規定された名称であるが、現 時点では linux 以外の環境で全く使用されていない。既に過去の遺物 の感がある。

一方で eucJP は UNIX のベンダー団体である OpenGroup (旧 X/Open, OSF 及び UI を含む)で採用され幅広く使用されている。また XFree86 などを含む多くの open source プロジェクトで採用されつつあるため、 現時点で労を厭わず足並を揃えておく方が将来のために良い。

日本語 EUC の名称として ujis は eucJP に比べて直感的でない。

## 文字コード

Linux の日本語ロケールで使用する文字コードとして「日本語 EUC」を推奨 する。Linux における日本語 EUC の構成は以下の通りとする。

ISO/IEC 2022:1994 の符号化方式で暗黙のうちに

- G0
- ISO 646 IRV
- (ISO 646 の国際基準版)
- G1
- JIS X 0208-1990
- (JIS 漢字)
- G2
- JIS X 0201-1976 のカタカナ部分
- (俗称 半角カナ)
- G3
- JIS X 0212-1990
- (JIS 補助漢字)

が指示されており、GL に G0 が、GR に G1 が呼び出されているものとする。 G2 および G3 の文字コードの使用にはそれぞれ SS2 および SS3 のみを使 用する。ここで SS2 および SS3 には 08/14 および 08/15 のみを使用する こととし、続く文字コードには最上位ビットに 1 が立っているものを使用 する。

指針として G2 および G3 に配した文字コードは他の環境との互換のための みに使用し、できる限り使用しないことが望ましい。将来の変更においてこ の位置に別の文字集合を割り当てる場合もありえる。

G0 は JIS X 0201 ではなく ISO 646 IRV であることに注意すること。他の 環境との互換のためにやむをえない場合を除いては、JIS X 0201 の円記号 およびオーバーラインは利用しないことを推奨する。

各文字集合の未割当部分は全て将来の拡張のために予約されている。未割当 部分をユーザ定義文字(いわゆる外字)用として使用してはならない。

### 補足

この文字コードの定義は「日本語 EUC」以外の文字コードの利用を禁止 するものではない。ユーザの設定により他の文字コードに切り換えるこ とができた方が望ましい。あくまでも利便性のために、「文字コードと して少なくとも日本語 EUC が利用できること」 「デフォルトを日本語 EUC にすること」を推奨するものである。また他の環境との互換性のた め外字を必要とする場合には ja_JP.eucJP ではなく別の名前を使用す ることが望ましい。

## ロケール定義

標準的な日本語ロケールが ja_JP.eucJP として提供すべき機能を示す。

### 注

GNU C Library version 2 のロケール機構は多バイト文字コードへの対 応等が不十分なためこの章の内容は 1999 年 12 月の時点では機能して いないものを含んでいる。近い将来の目標である。

### LC_CTYPE

○基本クラスは規格に従って以下のように定義する。

upper/lower/alpha

  ISO 646 IRV/JIS X 0208/JIS X 0212 のアルファベット文字 (ギリシア文字/キリール文字)を含むものとする。

digit

  0, 1, 2, 3, 4, 5, 6, 7, 8, 9

  ISO 646 IRV の数字のみを含むものとする。 JIS X 0208 の数字を含んではならない。

xdigit

  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, A, B, C, D, E, F

  ISO 646 IRV の英数字のみを含むものとする。 JIS の英数字を含んではならない。

blank

  ISO 646 IRV の SPACE, TAB を含み JIS X 0208 の空白(1区1点)は含まないものとする。

space

  ISO 646 IRV の TAB, LF, VT, FF, CR, SPACE を含み JIS X 0208 の空白(1区1点)を含むものとする。

cntrl

  ISO 646 IRV の制御文字を含むものとする。

punct

  各文字集合の特殊文字を含むものとする。

graph

  各文字集合の図形文字を含むものとする。

print

  各文字集合の表示可能文字を含むものとする。

toupper

  同じ文字集合の内部において大文字へと置換する。

tolower

  同じ文字集合の内部において小文字へと置換する。

○可能ならば以下のクラスを追加する。

jdigit

  ０,１,２,３,４,５,６,７,８,９ JIS X 0208 の算用数字のみを含むものとする。

jhira

  JIS X 0208 の平仮名を含むものとする。 (゛゜ーゝゞ も含む。)

jkata

  JIS X 0208 の片仮名を含むものとする。 (゛゜ーヽヾ ヵヶ も含む。) JIS X 0201 のカタカナを含むものとする。

jkanji

  JIS X 0208/JIS X 0212 の漢字を含むものとする。 (仝々〇 も含む。)

jspace

  JIS X 0208 の空白(1区1点)のみを含むものとする。

○可能ならば以下の変換を追加する。

tojhira

  JIS X 0208 の内で片仮名を平仮名に変換する。

tojkata

  JIS X 0208 の内で平仮名を片仮名に変換する。

### LC_COLLATE

当面、文字の照合順序は文字コードの順番とする。

各文字コードは次の順序とする。

1. ISO 646 IRV

2. JIS X 0201 カタカナ

3. JIS X 0208

4. JIS X 0212

この項目は実装の進行状況に合わせてより実用的なものへと改訂される予定 である。

### LC_MESSAGES

以下とする。

yesexpr

  ^[yYｙＹ]

noexpr

  ^[nNｎＮ]

### LC_MONETARY

- 国際通貨記号は "JPY " とする。

- 通貨記号は "￥" とする。

- 金額は3桁ごとに "," で区切る。小数は使用しない。

- 通貨記号、符号、金額の順とする。正符号は使用しない。

### LC_NUMERIC

- 小数点は "." とする。

- 3桁ごとに区切り、区切り文字は "," とする。

### LC_TIME

以下のような表現を与えるようにする。

abday

  "日", "月", "火", "水", "木", "金", "土"

day

  "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"

abmon

  " 1月", " 2月", " 3月", " 4月", " 5月", " 6月", " 7月", " 8月", " 9月", "10月", "11月", "12月"

mon

  "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"

d_t_fmt

  "1999年01月02日 01時23分45秒"

d_fmt

  "1999年01月02日"

t_fmt

  "01時23分45秒"

am_pm

  "午前", "午後"

t_fmt_ampm

  "午後01時23分45秒"

era_d_fmt

  "平成元年03月21日"

## アプリケーション実装の指針

アプリケーションの作成やディストリビューションの構成、またバイナリ配 布のコンパイル・オプションには以下の方針を取るのが望ましい。

- 非ロケールアプリケーションもロケールアプリケーションとスムーズに 連用するために、どれか一つの文字コードのみを扱う場合には「日本語 EUC」が扱えるようにする。ただし他の環境と情報をやりとりすること を主目的としたプログラムはこの限りではない。

- 日本語マニュアルやドキュメントはできる限り「日本語 EUC」で提供す る。

- ロケールとは異なる独自の手法で複数の文字コードが扱える日本語アプ リケーションでも文字コード指定が省略された場合には「日本語 EUC」 が指定されたように動作する。

- 当面、ファイル名およびディレクトリ名には日本語は使用しない。現時 点で敢えて日本語を使用する場合には「日本語 EUC」にする。ただしこ の規定は将来変更される可能性が高い。

- ディストリビューション等で日本語ユーザ環境のデフォルトを準備する 場合には LANG=ja_JP.eucJP とする。

- ja_JP.eucJP ではユーザ定義文字(いわゆる外字)はサポートしない。 ユーザ定義文字が必要な場合は別ロケール名称を用いる。

## ディレクトリ名称に関して

この指針はロケール名称とその内容についての指針を示すことを目的として おり、ロケール用のディレクトリ名称などの個別の実装については特に規定 しない。

### 補足

現在、ディレクトリ名称を始めとする実装に混乱がみられ、開発者などを中 心として日本語ロケール用のディレクトリ名称を統一して欲しいという強い 要望があるため、その時の議論を元に参考意見を付記しておく。

この指針に従ってロケール用のディレクトリ名称を素直に選んだ場合、日本 語 EUC のためのディレクトリは ja_JP.eucJP を使用することになり、これ が最も適切である。

ただし ja_JP.eucJP という名称を使用することは FHS 2.0 (4.8.2 節)の文 字コード名には小文字を使用することという規定に違反することになる。 FHS のこの部分の規定は本来は不要のものであり、現状の実装と必ずしも一 致するものではない。今後 FHS 側に働きかけを行い、この規定の改訂を行う のが良いと思われる。

## フィードバック

この文書に関連する議論は当面は linux-tech メーリングリストで行います。 この文書は常時状況に合わせて改訂を行っていく予定ですので、意見、感想、 要望などある場合には、linux-tech@linux.or.jp までお願いします。

## 参考文献

### ロケール関連規格

- IEEE 1003.1:1990, ISO/IEC 9945-1:1990s (翻訳規格 JIS X 3030-1994)

  POSIX.1

- ISO/IEC 9899:1990 (翻訳規格 JIS X 3010-1993)

  Programing Language C

- ISO/IEC 9899:1990/Amd.1:1995 (翻訳規格 JIS X 3010:1996)

  Programing Language C (Amendment 1)

- Single Unix Specification version 2

  ( http://www.opengroup.org/pubs/catalog/t912.htm)

### 文字コード関連規格

- ISO/IEC 646

  ISO 7-bit coded character set for information interchange

- JIS X 0201-1997

  7ビット及び8ビットの情報交換用符号化文字集合

- JIS X 0208:1997

  7ビット及び8ビットの2バイト情報交換用符号化漢字集合

- JIS X 0212-1990

  情報交換用漢字符号 − 補助漢字

- ISO/IEC 2022:1994 (翻訳規格 JIS X 0202:1998)

  Character code structure and extension techniques

- ISO/IEC 10646-1-1993 (翻訳規格 JIS X 0221-1995)

  - Universal Multiple-Octet Coded Character Set (UCS)
  - - Part 1: Architecture and Basic Multilingual Plane

- RFC1468 (ISO-2022-JP)

  Japanese Character Encoding for Internet Messages

- RFC2279 (UTF-8)

  UTF-8, a transformation format of ISO 10646

### その他

- UI-OSF 日本語環境実装規約 Version 1.1

- 「国際化プログラミング I18N ハンドブック」

  清兼義弘・末広陽一/編著 共立出版 ISBN 4-320-02904-6

- 日本語EUC・シフトJIS間コード変換仕様とコード系実態調査

  ( http://www.opengroup.or.jp/jvc/cde/sjis-euc.html)