プログラミングの国際化

第 1 章 Solaris 国際化の概要

Solaris 7 製品では、選択したロケールにおいて、ISO-10646 で定義されている Unicode 2.0 をサポートしています。Solaris 7 は、Sun の国際市場向けのメジャーリリーです。アジア向けの新機能が数多く含まれており、東ヨーロッパおよびバルト諸国の言語サポートを大幅に拡張しています。

Solaris 7 の新しい国際化機能

国際化と各国語対応

各国語対応 (localization) とはソフトウェアを特定の言語や地域に適応させる処理であるのに対し、国際化とはソフトウェアを異なる言語や地域の間で移植可能にする処理のことを指します。国際化ソフトウェアは、特定の文化の要件に応じて実行時にプログラムの動作を変化させるインタフェースを使用して開発します。各国語対応には、「ロケール」と呼ばれる言語や地域をサポートするためのオンライン情報を確立する処理が含まれます。

異なる言語や慣習に従って動作させるために完全に書き直す必要のあるソフトウェアとは異なり、国際化されたソフトウェアはそのような作業を必要としません。あるロケールから別のロケールへそのまま移植できます。Solaris システムは国際化に対応しており、国際化ソフトウェアを作成する際に必要な基本構造やインタフェースを備えています。第 3 章「言語対応された Solaris 7 製品の内容」および第 4 章「en_US.UTF-8 ロケールのサポートの概要」で、使用可能な機能とその使用方法について説明します。

国際化と各国語対応の手順は異なります。

Solaris 7 動作環境には、言語対応された次の製品があります。

国際化の基本的な手順

国際化されたアプリケーションの実行可能イメージは、異なる言語や地域の間で共有することができます。ソフトウェアを国際化する手順を次に示します。

メッセージ文字列は、言語や地域に合わせて翻訳します。ロケールには、メッセージ文字列やソートで使用される手続きなどが含まれます。

ロケールは言語と同じではありません。言語には複数の地域が含まれる場合があります。たとえば、フランス語はフランスおよびカナダで話されていますが、通貨や時間の表示方法は各国で異なります。

ある製品の言語対応されたバージョンを使用する場合、ユーザーは環境変数 (「ロケールのカテゴリ」を参照) を設定します。これにより、ユーザーメッセージは翻訳された形式で表示されます。日付、時刻、通貨、およびその他の情報は、ロケール固有の規約に従ってフォーマットおよび表示されます。

ロケールとは

ロケールは、基礎になる言語と使用地域の両方の情報に基づいて構成できます。これら両方を考慮することにより、通貨単位など国ごとに異なる項目を反映させることができます。

アプリケーションプログラムの国際化にとって重要な概念に、プログラムのロケールの概念があります。ロケールは言語環境を示す明示的なモデルであり、定義でもあります。ロケールの概念は明示的に定義されており、ANSI 標準 C のライブラリ定義の中にも組み込まれています。

ロケールは、言語固有の書式やその他の仕様による、いくつかのカテゴリで構成されています。プログラムのロケールは、コードセットや、日付および時間の表記規則、通貨の表記規則、小数の表記規則、照合 (ソート) の順序などを決定します。

ロケール名は言語と地域から成り立っており、コードセットが含まれる場合もあります。なお、地域は不要な場合には省略され、コードセットは通常推定されます。たとえば、ドイツ語は Deutch の略で de、スイス (ドイツ) 語は de_CH (CH は Confederation Helvetica の略) となっています。


注 -

言語によっては複数のロケールを持つものもあります。これらの言語では、通貨の表記などが地域によって異なることがあります。たとえば、アメリカ英語を使う場合は en_US ロケール (アメリカ英語) を、イギリス英語を使う場合は en_GB (イギリス英語) を選択できます。


通常、ロケール名は環境変数 LANG で指定します。ロケールのカテゴリは LANG に依存しますが、別に設定することも可能です。この場合、ロケールのカテゴリは LANG の設定に優先します。LC_ALL が設定されている場合、LC_ALL の設定は LANG だけでなく、ロケールの個別のカテゴリに優先されます。

完全ロケールと部分ロケール

