B    日本語ロケールの定義内容

ここでは,Tru64 UNIX で提供している 5 つの日本語ロケール (ja_JP.eucJP, ja_JP.SJIS, ja_JP.deckanji, ja_JP.sdeckanji,UTF-8) の定義内容について説明します。4つの日本語ロケールの定義内容は,コードセットに依存する定義を除いて,共通の定義となっています。 Tru64 UNIX で提供している日本語ロケールは,1993 年に発表された「UI-OSF 日本語環境実装規約 Version 1.1」の定義に適合するように実装されています。

以下では,CHARMAP, LC_CTYPE, LC_COLLATE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME のそれぞれの定義について説明します。ロケールで定義する項目やキーワードの意味などの詳細については, charmap(4) および locale(4) を参照してください。

B.1    CHARMAP

ロケール・データベースを作成する際に参照される charmap ファイルはコードセットごとに存在し,各コードセットの属性やロケール定義に使用されるシンボリック名とコード値との対応を記述します。 表 B-1 は,locale -k CHARMAP コマンドで表示される各日本語コードセットの属性を charmap ファイルのキーワードごとに示しています。 プログラム実行時のロケールの code_set_name の値は,nl_langinfo(CODESET) 呼出しで取得することができます。

表 B-1:  日本語コードセットの属性

  日本語 EUC シフトJIS DEC 漢字 Super DEC 漢字 UTF-8
code_set_name "eucJP" "SJIS" "deckanji" "sdeckanji" "UTF-8"
mb_cur_max 3 2 2 3 3
mb_cur_min 1 1 1 1 1

B.2    LC_CTYPE

LC_CTYPE には,isw* 関数の動作を決める文字クラスの情報と tow* 関数の動作を決める文字変換の情報が定義されています。 文字クラスには,C 言語規格や POSIX 規格などの標準仕様で規定している標準の文字クラスと,ロケールごとに必要な文字クラスを追加して定義した拡張文字クラスの二種類があります。 標準の文字クラスは,XPG4 や POSIX の標準に適合したシステムには必ず存在する文字クラスです。 拡張文字クラスは,標準規格には規定されていない日本語ロケールとして必要な文字クラスを追加したものです。 表 B-2 に標準の文字クラスの定義内容を, 表 B-3 に拡張文字クラスの定義内容を示します (UTF-8 では,拡張文字クラスは未定義です)。 プログラムで拡張文字クラスの判定を行う場合は,XPG4 で規定されている wctype 関数と iswctype 関数を組み合わせて使用します。

LC_CTYPE には,文字クラスの他に,towupper 関数および towlower 関数から参照される大文字と小文字の対応関係を定義します。 表 B-4 は,toupper および tolower に定義されているアルファベットを示しています。

表 B-2:  標準の文字クラス

文字クラス名 定義内容
upper ASCII の 'A'〜'Z', JIS X0208 のローマ字大文字, JIS X0208 のギリシア文字大文字, JIS X0208 のロシア文字大文字, JIS X0212 のダイアクリティカルマーク付き ギリシアアルファベット文字大文字, JIS X0212 のキリル系アルファベット大文字, JIS X0212 のラテン系アルファベット大文字, JIS X0212 のダイアクリティカルマーク付き ラテンアルファベット大文字
lower ASCII の 'a'〜'z', JIS X0208 のローマ字小文字, JIS X0208 のギリシア文字小文字, JIS X0208 のロシア文字小文字, JIS X0212 のダイアクリティカルマーク付き ギリシアアルファベット文字小文字, JIS X0212 のキリル系アルファベット小文字, JIS X0212 のラテン系アルファベット小文字, JIS X0212 のダイアクリティカルマーク付き ラテンアルファベット小文字
alpha upper 及び lower に定義されている文字
digit ASCII の '0' 〜 '9'
space ASCII の ' '(2/0), '\t'(0/9), '\n'(0/10), '\v'(0/11), '\f'(0/12), '\r'(0/13) JIS X0208 の間隔 (1 区 1 点)
cntrl C0, C1 コントロール文字 (ただし,eucJP 及び sdeckanji については,SS2 及び SS3 を除く)
punct

  • ASCII の '!'(2/1)〜'/'(2/15), ':'(3/10)〜'@'(4/0), '['(5/11)〜' ` '(6/0), '{'(7/11)〜'~'(7/14)

  • JIS X0208 の '、'(1 区 2 点)〜'!'(1 区 10 点), '´'(1 区 13 点)〜'_'(1 区 18 点), '〃'(1 区 23 点), '〆'(1 区 26 点), '―'(1 区 29 点)〜'◇'(1 区 94 点)

  • JIS X0201 RH の句点 (2/1), 始かっこ (2/2), 終かっこ (2/3), 読点 (2/4), 中点 (2/5)

  • JIS X0212 のダイアクリティカルマーク (2 区 15 点 〜 25 点), 記述記号 (2 区 34 点, 2 区 36 点), 単位記号 (2 区 80 点), 一般記号 (2 区 35 点, 75 点〜79 点, 81 点)

