説明

オペレーティングシステム用多言語ユーザインタフェース

【課題】オペレーティングシステムに修正を加えなくても、既存のリソースおよび実行可能バイナリファイルを使用しながら多言語サポートを提供できる方法。
【解決手段】オペレーティングシステムにおいて、実行可能ファイル内でリソースをアドレス指定する機能は、選択されている言語を定めるユーザ設定に応えて、リソースに対する要求を言語固有のリソースにリダイレクトするように修正される。この言語固有のリソースは、中央パス選択機構に修正を加えなくても代替言語ファイルスーツを拡張できるようにする動的アドレス指定方式を通して代替言語モジュールの中に入れられる。これにより、ユーザは、ユーザインタフェース用の言語を選択できるようになり、リソースローダは、リソースに対する要求を適切なリソースに自動的にリダイレクトするであろう。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概してオペレーティングシステムに関し、さらに特定すると、ユーザインタフェース言語を切り替えるための効率的な機構を提供するオペレーティングシステムに関する。
【背景技術】
【0002】
リソースは、例えばテキストファイルなどのバイナリデータまたは非バイナリデータである。WindowsNT(登録商標)およびWindows(登録商標)ファミリのそれ以外のすべてのO/Sでは、リソースはバイナリデータである。リソースデータは、アプリケーションの実行可能ファイル内に存在することができるため、実行可能ファイルはコードおよびリソースデータがその中にあるバイナリファイルである。コードによって定義されるプロセスは、専用のバイナリ実行ファイルまたはその他の実行ファイルでリソースを使用することができる。このようなプロセスによって使用されるリソースは、リソース専用ファイル、例えばリソース専用の動的リンクライブラリ(DLL)内に存在することもできる。リソースは、標準またはユーザ定義のどちらかであってよい。標準リソース内のデータは、アイコン、カーソル、メニュー、ダイアログボックス、ビットマップ、機能拡張メタファイル、フォント、アクセレレータテーブル、メッセージテーブルエントリ、文字列テーブルエントリ、またはバージョンを記述する。
【0003】
ユーザ定義リソースは、ある特定のアプリケーションによって必要とされる任意のデータを含む。オペレーティングシステムプロセスによって必要とされているリソースは、多様なさまざまなやり方で処理されてよい。これらのリソースの多くは、言語に特殊であるワード、記号、フォーマット化データ等を含む。通常、ある特定の言語は、ユーザによって選ばれるオペレーティングシステムインストールパッケージによって決定される。ソフトウェアの言語が英語である場合、英語に特殊なリソースだけがオペレーティングシステムとともにインストールされる。これは、すべての言語をカバーするためにハードディスク上にコピーされなければならないであろう大量の言語固有のリソースのために便利である。サポートするために、オペレーティングシステムに単一の言語を提供することも、それによって必要が生じた時に、メモリの中に、およびメモリの中からリソースを効率的にロードおよびアンロードすることができるため、便利である。すべてが常にメモリ内に常駐するにははるかに多すぎるリソースが存在する。これらのバイナリファイルが、リソースが不必要にメモリを占有しないようにリソースのロードおよびアンロードを管理するには、これらのバイナリファイルが、必要とされていない時にリソースが不必要にメモリを占有しないようにリソースのロードおよびアンロードを管理するために、このリソースおよびこのプロセスに特殊なこのリソースを必要とするプロセスを生成するこのコードが同じバイナリファイルに組み込まれてよい。プロセスが呼び出されると、このプロセスのためのこのコードを格納するバイナリファイルおよび添付リソースがメモリの中にロードされるか、あるいはそれ以外の場合、このプロセスによってアクセスできるようになってよい。このプロセスが終了すると、このリソースおよびこのようなファイルのコードセクションがメモリからアンロードされるか、あるいはそれ以外の場合アクセスできなくなる。これらのバイナリファイルは実行プログラム、動的リンクライブラリ(DLL)、デバイスドライバ等であってよい。それらにすべての代替言語リソースが詰め込まれる場合には、過剰な量のメモリが必要とされるであろう。
【0004】
1つのオペレーティングシステムがこのようなリソースを処理するという例は以下の通りである。第1に、オペレーティングシステムの機能であるリソースファインダが利用され、指定されたリソースの情報ブロックに対するハンドルを作成する。リソースを必要とするプロセスが、このファインダにリソースモジュールハンドルおよびこのリソース名、タイプおよび、オプションで言語IDを送信する。後者は、このリソースモジュールハンドルで定められているこのリソース内の言語固有のリソースを指定する。このファインダは、この指定されたリソースの情報ブロックに対するハンドルを戻し、このプロセスはメモリにリソースを入れるためにリソースローダを呼び出すことができる。このプロセスは、このリソースハンドルおよびこのリソースモジュールハンドルを、リソースをメモリの中に格納し、このリソースを含むこのメモリブロックに対するハンドルを戻すこのリソースローダに与える。このプロセスはこのリソースを使用できる。このオペレーティングシステムは、それをメモリの中にロードするこのプロセスがもはやそれを必要としなくなり、終了された後に、あるいは他の状況がそれを必要とする場合に、このメモリを解放するために他のデバイスを使用してよい。前記は、例のオペレーティングシステム内のリソースアクセスファシリティの1つのタイプにすぎない。それ以外の機構は、テキストメッセージを出力バッファ内に格納し、単一関数呼出しのリソースデータに対するハンドルをただちにロードして戻すことによる等の他の方法でリソースを使用できるようにする。これらの機構の共通機能とは、それらがメモリの中またはディスクファイルまたはそれ以外の記憶装置システムの中のどちらかでリソースを検出し、このリソースを、それを要求するプロセスが使用できるようにすることである。これは、ディスクからファイルをメモリの中にロードする、あるいはハンドルまたはそれ以外の何らかのデバイスを提供することによって、単にリソースにアクセスを提供することを伴ってよい。このリソースを格納するこのファイル(、デバイス、またはチャネル)は、この要求側プロセスまたは別のファイルを定めるコードと同じファイルの中にあってよい。このそれ以外のファイルはコードを格納するか、あるいはリソース専用ファイルである場合がある。プロセスは、それがもはや必要としないリソースを明示的にアンロードする必要がない場合がある。
【0005】
ディスク記憶装置のコストが低い場合、いくつかの例では、オペレーティングシステムの同じインストールが、ユーザにトランスペアレントに、多数の言語にとって適切なリソースを提供することが望ましい場合がある。これにより、多様な言語のユーザは、同じコンピュータを共用できるようになるであろう。ユーザは、ログオンし、所望の言語を選択し、このコンピュータを使用し、その後で選ばれた言語の中のすべてのリソースをベースにしたオペレーティングシステム機能を見るであろう。しかしながら、前記リソース管理体制の回りに構築されたオペレーティングシステムにとって、このオペレーティングシステムを修正し、選択可能な言語に対処するために使用できるオプションは、後述されるように極めて問題があると考えられる。
【0006】
多言語サポートを提供するためには、あるオプションは、言語ごとにバイナリファイルの異なるセットを提供することである可能性がある。複雑なオペレーティングシステムに、言語固有のリソースを格納する約数千のバイナリファイルがある可能性があり、多くの異なる言語をサポートすることが所望される可能性があることを考えると、インストールされるバイナリファイルの数は実際に大きくなるであろう。ユーザによる言語の選択に備えるために必要とされる労力に加え、ファイルの結果的に生じる質量の冗長性は、すべての言語に特殊ではないリソースが、サポートされている言語ごとに重複されるためにはなはだしいものとなるであろう。言語に特殊ではないリソースが重複を必要とするだけではなく、すべてのコードセクションも必要とするであろう。
【0007】
別のオプションは、異なる言語を必要とする新規ユーザがログオンするたびに、オペレーティングシステムバイナリファイルを新規にインストールすることである可能性がある。このオプションは、それがかなりの量の時間を要するため魅力的ではない。
【0008】
依然として別のオプションは、各バイナリファイルに異なった言語に固有のリソースを提供することである可能性がある。これは、各バイナリファイルが言語固有のリソースを追加するだけであるため、第1のオプションの冗長性を排除するであろう。しかしながら、このオプションは、各バイナリファイルの再コード化を必要とするであろうため、それはやはり精密で簡潔なオプションではない。これに類似したものが現在非常に限定的に実行されている。いくつかのバイナリファイルは、それぞれがユーザの言語または国に応じて好ましい代替リソースを格納する。これらのバイナリファイルのこのコードセクションは、リソースの好ましい言語に関する「推測」に基づいて異なったリソースをアドレス指定するプロセスを定義する。この「推測」は、例えば、日付フォーマットが選択されているシステムパラメータの設定値に基づいて行われる。したがって、例えば、ロシア様式の日付が選択されると、ロシア語としてタグが付けられたリソースがロードされる可能性がある。
【0009】
現在、限られた根拠に基づいた言語選択を実現する少なくとも1つの種類のオペレーティングシステムがある。このオペレーティングシステムは、それぞれの言語に別個のテキストファイルを提供する。プロセスがある特定の言語でのテキストファイルリソースを必要とすると、オペレーティングシステムは適切なファイルをアドレス指定する。ユーザは、システム変数を通して選択の自分のデフォルト言語を選択することができる。簡略に言及されるように、少なくとも1つのカレントオペレーティングシステム(Windows(登録商標))は、例えばテキストメッセージなどの言語固有のライブラリの作成に何らかのサポートを提供する。オペレーティングシステムインストールの現地(locale)(システムの現地とは言語の設定値ではないことに注意する。現地とは、言語と場所の混合である)を示すシステム変数が定義され、この変数は、特にカレント言語用のフォーマットメッセージをフォーマットするために、オペレーティングシステム上で実行しているアプリケーションによって使用することができる。しかしながら、これには、プロセス(アプリケーション)が適切な言語リソースおよびそれがどこに位置しているのかを正確に特定することが必要となる。変換のためのモデルとして、それは広範囲な再コード化を伴うであろう。
【0010】
従来の技術のオペレーティングシステム制度のどれも、非常に自動的にオペレーティングシステムによって多言語サポートを提供する方法を示唆するモデルを提供しない。また、誰も、同じファイル内にコードおよびリソースのセクションを持つバイナリファイルの固有の節約の工夫のいくつかを保存する手段を示唆していない。所望される機能性を提供するために前記に示唆された簡略な変換は、冗長なデータが必要とされるという点で不当に高価、および/またはかさばっていると考えられている。容易に実現できる変換は、従来の技術のシステムのどれかから著しく離れたシステムでなければならないであろう。
【0011】
図1を参照すると、従来の技術のオペレーティングシステムでの共通動作において、バイナリファイル20がロードされる。このバイナリファイル20は、コードセクション10およびリソースセクション30を含み、オペレーティングシステムの任意のファイルユニットまたはサードパーティによって供給されるものであってよい。例えば、このバイナリファイル20は、実行可能バイナリ、動的ライブラリ(DLL)またはデバイスドライバであろう。このリソースセクション30は、このコードセクションによって使用されるリソース、特にこのコードセクション10によって生成されるプロセスの要件に特定であり、このコードセクション10に定められているプロセスがもはや必要とされない時にメモリからアンロードされてよいそれらのリソースのいくつかを含んでよい。言い換えると、このリソース30とは、このコードセクション10で符号化されるプロセスによって必要とされることのあるリソースであり、いったんそれらのプロセスが終了されると、メモリ内のリソースセクション30に格納されているこのリソースを維持する必要性はなくなる。例えば、バイナリファイル10は、コアリソースまたは剥奪されたテキストエディタなどのオペレーティングシステムが供給されるアプリケーションであろう。例えば、エディタにとっては、ユーザがエディタプログラムを終了すると、このテキストエディタによって必要とされるリソースはもはや必要とされないであろう。コード10およびリソース30を含むバイナリファイル20は、メモリから削除されるであろう。言うまでもなく、このコードセクション10は、他のファイルからその他のリソースを使用し、その他のプロセスも使用することができる。
【0012】
図2を参照すると、リソース85およびそれを使用するコード55は、別個のそれぞれのファイル25と22に位置していてもよい。例えば、1個のコード50に定義されるアプリケーション55によってアドレス指定されるリソース85は、リソース専用DLLまたはコード70およびリソース60を含む別個のファイル25に含まれてよい。このアプリケーション55は、やはりリソース40を含むファイルに存在してよい。リソースタイプおよび名前でファイルを検索するために、別のオペレーティングシステムデバイスが使用されてよい。リソースの管理(ロードおよびアンロード)は、リソースローダによって処理されてよい。
【0013】
図3を参照すると、リソースは、リソースローダ130およびリソースファインダ135を使用してプロセス110によって指定されている。このリソースローダは、リソースモジュールハンドルおよびリソースハンドルを与えられるリソースデータ125へアクセスを提供するオペレーティングシステムファシリティである。リソース名で指定されるリソースデータがどこで検索できるのかを示すこのリソースモジュールハンドルは、このリソースファインダによって作成される。リソース名、タイプおよび言語(後者はオプション)が、メモリハンドルを返すリソースファインダ135に提供される。リソースが要求側プロセスを生成したモジュール以外のモジュール内にある場合には、そのモジュールのハンドルもこのリソースファインダに提供されなければならない。このリソースタイプは、例えば、ビットマップ、動画カーソル、フォントリソース、メニューリソース、文字列テーブルエントリ等を指定してよい。
【0014】
このリソースローダは、指定されたリソースをメモリの中にロードする。それは、リソースモジュールハンドルおよびリソースハンドルを必要とする。このリソースモジュールハンドルは、その実行可能ファイルにリソースが入っているこのリソースハンドルはロードされるリソースを識別する。このリソースローダ130は、このリソースに関連するデータを含むこのメモリブロックへのハンドルを返す。図3に示されている説明は、図1または図2に図示されている状況のどちらかと一貫性がある。前記機能の例が、Windows(登録商標)APIFindResourceおよびLoadResourceに関係するマイクロソフト社のウエブページ等において定められていることに注意する。また、リソースが前述されたようにリソースに対する呼出しの一部だけではなく従来の動作においてもロードされてよいことにも注意する。例えば、Windows(登録商標)オペレーティングシステムでは、LoadLibraryに対する呼出しは、モジュールのメモリ内へのロードを生じさせるであろう。
【0015】
図4を参照すると、リソースがオペレーティングシステム内でどのようにアドレス指定されてよいのかに関する一般化された概略が図示されている。リソースハンドラ230は、リソースデータ220へのアクセスを得るためにプロセス210によって使用される。このリソースハンドラ230は、例えば、図3に関して前述されたように、オペレーティングシステムによって提供される複数の異なるデバイスから成り立ってよい。このプロセスは、このハンドラ230に対して要求されたリソースを特定し、このハンドラに、ファイル名、モジュール250の識別子、または他の何らかの情報などのこのリソースがどこで検出できるのか教えることができる。このリソースハンドラ230は、おそらくモジュール250の中に含まれているリソース220を、メモリあるいはデータをアクセス可能にし240、プロセス210へのアクセスを提供するためのそれ以外の何らかの手段の中にロードする必要がある場合がある。該プロセス210には、リソース220にアクセスするためにハンドル、アドレス、ポインタ等が与えられる。図4によって記述されるプロセスの重要な特徴とは、プロセスが必要とされるリソースを特定し、オペレーティングシステムがプロセスにそのリソースに対するアクセスを提供することである。このリソースは、通信ポート、あるいはコンピュータ上のプロセスにデータを転送するための任意のそれ以外の機構を通して提供される、ネットワークによって接続される別のコンピュータ上のディスクに存在してよい。オペレーティングシステムは、要求の一部として、さまざまな媒体、例えば、ディスクからメモリへ、プロセスによるリソースへのアクセスが可能になる前にリソースを転送してよい。
【発明の概要】
【0016】
オペレーティングシステム方式は、リソースを要求するプロセスからあらゆる特定の命令を必要としないで、複数言語リソースを処理するための機能を提供するリソースハンドリング構成要素を提供する。これにより、オペレーティングシステムは、これらの要素を修正しなくても、既存のリソースおよび実行可能バイナリファイルを使用しながら多言語サポートを提供できるようになる。すなわち、ユーザは、ユーザインタフェース用の言語を選択できるようになり、リソースローダは、リソースに対する要求を自動的に適切なリソースにリダイレクトするであろう。
【0017】
以下の説明を通して、データをメモリにロードするという概念は、実際にデータをファイルから取り、それをメモリの中に入れるとして文字通り解釈されることは意図されていない。本発明によって熟慮されるオペレーティングシステムのコンテキストでは、データを物理メモリの中に実際にロードすることが、低レベルのオペレーティングシステム機能によって実行される。各プロセスは、実際の物理メモリと一致しない仮想メモリ空間を有してよい。以下の説明の中で、データをメモリの中からロードしたり、アンロードするというステップが語られる時、それはデータにプロセスがアクセスできるようにする任意のオペレーティングシステム機能として幅広く解釈されることが意図されている。
【0018】
リソースを要求するプロセスという観点から、オペレーティングシステムデバイスとの対話は単一言語のリソースを処理するためと同じである。リソースを見つけ、それらを要求側プロセスに戻すためのオペレーティングシステムリソース処理構成要素は、代替言語リソースモジュールへのパス(path)を動的に生成するために修正される。このパスのこの生成は、リソース識別子およびリソースを要求しているプロセスによって提供されるオプションのモジュールハンドルに応えて、およびユーザインタフェース用に選ばれた言語を指定するシステム全体で動作するユーザ設定に応えてでもあってよい。代替言語リソースへのこのパスは、あるのであれば、プロセスによって供給されるモジュールハンドルの代わりに使用される。
【0019】
このモジュールハンドルを動的に生成することにより、このオペレーティングシステムは、基本モジュールハンドル(呼出し側プロセスによって使用されるハンドル)と代替言語リソースモジュールを相互に関連付けるために任意の恒久的なファシリティに修正を加えなくても拡張されてよい。ルックアップテーブルが動的に生成されるため、それはステップを節約する目的で自動的に作成され、決して時代遅れではない。新しいモジュールがオペレーティングシステムに追加されると、代替言語モジュールを追加し、アルゴリズムを使用し、中央付帯演算を行わずに代替モジュールハンドルを生成することができる。新しいモジュール名と既存のモジュール名の間に不調和がない限り、このモジュールおよびそれを使用している任意のコード、あるいはコードおよびリソースを格納している任意のバイナリファイルが、あらゆる集中化された変更を加えないでオペレーティングシステムに追加されてよい。システムは、必要に応じて、およびユーザおよびリソースを要求するプロセスにはトランスペアレントに、代替言語モジュールを自動的にロード、解放し、処理する。代替言語リソースはモジュール(好ましいインプリメンテーションにおいて、Windows(登録商標)用語で定められるように、動的リンクライブラリつまりDLL)内に存在し、それぞれが、パスおよびモジュール名によって以下のように一意に指定されている。
【0020】
<module_path>\mui\<language_ID>\<module_name>
言い換えると、オペレーティングシステムは、元のモジュールのロードパスの言語固有のサブディレクトリから代替言語リソースモジュールをロードする。パスおよびモジュール名は、要求側プロセスによって供給されている元のモジュール名と同じ名前を使用して動的に生成される。要素<language_ID>は、言語を表すコンパクトコードであってよい。例えば、それはISO639言語規格省略語に、おそらく復言語指定子つまり一次構成要素および二次構成要素を含むWin32言語idを追加したものに基づくであろう。
【0021】
代替言語は、変化する特異性の度合いに伴い要求されてよい。すなわち、ある人は特異性のあるレベルで(フランスの)フランス語、スイスのフランス語またはカナダのフランス語を要求するか、特異性の低い方のレベルでフランス語だけを要求してよい。堅牢であるために、代替言語リソースモジュールハンドルを生成するプロセスの場合、アルゴリズムは、それが、ユーザインタフェース言語に対するシステムレベルの要求を、ある特異性の度合い、および別の度合いの特性が与えられている代替言語リソースの可用性と調整が付くようにすることができるために複数のステップを含んでよい。例えば、ユーザがオペレーティングシステムにログした時にスイスのフランス語を要求すると仮定する。これは、準拠することができるすべてのプロセスに対し、そのスイスのフランス語のリソースが使用されることを命令するユーザ変数を指定する。代替言語リソースを生成するリソースローダ(つまりライブラリローダ)アルゴリズムは、要求された言語に対する近似だけが使用できる状況に対処することができなければならない。前記例において、特にスイスのフランス語だけではなく、フランス語および多様なそれ以外の一次代替言語だけが使用できると仮定する。アルゴリズムが、システムユーザ言語IDに示されているシステムレベル命令に近くない何らかのそれ以外のデフォルトの選択を行うよりむしろ、要求時にフランス語代替言語リソースをロードすることが望ましい。このようにして、例えば、以下のように、複数のレベルの近似がアルゴリズムに対して定められてよい。
【0022】
第1に、このアルゴリズムは、「<module_path>\」によって指定されるモジュールパス内に、カレントユーザ言語IDに同等な識別子が付いた、つまり名前「\mui\<language_ID>\」が付いたサブディレクトリが存在しているかどうかを判断してよい。この第1試験が不合格となると、このアルゴリズムは、カレントユーザ言語IDに一致する一次言語IDに同等な識別子が付いた、つまり名前「\mui\<primary_language_ID>\」が付いた「<module_path>\」のサブディレクトリが存在するかどうかを判断してよい。システムユーザ言語IDが指定されない場合、このアルゴリズムはサブディレクトリを解決するために代用物(surrogate)、例えば、日付または通貨フォーマット規約に関する好みのようなユーザの場所(locality)を示唆する何らかの好みを使用することができる。代わりに、言語中立代替リソースモジュールが呼び出されてよい。所望の優先順位で設けられてよいそれ以外のステップは、デフォルト代替言語リソースサブディレクトリ、ユーザ言語IDによって指定されている言語が使用できないが、ありそうな現場で話されている公正な代替言語が使用できる代替言語の選択であろう。例えば、カナダのフランス語がユーザ言語IDで要求され、カナダのフランス語もフランス語も使用できないがカナダの英語が使用できる場合には、後者が使用されるであろう。好ましい代替リソースを優先システムに従って識別する前記プロセスによって、代替言語リソースの特異性を高めることができる。オペレーティングシステムに一次言語(例えば、英語であるが、英国英語、カナダ英語等ではない)だけが添付されている場合には、ユーザは、後にさらに多くの特定の言語を追加し、ユーザの選択はトランスペアレントかつ自動的に実現されてよい。
【0023】
処理を加速するために、各代替モジュールパスを動的に生成することによって得られるマッピングがルックアップテーブルに保存される。要求側プロセスが同じリソースを呼び出すと、この代替リソースモジュールが、パスおよびハンドルを動的に生成する代わりに、このルックアップテーブルから得られてよい。代替リソースモジュールIDの動的生成の結果を保存することによって、前述された堅牢なアルゴリズムのステップは、リソースに対する要求がなされるたびに反復される必要がない。
【0024】
加えて、クリーンアップテーブルが生成され、修正されたリソースローダが、システム要件が許すようにメモリをロードし、解放するのを助ける。このクリーンアップテーブルは、ロード済みの代替リソースモジュールおよびそれらを要求したプロセスを一覧表示する。例えば、リソースを要求しているプロセスが終了されると、この終了したプロセスによって要求されていたリソースモジュールはメモリからアンロードされてよい。
【0025】
オペレーティングシステムが、ローダデータテーブル内でエントリを生成することによってロードおよびアンロードされるリソースを追跡調査することに注意する。このローダデータテーブルは、このプロセスが終了した時、またはそれ以外のシステム要件が示す時、これらのモジュールをアンロードできるように、リソースモジュールのロードを必要としたプロセスを示す。例えば、WindowsNT(登録商標)内でLoadLibraryEx機能を直接的に使用することによってロードされるモジュールの場合、このモジュールのアイデンティティは、前述されたリソースローダには「既知」でない場合がある。すなわち、ローダデータテーブルエントリは生成されない。この場合、リソースモジュール(例えば、LoadLibrary)をロードするファシリティは、代替言語リソースの存在に関して照会し、アプリケーションによって要求されたモジュールの代わりにそれをロードしてよい。アプリケーションまたはプロセスが、実際にローダデータテーブルエントリを生成するオペレーティングシステムファシリティを実際に使用する場合は、このモジュールは、アプリケーションまたはその他のプロセスによってリソースローダからリソースに対する要求がなされるまで、モジュールがロードされる必要はないであろう。
【0026】
実施態様によると、本発明は、オペレーティングシステムによって実行される方法である。方法は、第1バイナリファイル内に存在する第1データに対する要求側プロセスによる要求をリダイレクトする。次に示すステップが実行される。つまり、(1)言語識別子および第1データまたは第1バイナリファイルのどちらかの識別子にも一致する第2バイナリファイルが存在する時に、オペレーティングユーザ設定内にこの要求側プロセスとは無関係に、言語識別子を記憶するステップと、(2)第1バイナリファイルを識別するプロセスモジュール識別子と、第2バイナリファイルを識別する代替モジュール識別子とを相互に関連付けるルックアップテーブルの中にパスを記憶するステップと、(3)第2バイナリファイル内の代替データを、第1データの代わりにこの要求側プロセスがアクセスできるようにするステップのことである。
【0027】
別の実施態様によると、本発明は、オペレーティングシステムにより実行される方法でもある。方法は、この要求側プロセスを定義する実行可能コードとリソースデータの両方を格納する第1バイナリファイル内に存在する第1リソースデータに対する要求側プロセスによる要求をリダイレクトする。この要求側プロセスは、コード内で定義されている。この方法は、以下のステップを有する。つまり、言語識別子に、および変数の中に、この要求側プロセスとは無関係に言語識別子を記憶するステップと、第1リソースデータまたは第1バイナリファイルのどちらかにも一致する第2バイナリファイルが存在する時に、(1)言語識別子および第1リソースデータまたは第1バイナリファイルのどちらかに応じて第2バイナリファイルへのパスを動的に生成するステップと、(2)第1リソースデータの代わりに、第2バイナリファイル内の代替リソースデータにこの要求側プロセスがアクセスできるようにするステップである。
【0028】
さらに別の実施態様によると、本発明は、実行可能バイナリファイル内の第1リソースデータをアドレス指定するために、多言語機能をオペレーティングシステムに追加する方法である。方法は、以下のステップを含む。つまり、選択された言語識別子を記憶するために選択可能なユーザ設定値を追加するステップと、それぞれが第1リソースデータのそれぞれ1つに対応するリソースデータを格納する少なくとも1つの代替言語リソースファイルを追加するステップと、選択された言語識別子内に記憶される選択された言語に応えて、代替言語リソースデータのそれぞれ1つへ、第1リソースデータのそれぞれに対する要求をリダイレクトするために、コンピュータが、前記オペレーティングシステムに含まれるプロセスを修正するステップである。
【0029】
実施態様によると、本発明は、オペレーティングシステムによって実行される方法である。方法は、第1データに対する要求側プロセスによる要求に応じてデータをアドレス指定する。方法は、以下のステップを有する。つまり、第1データに対応する代替言語ファイルの存在を判断するステップと、判断するステップの結果が、代替言語ファイルが存在することを示す時に、この呼出しプロセスに代替言語ファイルから少なくとも1つのデータを戻すステップと、判断するステップの結果が、代替言語ファイルが存在しないことを示す時に、この呼出しプロセスに第1データを戻すステップである。
【0030】
実施態様によると、本発明は、オペレーティングシステムによって実行される方法である。方法は、第1バイナリファイル内に存在する第1データに対する要求側プロセスによる要求をリダイレクトする。次に示すステップが実行される。つまり、オペレーティングシステム変数の中に、ユーザごとのこの要求側プロセスとは無関係に、言語識別子を記憶するステップと、言語識別子に対応する第2バイナリファイルの検出に応えて、および第1データまたは第1バイナリファイルのどちらかの識別子にも応えて(1)言語識別子および第1データまたは第1バイナリファイルのどちらかに応えて第2バイナリファイルへのパスを動的に生成するステップと、(2)第1バイナリファイルを識別するプロセスモジュール識別子と第2バイナリファイルを識別する代替モジュール識別子を相互関連するルックアップテーブルの中にパスを記憶するステップと、(3)第1データの代わりに、第2バイナリファイル内の代替データにこの要求側プロセスがアクセスできるようにするステップである。
【図面の簡単な説明】
【0031】
【図1】同じバイナリファイルのリソースセクション内のリソースを要求するプロセスを定義するコードセクションを含むバイナリファイルの概略図である。
【図2】その内の一方が、コードを格納し、リソースを格納しても、格納しなくてもよく、その内の他方がリソースを格納し、コードを格納しても、格納しなくてもよい2つのバイナリファイルの、第1ファイルのコードが、第2ファイル内のリソースを要求するプロセスを定義する概略図である。
【図3】従来の技術の1つの実施態様に従ったリソースを検索するためにプロセスによって使用されているリソースローダおよびリソースファインダの概略図である。
【図4】コンピュータ上のプロセスによってリソースを検索するプロセスの一般化した説明の中のリソースハンドラの概略図である。
【図5】図3に図示されている従来のプロセスの修正の中のオペレーティングシステムを通して、リソースデータを呼び出すプロセスの概略図である。
【発明を実施するための形態】
【0032】
図5を参照すると、図3に図示されている従来の技術によるプロセスの修正において、オペレーティングシステムを通してリソースデータを要求するプロセスが図示されている。図3に関して説明されているリソースローダ130およびリソースファインダ135内のプロセスが、図5に示されているようなプロセスを作成するために修正される。すべてを包含する用語では、図5のプロセスが、プロセスがプロセス用のデフォルトのリソースの代わりに、選択されたユーザインタフェース言語に対応するリソースを受け取るように、ある特定のリソースに対する要求を代替言語リソースにリダイレクトする。実施態様においては、代替リソースのロードは、プロセスが、それがロードを希望する言語を指定しなかった場合に「動き出す」だけである。言い換えると、プロセスは、リソースをロードしようとし、どの言語かについては実際には気にしていない。従来のシステムにおいては、リソースローダは、モジュール自体のリソースセクション、またはプロセスがその中からリソースをロードするように指定される外部モジュールのどちらかからリソースを戻すであろう。多言語ユーザインタフェースシステムの現在の実施態様においては、リソースローダは、プロセスがある特定の言語またはリソースに対するそれ以外の特定の分類を指定しなかった場合には、代替リソースをロードするであろう。このプロセスは、まさに図3の従来の技術の実施態様でのように、リソースファインダ320からメモリハンドルを要求する。しかしながら、この場合、このハンドルは代替言語リソースを参照するハンドルである。リソースファインダは、選択されたユーザインタフェース言語ID335によって示されるリソースを識別しようとする。
【0033】
選択されたユーザインタフェース言語ID335は、ユーザ設定値である。この選択されたユーザインタフェース言語ID335は、例えば、ユーザがログインし、オプションのリストから任意の言語を選択することによって確立できるであろう。それから、このユーザインタフェース言語ID335は、変更されるまで記憶されている。
【0034】
プロセス310は、リソースファインダ320にリソース名およびタイプを送信することによってリソースのメモリハンドルを要求する。リソースが、この要求側プロセス310を定義するモジュール以外のモジュールの中にあると、リソースモジュールハンドルもリソースファインダ320に送信されるであろう。モジュールハンドルが送信されない場合、このモジュールはこのリソースを要求するプロセスを生成するモジュールと同じであるため、リソースファインダはすでにローダデータテーブルからモジュールハンドルに対するアクセスを得ている(背景の項に説明されたように、リソースファインダおよびリソースローダは、多くの場合、要求側プロセスを生成するコードと同じバイナリファイル内のリソースにアクセスするために使用される)。プロセスが、言語に特殊であるリソースを要求することも可能であり、このような要求を満たすプロセスは、本発明に関する、および従来の技術による方法によって満たされるステップの外にあってよい(例えば、http://www.microsoft.com/msdn/に説明されているLoadResourceの説明の例を参照すること)。後者の場合、言語IDはリソースファインダに渡されてよい。
【0035】
オペレーティングシステムは、過去にリソースファインダ320に対する呼出しによって生成された、代替リソースモジュールハンドルのテーブル323を維持するために修正される。したがって、別のプロセスがすでに同じモジュールからリソースを要求しており、モジュールがすでに代替リソースモジュールに相互に関連付けられている場合には、この代替モジュールハンドルは代替リソースモジュールテーブル323から迅速に入手できる。このリソースに対しエントリがない場合には、オペレーティングシステムは代替モジュールパスを動的に生成する。
【0036】
代替モジュールパスを動的に生成するために、アルゴリズム325が利用される。このアルゴリズム325は、リソースファイルの何らかの仮定された編成に基づいてよく、代替言語リソースファイルが指定されたリソースに存在するかどうかを示す。本実施態様においては、この代替言語リソースファイルは、要求されたモジュールのパスのサブディレクトリ内に位置し、それぞれが言語識別子に一意に相互関連付けられているファイル名で区別される。各言語のサブディレクトリ内には、それぞれが元のモジュールの名前を取って名前が指定された代替言語リソースファイルが記憶される。
【0037】
<module_path>\mui\<language_ID>\<module_name>
言い換えると、オペレーティングシステムは、元のモジュールのロードパスの言語固有のサブディレクトリから代替言語リソースモジュールをロードする。この元のモジュールが、多言語イネーブルされていなかったシステムの場合に「<path1>\<filename 1>」であった場合、代替言語モジュールに対するパスは、選択されたユーザインタフェース言語ID335で示されるが「言語ID1」であると仮定すると「<path1>\mui\<language ID1>\<filename1>」であろう。
【0038】
代替言語リソースの編成は、多様な代替方法で実行できる。それらを、それぞれが通例のモジュール(通常、単一言語オペレーティングシステムで要求されるもの)に対応する言語固有のモジュールに分けると、それぞれのリソースモジュールごとに多様な言語のリソース単一モジュールに結合される場合に発生するように、追加メモリに対するニーズが
回避される。
【0039】
モジュールを記憶するために使用されるパス構造を考えると、選択されたユーザインタフェース言語ID335および元の要求されたパスとモジュールによって示される言語に対応する代替言語モジュール用のパスを構築することは容易である。このパスは、リソースハンドルを提供するためにリソースファインダ320によって使用される。リソースハンドルの作成は、従来の技術と同じように実行される。相違点は、この例のリソースハンドルがプロセスを、元のモジュールパスのサブディレクトリ内で識別されたリソースデータ350に向けるという点である。図5では、リソースデータ350は、選択されたユーザインタフェース言語IDが言語ID2であった「バイナリファイル2」用の代替リソースモジュール内にあった。
【0040】
パスおよびモジュール名は、呼出し側プロセスによって供給される元のモジュール名と同じ名前を使用して動的に生成される。要素<language_ID>は、言語を表すコンパクトコードであってよい。例えば、それは、ISO639言語標準省力に副言語記述子または一次構成要素と二次構成要素を加えたものを含むWin32言語idに基づくことができるであろう。
【0041】
本発明の好ましい実施態様においては、アルゴリズムは、それが、要求されたデータに対する代替言語リソースが存在すると仮定して、単にパスを構築する以上のことを行うという点で堅牢である。代替言語は、多様な特性の度合いで要求されてよい。また、代替言語リソースが使用可能ではない、あるいは代替リソースが使用可能であると考えられ、このリソースは言語以外の何らかの点と基本リソースと異なっている。このアルゴリズムおよび対応するプロセスは、図5に描かれている率直なシナリオだけではなくこれらの状況に対処し、利用するにも十分堅牢である。
【0042】
選択されたユーザインタフェース言語は非常に特殊である。例えば、ユーザはフランス語、スイスのフランス語またはカナダのフランス語を要求することがある。このアルゴリズムは、それがユーザインタフェース言語に対するシステムレベル要求をある特異性の度合い、および別の特異性の度合いが与えられる代替言語リソースの可用性と調整をつけることができるようにするための複数のステップを含んでよい。ユーザが、オペレーティングシステムにログインした時にフランスのフランス語を要求すると、要求された言語に対する近似だけが使用可能となってよい。このような状況と対処するため、このアルゴリズムおよび関連するプロセスは、以下のように、ステップの内蔵された階層に従って動作してよい。
【0043】
第1に、このアルゴリズムは、「<module_path>\mui\」によって指定されるモジュールパスの中に、カレントユーザ言語IDに同等な識別子が付いた、つまり名前「\<language_ID>\」が付いたサブディレクトリが存在するかどうかを判断してよい。この第1試験が不合格となると、このアルゴリズムは、カレントユーザ言語IDに対応する一次言語IDに同等な識別子の付いた、つまり名前「\primary_language_ID\」が付いた「<module_path>\mui\」のサブディレクトリが存在するかどうかを判断してよい。システムユーザ言語IDが指定されない場合、このアルゴリズムはサブディレクトリを解決するために代用物、例えば日付または通貨フォーマット規約に関する好みなどのユーザの場所を示唆する何らかの好みを使用することができてよい。代わりに、言語に中立な代替リソースモジュールが呼び出されてよい。所望の優先順位で設けられてよいそれ以外のステップは、例えばカナダのフランス語がユーザ言語IDで要求され、英語が使用できる場合など、デフォルトの代替言語リソースサブディレクトリ、ユーザ言語IDによって指定された言語が使用できないが、所定の代替言語が多くの場合、考えられる現地で話される代替言語の選択であろう。好ましい代替リソースを優先順位システムに従って識別する前記プロセスによって、代替言語リソースの特異性を高めることができる。オペレーティングシステムに一次言語(例えば、英語であるが、英国英語、カナダ英語等ではない)だけが添付される場合、ユーザは、後に、さらに多くの特定の言語を追加し、ユーザの選択はトランスペアレントかつ自動的に実現されてよい。
【0044】
前記機能性が、Windows(登録商標)のFindResourceEx機能で行われるある特定の言語のリソースに対する通常の要求と干渉しないことに注意する。指定された言語IDは要求側プロセスによって提供され、前記代替言語リソース方式は要求を別のリソースモジュールに再送しないであろう。
【0045】
パスを形成するアルゴリズム325がリソースパスを決定した後、バージョンチェックおよびそれ以外のあらゆる完全性チェックは、それに要求側プロセスがアクセスできるようにする前に実行することができる。図5に関して説明されるプロセスの結果として代替言語モジュール370がメモリ内に新規に格納された、あるいはそれ以外の場合、リソースファインダ320への呼出しによってアクセスできるようになった場合、新しいエントリが代替リソースモジュールテーブル323の中に入れられてよい。最後に、ハンドルは、このプロセスが要求されたリソースにアクセスできるようにするために要求側プロセスに戻されてよい。後者は、データをメモリの中にロードし、プロセスがデータにアクセスするために使用できるハンドルを提供するために、別の機能に対するステップ、リソースローダ330を必要とすることがある。
【0046】
図5および付随する説明が、モジュールがメモリの中にロードされ、これがリソースファインダまたはリソースロードによっても明示的に実行される必要がないことに注意する。唯一の要件は、適切なデータをプロセスが使用できることである。オペレーティングシステムは、そのI/Oファシリティおよびメモリ管理ファシリティを通したデータの実際の移動を処理してよい。図5に関して前述されたことの重要性とは、その内容がさまざまな言語に関して異なるリソースに対するプロセスによる要求が、要求側プロセスにトランスペアレントに自動的にリダイレクトさせられるという点である。プロセスを定義するコードは、オペレーティングシステムが多言語イネーブルされるために修正される必要はない。図5および添付説明は、実行可能コードも格納するバイナリファイル内に組み込まれるリソースというコンテキストでデータに対する要求をリダイレクトするプロセスを説明する。同じ基本的な公式は、リソース専用ファイル、例えばDLL内でデータのアクセスを包含するように拡張することができる。
【0047】
プロセスがメモリの中にロードされるまたはメモリからアンロードされるデータを要求する前記説明においては、このようなステップは、プロセスのアドレス空間の中にマッピングされるという広義の形で考えられる必要がある。その理由として、マッピングされたI/Oのためのオペレーティングシステムファシリティが、ディスクからメモリの中にデータをロードすることに関連する具体的な概念にすっきり当てはまるものではないことが挙げられる。言い換えると、具体的なステップはオペレーティングシステムのI/Oシステムおよび仮想メモリ管理機能によってトランスペアレントに処理できるため、現行のオペレーティングシステムでは、必ずしもデータをメモリの中にロードするという明示的なステップに関連しなくても、プロセスが、ステップに従ってディスク上のデータにアクセスできるようにすることができるものである。
【0048】
前記プロセスは、代替リソースモジュールを単一データファイルとしてこの要求側プロセスのアドレス空間の中にマッピングしてよい。このプロセスの基礎となる詳細は従来の技術で既知であり、例えばWindows(登録商標)においては、これはLoadLibraryと呼ばれるオペレーティングシステム機能を定義するコードによって実行される。

【特許請求の範囲】
【請求項1】
オペレーティングシステムにおいて、第1バイナリファイルに格納された第1データに対する要求側プロセスによる要求に応えて、データをアドレス指定する方法であって、
前記第1データに対応する代替言語ファイルの存在を判断するステップと、
前記判断するステップの結果が、前記代替言語ファイルが存在することを示す時に、言語識別子及び前記第1データに基づき前記代替言語ファイルへのパスを動的に生成するとともに、前記第1バイナリファイルからではなく前記代替言語ファイルから前記要求側プロセスに少なくとも1つのデータを戻すステップと、
前記判断するステップの結果が、前記代替言語ファイルが存在しないことを示す時に、前記要求側プロセスに前記第1データを戻すステップと、
を含む方法。
【請求項2】
請求項1記載の方法において、前記代替言語ファイルは、前記オペレーティングシステムによりテーブル内に維持される、方法。
【請求項3】
請求項1に記載の方法において、前記パスは、言語固有のサブディレクトリを含む、方法。
【請求項4】
請求項1に記載の方法において、前記第1リソースデータは、アイコン、カーソル、メニュー、ダイアログボックス、ビットマップ、機能拡張済みメタファイル、フォント、アクセレレータテーブル、メッセージテーブルエントリ、文字列テーブルエントリ、または、バージョンを定義するデータの1つである、方法。
【請求項5】
コンピュータオペレーティングシステムにおいて、デフォルトバイナリファイルに格納されたデフォルトリソースに対する要求側プロセスによる要求を、代替バイナリファイルに格納された代替リソースに動的にリダイレクトする方法であって、
前記代替リソースを発見するステップであって、前記代替リソースは、事前に格納されたユーザインターフェース言語識別子、及び、前記デフォルトリソースまたは前記デフォルトバイナリファイルの一方の識別子の両者に対応するものである、ステップと、
前記ユーザインターフェース言語識別子、及び、前記デフォルトリソースまたは前記デフォルトバイナリファイルの一方、に基づいて、前記代替バイナリファイルへのパスを動的に生成するステップと、
前記デフォルトリソースを作成することなく、前記要求側プロセスにアクセス可能な前記代替リソースを作成することにより、前記デフォルトリソースに対する前記要求を前記代替リソースに動的にリダイレクトするステップと、
を含む方法。
【請求項6】
請求項5に記載の方法であって、更に、
前記動的に生成されたパスをルックアップテーブルに格納するステップであって、前記ルックアップテーブルは、記憶された動的に生成されたパスを作成するために、前記デフォルトリソースと前記代替リソースとを互いに関連付けるものである、ステップと、
前記記憶された動的に生成されたパスを使用して前記デフォルトリソースに対する後続の要求を前記代替リソースにリダイレクトするステップと、
を含む方法。
【請求項7】
請求項5に記載の方法において、前記代替リソースファイルは、前記デフォルトバイナリファイルが格納されるディレクトリのサブディレクトリに格納され、前記サブディレクトリは前記ユーザインターフェース言語識別子に対応する、方法。
【請求項8】
請求項5に記載の方法において、前記デフォルトリソースを作成することなく、前記要求側プロセスにアクセス可能な前記代替リソースを作成することにより、前記デフォルトリソースに対する前記要求を前記代替リソースに動的にリダイレクトするステップは、更に、前記代替リソースを前記要求側プロセスのアドレス空間の中にマッピングするステップを含む方法。
【請求項9】
請求項5に記載の方法において、前記デフォルトリソースを作成することなく、前記要求側プロセスにアクセス可能な前記代替リソースを作成することにより、前記デフォルトリソースに対する前記要求を前記代替リソースに動的にリダイレクトするステップは、更に、前記代替リソースにアクセスする際に前記要求側プロセスによる使用のために、前記代替リソースに対するハンドルを生成するステップを含む方法。
【請求項10】
請求項5に記載の方法において、前記デフォルトリソースは、アイコン、カーソル、メニュー、ダイアログボックス、ビットマップ、機能拡張済みメタファイル、フォント、アクセレレータテーブル、メッセージテーブルエントリ、文字列テーブルエントリ、または、バージョンを定義するデータの1つである、方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2012−226785(P2012−226785A)
【公開日】平成24年11月15日(2012.11.15)
【国際特許分類】
【出願番号】特願2012−182007(P2012−182007)
【出願日】平成24年8月21日(2012.8.21)
【分割の表示】特願2011−132860(P2011−132860)の分割
【原出願日】平成11年8月13日(1999.8.13)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】