Solaris の完全ロケールは、列挙された機能をすべて備え、システムメッセージはその言語に言語対応されます。ドイツ語の de ロケールは完全ロケールです。ドイツ語版のシステムメッセージはすべてドイツ語で表示されます。

部分ロケールは列挙された機能を備えていますが、メッセージは言語対応されません。ロシア語の ru ロケールでは、入力、出力、ソートなどは処理されますが、メッセージはロシア語に言語対応されません。このため部分ロケールと呼ばれます。

すべての部分ロケールが英語のメッセージを使用するわけではありません。これは、必要とする言語対応されたメッセージが他の完全ロケールに含まれることがあるからです。たとえば、de_AT はオーストリアの部分ロケールです。オーストリアではドイツ語が話されますが、通貨は異なります。オーストリアのロケールは、ドイツ語の de ロケールのサブセットです。de_AT ロケールはメッセージをドイツ語で表示し、通貨をドイツマルクではなくオーストリアシリングで表示します。

ロケール

文化が異なると、日付、時間、数値、通貨、語句の区切り、引用符などの表記も異なります。

ロケールは、言語や文化的な地域の規則に従って実行時のプログラムの動作を定義します。システム全体では、ロケールは次の動作を指定します。

Solaris 環境は、言語と文化に依存する情報をアプリケーションから分離し、アプリケーションとは別に保存します。

言語と文化に依存する情報をアプリケーションから分離することにより、開発者は各市場に合わせて、アプリケーションを翻訳、書き直し、または再コンパイルする必要はありません。新規市場に参入するには、各言語および慣習に合わせて外部情報を言語対応するだけで済みます。

ロケールのカテゴリ

以下にロケールのカテゴリを示します。

ロケールのカテゴリを使用した各国語対応

製品の各国語対応は、対象となる言語や地域に密着したユーザーとともに進める必要があります。特定のスタイルや情報の形式が、開発者にとっては非常に明確であり、普遍的に見える場合でも、実際のユーザーにとっては奇妙であったり、正しくなかったり、状況によっては不快感を与えることもあります。ここでは、製品を正しく国際化するために、Solaris オペレーティング環境により制御および指定できる各要素について説明します。

時間の形式

表 1-1 に、午後 11 時 59 分を表すいくつかの方法を示します。

表 1-1 国際的な時間の表記形式

ロケール 

表記形式 

カナダ (英語またはフランス語) 

23:59  

フィンランド語 

23.59  

ドイツ語 

23.59 Uhr  

ノルウェー語 

Kl 23.59  

イギリス英語 

11.59 PM  

タイ語 

13:10 PM 

時間は、12 時間単位および 24 時間単位のどちらでも表すことができます。時間と分はコロン (:) またはピリオド (.) で区切ります。

国が異なる場合、または国によっては国内でも時間帯が異なることがあります。時間帯は通常、グリニッジ標準時 (GMT) との時差で表現されますが、この時差は必ずしも整数であるとは限りません。たとえば、ニューファンドランド島の時間帯と隣接する時間帯との時差は 0.5 時間です。

夏時間 (DST) の実施期間も国によって異なっています。

日付の形式

表 1-2 は世界中で使用されている日付の表示形式の一部を示しています。ただし、各国内でもさまざまな形式がある場合もあります。

表 1-2 国際的な日付の表記形式

ロケール 

表記 

例 

カナダ (英語およびフランス語) 

yyyy-mm-dd 

1998-08-13  

デンマーク語 

dd/mm/yy 

13/08/98 

フィンランド語 

dd.mm.yyyy 

13.08.1998 

フランス語 

dd/mm/yy 

13/08/98 

ドイツ語 

dd.mm.yy 

13.08.98  

イタリア語 

dd.mm.yy 

13.08.98  

ノルウェー語 

dd.mm.yy 

13.08.98 

スペイン語 

dd-mm-yy 

13-08-98 

スウェーデン語 

yyyy-mm-dd 

1998-08-13  

イギリス英語 

dd/mm/yy 

13/08/98  

アメリカ英語 

mm-dd-yy 

08-13-98 

タイ語 

dd/mm/yyyy 

10/12/2539 

数値

小数位と千単位の区切り文字

