(57)【要約】【目的】プログラム変更せずにメッセージ体系を切替えることを可能にする。【解決手段】言語を切替えてメッセージを出力するためのメッセージ出力装置２０は、ロケール記憶領域４２と、メッセージ番号及びメッセージ内に埋め込む引数群を受信する引数受信部４４と、メッセージ番号に対応するメッセージ本文を、ロケールに対応するリソースファイル２６から読出すメッセージ読出部４８と、読出されたメッセージ本文、当該メッセージ本文に含まれる引数入替指定及び引数群を用いて、引数入替指定を含まないメッセージ本文及び引数入替指定によって指定された順序に入替えた引数群を生成する引数順序交換部５０及び引数入替指定削除部５２と、このメッセージ本文及び順序入替後の引数群を引数としてシステム関数を呼出すシステム関数呼出部５４とを含む。【選択図】      図１
2005284742.tif 000002
【特許請求の範囲】
【請求項１】
環境によりメッセージ体系を切替えてメッセージを出力するためのメッセージ出力装置であって、
所定の環境変数を記憶するための環境変数記憶手段と、
第１の引数と、１又は複数の引数を含む第２の引数群とを受信するための受信手段と、
前記受信手段が前記第１の引数を受信したことに応答して、前記環境変数記憶手段に記憶された環境変数の値に対応する、予め準備されているメッセージファイルから、前記第１の引数をキーとしてメッセージテキストを読出すためのメッセージ読出手段とを含み、前記メッセージテキストは、予め定める形式のフォーマット文字列を含むことがあり、かつ各フォーマット文字列は、予め定める形式の、引数順序の入替を指定する引数入替指定文字列を含むことがあり、
さらに、
前記メッセージ読出手段が読出したメッセージテキストと、当該メッセージテキストに含まれる引数入替指定文字列と、前記第２の引数群とを用いて、引数入替指定文字列を含まないメッセージテキストと、前記引数入替指定文字列によって指定された順序に入替えた後の順序入替後の引数群とを生成するための引数生成手段と、
前記引数生成手段により生成された前記入替文字列を含まないメッセージテキストと、前記順序入替後の引数群とを引数として、メッセージ出力のための所定のシステム関数を呼出すための手段とを含む、メッセージ出力装置。
【請求項２】
前記引数生成手段は、
前記第２の引数群に含まれる引数の順序を、前記メッセージ読出手段の読出したメッセージテキスト中の引数入替指定文字列に従って入替え、引数入替後の引数群を生成するための引数入替手段と、
前記メッセージ読出手段の読出したメッセージテキストから引数入替指定文字列を削除するための削除手段とを含む、請求項１に記載のメッセージ出力装置。
【請求項３】
前記引数入替指定文字列は、
引数入替指定文字列であることを示す所定の文字列と、
前記メッセージ読出手段の読出したメッセージ中で一意の、予め定められた順序付け方式に従って順序付けが可能な順序指定文字列とを含む、請求項１又は請求項２に記載のメッセージ出力装置。
【請求項４】
前記引数入替手段は、
前記メッセージ読出手段の読出したメッセージテキスト中の引数入替指定文字列を、出現順に配列するための手段と、
前記第２の引数群の中で、抽出された引数入替指定文字列の順序指定文字列によって指定される位置に存在する引数で、前記配列中の引数入替指定文字列を置換するための手段と、
全ての引数入替指定文字列が置換された前記配列中の要素を先頭から並べることにより、前記順序入替後の引数群を生成するための手段とを含む、請求項３に記載のメッセージ出力装置。
【請求項５】
さらに、前記メッセージ読出手段により読出されたメッセージテキスト中に引数入替文字があるか否かを判定するための判定手段と、
前記判定手段により前記メッセージ読出手段により読出されたメッセージテキスト中に引数入替文字がないと判定されたことに応答して、前記引数生成手段の動作を抑止するための手段と、
前記判定手段により前記メッセージ読出手段により読出されたメッセージテキスト中に引数入替文字がないと判定されたことに応答して、前記読出手段により読出されたメッセージテキストと、前記受信手段が受信した前記第２の引数群とを引数として、前記所定のシステム関数を呼出すための手段とを含む、請求項１〜請求項４のいずれかに記載のメッセージ出力装置。
【請求項６】
コンピュータにより実行されると、請求項１〜請求項５のいずれかに記載のメッセージ出力装置として当該コンピュータを動作させる、コンピュータプログラム。
【請求項７】
請求項６に記載のコンピュータプログラムによりプログラムされた、コンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は種々の言語環境で動作する装置でのメッセージ出力装置及びコンピュータプログラムに関し、特に、アプリケーションプログラムを言語ごとに修正することなく、言語を切替えても誤りなくメッセージを出力することができるメッセージ出力装置及びコンピュータプログラムに関する。
【背景技術】
【０００２】
交通及び通信技術の発達により、世界各国の経済は以前にもまして緊密に結びつくようになっている。かつては世界各国がそれぞれ独自に行なっていた経済活動が、いまや国際的な広がりをもつようになり、国別での分業が多くの分野で行なわれるようになっている。例えばある製品の製造工場を世界的規模で集約し、世界のどの地点で需要が発生しても共通の製造工場から製品を出荷したりすることが行なわれる。これは交通手段の発達による効果である。
【０００３】
こうした現象は、交通手段を利用しなくても世界的に流通することが可能な製品、例えばソフトウェアではより一層顕著である。特に、最近のいわゆるインターネットの普及により、ソフトウェアの市場は一挙に世界に広がったといえる。多くの場合、ソフトウェアの機能そのものは世界のどこでも共通に利用できるので、特定の機能を備えたプログラムが世界中で利用されるようになることもまれではない。
【０００４】
しかし、この場合に問題となるのはユーザとのインターフェースである。ソフトウェアを作成する場合、通常は作者は自分と同じ母語を使用する使用者を念頭においてインターフェースを設計する。そのため、異なる言語を母語とする人が当該ソフトウェアを利用しようとする場合には、例えば画面上の表示が理解不能であったり、入力が極めて困難であったりする。
【０００５】
こうした問題を解決し、それぞれ異なった言語を母語とする人々にも使えるようなソフトウェアを作成するための一つの方策は、ソフトウェアで想定する言語として、世界中で多くの人々に共通に使用される言語を選ぶことである。これにより、当該ソフトウェアを全く使用できない人の数は少なくなると思われる。
【０００６】
しかしこの場合、ユーザから見ると自分の母語でない言語でソフトウェアを操作しなければならないという問題がある。やはりユーザの母語でインターフェースを実現したソフトウェアの方が、共通公倍数的な言語を用いたものよりは使い易い。
【０００７】
使いやすさを重視する場合には、言語ごとにソフトウェアをローカライズすることが考えられる。すなわち、プログラム中で使用されている入力フォーム及び表示されるメッセージなど、ユーザインタフェースに関わる部分の言語を全てローカライズ言語におきかえる。そのようにローカライズされたソフトウェアは、翻訳の品質による問題は多少あるにしても、ローカライズされないものよりは一般ユーザには分かりやすい。
【０００８】
しかし、そのようなローカライズ作業は、プログラミング作業に準じる作業量を要求する作業である。多くの場合、プログラムそのものを変更する必要も生じる。その結果、ローカライズには多大なコストと時間とがかかり、ローカライズされたソフトウェアの価格が押し上げられ、ユーザにとって当該ソフトウェアを使用するメリットが少なくなる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記した問題に鑑みると、これからはソフトウェアのユーザインタフェースを設計する上で、多言語に容易に対応できるような仕組みを設けておく必要がある。特に、既存のコンピュータのオペレーティングシステム（ＯＳ）の機能を用いてユーザインタフェースを実現している場合、ＯＳの機能を改変する必要なく、かつ応用プログラム自体を改変する必要もなく、ユーザインタフェースを言語により切替えることができれば便利である。
【００１０】
その典型的な例は、プログラム上で使用されるメッセージを、設定されている言語情報又は地域情報に基づいて決定される言語で出力するためのメッセージ出力装置である。仮に、プログラムで使用する全てのメッセージが予め考えられれば、言語ごとにそれら全てのメッセージを準備し、それらを切替えて出力すればよいが、実際には出力されるメッセージはユーザの入力とそのときの装置の状態とに応じて千差万別で、全て予測することは原理的に不可能といえる。そのため多くの場合には、予め準備するメッセージ中に変数部分を設けておき、状況に応じて当該変数部分を入れ替えることで状況に応じた内容のメッセージを出力する。
【００１１】
そうした場面で使用されるのが、例えば一部ＯＳで「printf」などと呼ばれる編集機能を伴う出力関数である。printfでは、たとえば「printf("ディレクトリ%sにファイル%sが見つかりませんでした",dir_name,  file_name)」という書式により、最初の「%s」の部分に「dir_name」が、二番目の「%s」の部分に「file_name」が、それぞれ代入され、「ディレクトリdir_nameにファイルfile_nameが見つかりませんでした」というメッセージが出力される。printfでは、最初の引数がメッセージ本文で、その中に編集文字が存在している場合には、その先頭から順番に、２番目以降の引数が代入される。
【００１２】
しかし、多言語に対応するシステムを構築しようとする場合、このprintfのように、メッセージ文字列の中の引数で置換すべき部分が、引数の位置で決まるのは問題である。例えば日本語と英語では、語順が逆転することが多い。従って、日本語のメッセージ中では引数１、引数２という順番で出現する引数が、英語のメッセージ中では引数２、引数１という順番で出現すべきことがありうる。そうした場合、プログラムを改変しなければ（すなわちプログラム中で引数を与える順序を変えなければ）、日本語と同じ内容の英語のメッセージを出力することはできない。
【００１３】
現在のところ、printfのように引数の順序に基づいて、文字列中での代入位置を決めるような関数を用いながら、多言語のメッセージ出力を誤りなく行なえるようなメッセージ出力の枠組みは存在していない。また、こうした問題は言語の切替に限らず、何らかの環境設定に従って、出力メッセージの体系を変化させる必要があるものに共通の問題である。
【００１４】
それゆえに、本発明の目的は、環境に従ってメッセージ体系を切替える必要があるメッセージ出力装置において，プログラム変更せずにメッセージ体系を切替えることが可能なメッセージ出力装置を提供することである。
【課題を解決するための手段】
【００１５】
本発明の第１の局面に係るメッセージ出力装置は、環境によりメッセージ体系を切替えてメッセージを出力するためのメッセージ出力装置であって、所定の環境変数を記憶するための環境変数記憶手段と、第１の引数と、１又は複数の引数を含む第２の引数群とを受信するための受信手段と、受信手段が第１の引数を受信したことに応答して、環境変数記憶手段に記憶された環境変数の値に対応する、予め準備されているメッセージファイルから、第１の引数をキーとしてメッセージテキストを読出すためのメッセージ読出手段とを含み、メッセージテキストは、予め定める形式のフォーマット文字列を含むことがあり、かつ各フォーマット文字列は、予め定める形式の、引数順序の入替を指定する引数入替指定文字列を含むことがあり、さらに、メッセージ読出手段が読出したメッセージテキストと、当該メッセージテキストに含まれる引数入替指定文字列と、第２の引数群とを用いて、引数入替指定文字列を含まないメッセージテキストと、引数入替指定文字列によって指定された順序に入替えた後の順序入替後の引数群とを生成するための引数生成手段と、引数生成手段により生成された入替文字列を含まないメッセージテキストと、順序入替後の引数群とを引数として、メッセージ出力のための所定のシステム関数を呼出すための手段とを含む。
【００１６】
好ましくは、引数生成手段は、第２の引数群に含まれる引数の順序を、メッセージ読出手段の読出したメッセージテキスト中の引数入替指定文字列に従って入替え、引数入替後の引数群を生成するための引数入替手段と、メッセージ読出手段の読出したメッセージテキストから引数入替指定文字列を削除するための削除手段とを含む。
【００１７】
さらに好ましくは、引数入替指定文字列は、引数入替指定文字列であることを示す所定の文字列と、メッセージ読出手段の読出したメッセージ中で一意の、予め定められた順序付け方式に従って順序付けが可能な順序指定文字列とを含む。
【００１８】
好ましくは、引数入替手段は、メッセージ読出手段の読出したメッセージテキスト中の引数入替指定文字列を、出現順に配列するための手段と、第２の引数群の中で、抽出された引数入替指定文字列の順序指定文字列によって指定される位置に存在する引数で、配列中の引数入替指定文字列を置換するための手段と、全ての引数入替指定文字列が置換された配列中の要素を先頭から並べることにより、順序入替後の引数群を生成するための手段とを含む。
【００１９】
メッセージ出力装置はさらに、メッセージ読出手段により読出されたメッセージテキスト中に引数入替文字があるか否かを判定するための判定手段と、判定手段によりメッセージ読出手段により読出されたメッセージテキスト中に引数入替文字がないと判定されたことに応答して、引数生成手段の動作を抑止するための手段と、判定手段によりメッセージ読出手段により読出されたメッセージテキスト中に引数入替文字がないと判定されたことに応答して、読出手段により読出されたメッセージテキストと、受信手段が受信した第２の引数群とを引数として、所定のシステム関数を呼出すための手段とを含んでもよい。
【００２０】
本発明の第２の局面に係るコンピュータプログラムは、コンピュータにより実行されると、上記したいずれかのメッセージ出力装置として当該コンピュータを動作させる。
【００２１】
本発明の第３の局面に係るコンピュータは、上記したコンピュータプログラムによりプログラムされている。
【発明を実施するための最良の形態】
【００２２】
−構成−
図１は、本発明に係る多言語対応メッセージ出力装置２０の構成を、その周辺の機能部分とともに示すブロック図である。図１を参照して、この多言語対応メッセージ出力装置２０は、コンピュータにより実装されることを想定している。まず、コンピュータの環境変数記憶領域２４に記憶されたロケール情報を読出し、コンピュータのハードディスクなどの記憶装置に予め準備されたロケールごとのリソースファイル２６Ａ，２６Ｂ，…，２６Ｎ（以下これらを単にリソースファイル２６と呼ぶ。）から、ロケールに対応したリソースファイルを読出しておく。動作において所定のメッセージ出力関数（本実施の形態ではこの関数を「OutputMessge」という名前で呼ぶ。）呼出２２を受け、ロケールに応じたメッセージをコンピュータのオペレーティングシステム２８のメッセージ表示機能を利用して表示装置３０上に表示する。リソースファイル２６中のメッセージ関係のリソース構成及びメッセージ出力関数の引数などについては後述する。
【００２３】
多言語対応メッセージ出力装置２０は、多言語対応メッセージ出力装置２０の起動時に環境変数記憶領域２４からロケール情報を読出すためのロケール読出部４０と、ロケール読出部４０により読出されたロケール情報を記憶するための、メモリ上のロケール記憶領域４２と、ロケール記憶領域４２に記憶されたロケール情報に従って、リソースファイル２６の中から適切なリソースファイルを選択するためのリソースファイル選択部４６とを含む。
【００２４】
ロケール情報は、ロケール記憶領域にロケール変数の形で記憶される。例えば日本語の場合、この変数の値は「jp」、英語であれば「en」などである。
【００２５】
図２に、リソースファイル２６の例を示す。この例では、リソースファイル２６Ａが日本語用のリソースファイル、リソースファイル２６Ｂが英語用のリソースファイルであるものとする。なお図２には、メッセージ関連の部分のみ示してある。
【００２６】
図２を参照して、いずれのリソースファイル２６Ａ，２６Ｂも、それぞれの言語の複数のメッセージを含む。各メッセージは、メッセージを読出す際のキーとなるメッセージ番号７０，８０と、メッセージ本文とを含む。
【００２７】
メッセージ本文は、日本語の場合には「ディレクトリ%sに、ファイル%sが見つかりませんでした」というものであり、英語の場合には「File  #2%s  not  found  in  directory  #1%s」というものである。同じメッセージ番号に対応するメッセージは、言語が異なっていても同じ意味を表すように予め準備されている。
【００２８】
図２の中で、「%s」という部分７２，７４は、フォーマット用の文字列であって、この部分に引数の文字列を代入すべきことを示す。これらフォーマット用の文字列の前に文字列「#2」及び「#1」がそれぞれ付された部分８２，８４もフォーマット用の文字列である。本実施の形態では、このように「#」と数字とからなる文字列が「%」で始まるフォーマット用文字列の前に置かれている場合には、関数「OutputMessage」の引数のうち、その数字で指定される順番のものをこの位置に代入することを示す。以後、「#」と数字とからなる、「%」で始まるフォーマット用文字列の前に置かれている文字列を、「引数入替指定」と呼ぶ。なお、関数「OutputMessage」は、１番目の引数としてメッセージ番号を、２番目以降の引数としてフォーマット用文字列によって編集して出力すべき文字列等をとる。従って、実際には関数OutputMessageの２番目の引数の文字列で「#1%s」が置換され、３番目の文字列で「#2%s」が置換され、以下同様である。本明細書では、２番目以降の引数群を「第２の引数群」と呼ぶ。
【００２９】
代表言語、例えば日本語でメッセージ出力する場合の引数順序を基準とすることにより、システム関数呼出時の引数の順序を決めることができる。その設計に従ってプログラミングすることで、基準言語を使用するメッセージの場合には引数の順序の入れ替えなしでメッセージ表示ができる。一方、基準言語以外の言語では、代表言語でのメッセージ出力での引数の順序に対し、英語でメッセージ出力する場合にはそれら引数の順序をどのように入れ替える必要があるかを予め検討することで、引数入替指定を定めることができる。どの言語を基準言語とするかは任意である。
【００３０】
再び図１を参照して、多言語対応メッセージ出力装置２０はさらに、メッセージ出力関数呼出２２を受けて、当該呼出の引数を受信するための引数受信部４４と、引数受信部４４が受信した引数のうちの１番目のものをキーとして、リソースファイル選択部４６により選択されたロケールファイルから、当該キーと一致するメッセージ番号を持つメッセージ本文を読出すためのメッセージ読出部４８と、メッセージ読出部４８により読出されたメッセージ本文中に引数入替指定がある場合に、引数受信部４４が受信した引数のうち、第２の引数群に含まれるものの順序を、引数入替指定に従って交換するための引数順序交換部５０と、読出されたメッセージ本文から引数入替指定を削除するための引数入替指定削除部５２と、引数入替指定削除部５２により引数入替指定が削除されたメッセージ本文と、引数順序交換部５０により順序が入れ替えられた第２の引数群とを引数として、システム関数（本実施の形態ではprintf）を呼び出すためシステム関数呼出部５４とを含む。
【００３１】
引数順序交換部５０の機能についてより詳細に説明する。引数順序交換部５０は、メッセージ読出部４８が読出したメッセージ本文に引数入替指定があると、引数受信部４４が受信した引数のうち、第２の引数群に属する引数を、引数入替指定に従った順序に入替える。すなわち、メッセージ本文中の最初に出現する引数入替指定の数字の部分に注目し、引数受信部４４が受信した第２の引数群のうち、当該数字で指定された位置の引数を先頭引数とする。さらに次に出現する引数入替指定を探し、その数字の部分に注目し、当該数字で指定された位置の引数を２番目の引数とする。以後、この動作を繰返す。
【００３２】
より具体的には、以下のようにするとよい。例えば、最初に空の配列を用意しその配列の中に、読出されたメッセージ本文中の引数入替指定の数字部分を、その出現順に格納する。次に、配列の先頭の要素から、第２の引数群の中でその要素の値によって指定される位置の引数を選び、その値で要素の内容を入替える。これを、値を持つ要素全てについて、空の要素に到達するまで繰返す。最後に、この配列の先頭要素から、引数を順に取出し、例えばカンマなどで連結することで順序入替後の第２の引数群を生成できる。
【００３３】
図３に、多言語対応メッセージ出力装置２０の各機能部分のうち、メッセージ読出部４８〜システム関数呼出部５４を実現するためのコンピュータプログラムの制御構造をフローチャート形式で示す。図３を参照して、ステップ１００で、メッセージ出力関数の引数からメッセージキーを取得する。ステップ１０２で、ロケールに対応するリソースファイルから、ステップ１００で取得されたメッセージキーに対応するメッセージ本文を読出す。ステップ１０４で、読出されたメッセージ本文に引数入替指定があるか否かを判定する。引数入替指定があればステップ１０６に、なければステップ１１２に、それぞれ進む。
【００３４】
ステップ１０６では、メッセージ出力関数呼出２２から受取った第２の引数群の引数について、引数入替指定に従いその順序を入替える。ステップ１０８では、ステップ１０２で読出したメッセージ文字列から、引数入替指定を削除する。ステップ１１０で、メッセージ文字列と、順序を入れ替えた第２の引数群とを引数として、システム関数printfを呼出して処理を終了する。
【００３５】
一方ステップ１１２では、メッセージ文字列と、引数受信部４４が受信した第２の引数群とを引数として、システム関数printfを呼出して処理を終了する。すなわちこの場合には、ステップ１０６及び１０８の処理動作は抑止される。
【００３６】
−動作−
上記した多言語対応メッセージ出力装置２０は以下のように動作する。図２に示すようなリソースファイル２６が複数個、予め準備されているものとする。本実施の形態では、図２に示すように、日本語を基準言語として引数入替指定を設計する。
【００３７】
図１を参照して、多言語対応メッセージ出力装置２０を起動させると、ロケール読出部４０が環境変数記憶領域２４のロケール変数を読出し、ロケール記憶領域４２に記憶する。リソースファイル選択部４６は、リソースファイル２６の中からロケール変数の値に対応するものを選択する。
【００３８】
ユーザプログラムからメッセージ出力関数呼出２２が与えられると、引数受信部４４がその引数を受信する。メッセージ読出部４８が、１番目の文字列をキーとして（図３のステップ１００）リソースファイル選択部４６により選択されたリソースファイルをアクセスし、当該キーと一致するメッセージ番号を持つメッセージ本文を読出す（図３のステップ１０２）。
【００３９】
引数順序交換部５０は、メッセージ本文中に引数入替指定が存在している場合（ステップ１０４でＹＥＳ）、引数受信部４４が受信した引数のうち第２の引数群に含まれる引数を、引数入替指定により指定された順序に入替え（ステップ１０６）、引数入替指定削除部５２に与える。メッセージ本文中に引数入替指定がない場合（ステップ１０４でＮＯ）、引数順序交換部５０の引数順序交換の処理動作は抑止され、引数順序交換部５０はメッセージ本文と第２の引数群とをそのまま引数入替指定削除部５２に与える。
【００４０】
引数入替指定削除部５２は、メッセージ本文に引数入替指定があれば、それらを全て削除する（ステップ１０８）。なければ引数入替指定削除部５２のでの入替の処理動作は抑止される。引数入替指定削除部５２は、こうして、引数入替指定を含まないメッセージ本文と、順序が入替えられた第２の引数群（引数入替指定が含まれていなかった場合には、元の第２の引数群）をシステム関数呼出部５４に与える。
【００４１】
システム関数呼出部５４は、引数入替指定削除部５２から与えられたメッセージ本文と、第２の引数群とを引数としてシステム関数printfを呼出す（ステップ１１０及び１１２）。その結果、オペレーティングシステム２８がprintfを実行し、１番目の引数であるメッセージ本文中のフォーマット文字列を、２番目以降の引数で順番に置換して、表示装置３０上に編集後のメッセージ本文を表示する。
【００４２】
−具体例−
上記した動作を具体的な例で説明する。図４（Ａ）（Ｂ）は、ロケールにより指定される言語が日本語の場合を示す。図４（Ａ）を参照して、矢印１３０により示すように、メッセージ出力関数OutputMessageの１番目の引数「MESSAGE_01」により読出される日本語のメッセージ本文１３２には、二つのフォーマット文字列１３３Ａ，１３３Ｂが含まれているが、引数入替指定は存在しない。この場合には、当初与えられた２番目及び３番目の引数１３６，１３８の順序は入れ替えられず、矢印１３４，１４０及び１４２と図４（Ｂ）により示されるように、メッセージ本文と、引数とが当初与えられたとおりの順番で関数printfに引数として与えられる。
【００４３】
一方、図４（Ｃ）〜（Ｆ）は、ロケールにより指定された言語が英語の場合を示す。図４（Ｃ）を参照して、矢印１３１により示すように、メッセージ出力関数OutputMessageの１番目の引数「MESSAGE_01」により読出されるメッセージは、この場合、英語のメッセージ本文１６２となる。英語のメッセージ本文１６２は、二つのフォーマット文字列１６３Ａ及び１６３Ｂを含む。フォーマット文字列１６３Ａは引数入替指定「#2」を含み、フォーマット文字列１６３Ｂは引数入替指定「#1」を含む。
【００４４】
この場合、図１に示す引数順序交換部５０により、図４（Ｄ）に示すように当初与えられた２番目及び３番目の引数１３６，１３８の順序が引数１６４，１６６により示すように入れ替えられる。すなわち、引数入替指定「#2」が最初にあるため、引数１３８が最初の引数１６４の位置に移動され、引数入替指定「#1」が２番目にあるため、引数１３６が２番目の引数１６６の位置に移動される。
【００４５】
次に、図１に示す引数入替指定削除部５２により、英語のメッセージ本文１６２中に含まれる引数入替指定がすべて削除される。その結果、図４（Ｅ）に示すように、メッセージ本文には二つのフォーマット文字列１６８，１７０が残る。
【００４６】
最後に、図１に示すシステム関数呼出部５４が、矢印１７２，１７４及び１７８に示すように、引数入替指定が削除されたメッセージ本文と、順序が入れ替えられた引数とを引数として、図４（Ｆ）に示すように関数printfに与え、システム関数printfを出力する。この結果、「File  file_name  not  found  in  directory  dir_name」というメッセージが表示される。
【００４７】
以上の説明から明らかなように、本実施の形態に係る多言語対応メッセージ出力装置２０では、ロケールが変わりメッセージ言語が変わるのに伴い、メッセージ中の引数の出現個所が変化する場合にも、プログラムを変更する必要がない。リソースファイルに引数入替指定を含むメッセージ本文を準備するだけで、プログラム上の変更なしで各言語について正しい順序で引数を埋め込んだメッセージを出力できる。
【００４８】
なお、上記した実施の形態の装置では、printfを使用してメッセージの出力を行なっている。しかし本発明はそのような実施の形態には限定されず、引数を使用して本文中の一部を入れ替えて何らかの出力を得るシステム全体に適用できる。
【００４９】
また、上記した実施の形態の装置では、基準言語のメッセージ本文には引数入替指定を含ませないでもよいようにしたが、本発明はそのような実施の形態には限定されない。基準言語のメッセージについても引数入替指定を入れるようにしてもよい。ただしこの場合、基準言語の場合には、引数入替指定で指定される引数の順番は最初に入力された引数の順番と一致する。プログラムとしては、必ず引数入替指定を調べ、引数入替指定に従って引数を入替える処理を行なうようにすればよい。つまり、図３のステップ１０４及びステップ１１２の処理を行なわないようにすればよい。
【００５０】
また、上記した説明では、引数入替指定は文字列「#」と数字列とを含む。しかし本発明はそのような実施の形態には限定されない。文字列は、引数入替指定と判別できるものであれば他のどのようなものを用いても良い。また数字列は、引数の順序を判定できるものであれば数字にかぎらずどのようなものでもよい。もっとも、数字を使用すると、元の引数の位置（第１番目の引数を除く第２の引数群中での位置）を理解するのに好都合なので、数字を使用することが望ましい。
【００５１】
−コンピュータによる実現−
この実施の形態のシステムは、コンピュータハードウェアと、そのコンピュータハードウェアにより実行されるプログラムと、コンピュータハードウェアに格納されるデータとにより実現される。図５はこのコンピュータシステム３３０の外観を示し、図６はコンピュータシステム３３０の内部構成を示す。
【００５２】
図５を参照して、このコンピュータシステム３３０は、ＦＤ（フレキシブルディスク）ドライブ３５２及びＣＤ−ＲＯＭ（コンパクトディスク読出専用メモリ）ドライブ３５０を有するコンピュータ３４０と、キーボード３４６と、マウス３４８と、モニタ３４２とを含む。
【００５３】
図６を参照して、コンピュータ３４０は、ＦＤドライブ３５２及びＣＤ−ＲＯＭドライブ３５０に加えて、ＣＰＵ（中央処理装置）３５６と、ＣＰＵ３５６、ＦＤドライブ３５２及びＣＤ−ＲＯＭドライブ３５０に接続されたバス３６６と、ブートアッププログラム等を記憶する読出専用メモリ（ＲＯＭ）３５８と、バス３６６に接続され、プログラム命令、システムプログラム、及び作業データ等を記憶するランダムアクセスメモリ（ＲＡＭ）３６０とを含む。コンピュータシステム３３０はさらに、プリンタ３４４を含んでいる。コンピュータ３４０はさらに、ローカルエリアネットワーク（ＬＡＮ）への接続を提供するネットワークアダプタボード３６８を含む。
【００５４】
コンピュータシステム３３０により実行されると、上記した多言語対応メッセージ出力装置２０として当該コンピュータを動作させるためのコンピュータプログラムは、ＣＤ−ＲＯＭドライブ３５０又はＦＤドライブ３５２に挿入されるＣＤ−ＲＯＭ３６２又はＦＤ３６４に記憶され、さらにハードディスク３５４に転送される。又は、プログラムは図示しないネットワークを通じてコンピュータ３４０に送信されハードディスク３５４に記憶されてもよい。プログラムは実行の際にＲＡＭ３６０にロードされる。ＣＤ−ＲＯＭ３６２から、ＦＤ３６４から、又はネットワークを介して、直接にＲＡＭ３６０にプログラムをロードしてもよい。
【００５５】
このプログラムは、コンピュータ３４０にこの実施の形態に係る多言語対応メッセージ出力装置２０として動作させる複数の命令を含む。これら命令の実行に必要な基本的機能のいくつかはコンピュータ３４０上で動作するオペレーティングシステム（ＯＳ）又はサードパーティのプログラム、もしくはコンピュータ３４０にインストールされる各種ツールキットのモジュールにより提供される。従って、このプログラムはこの実施の形態の多言語対応メッセージ出力装置２０を実現するのに必要な機能全てを必ずしも含まなくてよい。このプログラムは、命令のうち、所望の結果が得られるように制御されたやり方で適切な機能又は「ツール」を呼出すことにより、上記した多言語対応メッセージ出力装置２０として当該コンピュータを動作させる命令のみを含んでいればよい。コンピュータシステム３３０の動作は周知であるので、ここでは繰返さない。
【００５６】
今回開示された実施の形態は単に例示であって、本発明が上記した実施の形態のみに制限されるわけではない。本発明の範囲は、発明の詳細な説明の記載を参酌した上で、特許請求の範囲の各請求項によって示され、そこに記載された文言と均等の意味及び範囲内でのすべての変更を含む。
【図面の簡単な説明】
【００５７】
【図１】本発明の一実施の形態に係る多言語対応メッセージ出力装置２０のブロック図である。
【図２】リソースファイル２６の例を示す図である。
【図３】多言語対応メッセージ出力装置２０をコンピュータにより実現するためのコンピュータプログラムのフローチャートである。
【図４】本実施の形態に係る多言語対応メッセージ出力装置２０の動作を説明するための図である。
【図５】本実施の形態に係る多言語対応メッセージ出力装置２０を実現するためのコンピュータシステム３３０の外観図である。
【図６】図５に示すコンピュータシステム３３０の構成を示すブロック図である。
【符号の説明】
【００５８】
２０  多言語対応メッセージ出力装置、２２  メッセージ出力関数呼出、２４  環境変数記憶領域、２６，２６Ａ〜２６Ｎ  リソースファイル、２８  オペレーティングシステム、３０  表示装置、４０  ロケール読出部、４２  ロケール記憶領域、４４  引数受信部、４６  リソースファイル選択部、４８  メッセージ読出部、５０  引数順序交換部、５２  引数入替指定削除部、５４  システム関数呼出部
【図１】
2005284742.tif 000003
【図２】
2005284742.tif 000004
【図３】
2005284742.tif 000005
【図４】
2005284742.tif 000006
【図５】
2005284742.tif 000007
【図６】
2005284742.tif 000008