ここでは,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 |
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
に定義されているアルファベットを示しています。
文字クラス名 | 定義内容 |
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 |
|
graph |
|
|
|
xdigit | ASCII の '0'〜'9', 'a'〜'f', 'A'〜'F' |
blank | ASCII の ' '(2/0), '\t' (0/9) |
文字クラス名 | 定義内容 |
ascii | ASCII のすべての文字 |
line | JIS X0208 の罫線素片 (8 区 1 点 〜 8 区 32 点) |
jdigit | JIS X0208 の数字 ('0' 〜 '9') |
paren |
|
jparen |
|
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 |
|
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 のダイアクリティカルマーク付きラテンアルファベット |
LC_COLLATE には,文字の照合順序を定義します。日本語ロケールで定義されている文字の照合順序は,次の番号の小さい順に定義されています。
ASCII の文字
JIS X0201 RH の文字
JIS X0208 の文字 (JIS 未定義部分を含む)
JIS X0212 の文字 (JIS 未定義部分を含む)
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]" |
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 |
LC_NUMERIC には,金額以外の数値の表現に使用される文字列やルールを定義します。
表 B-7
に LC_NUMERIC の定義内容を示します。
表 B-7: LC_NUMERIC の定義
キーワード | 定義内容 |
decimal_point | "." |
thousands_sep | "," |
grouping | 3 |
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 | - |
|
era_year | %EY | "%EC%Ey年" |
era_d_fmt | %Ex | "%EY%m月%d日" |
era_d_t_fmt | %Ec | "%EY%m月%d日 %H時%M分%S秒" |