日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:入出力について
第 3 章:文字/文字列/引数リスト関数
第 4 章:エラー処理とシグナル処理
第 5 章:サブプロセス関数
第 6 章:Curses画面管理関数とマクロ
第 7 章:算術関数
第 8 章:メモリ割り当て関数
第 9 章:システム関数
第 10 章:国際化ソフトウェアの開発
第 11 章:日付/時刻関数
第 12 章:シンボリックリンクとPOSIXパス名
付録 A:各OSバージョンでサポートする関数一覧
付録 B:非標準ヘッダに複製されているプロトタイプ
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (上巻)


目次 索引

第 10 章
国際化ソフトウェアの開発

この章では,国際化ソフトウェアの典型的な機能と,国際化ソフトウェアを設計および実装するために HP C Run-Time Library (RTL) で提供される機能について説明します。

この章で説明する関数の詳細については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)』「リファレンス・セクション」を参照してください。

10.1 国際化のサポート

HP C RTL では,アプリケーション開発者が国際化ソフトウェアを作成するための機能が追加されました。 HP C RTL は,ロケール・ファイルから言語とカルチャーに関する情報を読み込んで取得します。

10.1.1 インストール

これらの HP C RTL 機能を使用する場合は,システムにこれらのファイルを提供するために別のキットをインストールする必要があります。『OpenVMS Upgrade and Installation Guide』の付録「Installing OpenVMS Internationalization data kit」を参照してください。

OpenVMS Alpha システムでは,セーブ・セットは Layered Product CD で提供されます。名前は,VMSI18N0nn または ALPVMSI18N0n_07nn です。

このセーブ・セットをインストールするには,このセーブ・セット名をキットの名前として使用して,標準的な OpenVMS のインストール手順に従います。複数のロケール・カテゴリをインストールのために選択できます。次のプロンプトに応答することにより,必要な数だけロケールを選択できます。

* Do you want European and US support? [YES]? 
* Do you want Chinese GB18030 support (locale and Unicode converters) [YES]? 
* Do you want Chinese support? [YES]? 
* Do you want Japanese support? [YES]? 
* Do you want Korean support? [YES]? 
* Do you want Thai support? [YES]? 
* Do you want the Unicode converters? [YES]? 

このキットには Installation Verification Procedure も含まれています。キットが正しくインストールされたかどうかを検証するには,このプロシージャを実行することをお勧めします。

10.1.2 Unicode のサポート

OpenVMS Version 7.2 で, HP C ランタイム・ライブラリに Universal Unicode ロケールが追加されました。このロケールは VMSI18N0nn キットではなく, OpenVMS システムに付属しています。 Unicode ロケールの名前は次のとおりです。

   UTF8-20 

VMSI18N0nn キットに付属しているロケールと同様に, Unicode ロケールは SYS$I18N_LOCALE 論理名によって参照される標準的なディレクトリにあります。

UTF8-20 Unicode は,Unicode 標準 V2.0 をベースにしています。 Unicode ロケールでは,ワイド文字エンコーディングとして UCS-4 を使用し,マルチバイト文字エンコーディングとして UTF-8 を使用します。

HP C RTL には,Unicode と他のサポートされる文字セットの間の変換を実行するコンバータも含まれています。コンバータの拡張セットには,UCS-2,UCS-4, UTF-8 の Unicode エンコーディングのためのコンバータが含まれています。 Unicode コンバータは ICONV CONVERT ユーティリティで使用することができ, HP C ランタイム・ライブラリの iconv関数ファミリで使用することもできます。

OpenVMS Version 7.2 では, HP C ランタイム・ライブラリで Microsoft Code Page 437 のための Unicode 文字セット・コンバータが追加されました。

10.2 国際化ソフトウェアの機能