イギリスと米国では小数位を表すのにピリオドを使用しますが、その他の多くの国々ではピリオドの代わりにコンマを使用しています。小数位の区切り文字は小数点とも呼ばれます。同様に、イギリスと米国では千単位をコンマで区切るのに対し、他の国々では代わりにピリオドを用いたり、狭い空白文字で区切ったりしています。表 1-3 に、一般的な数値の表記形式を示します。

表 1-3 国際的な数値の表記形式

ロケール 

大きな数値の表記  

カナダ (英語およびフランス語) 

4 294 967 295,00  

デンマーク語 

4.294.967.295,00  

フィンランド語 

4.294.967.295,00  

フランス語 

4.294.967.295,00  

ドイツ語 

4 294 967 295,00  

イタリア語 

4.294.967.295,00  

ノルウェー語 

4.294.967.295,00  

スペイン語 

4.294.967.295,00  

スウェーデン語 

4.294.967.295,00  

イギリス英語 

4,294,967,295.00  

アメリカ英語 

4,294,967,295.00  

タイ語 

4,294,967,295.00 

データファイルにロケール固有の形式で格納されている場合、ロケールの異なるシステムに転送したときに正しく解釈されない可能性があります。たとえば、フランスの形式で数値を格納したファイルは、イギリス向けのプログラムでは使用できません。

並びの区切り文字

並んでいる数を区切る方法を指定する特別なロケールの規則はありません。並んでいる数は、イギリスや米国ではコンマで区切られますが、空白文字やセミコロンを使って区切るほうが一般的です。

通貨

通貨の単位や表記は世界中で大きく異なっています。表 1-4 にいくつかの国の通貨形式を示します。

表 1-4 国際的な通貨の表記規則

ロケール 

通貨 

例  

カナダ (英語)  

ドル ($) 

$1 234.56  

カナダ (フランス語)  

ドル ($) 

1 234.56$ 

デンマーク語  

クローネ (kr) 

kr.1.234,56  

フィンランド語 

マルッカ (mk) 

1.234 mk  

フランス語  

フラン (F) 

F1.234,56  

ドイツ語  

ドイツマルク (DM) 

1,234.56DM  

イタリア語  

リラ (L)  

L1.234,56  

日本語 

41,234 Yen 

ノルウェー語 

クローネ (kr) 

kr 1.234,56  

スペイン語  

ペセタ (Pts) 

1.234,56Pts  

スウェーデン語  

クローナ (Kr) 

1234.56KR  

イギリス英語 

ポンド 

31,234.56 pounds 

アメリカ英語 

ドル ($) 

$1,234.56  

タイ語 

バーツ 

2539 Baht 


注 -

国内での通貨記号と国際的に使われる通貨記号が異なっている場合があります。たとえば、フランスの通貨フランはフランス国内では F で示しますが、国際的にはスイスフランやポリネシアフランと区別するために FRF と表記される場合があります。


また、通貨を他の通貨に換算すると、金額の桁数が元の桁数と異なる場合があるので注意が必要です。たとえば、$1,000 をリラに換算すると L1.307.000 になります。

語と文字の相違点

語の区切り

英語では、語は空白文字で区切ります。ただし、中国語、日本語、タイ語などの言語では多くの場合、語を区切りません。

語順

言語によって、句や文の中での単語の順序は変化します。たとえば、英語の「a black cat」という句と同じ意味の句をスペイン語で表すと、「cat」と「black」を現す単語の順番が逆になり、uno gato negro と書きます。また、フランス語の否定文では、否定する語を否定語の ne と pas で囲むので、英語の I do not speak に相当するフランス語は Je ne parle pas となります。

ソートの順序

特定の文字をソートする順序は言語によって異なります。たとえば、ドイツ語の文字 o は普通の o と一緒にソートされますが、スウェーデン語ではアルファベットの最後の文字として別にソートされます。言語によっては、文字の優先順位を決めるために重みが定められています。たとえば、タイ語の辞書では、文字に異なる重みを与えることによってソート順序が決定されます。

文字集合

文字の数

英語のアルファベットは 26 文字しかありませんが、256 以上の文字を使用する言語もあります。たとえば、日本語には 40,000 以上の文字があり、中国語にはそれ以上の文字があります。