graph

  • ASCII の upper, lower, digit, punct に含まれる文字

  • JIS X0208 の間隔を除くすべての文字 (JIS 未定義部分を含む)

  • JIS X0201 RHのすべての文字 (2/1 〜 5/15)

  • JIS X0212 のすべての文字 (JIS 未定義部分を含む)

  • ユーザ定義文字領域のすべての文字

print

  • graph に含まれるすべての文字

  • ASCII の ' ' (2/0)

  • JIS X 02 区 08 の間隔 (1 区 1 点)

xdigit

ASCII の '0'〜'9', 'a'〜'f', 'A'〜'F'

blank

ASCII の ' '(2/0), '\t' (0/9)

表 B-3:  拡張文字クラス

文字クラス名 定義内容
ascii ASCII のすべての文字
line JIS X0208 の罫線素片 (8 区 1 点 〜 8 区 32 点)
jdigit JIS X0208 の数字 ('0' 〜 '9')
paren

  • ASCII の '(', ')', '[', ']', '{', '}'

  • JIS X0208 の括弧記号 (1 区 38 点 〜 1 区 59 点)

  • JIS X0201 RH の始かっこ (2/2), 終かっこ (2/3)

jparen

  • JIS X0208 の括弧記号 (1 区 38 点 〜 1 区 59 点)

  • JIS X0201 RH の始かっこ (2/2), 終かっこ (2/3)

jisx0201

JIS X0201 のすべての文字

jisx0201r

JIS X0201 RH のすべての文字

jisx0208

JIS X0208 のすべての文字 (JIS 定義部分のみ)

jisx0212

JIS X0212 のすべての文字 (JIS 定義部分のみ)