国際化ソフトウェアとは,複数の言語とカルチャーをサポートできるソフトウェアです。国際化プログラムは次のことができなければなりません。

  • ユーザの言語でメッセージを表示できなければなりません。画面表示,エラー・メッセージ,プロンプトなどの表示が必要です。

  • 次のようなカルチャー固有の情報を取り扱うことができなければなりません。

    • 日付と時刻の書式
      日付と時刻の表現方法は国によって異なります。たとえば,米国では月を最初に指定し,英国では日を最初に指定します。したがって,12/5/1993 という日付は,米国では 1993 年 12 月 5 日として解釈され,英国では 1993 年 5 月 12 日として解釈されます。

    • 数値の書式
      小数点と 3 桁ごとの区切り文字を表す文字は国ごとに異なります。たとえば,英国では小数点を表すためにピリオド (.) を使用し, 3 桁ごとの区切り文字としてコンマを使用します。しかし,ドイツではコンマを小数点として使用し,ピリオドを 3 桁ごとの区切り文字として使用します。したがって,英国の 2,345.67 という数値はドイツの 2.345,67 という数値と同じです。

    • 通貨の書式
      通貨は国ごとに異なるシンボルで表され,さまざまな区切り文字を使用して書式設定することができます。

  • 異なる文字セット (ASCII だけでない) を取り扱うことができなければなりません。

  • シングル・バイト文字とマルチバイト文字の混在を取り扱うことができなければなりません。

  • 文字列のマルチパス比較機能を備えていなければなりません。
    strcmpなどの文字列比較関数は,文字列内の文字のコードポイント値を比較することにより,文字列を比較します。しかし,一部の言語では文字列を正しくソートするために,より複雑な比較が必要になることがあります。

上記の要件を満たすには,アプリケーションで言語,各国の習慣,使用される文字セットに関する何らかの仮定を行うべきではありません。このような各国対応データはすべて,プログラムとは別に定義し,実行時に割り当てるようにしなければなりません。

この章では, HP C を使用して国際化ソフトウェアを作成する方法について説明します。

10.3 HP C を使用した国際化ソフトウェアの開発

HP C 環境では,国際化ソフトウェアを開発するために次の機能が提供されます。

  • 各国対応データとプログラムを分離する方法
    各国対応データは,ロケールというデータベースに格納されます。このデータベースには,プログラムで必要とされるすべての言語情報とカルチャー情報が格納されます。ロケールの構造体の詳細については, 第 10.4 節 を参照してください。
    プログラムでは setlocale関数を呼び出すことにより,使用するロケールを指定します。詳細については, 第 10.5 節 を参照してください。

  • メッセージ・テキストとプログラム・ソースを分離する方法
    メッセージ・テキストとプログラム・ソースを分離するために,アプリケーションのすべてのメッセージが格納された メッセージ・カタログを使用します。メッセージ・カタログは実行時にアプリケーションにリンクされます。つまり,メッセージを複数の言語に翻訳した後,必要な言語バージョンを実行時に選択することができます。 第 10.6 節 を参照してください。

  • 各国対応データに反応する HP C RTL 関数
    HP C RTL には次の機能を実行する関数が含まれています。

    • 異なるコードセットの間の変換。 第 10.7 節 を参照。

    • カルチャー固有の情報の取り扱い。 第 10.8 節 を参照。

    • 文字列のマルチパス照合。 第 10.10 節 を参照。

  • HP C RTL では特殊なワイド文字データ型が定義されているため,シングル・バイト文字とマルチバイト文字が混在するコードセットを簡単に取り扱うことができます。このワイド文字データ型をサポートするために,関数も定義されています。 第 10.9 節 を参照してください。



10.4 ロケール

ロケールは異なるカテゴリで構成されており,各カテゴリは国際化環境の 1 つの要素を定義します。 表 10-1 はロケールのカテゴリと,各カテゴリの説明を示しています。

表 10-1 ロケール・カテゴリ
カテゴリ 説明
LC_COLLATE 照合順序に関する情報が格納されている。
LC_CTYPE 文字の分類に関する情報が格納されている。
LC_MESSAGES yes/no プロンプトに対する応答として期待される応答を定義する。
LC_MONETARY 通貨の書式情報が格納されている。
LC_NUMERIC 数値の書式情報が格納されている。
LC_TIME 時刻と日付の情報が格納されている。

提供されるロケールは, SYS$I18N_LOCALE 論理名によって定義されるディレクトリにあります。ロケールのファイル命名規則は次のとおりです。

language_country_codeset.locale 

ただし,

  • language は言語のニーモニックです。たとえば,EN は English ロケールを示します。

  • country は国のニーモニックです。たとえば,GB は British ロケールを示します。

  • codeset はロケールの ISO 標準コードセットの名前です。たとえば,ISO8859-1 は Western European 言語の ISO 8859 コードセットです。サポートされるコードセットの詳細については, 第 10.7 節 を参照してください。



10.5 setlocale 関数による国際化環境の設定

