国際化?

国内にさえ知られていないというのに、国際化を目指してもいいかと思いました。なんじゃそれ。
かなりやっかいなことになっていたのですが、なんとかうまくいったようなかんじになりました。しかし、何がうまくいって、何がいけなかったのか、まったく分かりません。
まず、ライブラリを作るプロジェクトを立ち上げ、Message.ja.resex および Message.en.resex を作成。これをコンパイル。この際、3つのDLLが生成されます。まずは、プリフィクスがアセンブリ名であるDLL(以後「プロジェクトDLL」とします)。それから、リソースの言語ごとにフォルダが掘られ、ひとつずつDLLが生成され、そのファイル名は、アセンブリ名 + "resources" となっています(このファイルを以後「リソースDLL」とします)。このリソースDLLがサテライトアセンブリ(だと思います)。
今回は全部で3つのDLLが生成されましたが、リソースDLLは言語ごとに作成されるので、生成されるDLL数は3つとは限りません。
アプリケーションプロジェクトを作成して、ライブラリを参照させます。この際、ライブラリプロジェクトの参照または、プロジェクトDLL(リソースDLLでなく)をひとつ参照します。これで、プロジェクトDLLとリソースDLL両方がインポートされ、リソースDLLについては、フォルダも掘ってくれます。
アプリケーションからは、Assembly,GetExecutingAssembly() で、Assemblyオブジェクトを取ってきて、
ResourceManagerオブジェクトを生成します。この際、第1引数(baseName)は、"「プロジェクトDLLのルート名前空間」.リソース名" となります。たとえば、プロジェクトDLLのルート名前空間を "foobar"、リソース名を "Message" とした場合、"foobar.Message" となります。
ちなみに、リソースファイル名が "Message.ja.resex" になっている通り、ファイル名と密接に関係している(と思います)。
一部、予断を元に書いています。