Linux における日本語ロケールに関する指針 Linux Japanese Locale Working Group linux-tech@linux.or.jp Copyright (C) 1999 by Linux Japanese Locale Working Group Revision History Revision 1.03 1999年12月15日 公開版 この文書は Linux で使用する日本語ロケールの名称を提案する。またそのロケ ールがどのような機能を提供すべきかの指針と、日本語ロケールにおけるアプ リケーションプログラムをどのように実装すべきかの指針を述べる。さらに各 指針に対して背景を示す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Table of Contents Preface この文書の目的について 著作権等 履歴 要約 この文書の対象範囲 関連規格 1. はじめに 2. ロケール名称 3. 文字コード 4. ロケール定義 4.1. LC_CTYPE 4.2. LC_COLLATE 4.3. LC_MESSAGES 4.4. LC_MONETARY 4.5. LC_NUMERIC 4.6. LC_TIME 5. アプリケーション実装の指針 6. ディレクトリ名称に関して 7. フィードバック 8. 参考文献 8.1. ロケール関連規格 8.2. 文字コード関連規格 8.3. その他 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 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 規格の表記に倣い「ロケール」を使用している。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 1. はじめに Linux における日本語ロケールには統一された名称が存在せず、どのようなロ ケール名称を使用すべきかについて色々な場所でたびたび議論されてきた。 日本の Linux の黎明期には真鍋氏の手による JE がほぼ唯一の日本語環境であ り、それが採用していた "ja_JP.ujis" が事実上の標準のロケール名称であっ たという歴史的経緯がある。しかし現在では、様々な Linux ディストリビュー ションが提供されるようになってきており、これにともなって日本語環境も多 様になってきた。 また過去においては Linux の C Library にはロケール機構の実装は行われて おらず X Window System の提供するロケール機構を使用していた。近年になっ て X のロケールから GNU C Library version 2 に実装されたロケールへの移 行が進んでいる。残念ながら現時点では日本語をはじめとする多バイト文字の ロケール機構は機能していないが実装作業が進行中であり、近日中に利用可能 になるものと思われる。 この時期に日本語ロケール名称の不統一という状況を放置していた場合には各 ディストリビューションの日本語環境で独自の名称や機能が採用されることに なり、不要な差異をもたらすことになる。このためアプリケーションの開発者 や利用者に混乱をもたらすことにもなりかねない。この問題を指摘し、混乱を 事前に防ぐのがこの文書の目的である。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 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 に比べて直感的でない。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 3. 文字コード 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 ではなく別の名前を使用することが望 ましい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 4. ロケール定義 標準的な日本語ロケールが ja_JP.eucJP として提供すべき機能を示す。 注: GNU C Library version 2 のロケール機構は多バイト文字コードへの 対応等が不十分なためこの章の内容は 1999 年 12 月の時点では機能して いないものを含んでいる。近い将来の目標である。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1. 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 0,1,2,3,4,5,6,7,8,9 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 の内で平仮名を片仮名に変換する。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2. LC_COLLATE 当面、文字の照合順序は文字コードの順番とする。 各文字コードは次の順序とする。 1. ISO 646 IRV 2. JIS X 0201 カタカナ 3. JIS X 0208 4. JIS X 0212 この項目は実装の進行状況に合わせてより実用的なものへと改訂される予定で ある。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3. LC_MESSAGES 以下とする。   yesexpr ^[yYyY]   noexpr ^[nNnN] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.4. LC_MONETARY ・ 国際通貨記号は "JPY " とする。 ・ 通貨記号は "¥" とする。 ・ 金額は3桁ごとに "," で区切る。小数は使用しない。 ・ 通貨記号、符号、金額の順とする。正符号は使用しない。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5. LC_NUMERIC ・ 小数点は "." とする。 ・ 3桁ごとに区切り、区切り文字は "," とする。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.6. 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日" ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 5. アプリケーション実装の指針 アプリケーションの作成やディストリビューションの構成、またバイナリ配布 のコンパイル・オプションには以下の方針を取るのが望ましい。 ・ 非ロケールアプリケーションもロケールアプリケーションとスムーズに連 用するために、どれか一つの文字コードのみを扱う場合には「日本語 EUC 」が扱えるようにする。ただし他の環境と情報をやりとりすることを主目 的としたプログラムはこの限りではない。 ・ 日本語マニュアルやドキュメントはできる限り「日本語 EUC」で提供する 。 ・ ロケールとは異なる独自の手法で複数の文字コードが扱える日本語アプリ ケーションでも文字コード指定が省略された場合には「日本語 EUC」が指 定されたように動作する。 ・ 当面、ファイル名およびディレクトリ名には日本語は使用しない。現時点 で敢えて日本語を使用する場合には「日本語 EUC」にする。ただしこの規 定は将来変更される可能性が高い。 ・ ディストリビューション等で日本語ユーザ環境のデフォルトを準備する場 合には LANG=ja_JP.eucJP とする。 ・ ja_JP.eucJP ではユーザ定義文字(いわゆる外字)はサポートしない。ユー ザ定義文字が必要な場合は別ロケール名称を用いる。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 6. ディレクトリ名称に関して この指針はロケール名称とその内容についての指針を示すことを目的としてお り、ロケール用のディレクトリ名称などの個別の実装については特に規定しな い。 補足: 現在、ディレクトリ名称を始めとする実装に混乱がみられ、開発者 などを中心として日本語ロケール用のディレクトリ名称を統一して欲しい という強い要望があるため、その時の議論を元に参考意見を付記しておく 。 この指針に従ってロケール用のディレクトリ名称を素直に選んだ場合、日 本語 EUC のためのディレクトリは ja_JP.eucJP を使用することになり、 これが最も適切である。 ただし ja_JP.eucJP という名称を使用することは FHS 2.0 (4.8.2 節)の 文字コード名には小文字を使用することという規定に違反することになる 。 FHS のこの部分の規定は本来は不要のものであり、現状の実装と必ずし も一致するものではない。今後 FHS 側に働きかけを行い、この規定の改訂 を行うのが良いと思われる。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 7. フィードバック この文書に関連する議論は当面は linux-tech メーリングリストで行います。 この文書は常時状況に合わせて改訂を行っていく予定ですので、意見、感想、 要望などある場合には、linux-tech@linux.or.jp までお願いします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Chapter 8. 参考文献 8.1. ロケール関連規格 ・ 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) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.2. 文字コード関連規格 ・ 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 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.3. その他 ・ UI-OSF 日本語環境実装規約 Version 1.1 ・ 「国際化プログラミング I18N ハンドブック」 清兼義弘・末広陽一/編著共立出版 ISBN 4-320-02904-6 ・ 日本語EUC・シフトJIS間コード変換仕様とコード系実態調査 (http://www.opengroup.or.jp/jvc/cde/sjis-euc.html)