アプリケーションでは,実行時に setlocaleを呼び出すことにより国際化環境を設定します。国際化環境は次のいずれかの方法で設定します。

  • 1 つのロケールによって環境を定義する方法。この場合,各ロケール・カテゴリは同じロケールによって定義されます。

  • カテゴリを個別に定義する方法。この場合,実行する操作に応じて異なるロケールを使用する複合環境を定義できます。たとえば,英語のユーザがスペイン語のファイルをアプリケーションで処理する場合, LC_COLLATE カテゴリはスペイン語ロケールによって定義することができますが,他のカテゴリは英語ロケールによって定義されます。この場合,各カテゴリに対して 1 回ずつ setlocaleを呼び出します。

setlocale関数の構文は次のとおりです。

char *setlocale(int category, const char *locale) 

ただし,

  • category はカテゴリの名前であるか,または LC_ALL です。 LC_ALL を指定すると,すべてのカテゴリが同じロケールによって定義されます。複合環境を設定するには,カテゴリ名を指定します。

  • locale は次のいずれかです。

    • 使用するロケールの名前
      ユーザがロケールを指定するように設定する場合は,アプリケーションでユーザに対してロケール名の入力を要求し,その名前を setlocale関数への引数として渡します。ロケール名の形式は次のとおりです。

         language_country.codeset[@modifier] 
      


      たとえば, setlocale(LC_COLLATE, "en_US.ISO8859-1")は,LC_COLLATE カテゴリに対してロケール en_US.ISO8859-1 を選択します。

    • ""
      このように指定すると,関数は論理名を使用して,指定されたカテゴリに対するロケールを判断します。詳細については, 論理名の使用によるロケールの指定 を参照してください。

アプリケーションで setlocale関数を呼び出さなかった場合は,デフォルト・ロケールは C ロケールになります。この場合,このようなアプリケーションは現在のロケールで情報を使用する関数を呼び出すことができます。

論理名の使用によるロケールの指定

setlocale関数を呼び出すときに, locale 引数として "" を指定した場合,関数はいくつか論理名を調べて,指定されたカテゴリのロケール名を判断します。

国際化環境を定義するためにユーザが設定できる論理名は数多くあります。

  • カテゴリに対応する論理名
    たとえば,LC_NUMERIC 論理名は,ユーザの環境の内部で LC_NUMERIC カテゴリに関連付けられたロケールを定義します。

  • LC_ALL

  • LANG
    LANG 論理名はユーザの言語を定義します。

ユーザが定義する論理名の他に,システム・スタートアップ時に設定される多くのシステム単位の論理名があり,これらの論理名はシステムのすべてのユーザのデフォルトの国際化環境を定義します。

  • SYS$category
    ただし,category はカテゴリの名前です。これはそのカテゴリのシステム・デフォルトを指定します。

  • SYS$LC_ALL

  • SYS$LANG

setlocale関数は,最初にユーザ定義論理名を確認し,そのような論理名が定義されていない場合は,システム論理名を確認します。

10.6 メッセージ・カタログの使用

国際化ソフトウェアの重要な要件は,ユーザの独自の言語でユーザと通信できなければならないということです。メッセージング・システムを導入することにより,プログラム・メッセージをプログラム・ソースと別に作成し,実行時にプログラムにリンクすることができます。

メッセージはメッセージ・テキスト・ソース・ファイルに定義され, GENCAT コマンドを使用してメッセージ・カタログにコンパイルされます。メッセージ・カタログは, HP C RTL で提供される関数を使用してプログラムからアクセスできます。

カタログに格納されているメッセージにアクセスするために提供される関数は次のとおりです。

  • catopen関数は,指定されたカタログをオープンして使用できるようにします。

  • catgets関数は,プログラムがカタログから特定のメッセージを読み込むことができるようにします。

  • catclose関数は,指定されたカタログをクローズします。オープンされているメッセージ・カタログは, exit関数によってもクローズされます。

メッセージ・カタログの作成の詳細については, OpenVMS システムのドキュメントの GENCAT コマンドの説明を参照してください。

10.7 異なる文字セットの取り扱い

HP C RTL では,ASCII でエンコーディングされた Portable Character Set を含む数多くの状態独立コードセットおよびコードセット・エンコード方式がサポートされます。状態依存コードセットはサポートされません。サポートされるコードセットは次のとおりです。

  • ISO8859-n
    ただし,n = 1,2,5,7,8,9 のいずれかです。これは北米,ヨーロッパ (西と東),イスラエル,トルコのコードセットをカバーします。

  • eucJP,SJIS,DECKANJI,SDECKANJI: 日本で使用されるコードセット

  • eucTW,DECHANYU,BIG5,DECHANZI: 中国 (PRC),香港,台湾で使用される中国語コードセット

  • DECKOREAN: 韓国で使用されるコードセット