西ヨーロッパのアルファベット

西ヨーロッパ諸国のほとんどのアルファベットは英語圏の国で使用される 26 文字の標準アルファベットに類似しています。ただし、基本的な文字が追加されていたり、記号 (またはアクセント) の付いた文字や合字が使用される場合もあります。

日本語

日本語の文章には 3 種類の文字が混在しています。中国の漢字に由来する表意文字である漢字と、ひらがなとカタカナという 2 つの表音文字 (音節文字) です。

ひらがなとカタカナはそれぞれ対になっていますが、ひらがなのほうがより一般的で、丸みのある形をしています。漢字は語幹となる語を書くのに使用され、カタカナは主に外来語を書き記すのに使用されます。

漢字の数は数万もありますが、使用される漢字の数は徐々に減ってきています。現在、頻繁に使用される漢字の数は 3500 字程度ですが、一般的な日本人の語彙に使用される漢字はおよそ 2000 字ほどです。ただし、コンピュータシステムは日本工業規格 (JIS) で定められた 7000 字以上の漢字に対応しなければなりません。また、170 文字ほどのひらがなとカタカナも必要です。日本語の文章の平均的な文字別構成は、ひらがな 55%、漢字 35%、カタカナ 10% となっています。また日本語の文章にはアラビア数字やローマ字も使用されます。

漢字をまったく使用しないことも可能ですが、ほとんどの日本人にとっては漢字かな混じり文のほうが容易に理解できます。

韓国語

韓国語は、ハングルと呼ばれる表音文字で表されます。ハングルには 11,000 以上の文字があり、19 の子音と 21 の母音で構成されます。これ以外に、27 のオプションの子音があります。通常、韓国語のコンピュータシステムでは、全ハングル文字の内約 3,000 文字が使用されています。韓国語にはまた、ハンジャと呼ばれる中国の漢字から派生した表意文字があります。韓国語では 6,000 以上のハンジャ文字が必要です。ハンジャは主に、ハングルだけでは意味があいまいになる場合に使用されます。ハングル文字では子音と母音を組み合わせて 1 つの音節を構成します。ハングル文字は通常、四角く配列されており、ハンジャ文字と同じスペースを必要とします。韓国語では、アラビア数字、ローマ字、および特殊記号も表示されます。

タイ語

タイ語の文字は、4 つの表示セルを持つディスプレイ上のカラム位置として定義されます。各カラム位置に表示できるのは最大 3 文字です。表示セルの構成内容はタイ文字の分類に基づいています。タイ文字の一部は、別の分類の文字と組み合わせることができます。組み合わされた文字は、同じセルに入ります。それ以外の場合は、別のセルに入ります。

中国語

