以下、本発明を実施するための最良の形態について図面を用いて説明する。
本発明の情報処理装置は、文字や記号を表示する(グラフィック)ユーザインタフェースを持ち、言語によって表示する文字や記号が変わるアプリケーションを動作させることができる。
図1は本実施例に適応可能な情報処理装置の構成を示すブロック図である。
図1において、CPU101は、ROM103またはハードディスク111からRAM102にロードされたオペレーティングシステムや一般アプリケーションなどのプログラムを実行し、後述するフローチャートを実現する。RAM102は、CPU101の主メモリ、ワークエリア等として機能する。キーボードコントローラKBC105は、キーボード109や不図示のポインティングデバイスからのキー入力を制御する。CRTコントローラ(CRTC)106は、CRTディスプレイ110の表示を制御する。ディスクコントローラ(DKC)107は、ブートプログラム、種々のアプリケーション、フォントデータ、ユーザファイル、後述する編集ファイル等を記憶するハードディスク(HD)111やフロッピー(登録商標)ディスク(FD)(不図示)、CD−ROM(不図示)等とのアクセスを制御する。PRTC108は、接続されたプリンタ107との間の信号の交換を制御する。NC112はネットワークに接続されて、ネットワークに接続された他の機器との通信制御処理を実行する。
図2は本実施例に適応可能な情報処理装置のソフトウェア構成である。
201は、図1の情報処理装置である。情報処理装置201は、OS202と、インストーラ203と、言語パックインストーラ209とレジストリ213を有する。
OS202は一般的なOSであり、メモリ管理、リソース管理、ドライバ管理等の機能を有する。
インストーラ203はOS202にアプリケーションのインストールを実行するための各種のユーザインタフェースを備え、情報処理装置201のデスクトップ上でユーザからの要求を受け付けて、各機能処理の実行を総括的に管理している。また、インストーラ203は、アプリケーション206を実行可能な状態にするための処理(ハードディスク111への配置等)を行う。以下これをインストールと呼ぶ。また、アプリケーション206を削除する処理をアンインストールと呼ぶ。インストーラ203は、HD111に保持され、プログラム実行をCPU101で行い、実行情報や一時データをRAM102に記憶する。
インストーラUI部204は、インストーラ203において、ユーザインタフェースの構築やユーザからの各種入力操作の受け付けを処理する。インストーラ実行部205は、インストーラ203において、アプリケーションのインストールを制御する。インストーラ実行部205はアプリケーションのアンインストールも制御するように設計することも可能である。またインストール後のアプリケーションを動作させるために必要な情報を、OS201を介し、レジストリ213に読み書きすることができる。アプリケーション206は、インストーラ203がインストールするアプリケーションである。アプリケーション206はどのような機能を持つものでもかまわない。
言語リソースモジュール207、208は、インストーラ203がインストールすることができる言語リソースモジュールである。言語リソースモジュールは、インストールが完了したアプリケーション206が、OS202より起動指示を受けた際に、アプリケーション206により利用される。ここで、言語リソースモジュールとは、アプリケーション206が表示する文字列やアイコンなどをまとめたモジュールで、英語や日本語といった言語によって表示する内容が変わる。ここでは、言語リソースモジュール207は「英語」用の言語リソースモジュールである。同様に言語リソースモジュール208は「日本語」用の言語リソースモジュールである。このようにインストーラ203は、アプリケーション206が使用できる言語リソースモジュールを1つ以上同梱している。
言語パックインストーラ209は、情報処理装置201に言語リソースモジュール212を追加でインストールする。インストールされたリソースモジュール212はアプリケーション206が利用できるようになる。言語パックインストーラ209は、HD111に保持され、プログラム実行をCPU101で行い、実行情報や一時データをRAM102に記憶する。インストーラUI部210は、言語パックインストーラ209において、ユーザインタフェースの構築やユーザからの各種入力操作の受け付けを処理する。インストーラ実行部211は、言語パックインストーラ209において、言語リソースモジュールのインストール、アンインストールを制御する。またインストール後の必要な情報を、OS201を介し、レジストリ213に読み書きすることができる。言語リソースモジュール212は、言語リソースモジュール207、208と同じ構成のものであり、インストールが完了したアプリケーション206が、OS202より起動指示を受けた際に、利用可能となる。ここでは、言語リソースモジュール212は「ドイツ語」用の言語リソースモジュールである。
このように言語パックインストーラ209は、アプリケーション206が使用する言語リソースモジュールを追加できるインストーラである。また図示していないが、言語パックインストーラ209は、言語リソースモジュール212を複数持つ構成をとることもでき、ドイツ語、スペイン語、フランス語等の複数の言語リソースモジュールを一括でインストールすることができる。
レジストリ213は、OS202におけるシステムプログラムやハードウェア、ユーザプログラムなどのシステム情報が格納されているデータベースで、OS202を介し、インストーラ203、言語パックインストーラ209、アプリケーション206が使用することができる。インストーラ203、言語パックインストーラ209は、レジストリ213を参照しインストールに必要な情報を収集し、インストールが終わった後にインストーラ203、言語パックインストーラ209、アプリケーション206が必要になる情報を書き込む。
図3は、インストーラ203によりアプリケーション303がインストールされた後の情報処理装置のソフトウェア構成を示す。加えて、言語パックインストーラ209によって言語リソースモジュール308がインストールされている。
301は、201と同じ情報処理装置である。ここで、情報処理装置201は、インストーラ203、言語パックインストーラ209によって、アプリケーション206、言語パックモジュール207、208、212がインストールされる前の状態である。一方、情報処理装置301は、アプリケーション206に加え、言語パックモジュール207、208、212の少なくともいずれかがインストールされた後の状態である。ただし、言語パックモジュール212は、アプリケーション206がインストールされた環境でないと追加でインストールすることができない。
アプリケーション303は、図2のインストーラ203によってインストールされたアプリケーション206である。アプリケーション303はアプリケーション206の内部構成をより詳しく説明したものである。アプリケーション303は、ユーザにより起動されるとインストーラ203によってインストールされた言語リソースモジュール307を使用し、文字列やアイコンを表示し、機能提供することができる。また、ここでは、情報処理装置301には、言語パックインストーラ209より追加でインストールされた追加言語リソースモジュール308がある場合を想定する。アプリケーション303は、この追加言語リソースモジュール308も使用することができる。アプリケーション303には、3つのモジュールがある。1つは304のモジュールA、1つは305のモジュールB、1つは共通モジュール306である。モジュールA304とモジュールB305は、それぞれが別の用途を持ちユーザによって使用されるタイミングも異なる。モジュールA304とモジュールB305はUIを持ち、その際に表示する文字列などは言語リソースモジュール307または追加言語リソースモジュール308を使用する。このように、モジュールA304とモジュールB305は、別用途のモジュールであるが、双方に共通する処理が必要になる。そのような共通する処理を行うのが、共通モジュール306である。モジュールA304とモジュールB305がいずれの言語リソースモジュールを使用するか選定する場合、共通モジュール306に用意されたAPIなどを使用することで、1つのアプリケーションとして、表示についての整合性を合わせることができる。
本実施例では、アプリケーション303内に、モジュールA304とモジュールB305があり、さらに言語リソースモジュールの選定を行う共通モジュール306が存在するが、これらが1つのモジュールである場合や、共通モジュールを持たない構成においても、本実施例の処理は適応可能である。また本実施例では、UIを保持する実行ファイルであるモジュールA304とモジュールB305で説明するが、アプリケーションの構成として限定するものではない。
以上が本実施例に適応可能な、アプリケーションと言語リソースモジュールの関係である。次に本実施例の特徴である、インストーラと言語パックインストーラの処理を説明する。
図4は、情報処理装置におけるインストーラ203のアプリケーションインストール処理を説明するためのフローチャートである。情報処理装置は、本処理を実現するソフトウェアのプログラムコードを記憶媒体に記憶する。システムあるいは装置のCPU101が、RAM102やハードディスク(HD)111に格納されたプログラムコードを読み出し、フローチャートに記載の各ステップを実行する。
後述されるフローチャートを用いて説明される処理についても、本処理と同様にCPU101などがインストーラまたはインストールされたアプリケーションといったプログラムを実行することで実現されるものとする。
まず、S401において、インストーラ203は図8で示すようなユーザにアプリケーションを使用する言語を指定させるUI画面801を表示し、選択指示を受け付ける。これはインストーラ203のように、言語リソースモジュール207と言語リソースモジュール208の複数の言語リソースモジュールを持つ場合に、インストーラUI部204が提供する画面である。言語リソースモジュールが1種類しかなく選択の余地がない場合は言語を指定させるUIの表示を省略してもよい。
S402において、インストーラ203は、アプリケーション206のインストール制御を行う。次に、S403において、インストーラ203はS401で選択された言語の言語リソースモジュールをインストールする。ここでは、UI画面801で示すように「Japanese」が選択されたとして、言語リソースモジュール208のインストールを行ったとする。次に、S404において、インストーラ203はレジストリ213にインストール情報を書き込む。レジストリ213の構成および、書き込んだ情報については図5で説明する。
以上、図4で示す処理によって、図3で前述したようにOS202にアプリケーション303と言語リソースモジュール307がインストールされ、レジストリ213に必要な情報が作成された状態となる。
図5は、レジストリ213の構成を示す。
レジストリ情報501は、前述したS404において、インストーラ203によって書き込まれた情報である。キー502は、アプリケーション206が書き込んだと判別できるよう、アプリケーション名などの名称を付けたキーである。本実施例ではこれを「本体キー」と表現する。本体キー502には、3つの項目に対応する値503、504、505が存在する。値503はアプリケーション206のバージョン情報を、値504はアプリケーション206を一意に判別するための文字列である。値505は、どの言語の言語リソースモジュールをインストールしたかを示す情報である。
ここで、値505は、前述のS403で、言語リソースモジュール208がインストールされた状態であるので、「Japanese」のロケールに相当する「ja」が書き込まれることになる。レジストリ情報501は、アプリケーション206がアンインストールされると削除される。
次に、図6で示すフローチャートを用いて、言語パックインストーラ209の処理について説明する。
本処理では、言語パックインストーラ209を使い、アプリケーション206用の言語リソースモジュールをインストールする処理である。言語パックインストーラ209によるインストール処理時には、後述するように図9で示す画面表示が行われる。
まず、S601において、言語パックインストーラ209はユーザに追加する言語を指定させるための図9で示すUI画面を表示し、どの言語の言語リソースモジュールをインストールするかの指示を受け付ける。
ここで、言語パックインストーラ209のように、言語リソースモジュールがひとつしかない場合には、図9(a)で示す画面表示が行われる。言語を選択するためのUI画面901は、言語パックインストーラ209のインストーラUI部210の持つUIである。UI画面901は、インストール済み言語を表示する領域902と、インストールする言語を選択させる領域903を持つ。インストール済み言語を表示する領域902は、S403において言語リソースモジュール208がインストールされたので日本語が表示されている。インストールする言語を選択させる領域903には、言語パックインストーラ209が言語リソースモジュール(ドイツ語)212しか持っていないので、ドイツ語の選択肢しか表示されない。
次に、一方で、言語パックインストーラに言語リソースモジュールが複数組み込まれている場合には、ユーザに1つ以上の言語を指定可能な、図9(b)で示す画面表示が行われる。UI画面904では、ンストール済み言語を表示する領域と、インストールする言語を選択させる領域を持つ。インストールする言語を選択させる領域では、言語パックインストーラが所持している複数の言語リソースモジュールに対応する選択肢が複数表示され、選択可能となっているのがわかる。
言語パックインストーラは、言語リソースモジュールをインストールした後に、どの言語リソースモジュールをインストールしたかを判別するために、レジストリ213に言語情報を作成する。この作成された情報は、アプリケーション303が表示言語を選定する際や、再度言語パックインストーラで言語リソースモジュールをインストールする際に必要になる。
次に、S602において、言語パックインストーラは指示された言語リソースモジュール212のインストールを行う。次に、S603において、言語パックインストーラはレジストリ213にインストール情報(「言語別キー」)を書き込む。レジストリ213の構成および、書き込んだ情報については図7で説明する。S604において、言語パックインストーラは、S601で指示された全ての言語の言語リソースモジュールのインストールが終わったかの判定を行う。全て終わっていた場合にはS605に進み、全て終わっていない場合にはS602に戻り、残りの言語の言語リソースモジュールのインストールを行う。
S605において、言語パックインストーラはレジストリ213にS602でインストールされた言語を判別するキーを作成する。本実施例では、これを「言語パックキー」と表現する。この時には、作成されたキーに対応する値は作成しない。キーだけ作成されたレジストリの値については、OS202の仕様に従う扱いとなるが、本実施例では便宜上「NULL」になるものとする。
次に、S606において、インストールしたモジュールが1言語のみであるかを判定する。1言語のみであった場合にはS607に進み、複数言語のインストールが行われていた場合にはS608に進む。
S607では、言語パックインストーラはレジストリ213の「言語パックキー」に対応する値として、インストールした言語リソースモジュールに係る情報を書き込む。具体的には、言語パックインストーラ209のように言語リソースモジュール(ドイツ語)212しか持っていない場合には、「言語パックキー」に対応する値として、ドイツ語のロケールに相当する「de」が書き込まれる。
次に、S608において、言語パックインストーラはレジストリ213にユーザによる選択言語を示すユーザ選択キーがあるかどうかの判定を行う。ユーザ選択キーは、言語リソースモジュールのインストール後に、アプリケーション303からユ−ザが表示言語を1つ選択した際に、その言語を保持しておくためのレジストリの領域である。S608において、ユーザ選択キーがない場合はS609に進み、存在する場合には本処理を終了する。S609において、言語パックインストーラはレジストリ213にユーザ選択キーを作成する。この時には、対応する値は作成しない。
ここで、アプリケーション303のインストール時に、使用できる言語がひとつしかない場合にはレジストリに該当するキーが用意されない。よって、言語パックインストーラで言語リソースモジュールが追加されたタイミング(S609)で、「ユーザ選択キー」が初めてレジストリ213に作成される。S608の判定において、ユーザ選択キーが既にある場合とは、言語パックインストーラルを複数回使用して、言語リソースモジュールの追加インストールを行った場合などに起こり得る。
図7は、図6で示す処理を行った後の、レジストリ213の構成を示している。レジストリ情報701は、前述したレジストリ情報501の情報を包含している。
言語別キー706は、言語パックインストーラ209が図6のS603で作成したインストール情報を示す。言語別キー706は、言語パックインストーラでインストールされた言語リソースモジュールの数だけ作成される。
言語パックインストーラ209の場合には、言語リソースモジュール212のひとつしか持っていないので言語別キーはひとつしか作成されない。本実施例では、複数の「言語別キー」が作成される場合を想定し、「言語別キー」がユニークとするため、言語コードなどユニークとなるような値を、キー名称に付加する。たとえば、言語別キー706で示すように、ドイツ語の言語リソースモジュール212をインストールした場合にはドイツ語の言語コードである「0407」を使用し、「ApplicationXX¥LangPack¥0407」というデータが言語別キーの名称として、書き込まれている。
値707は、インストールされた言語リソースモジュールの言語を示す情報である。ここでは、ドイツ語のロケールに相当する「de」がデータとして書き込まれる。
言語パックキー708は、図6のS605で言語パックインストーラ209が作成するインストール情報である。言語パックキー708に対応する値709には、言語パックインストーラ209によるインストール処理が行われた際に、前述したS607でドイツ語のロケールに相当する「de」が書き込まれる。
ユーザ選択キー710は、図6のS609で言語パックインストーラ209が作成するインストール情報である。S609で「ユーザ選択キー」が作成された時には、値が書き込まれない。
言語別キー706及び言語パックキー708は、言語パックアンインストーラにより、全ての追加言語リソースモジュールがアンインストールされると削除される。
次に、図10に示すフローチャートを用いて、インストールされたアプリケーション303の起動時の処理を説明する。アプリケーション303がモジュールA304、モジュールB305のように、いくつかのモジュールを持っており、モジュールA304またはモジュールB305が起動する場合でも良い。
まず、S1101において、アプリケーション303は、レジストリ213の言語情報の更新処理(図17)を行う。次に、S1102において、アプリケーション303は、起動の際の言語の選定を行い、該当する言語リソースモジュールを取得する処理(図11)を行う。
処理順序はS1101を行い、次にS1102を行うが、本実施例ではS1102から説明する。本実施例ではS1101およびS1102はアプリケーション303内の共通モジュール306が行う処理とする。共通モジュール306を持たない構成の場合は、アプリケーション303が行えばよい。
図11は、図10のS1102の処理の詳細を説明するためのフローチャートである。具体的には、ここでは図7のレジストリの情報を用いて、アプリケーションが起動時に行う表示する言語を選定して、対応する言語リソースモジュールを取得する処理について説明する。
まず、S1201において、共通モジュール306は、レジストリ情報701の本体キー501を参照する。そして、アプリケーション303のインストール時に作成された言語情報である値505を取得する。図7では、値505である、日本語のロケールに対応する「ja」という値が取得される。
次にS1202において、共通モジュール306はインストーラ203がインストールした言語リソースモジュール307の中から「ja」に対応する言語リソースモジュールを取得する。言語リソースモジュール307は情報処理装置301内に保持されている。この保持されている場所(フォルダパスまたはファイルパス)については、インストーラ203と言語パックインストーラ209とが、それぞれ別の場所に言語リソースモジュールをインストールする。そのため、共通モジュール306は、インストーラ203がインストールした言語リソースモジュールの保持されている場所を一意に特定することができる。例えば、本体キー501から取得した言語の言語リソースモジュールは、アプリケーション303のインストールパス直下を参照するなどのルールである。こうしてS1202においては、共通モジュール306は、リソースファイルのファイル名を指定し、「ja」に該当する言語リソースモジュールを取得することができる。言語リソースモジュールの構成やファイルフォーマットはどのようなものでもよい。本実施例ではXMLのような構造化形式を持つファイルに、使用する文字列を記述しておくものとする。
次に、S1203において、共通モジュール306はレジストリ情報701のユーザ選択キー710を参照し、ユーザ選択キー710に有効な値711が存在するかどうかを判定する。ユーザ選択キー710がない場合、または値711がNULLである場合は、S1207に進む。ユーザ選択キー710の値711が存在した場合には、S1204に進む。前述の図7の例では、後述する図15で示すアプリケーション303が提供するシステム設定のUI画面を開き、ユーザが表示言語を選択する前であるため、ユーザ選択キー710の値711はNULLとなっている。
S1204において、共通モジュール306は、本体キー501の値505と、ユーザ選択キー710の値711とが同じ言語を示す値であるか判定する。同じ値であった場合には図11で示す本処理は終了となる。このように、本体キー501とユーザ選択キー710の値が同じ言語であった場合、S1202で取得した言語リソースモジュール307がアプリケーション303の表示言語となる。S1204において、本体キー501の値505と、ユーザ選択キー710の値711とが同じではない場合にはS1205に進む。
S1205において、共通モジュール306は、インストールされている言語リソースモジュールの中から、ユーザ選択キー710の値711に対応する言語リソースモジュールが存在するかどうかを判定する。該当する言語リソースモジュールが見つかった場合にはS1211に進み、見つからなかった場合にはS1206に進む。
S1211に進んだ場合、共通モジュール306は、ユーザ選択キー710の値711に対応する言語を、アプリケーション303の表示言語と決定する。また、S1206において、共通モジュール306は、ユーザ選択キー710の値711をNULLに変更し、S1207に進む。ユーザ選択キー710の値711に該当する言語リソースモジュール308が存在しないので、次回の本処理における判定処理を一部省略するためのステップである。
S1203の判断処理は、ユーザ選択キー710の値711が書き込まれた後に該当する言語リソースモジュールがアンインストールされた場合に、言語リソースモジュールが見つからないためにアプリケーション303が起動できないといった障害を防止するためのステップである。
次に、S1207において、共通モジュール306はレジストリ情報701の言語パックキー708を参照し、言語パックキー708に有効な値709が存在するかどうかを判定する。言語パックキー708がない場合、または値709がNULLである場合には図11で示す本処理は終了となる。この場合、共通モジュール306が取得した言語リソースモジュールは、S1202で取得した「本体キー」に該当するものである。アプリケーション303のモジュールA304やモジュールB305は、この言語リソースモジュールを使用することになる。S1207において、言語パックキー708の値709が存在した場合には、S1208に進む。図7で示すレジストリ情報701の例の場合、言語パックキー708の値709が存在するので、S1208に進むことになる。
S1208において、共通モジュール306は、本体キー501の値505と、言語パックキー708の値709が同じ言語に対応する値であるか判定する。同じ値であった場合には図11で示す本処理は終了となる。この場合、共通モジュール306が取得した言語リソースモジュールはS1202で取得した「本体キー」に該当するものである。アプリケーション303のモジュールA304やモジュールB305は、この言語リソースモジュールを使用することになる。
S1208において、本体キー501の値505と、言語パックキー708の値709が同じではなかった場合は、S1209に進む。図7で示すレジストリ情報701の例の場合、本体キー501の値505は日本語を表す「ja」であり、言語パックキー708の値709はドイツ語を表す「de」であり、S1209に進むことになる。
S1209において、共通モジュール306は言語パックキー708の値709に対応する言語を、アプリケーション303の表示言語と決定して、S1210に進む。これは、図7で示すレジストリ情報701の例のように、ユーザが言語パックインストーラ209で1言語のみ追加した場合などに起こりやすい。
S1210において、共通モジュール306は、S1209またはS1211で表示言語と決定された言語リソースモジュールの取得処理を行う。この処理に関しては、図12を用いた詳細な説明を後述する。
以上のように、図11で示す処理により、アプリケーション303ないしは、モジュールA304、モジュールB305が使用する表示言語に関する言語リソースモジュールが取得される。
なお、図11では、ユーザ選択キーが見つからなかった場合にS1207に進み、言語パックキー708に該当する言語リソースモジュール308を探索している。しかしながら、この変形例として、ユーザ選択キーが見つからなかった場合には、言語パックキー708の値を使用せず、S1202で取得した本体キー501の言語リソースモジュール307を利用するものとしてもよい。
図12で示すフローチャートは、図11のS1210の処理の詳細であって、表示言語と決定された言語リソースモジュールの取得処理を説明するためのものである。
まず、S1301において、共通モジュール306は言語パックインストーラ209がインストールした言語リソースモジュール308の保持されているファイルパスを取得する。この保持されている場所(フォルダなどのパス)については、前述したように、例えば言語パックインストーラが使用するインストールパス直下を参照するなどのルールがある。
次に、S1302において、共通モジュール306はS1209またはS1206で表示言語と決定された言語リソースモジュールに対応するフォルダを探す。図7の例では、値709が「de」であるので、「de」(ドイツ語用の)フォルダがあるかどうかの探索が行われる。探索の結果、フォルダが見つからない場合には図12の処理を終了し、見つかった場合にはS1303に進む。
次に1303において、共通モジュール306は言語リソースモジュールのあるフォルダ内に、アプリケーション303が使用するリソースファイルがあるかどうかを探索する。リソースファイルが見つかった場合はS1304に進み、見つからなかった場合には図12で示す処理を終了する。ここで、見つからなかった場合とは、アプリケーション303のバージョンアップなどにより、言語パックインストーラ209で追加した言語リソースモジュールに係るリソースファイルが不足した場合などが該当する。
S1304において、共通モジュール306は言語パックインストーラ209によりインストールされた言語リソースモジュールを取得し、S1202で指定して取得したリソースファイルを上書き、図12で示す処理を終了する。
次に、図13で示すフローチャートを用いて、アプリケーション303ないしは、モジュールA304、モジュールB305が起動した後に、ユーザの指示に従い、アプリケーション303の表示言語を切り替える処理を説明する。本処理では、図15で示すアプリケーションの言語選択のUI画面も用いて説明を行う。
まず、S1401において、アプリケーション303は、レジストリ情報701から、言語別キー706があるかどうかを判断する。言語別キー706がひとつも無い場合はS1404に進み、言語別キー706がひとつ以上ある場合はS1402に進む。
S1402において、言語別キー706の値707を取得して、取得した値に対応する言語を含むような言語リストを作成する。図7のレジストリ情報701の例は、言語パックインストーラ209により言語リソースモジュール308がひとつだけインストールした例なので、言語別キー706はひとつしかない。ここで、言語パックインストーラにより複数の言語リソースモジュールのインストールが行われた場合には、後述する図14で示すようなレジストリ情報となる。S1403において、アプリケーション303は、S1402で作成した言語リストに該当する言語リソースモジュール308を探す。探索の結果、該当する言語リソースモジュールが存在しない言語については、言語リストから除外する。言語リソースモジュールがアンインストールされた場合などに、言語別キー706の値707に対応する言語リソースモジュールが存在しないことが起こるからである。
次に、S1404において、アプリケーション303は、レジストリ情報から本体キー501の値505を取得する。S1405において、アプリケーション303は、本体キー501の値505に対応する言語を含む言語リストを作成する。図7で示すレジストリ情報701の場合には、「ja」「de」の2つの言語(日本語とドイツ語)を含む言語リストが完成する。ここで、もし重複する言語があった場合は、リストから除外する。
次に、S1406において、作成した言語リストが1言語のみであるかを判定する。1言語のみである場合にはS1407に進み、複数であった場合にはS1408に進む。
S1407では、S1405で作成した言語リストをユーザに表示する際に、図15(b)で示すように、表示言語の編集および選択などが不可の状態で表示する。
図15(b)で示す選択画面1603は、アプリケーション303が提供するUIのひとつであり、ひとつの言語リソースモジュールしかインストールされていない場合の例である。選択欄1604では、該当するひとつの言語のみ表示し、ユーザが変更することはできないように、グレーアウト制御などを行うものとする。
S1408では、アプリケーション303は共通モジュール306より、現在の表示言語を取得する。S1409において、言語リストの先頭に現在の表示言語になるように並び替える。S1410に進み、図15(a)で示すような画面を介して、言語リストを表示する。
図15(a)で示す選択画面1601は、アプリケーション303が提供するUIのひとつであり、図14で示すレジストリ情報1501の場合に表示される画面の例である。ここに表示される言語リストに基づく選択欄1602には、現在の表示言語(日本語)をリストの先頭とし、以下にその他の言語が並んでいる。ユーザは、この選択欄1602から任意の言語を選択することで、アプリケーション303の表示言語の切り替え指示を行うことができる。
図14は、言語パックインストーラで複数言語をインストールしたレジストリの構成である。レジストリ情報1501は、基本的にレジストリ情報701と形式は同じである。
ここで、レジストリ情報1501は、言語別キーが2つあり、それぞれ言語別キー1502、言語別キー1503である。言語別キーは言語パックインストーラ209によって言語リソースモジュールをインストーするごとに追加される。よって、レジストリ情報1501は、言語パックインストーラ209によって言語リソースモジュール308が2つインストールされた状態である。具体的には、レジストリ情報1501は、インストーラ203によって日本語の言語リソースモジュールがインストールされ、言語パックインストーラ209によってドイツ語の言語リソースモジュールと、フランス語の言語リソースモジュールとがインストールされた場合の情報である。図15(a)は、図14のレジストリ情報1501に対応する表示言語の選択のためのUI画面となる。
次に、図16で示すフローチャートを用いて、図15(a)で示す選択画面により、アプリケーションの表示言語の選択が行われた場合の処理を説明する。
まず、S1801において、共通モジュール306は前述の言語リストに基づく選択欄1602を介した、表示言語の切り替えの指示を受け付ける。
次に、S1802において、共通モジュール306は切り替えるべき表示言語を設定ファイルに書きだす。このファイルは共通モジュール306が参照できるファイル形式であればどのようなものでも良い。本実施例ではXMLファイルとする。このXMLファイルを読み込むことで、共通モジュール306は、以降の処理で、切り替えるべき表示言語が何であるかを把握することができる。
次に、S1803において、共通モジュール306は、OS202の再起動を判断するためのファイルを作成する。この再起動を判断するためのファイルは、ファイルを作成する際に、再起動後に消去されるという属性を持たせたファイルである。再起動判定処理については図17のS1901で後述する。以上で、共通モジュール306の表示言語の切り替えの指示を受け取った際の処理が完了する。
なお、この再起動判定ファイルと、設定ファイルを使用した方法は、共通モジュール306がファイルを作成したフォルダへのアクセス権があるという前提で成り立つ。共通モジュール306がフォルダへのアクセス権がない場合に同様の機能を実現させる方法は実施例6で後述する。
図16で示す処理により、本実施例のように、アプリケーション303が、モジュールA304、モジュールB305といった複数のモジュールから成る場合でも、言語リソースモジュールの切り替えのタイミングを統一することができる。
次に、図17のフローチャートを用いて、図10のS1101の処理の詳細について説明する。具体的には、本処理はレジストリの言語情報の更新を行うための処理である。
まず、S1901において、共通モジュール306は、再起動を判断するためのファイルの探索を行う。この再起動を判断するためのファイルは図16のS1803で作成されたものである。ファイルが見つかった場合は、図17のフローを終了する。これはOS202の再起動で消去されるファイルがまだ存在していることから、OS202の再起動が行われていないことを示す。図16のように、表示言語の切り替え指示があった場合には、OS202の再起動後に本処理が行われることになる。一方、S1901において、再起動を判断するためのファイルが見つからなかった場合はS1902に進む。
S1902において、共通モジュール306は設定ファイルの探索を行う。この設定ファイルは、図16のS1802において切り替えるべき言語が記述された設定ファイルである。設定ファイルが存在する場合はS1903に進み、設定ファイルが存在しなかった場合には図17で示す処理を終了する。
S1903において、共通モジュール306は設定ファイルに記述されている言語を読み込む。S1904において、共通モジュール306は、レジストリ情報701のユーザ選択キー710の値711に読み取った言語に対応する値を書き込む。この処理によって今まで「NULL」であった値711に言語が設定される。次に、S1905において、共通モジュール306は設定ファイルを削除する。
以上、実施例1では、インストーラ203及び言語パックインストーラ209から、異なる言語の言語リソースモジュールをインストールした際の、アプリケーション303ないしは、モジュール304、305における表示言語の決定処理などを説明した。これら処理により、アプリケーションの動作を正常に保ちつつ、ユーザ所望の表示言語に対応する言語リソースモジュールをアプリケーションが適切に利用することが可能となる。
[実施例2]
実施例2では、既にアプリケーション303と言語リソースモジュール307、308がインストールされている状態で、アプリケーション303をアップグレードする際の処理について説明する。ここで、アップグレードとは、アップグレードインストーラを用いて、既にインストールされているアプリケーション303をアンインストールし、バージョンアップ版のアプリケーションをインストールすることである。
本実施例において、システム構成やアプリケーション303のインストールなど、実施例1と同様の説明は割愛する。
本実施例では、まず、前提について説明する。まず、情報処理装置に対して、アプリケーション303と日本語の言語リソースモジュール307がインストールされた後に、言語パックインストーラ209によりドイツ語とフランス語の言語リソースモジュール308がインストールされる。さらに、ユーザがシステム設定のUI画面1601でドイツ語を選択したことを想定している。図18は、この前提となる環境におけるレジストリの構成を示している。
図18で示すレジストリ情報2001には、本体キー2002、言語別キー2003、2004、言語パックキー2005、ユーザ選択キー2006がある。図示する通り、言語パックインストーラ209により追加されたドイツ語の言語リソースモジュールに対応する言語別キー2003、フランス語の言語リソースモジュールに対応する言語別キー2004が作成されている。また、ユーザ選択キー2006には、ユーザにより選択されたドイツ語を示す値「de」が書き込まれている。
図19は、アップグレードインストーラ2101の構成を説明するための図である。
アップグレードインストーラ2101は、インストーラ203のアプリケーションをインストールする機能に加え、アプリケーションをアップグレードすることができるインストーラである。インストーラUI部2104、インストール実行部2105、インストールするアプリケーション2106、言語リソースモジュール2107、2108については、図2のインストーラの同名のモジュールと同様の機能であるので説明を割愛する。
2102は、アンインストール実行部である。本実施例では、インストールを制御するインストール実行部2105とアンインストールを制御するアンインストール実行部2102を分けて構成されたアップグレードインストーラ2101を想定している。
言語リソースモジュール2103は、インストーラ203がインストールすることができるドイツ語に対応する言語リソースモジュールである。アップグレードインストーラ2101は、前述したインストーラ203より新しいバージョンのアプリケーション2106のためのもので、同梱する言語リソースモジュールが増えている。
図20は、アップグレードインストーラ2101による処理を説明するためのフローチャートである。
まず、S2201において、アップグレードインストーラ2101はレジストリ213のレジストリ情報2001の本体キー2002の中から「UpgradeCode」の値を読み出し、アップグレードインストーラ2101が保持しているものと一致するかどうかの判定を行う。アップグレードインストーラは、アップグレードの対象となるアプリケーションを特定するために、「UpgradeCode」の値を保持している。ここでは、「UpgradeCode」の値が一致しない場合には通常のインストールとみなし、S2202に進む。一方、「UpgradeCode」の値が一致した場合にはS2205に進む。
S2202、S2203、S2204、S2215での通常のインストールの処理は、前述した図4のS401〜S404と同様の処理となるのでその説明を割愛する。
S2205において、アップグレードインストーラ2101は既にインストールされていたアプリケーション303のアンインストールを行う。次に、2206において、アップグレードインストーラ2101は本体キー2002の中から言語情報を読み取り、その値を保持する。次に、S2207において、アップグレードインストーラ2101は、本体キー2002の言語情報に対応する言語リソースモジュールをアンインストールする。そして、S2208において、アップグレードインストーラ2101は本体キー2002とその値を全て削除する。
S2209において、アップグレードインストーラ2101はアプリケーション2106のインストールを行う。
S2210において、アップグレードインストーラ2101は、レジストリ情報2001のユーザ選択キー2006を参照し、ユーザ選択キー2006の値に対応する言語リソースモジュールを持っているかどうか判定する。持っている場合にはS2211に進み、持っていない場合にはS2212に進む。また、レジストリ情報にユーザ選択キーが存在しない、またはユーザ選択キーの値がNULLである場合にもS2212に進む。
S2211において、アップグレードインストーラ2101は、ユーザ選択キー2006の値に対応する言語リソースモジュールをインストールする。前述した図18のレジストリ情報2001の場合には、ユーザ選択キー2006の値が「de」であり、すなわちドイツ語を示す。よって、アップグレードインストーラ2101は、ドイツ語の言語リソースモジュール2103をインストールする。
S2212において、アップグレードインストーラ2101は、言語パックキー2005の値を参照し、対応する言語リソースモジュールを持っているかどうか判定する。持っている場合にはS2213に進み、持っていない場合にはS2214に進む。また、レジストリ情報に言語パックキーが存在しない、またはその値がNULLである場合にはS2214に進む。
S2213において、アップグレードインストーラ2101は、言語パックキー2005の値に対応する言語リソースモジュールをインストールする。S2214においてアップグレードインストーラ2101は、S2206で保持していた値に対応する言語リソースモジュールをインストールする。
最後に、S2215において、アップグレードインストーラ2101は、レジストリ2001にインストール情報を書き込み、本処理を終了する。
図21は、S2215における書き込み処理が行われた場合のレジストリの構成の例を示している。レジストリ情報2301は、アップグレードインストーラ2101を用いて、図18に示すレジストリ情報2001に対して、さらに書き込まれた情報である。
レジストリ情報2301は、レジストリ情報2001に比べ、本体キー2302が更新されている。これは、図20のS2211において、ドイツ語の言語リソースモジュール2103をインストールした後に、S2215でその結果をレジストリ213に書き込んだためである。本体キー2302では、アップグレードされたアプリケーションのバージョンを示すProductVersionの値が「1.1.0」に更新されている。また、本体キー2302の言語情報を示すLocaleStringの値が「de」に更新されている。
例えば、このレジストリ情報2301で、図10、図11を用いて説明した処理が実行され、インストールしたアプリケーション2106が起動されると、アプリケーション2106はドイツ語の言語リソースモジュール2103で起動されることになる。
例えば、アプリケーションのアップグレードの前に、ユーザにより言語パックインストーラによりドイツ語の言語リソースモジュールが追加され、表示言語として選択されていたことを想定する。実施例2により、アップグレードインストーラがドイツ語の言語リソースモジュールを持っている場合は、アプリケーションのアップグレードによって、ドイツ語の言語リソースモジュールを用いてアップグレードされたアプリケーションが起動されるようになる。
[実施例3]
実施例1、2では、言語リソースモジュールの追加や表示言語の変更が行われた際には、OS202を再起動した後に反映させることを想定している。実施例3では、表示言語の変更に係る別の解決手段を説明する。なお、本実施例では、前述した実施例とは異なる部分についてのみ、説明を行うものとする。
図22で示すフローチャートを用いて、実施例3におけるアプリケーション303ないしは、モジュール304、305の起動処理について説明を行う。具体的には、本実施例では、実施例1の図10とは異なり、ユーザからのアプリケーション303ないしは、モジュール304、305の起動指示の後に、S1101、S1102の処理に先立って、前処理をいくつか行っている。
また、本処理は実施例2によりアップグレードされたアプリケーション2106においても同様に適用可能である。
まず、S2401において、アプリケーション303はレジストリ213のレジストリ情報のユーザ選択キーを参照する。ユーザ選択キーが存在しない、またはその値がNULLである場合にはS2402に進み、ユーザ選択キーが存在する場合にはS2405に進む。S2402において、アプリケーション303はレジストリ情報を参照し、複数の言語リソースモジュールについての情報が記述されているかを判断する。レジストリ情報に複数の言語情報が記述されている場合にはS2403に進み、記述されていない場合にはS2405に進む。
S2403において、アプリケーション303は表示言語を選択するためのUI画面(図23)を表示する。選択画面2501は、アプリケーション303の起動時に表示される表示言語の選択のためのUI画面である。レジストリ情報701では、日本語(「ja」)とドイツ語(「de」)に対応する言語リソースモジュールがインストールされていることがわかるので、選択肢としてはその2言語が表示されている。ユーザの言語選択と、開始ボタンの押下により、S2404へと処理が進む。S2404において、アプリケーション303は、選択画面2601を用いてユーザが選択した言語の情報を、ユーザ選択キーの値として書き込む。
S2405とS2406は、前述したS1101、S1102と同様の処理なので、その説明を割愛する。
なお、上記した処理では、図23で示す選択画面2501は、ユーザ選択キーの有無で表示の要否の判定を行っていた。しかしながら、本実施例の変形例として、例えば、アプリケーションの初回起動時のみ表示する、言語リソースモジュールの追加または削除があった後のアプリケーションの起動時に表示する、といったように制御することも可能である。
[実施例4]
実施例4では、アプリケーションのシステム設定に関する表示言語を選択するためのUI画面1601を介して、表示言語が変更された際の処理について説明する。
実施例1において、図15で示すUI画面1601を用いて、アプリケーションの表示言語が切り替え可能であることを説明した。実施例1では、図16、図17の処理で、表示言語の切り替え指示後のOS202の再起動により、この言語切り換えが実際に反映された。これに対して、本実施例は、アプリケーション303が明示的にOS202の再起動をうながす制御を行う点が異なる。
図24は、アプリケーションの表示言語の切り替え指示が行われた後に表示される再起動を促すUI画面2601を示している。UI画面2601は、アプリケーション303が提供するUIのひとつであり、ユーザがUI画面1601で言語選択を行い、OKボタンを押下した場合に表示される。この画面を介して、ユーザがOKボタンを押下した場合には、アプリケーション303はOS202に対して再起動の指示を行う。再起動後に、アプリケーション303を起動すると、図10で示した起動処理が実行され、選択された表示言語に切り替わる。
また、OS202の再起動を行わずに、UI画面1601の切り替え指示を即座にアプリケーションの表示に反映させてもよい。その場合には、図3のモジュールA304、モジュールB305のように、2つの独立したプログラムが動作している際は、アプリケーション303がプログラムを監視し、表示言語を切りかえる際に警告UIを表示したり、プログラムの終了を行ってもよい。
[実施例5]
上述した実施例においては、アプリケーションのインストールなどの処理が行われた場合の表示言語の決定方法を、それぞれ例を挙げて説明した。しかしながら、アプリケーションのインストールとアンインストール、言語パックのインストールとアンインストール、それに表示言語を切り替えるタイミングなどによっては、まだ説明されていない表示言語の決定に係る処理例が存在する。
実施例5では、実施例1〜3で説明していない具体例について、さらにいくつか説明する。なお、本実施例のインストーラ203、言語パックインストーラ209、アップグレードインストーラ2101、アプリケーション303,2106ないしは、モジュール304、305などの構成や処理内容は実施例1〜3と同様である。本実施例ではモジュールA304、モジュールB305とアプリケーション303を区別せず、アプリケーション303内で行われる操作は、全てアプリケーション303の主体による処理として説明する。
図25は、ユーザの指示などに従う操作と、各操作によるレジストリの構成を説明するための図である。図25では、レジストリ213で示すキー(「本体キー」、「言語別キー」、「言語パックキー」、「ユーザ選択キー」)と、その言語情報を示す「LocaleString」の値と、アプリケーションの表示言語が何れかになっているかを示している。
図25(a)の例について説明する。
状態2701は、インストーラ203で、アプリケーション303とともに、日本語の言語リソースモジュール307をインストールした状態である。レジストリ213には、本体キーのみが存在し、その値は「ja」となる。また、アプリケーション303の表示言語は日本語(「ja」)となる。
状態2702は、言語パックインストーラ209により、ドイツ語とスペイン語に対応する言語リソースモジュールが2つインストールされている状態である。レジストリ213には、本体キーとその値「ja」、2つの言語別キーとその値「de」「es」、言語パックキーとその値「NULL」が存在する。また、アプリケーション303の表示言語には変更がない。
状態2703は、アプリケーション303の言語選択のためのUI画面1601を介して、ドイツ語に表示言語が切り換えられた場合の状態を示している。レジストリ213において、アプリケーション303の表示言語が、ユーザ選択キーの値「de」に対応するドイツ語に変更されている。
状態2704は、アップグレードインストーラ2101を使い、アプリケーション303をアップグレードした場合の状態である。本例では、アップグレードインストーラ2101がドイツ語の言語リソースモジュールを持っているとする。レジストリ213において、本体キーの値が「ja」から「de」に変更されている。これは、アップグレードインストーラ2101の処理(図20のS2211)によるものである。アプリケーション2106の表示言語も、本体キーの値「de」に対応するドイツ語に変更されている。
次に、図25(b)の例について説明する。状態2705と状態2706は、状態2701と状態2702と同様なので説明を割愛する。
状態2707は、アプリケーション303の言語選択のためのUI画面1601を介して、スペイン語に表示言語が切り換えられた場合の状態を示している。レジストリ213において、アプリケーション303の表示言語が、ユーザ選択キーの値「es」に対応するスペイン語に変更されている。
状態2708は、アップグレードインストーラ2101を使い、アプリケーション303をアップグレードした場合の状態である。本例では、アップグレードインストーラ2101がスペイン語の言語リソースモジュールを持っていないとする。レジストリ213では、本体キー、言語別キー、言語パックキー、及びユーザ選択キーと、それらの値については変更がない。また、アップグレードインストーラ2101がスペイン語の言語リソースモジュールを持っていないので、アプリケーション2106の表示言語についても、ユーザ選択キーの値「es」に対応するスペイン語のままである。
次に、図25(c)の例について説明する。状態2709は、状態2701と同様なので説明を割愛する。
状態2710は、言語パックインストーラ209により、ルーマニア語に対応するリソースモジュールが1つインストールされている状態である。レジストリ213には、本体キーとその値「ja」、言語別キーとその値「ro」、言語パックキーとその値「ro」が存在する。これは、言語パックインストーラ209で、1つの言語リソースモジュールのみをインストールしたためである。アプリケーション303の表示言語としては、前述したS1209の処理により、言語パックキーの値「ro」に対応するルーマニア語が設定される。
状態2711は、アップグレードインストーラ2101を使い、アプリケーション303をアップグレードした場合の状態である。本例では、アップグレードインストーラ2101がルーマニア語に対応する言語リソースモジュールを持っていないとする。この場合にはレジストリ213には変更が行われない。
次に、図25(d)の例について説明する。状態2712は、状態2701と同様なので説明を割愛する。
状態2713は、言語パックインストーラ209を動作させ、ドイツ語に対応する言語リソースモジュールが1つインストールされている状態である。レジストリ213には、本体キーとその値「ja」、言語別キーとその値「de」、言語パックキーとその値「de」が存在する。これは、言語パックインストーラ209で1つの言語リソースモジュールのみをインストールしたためである。また、アプリケーション303の表示言語としては、前述したS1209の処理により、言語パックキーの値「de」に対応するルーマニア語が設定される。
状態2714は、言語パックインストーラ209を再度動作させ、さらにルーマニア語に対応する言語リソースモジュールを追加した状態である。レジストリ213には、本体キーとその値「ja」、2つの言語別キーとそれらの値「de」「ro」、言語パックキーとその値「ro」が存在する。アプリケーション303の表示言語としては、前述したS1209の処理により、言語パックキーの値「ro」に対応するルーマニア語が設定される。
状態2715は、アップグレードインストーラ2101を使い、アプリケーション303をアップグレードした場合の状態である。本例では、アップグレードインストーラ2101がルーマニア語に対応する言語リソースモジュールを持っていないとする。この場合にはレジストリ213には変更が行われない。
図26は、図25と同様に、ユーザの指示などに従う操作と、各操作によるレジストリの構成を説明するための図である。言語パックのアンインストール操作が行われた場合について、特に説明する。
まず、図26(a)の例について説明する。状態2801と状態2802は、状態2712と状態2713と同様なので、その説明を割愛する。
状態2803は、言語パックインストーラ209でドイツ語に対応する言語リソースモジュールのアンインストールを行い、アプリケーション303を起動した際の状態である。レジストリ213には、本体キーのみが存在し、その値は「ja」となる。また、アプリケーション303の表示言語は、本体キーの値「ja」に対応する日本語が設定される。
状態2804は、アップグレードインストーラ2101を使い、アプリケーション303をアップグレードした場合の状態である。レジストリ213には、本体キーのみが存在し、その値は「ja」になる。これは、図20のS2214及びS2215の処理に基づくものである。アプリケーション2106の表示言語は日本語のままである。
次に、図26(b)の例について説明する。状態2805と状態2806は、状態2705と状態2706と同様なので、その説明を割愛する。
状態2807は、言語パックインストーラ209でドイツ語に対応する言語リソースモジュールのアンインストールを行い、アプリケーション303を起動した際の状態である。レジストリ213には、本体キーとその値「ja」と、言語別キーをその値「es」と、言語パックキーとその値「NULL」とが存在する。また、アプリケーション303の表示言語は、本体キーの値「ja」に対応する日本語が設定されたままである。
状態2808は、アップグレードインストーラ2101を使い、アプリケーション303をアップグレードした場合の状態である。本例では、アップグレードインストーラ2101がスペイン語に対応する言語リソースモジュールを持っていないとする。図20の処理により、レジストリ213の本体キーの値は「ja」になる。ほかのキーと値、表示言語は変わらない。
[実施例6]
実施例6は、共通モジュール306が、UI画面1601を介してユーザにより切り換え指示された表示言語を記載する設定ファイルを格納するフォルダへアクセスできない場合(アクセス権が無いなど)を考慮した処理について説明を行う。本実施例では、図1〜6、図8〜14など、上述した実施例と同様な部分に関しては、その説明を割愛する。
図27は、本実施例における、レジストリの構成の例を示す。
レジストリ情報3001には、本体キー3002、2つの言語別キー3003、3004、言語パックキー3005、ユーザ選択キー3006が存在する。本体キー3002には、言語情報として日本語に対応する値「ja」が書き込まれている。2つの言語別キー3003、3004には、それぞれドイツ語に対応する値「de」、フランス語に対応する値「fr」が書き込まれている。言語パックキー3005とユーザ選択キー3006については、言語情報の設定がないことを示す値「NULL」となっている。
本実施例では、ユーザが表示言語を選択するためのUI画面1601を介して、表示言語を日本語からドイツ語に変更した際の処理を説明する。
図28で示すフローチャートを用いて、アプリケーションの言語選択後の処理を説明する。この処理は、前述した図16の変形例といえる。
まず、S3101において、共通モジュール306は、表示言語の切り替え指示を受け付ける。ここでは、日本語からドイツ語に切り替える指示である。次に、S3102において、共通モジュール306はレジストリ情報3001のユーザ選択キー3011に、選択された言語(ドイツ語)に対応する値と、切り替え指示が行われた時刻(現在時刻)を示す値とを書き込み、本処理を終了する。
図29は、S3102の処理が行われた際のレジストリの構成を示している。レジストリ情報3201には、レジストリ情報3001のユーザ選択キーに対して情報が追加されている。
具体的には、ユーザ選択キーには、ユーザの選択した言語情報を「TemporaryLocal」の値3213として、時刻情報を「TimeStamp」の値3214として保持する。
この2つの値とデータは、共通モジュール306がS3102の処理を行うことで、レジストリ情報3201に作成される。
次に、図30で示すフローチャートを用いて、アプリケーション303を起動し、表示言語を切り替える処理について説明する。この処理は、前述した図17の変形例といえる。なお、本処理は、表示言語を日本語からドイツ語に切り換え指示した後に、OS202を再起動させ、アプリケーション303を起動した場合の処理である。
まず、S3301において、共通モジュール306はレジストリ3201のユーザ選択キー3211にテンポラリ言語(「TemporaryLocal」)の値3213があるかどうかを判定する。存在した場合にはS3302に進み、存在しなかった場合には本処理を終了する。
S3302において、共通モジュール306はOS202が起動した時刻を取得する。本実施例では、この処理に先立ちOS202が再起動した際の時刻の情報が取得されることになる。OSの起動時刻を取得する手段はどのようなものでもよいが、一般的にはOSの起動時刻を取得するAPIがOSにより提供されている。
S3303において、共通モジュール306は、OSの起動時刻と、レジストリ3201のユーザ選択キー3211の時刻情報(「TimeStamp」の値3214)とを比較する。比較した結果、ユーザ選択キー3211の時刻情報がOSの起動時刻より前であった場合にはS3304に進む。そうでない場合には、まだOS202の再起動が行われていないとみなせるので、本処理を終了する。OS202の再起動が行われていないということは、モジュールA304、モジュールB305のように複数モジュールが実行されている可能性がある。よって、このS3303の判断処理によって、モジュールごとに不整合が起きてしまうのを防ぐことができる。
S3304において、共通モジュール306は、テンポラリ言語(「TemporaryLocal」)の値3213で、ユーザ選択キー3211の言語情報(LocaleString)3012を更新する。今、テンポラリ言語として保持していたドイツ語に対応する値「de」を用いて、「LocaleString」とその値「de」が書き込まれる。次に、S3305において、「TemporaryLocal」の値3213と「TimeStamp」の値3214とを削除して、本処理を終了する。
以上の処理によって、ユーザが言語選択のためのUI画面1601で表示言語を切り替えた際に、OS202再起動の有無に応じて、アプリケーションの表示言語の制御を行うことができる。
[実施例7]
前述した実施例では、インストーラ203が一つの言語リソースモジュールをインストールする手法について説明を行った。実施例7では、インストーラ203が言語パックインストーラ209と同様に、アプリケーション206が使用する言語リソースモジュールを複数追加する手法について説明を行う。
本実施例では、図1〜5、図10〜14など、上述した実施例と同様な部分に関しては、その説明を割愛する。
まず、本実施例で示す図31、図32について説明する。
図31は、アプリケーション303の表示言語を決定するためのUI画面3401で、インストーラ203の表示言語、および、アプリケーション303の表示言語はUI画面3401で選択指示を受けた言語となる。また、UI画面3401は、インストール可能な言語、および、インストール済みを表示し、1つの言語のみを選択する事が可能である。
図32は、アプリケーション303のUI画面3401で選択した言語の他に追加言語をインストールするためのUI画面3501である。インストーラ203は、インストール言語リスト3502にインストール可能な言語、および、インストール済みの言語を表示する。インストール言語リスト3502に表示されている各種言語3503は、それぞれがチェックボックスを有し、複数の言語を同時に選択する事が可能である。また、UI画面3401で選択指示を受けた言語をインストーラ203が保持していない場合、前記言語の他にインストーラが保持している言語を追加選択しない限り、UI画面3501から次の処理に遷移することは出来ない。
次に、図34で示すフローチャートを用いて、複数の言語リソースモジュールをインストールする処理について説明する。この処理は、前述した図6の変形例といえる。
S3701において、インストーラ203は図31で示すようなユーザにアプリケーションの表示言語を指定させるUI画面3401を表示し、選択指示を受け付ける。これはインストーラ203のように、言語リソースモジュール207と言語リソースモジュール208の複数の言語リソースモジュールを持つ場合に、インストーラUI部204が提供する画面である。言語パックインストーラ209で予めインストール済みの言語リソースモジュールをインストーラ203が保持していない場合、言語の一覧として対象の言語をUIに表示する。また、言語リソースモジュールが1種類しかなく選択の余地がない場合、言語を指定させるUIの表示を省略してもよい。
S3702において、インストーラ203は図32で示すようなユーザにアプリケーションの表示言語を追加で指定させるためのUI3501の初期設定を行う。(後述)
S3703において、インストーラ203は図32で示すようなユーザにアプリケーションの表示言語を追加で指定させるUI画面3501を表示し、選択指示を受け付ける。UI画面3501は、UI画面3401で表示していた言語が引き続き表示される。ここで、対象の言語をインストールするか否かを決定するためのチェックボックス3503がONの言語がインストールする言語の対象となる。チェックボックスのON・OFFの初期状態、および、操作可能なチェックボックスか否かどうかはS3702において取得した情報を基に決定する。ここで、チェックボックスがONの言語は、本フローチャートの処理が終了した時にOS202にインストールされている言語に等しい。
S3704において、インストーラ203はS3703でインストール指示を受けた言語を言語リソースモジュール207として保持しているかどうかを判定する。存在した場合にはS3705に進み、存在しなかった場合にはS3709へ進む。
S3705において、インストーラ203はS3703でインストール指示を受けた言語が言語パックインストーラ209でインストール済みかどうかを判定する。ここでは図33で示すようなレジストリ情報3600を例にとって、前記判定方法と判定方法に必要なレジストリ情報3600について説明する。インストール済みかどうかの判定は、言語パックインストーラ209がレジストリ情報3600に作成した言語別キー3601〜3603とインストール指示を受けた言語とを比較して行う。言語別キー3601〜3603はそれぞれ言語情報を示す「LocaleString」の値とインストール方法を示す「ProductType」を保持している。インストール方法はインストーラ203でインストールした場合「BaseResource」とし、言語パックインストーラ209でインストールした場合「LangPack」とする。まず、インストーラ203はインストール指示を受けた言語と同じ言語を言語情報3610〜3612から取得する。次に、インストーラ203は前記同じ言語と判断した言語のインストール方法3620〜3622から取得する。取得したインストール方法が「LangPack」、もしくは、「NULL」である場合、言語パックインストーラ209でインストール済みの言語と判断しS3706へ進み、「BaseResource」である場合、S3706へ進む。
S3706において、インストーラ203はS3705にて言語パックインストーラ209でインストールしたと判断した言語リソースモジュールをアンイストールする。
S3707〜S3711、S3713、S3714はS602〜S606、S608、S609と同じであるため、その説明を割愛する。
S3712では、インストーラ203はレジストリ213の「言語パックキー」に対応する値として、インストールした言語リソースモジュールに係る情報を書き込む。具体的には、インストーラ203のように言語リソースモジュール(英語・日本語)207、208を持っていない場合には、「言語パックキー」に対応する値として、英語と日本語のロケールに相当する「en−GB」、「ja」が書き込まれる。また、同時に「インストール方法」に対応する値として、インストーラ203でインストールした方法に相当する「BaseResource」が書き込まれる。本シーケンスはインストーラ203によるものだが、仮に言語パックインストーラ209でインストールした場合は、「LangPack」が書き込まれる。
次にインストーラ203が図32で示すようなユーザにアプリケーション303の表示言語を追加で指定させるためのUI画面3501の初期設定を行うためのフローチャート(S3702)について説明する。
S3801において、インストーラ203はレジストリ213の言語情報3610〜3612から言語情報3610〜3612、インストール方法3620〜3622と、インストーラ203が保持している言語リソースモジュール207、208の言語を取得する。
S3802において、インストーラ203はS3801で取得したインストール方法3620〜3612に「BaseResource」が存在するかどうかを判定する。存在した場合、S3807へ進み、存在しない場合、S3803へ進む。
S3803において、インストーラ203はS3801で取得したインストール方法3620〜3612に「LangPack」が存在し、かつ、インストーラ203が保持していない言語が存在するどうかを判定する。存在する場合、S3804へ進み、存在しなかった場合、S3806へ進む。
S3804において、インストーラ203はS3803で存在すると判定した言語が図31で示すようなアプリケーションの表示言語を決定するためのUI画面3401で選択指示を受けた言語と同じ言語かどうかを判定する。同じ言語である場合、S3806へ進み、同じ言語でない場合、S3805へ進む。
S3805において、インストーラ203はインストール言語リスト3502のチェックボックス3503をOFFの状態にし、かつ、チェックボックス3503を操作可能な状態にする。
S3806において、インストーラ203はインストール言語リスト3502のチェックボックス3503をONの状態にし、かつ、チェックボックス3503を操作不可能な状態にする。
S3808において、インストーラ203はS3081で言語情報3610〜3612と、インストーラ203が保持している言語リソースモジュール207、208の全ての言語の言語リソースモジュールのインストールが終わったかの判定を行う。全て終わっていた場合には本処理を終了する。全て終わっていない場合にはS3802に戻り、残りの言語のチェック処理を行う。
以上、図34、図35で示す処理によって、OS202にアプリケーション303と言語リソースモジュール307がインストールされ、レジストリ213に必要な情報が作成された状態となる。
(他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(CPUやMPU等)がプログラムを読み出して実行する処理である。
さらに、本発明には、上述した実施形態の適宜組み合わせることにより構成されたシステムやその機能も含まれるものとする。