10.7.1 charmap ファイル

コードセット内の文字は charmap ファイルに定義されています。弊社が提供する charmap ファイルは, SYS$I18N_LOCALE 論理名によって定義されるディレクトリにあります。 charmap ファイルのファイル・タイプは .CMAP です。

10.7.2 コンバータ関数

HP C RTL では異なる文字セットをサポートするだけでなく,文字をあるコードセットから別のコードセットに変換するための次のコンバータ関数も提供しています。

  • iconv_open--- 変換のタイプを指定します。 iconv関数で必要とされる変換記述子を割り当てます。

  • iconv--- ファイル内の文字を別のコードセットの対応する文字に変換します。変換された文字は別のファイルに格納されます。

  • iconv_close--- 変換記述子と,記述子に割り当てられているリソースの割り当てを解除します。



10.7.3 コードセット・コンバータ・ファイルの使用

コードセット・コンバータのファイル命名規則は次のとおりです。

fromcode_tocode.iconv 

ただし,fromcode はソース・コードセットの名前であり, tocode は文字の変換先のコードセットの名前です。

コードセット・コンバータをシステムに追加するには, SYS$I18N_ICONV という論理名によって示されるディレクトリにコンバータ・ファイルをインストールします。

コードセット・コンバータ・ファイルは,テーブル・ベースの変換ファイルとして実装することができ, OpenVMS 共用可能イメージとして作成されたアルゴリズム・ベースのコンバータ・ファイルとして実装することもできます。

テーブル・ベースの変換ファイルの作成

テーブル・ベースのコードセット・コンバータ・ファイルを作成するには,次の手順を実行します。

  1. ソース・コードセットの文字とターゲット・コードセットの文字の対応関係を記述したテキスト・ファイルを作成します。このファイルの形式については, OpenVMS New Features Manual の DCL コマンド ICONV COMPILE を参照してください。このコマンドはこのようなファイルを処理し,コードセット・コンバータ・テーブル・ファイルを作成します。

  2. ステップ 1 で作成したファイルを論理名 SYS$I18N_ICONV によって示されるディレクトリにコピーします。この操作を実行するための特権が必要です。

アルゴリズム・ベースの変換ファイルの作成

共用可能イメージとして実装されたアルゴリズム・ベースのコードセット・コンバータ・ファイルを作成するには,次の操作を実行します。

  1. コードセット・コンバータを実装する C ソース・ファイルを作成します。 API はパブリック・ヘッダ・ファイル <iconv.h>に次のように指定されています。

    • ユニバーサル・エントリ・ポイント _u_iconv_openが HP C RTL ルーチン iconv_openによって呼び出され,変換が初期化されます。

    • _u_iconv_openは, __iconv_extern_obj_t構造体を指すポインタである iconv_openを返します。

    • この構造体の内部で,コンバータは独自の変換エントリ・ポイントと変換クローズ・ルーチンをエクスポートします。変換エントリ・ポイントは HP C RTL ルーチン iconvによって呼び出され,変換クローズ・ルーチンは iconv_closeによって呼び出されます。

    • ライブラリとコンバータの間に矛盾がないかどうかテストするために, iconv_openによってメジャー識別子フィールドとマイナー識別子フィールドが要求されます。コンバータは通常, <iconv.h>ヘッダ・ファイルに定義されている定数 __ICONV_MAJOR と __ICONV_MINOR を割り当てます。

    • フィールド tcs_mb_cur_max は,バッファの使用を最適化するために DCL コマンド ICONV CONVERT によってのみ使用されます。このフィールドは,シフト・シーケンスも含めて (そのようなシーケンスがある場合),ターゲット・コードセット内の 1 文字を構成する最大バイト数を反映します。

  2. コードセット・コンバータを構成するモジュールを OpenVMS の共用可能イメージとしてコンパイルおよびリンクします。その場合,ファイル名が上記の規則に従っているかどうか確認されます。

  3. 上記のステップで作成されたファイルを SYS$I18N_ICONV という論理名によって示されるディレクトリにコピーします。この操作を実行するための特権が必要です。

追加注意事項

デフォルト設定では,SYS$I18N_ICONV は検索リストであり,リスト SYS$SYSROOT:[SYS$I18N.ICONV.USER] 内の最初のディレクトリは, iconvコードセット・コンバータのサイト固有のリポジトリとして使用されます。


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.