udc ユーザ定義文字
vdc ベンダ定義文字 (Tru64 UNIX にはないため、未定義)
gaiji ユーザ定義文字およびベンダ定義文字
jhira JIS X0208 の 'ぁ'(4 区 1 点) 〜 'ん'(4 区 83 点), '゛'(1 区 11 点), '゜'(1 区 12 点), 'ゝ'(1 区 21 点), 'ゞ'(1 区 22 点), 'ー'(1 区 28 点)
jkata JIS X0208 の 'ァ'(5 区 1 点 〜 'ヶ'(5 区 86 点), '゛'(1 区 11 点), '゜'(1 区 12 点), 'ヽ'(1 区 19 点), 'ヾ'(1 区 20 点), 'ー'(1 区 28 点)
jhankana JIS X0201 RH のカタカナ (2/6 〜 5/13), 濁点 (5/14), 半濁点 (5/15)
jkanji

  • JIS X0208 の漢字 (16〜84区の JIS 定義文字), '仝' (1 区 24 点), '々' (1 区 25 点), '〇' (1 区 27 点)

  • JIS X0212 の漢字 (16 〜 77 区の JIS 定義文字)

jspace

JIS X0208 の間隔 (1 区 1 点)

english JIS X0208 の 'A' 〜 'Z', 'a' 〜 'z'
number JIS X0208 の '0' 〜 '9'
special JIS X0208 の特殊文字 (1 〜 2 区の JIS 定義文字)
phonogram JIS X0208 の 'ぁ'(4 区 1 点) 〜 'ん'(4 区 83 点), 'ァ'(5 区 1 点) 〜 'ヶ'(5 区 86 点)
ideogram JIS X0208 のすべての文字 (JIS 未定義部分を含む)

表 B-4:  toupper および tolower に定義されているアルファベット

ASCII のローマ字 (小文字 'a'〜'z' ⇔ 大文字 'A'〜'Z')
JIS X0208 のローマ字 (小文字 'a'〜'z' ⇔ 大文字 'A'〜'Z')
JIS X0208 のギリシア文字 (小文字 'α'〜'ω' ⇔ 大文字 'Α'〜'Ω')
JIS X0208 のロシア文字 (小文字 'а'〜'я' ⇔ 大文字 'А'〜'Я')
JIS X0212 のダイアクリティカルマーク付きギリシアアルファベット
JIS X0212 のキリル系アルファベット
JIS X0212 のラテン系アルファベット
JIS X0212 のダイアクリティカルマーク付きラテンアルファベット

B.3    LC_COLLATE

LC_COLLATE には,文字の照合順序を定義します。日本語ロケールで定義されている文字の照合順序は,次の番号の小さい順に定義されています。

  1. ASCII の文字

  2. JIS X0201 RH の文字

  3. JIS X0208 の文字 (JIS 未定義部分を含む)

  4. JIS X0212 の文字 (JIS 未定義部分を含む)

  5. DEC 拡張漢字領域のユーザ定義文字

それぞれの文字セット内での順序は,符号の小さい順になります。

B.4    LC_MESSAGES

LC_MESSAGES には,YES(肯定)/NO(否定) で答える質問に対する入力文字列を YES あるいは NO と判定するためのルールを正規表現で定義します。 日本語ロケールでは,ASCII あるいは JIS X0208 のアルファベットで 'y' または 'Y' で始まる文字列は YES,ASCII あるいは JIS X0208 のアルファベットで 'n' または 'N' で始まる文字列は NO と判定するように定義しています。

表 B-5 に LC_MESSAGES の定義内容を示します。

表 B-5:  LC_MESSAGES の定義

キーワード 定義内容
yesexpr "^[yYyY]"
noexpr "^[nNnN]"

B.5    LC_MONETARY

LC_MONETARY には,金額の表現に使用される文字列やルールを定義します。 表 B-6 に LC_MONETARY の定義内容を示します。

表 B-6:  LC_MONETARY の定義

キーワード 定義内容
int_curr_symbol "JPY "
currency_symbol "¥"
mon_decimal_point ""
mon_thousands_sep ","
mon_grouping 3
positive_sign ""
negative_sign "-"
int_frac_digits 0
frac_digits 0
p_cs_precedes 1
p_sep_by_space 0
n_cs_precedes 1
n_sep_by_space 0
p_sign_posn 1
n_sign_posn 4

B.6    LC_NUMERIC

LC_NUMERIC には,金額以外の数値の表現に使用される文字列やルールを定義します。 表 B-7 に LC_NUMERIC の定義内容を示します。

表 B-7:  LC_NUMERIC の定義

キーワード 定義内容
decimal_point "."
thousands_sep ","
grouping 3

B.7    LC_TIME

LC_TIME には,日付および時間の表現に使用される文字列やルールを定義します。表 B-8に LC_TIME の定義内容を示します。それぞれのキーワードの定義内容は,表中に示した strftime 関数の変換仕様から参照されます。

表 B-8:  LC_TIME の定義

キーワード strftime 関数の変換仕様 定義内容
abday %a "日";"月";"火";"水";"木";"金";"土"
day %A "日曜日";"月曜日";"火曜日";"水曜日";"木曜日";"金曜日";"土曜日"
abmon %b " 1月";" 2月";" 3月";" 4月";" 5月";" 6月";" 7月";" 8月";" 9月";"10月";"11月";"12月"
mon %B "1月";"2月";"3月";"4月";"5月";"6月";"7月";"8月";"9月";"10月";"11月";"12月"
d_t_fmt %c "%Y年%m月%d日 %H時%M分%S秒"
d_fmt %x "%Y年%m月%d日"
t_fmt %X "%H時%M分%S秒"
am_pm %p "午前";"午後"
t_fmt_ampm %r "%p%I時%M分%S秒"
era -

  • "+:2:1990/01/01:+*:平成:%EC%Ey年";\

  • "+:1:1989/01/08:1989/12/31:平成:%EC元年";\

  • "+:2:1927/01/01:1989/01/07:昭和:%EC%Ey年";\

  • "+:1:1926/12/25:1926/12/31:昭和:%EC元年";\

  • "+:2:1913/01/01:1926/12/24:大正:%EC%Ey年";\

  • "+:1:1912/07/30:1912/12/31:大正:%EC元年";\

  • "+:2:1869/01/01:1912/07/29:明治:%EC%Ey年";\

  • "+:1:1868/09/08:1868/12/31:明治:%EC元年";\

  • "+:1:1/1/1:1868/09/07:西暦:%EC%Ey年";\

  • "-:1:-1/12/31:-*:紀元前:%EC%Ey年"

era_year %EY "%EC%Ey年"
era_d_fmt %Ex "%EY%m月%d日"
era_d_t_fmt %Ec "%EY%m月%d日 %H時%M分%S秒"