中国語は通常、表意文字である漢字ですべてを表記します。中華人民共和国 (PRC) では、GB2312 (zh ロケール) にある約 7,000 の漢字が一般的に使用されており、この他にも GBK (zh.GBK ロケールにある 20,000 を超える文字があります。中華民国 (ROC/台湾) では、現在の規格で必要とされる漢字の数は 13,000 文字以上で、さらに 6,000 の漢字が最近規格化されましたが、頻繁に使用されることはありません。

語幹文字でない限り、通常 1 つの文字は 2 つ以上の部分で形成されます。最も一般的なのは 2 つの部分で形成されるものです。2 つの部分で構成される文字では、1 つが意味を表し、もう 1 つは発音を表すのが普通ですが、両方とも意味を表すこともあります。漢字では部首が最も重要な要素です。漢字は伝統的に部首によって分類され、部首の数は数百にものぼります。異なる文字で同じ読み方をするものも多数ありますが、使用する際は明確に区別されます。同じ文字で異なる読み方をするものもあります。

中国語には四声と呼ばれる声調があり、文脈の中で適切な文字を音声によって区別します。一方、日本語と韓国語には声調はありません。

中国語の発音を表す表音体系にはいくつかの種類があります。中華人民共和国で最も普及しているのはピンイン方式です。これはローマ字を使用するもので、広く西部で採用されており、たとえば北京を Beijing と表します。ウェードガイル方式は旧式のもので、北京を Peking と表すなど地名の表現に以前は使用されていました。台湾では、独特の字体を持った表音用のアルファベットである zhuyin (bopomofo) がよく使用されています。

商用アプリケーション、特に人名を扱うアプリケーションでは、コードセットの拡張の影響を考慮する必要があります。中国の多くの人々は、標準コードセットには存在しない文字を含む名前を持っています。この問題に対応するために、割り当てられていないコードセット用に、スペースを提供する必要があります。

キーボードの相違点

U.S. キーボードにあるすべての文字が他のキーボードにあるとは限りません。同様に、U.S. キーボードにはない文字のキーが他のキーボードに付いている場合もあります。ただし、SPARC マシンで Compose キーを使用すると、ISO Latin-1 コードセットをサポートするキーボードでれば ISO Latin-1 の任意の文字を生成できます。


注 -

Compose キーは、英語およびヨーロッパ言語ロケールで使用できますが、韓国語、中国語、および日本語ロケールでは使用できません。


その他の相違点

句読点

言語によっては句読点の位置や形状が異なる場合があります。スペイン語の や ! は文の先頭に位置します。また、フィンランド語ではコロン (:) を単語内で使用することもあります。

シンボル

ある文化では日常的に使用されるシンボルでも、他の文化では何の意味も持たない場合があります。たとえば、米国の郊外でよく見かける郵便受けは他の国にはあまり存在しないので、世界中で通用する電子メールツールのアイコンとしては適していません。

度量法

ほとんどの国では現在メートル法を採用していますが、米国、カナダの一部、および (非公式ですが) イギリスでは現在も大英帝国時代の方式を使用しています。フィート (`) やインチ (") を表す記号が、すべての国で通用するわけではありません。

文法上の性

言語の中には、形容詞や、冠詞、名詞を性によって区別するものがあります。たとえば、フランス語の un petit gamin と une petite gamine はどちらも「小さな子」という意味ですが、初めの表現は男の子を示し、次の表現は女の子を示します。また、英語では中性のもの (たとえば a computer) が、別の言語では性を持つ場合があります (フランス語の un ordinateur は男性名詞です)。

敬称と住所

Mr.、Miss、Mrs.、および Ms. などの敬称は米国では一般的ですが、他の国ではあまり使用されません。また、住所を書く順序も異なります。

住所の表記方法も国によって異なります。郵便番号に数字だけでなく文字も使用する国も多数あります。

住所を書く順序や姓と名を書く順序も国によって異なります。

用紙のサイズ

各国にはよく使用される紙のサイズがいくつかあり、通常はそのうちの 1 つが頻繁に使用されます。ほとんどの国は ISO 216 規格の「筆記用紙および印刷物の分類 -- A 版と B 版の定型サイズ」に従っています。

国際化アプリケーションでは、使用可能なページサイズをあらかじめ想定するべきではありません。Solaris には出力のページサイズを保持する機能はなく、これはアプリケーションプログラムが行わなければなりません。表 1-5 に一般的な国際ページサイズを示します。

表 1-5 一般的な国際ページサイズ

用紙の種類 

寸法 

採用している国  

ISO A4 

21.0 cm by 29.7 cm 

米国以外 

ISO A5 

14.8 cm by 21.0 cm 

米国以外 

JIS B4 

25.9 cm by 36.65 cm 

日本  

JIS B5 

18.36 cm by 25.9 cm 

日本 

US レター 

8.5 インチ * 11 インチ 

米国、カナダ 

US リーガル 

8.5 インチ * 14 インチ 

米国、カナダ  

参考マニュアル『Creating Worldwide Software』

『Creating Worldwide Software』(第 2 版、Bill Tuthill、David A. Smallberg 共著、SunSoft Press、1997 年) は、Solaris プラットフォームでの各国語対応の手引きです。Solaris システムで作業をしている開発者にはこの本を推奨します。その他の参考マニュアルについては、「関連マニュアル」を参照してください。

概要

『Creating Worldwide Software』は、世界的な UNIX プラットフォーム、特に Sun の Solaris システム用の製品を開発する開発者や管理者を対象としています。