1

SharpDevelop で開発したローカライズされたアプリケーションに取り組んでいます。チュートリアルに基づいて、エラーが発生しました:

指定されたカルチャ (またはニュートラル カルチャ) に適したリソースがディスク上に見つかりませんでした。ベース名:

Project | を使用してリソース ファイルを作成しました。追加 | それぞれの新しい項目「空のリソース ファイル」(「アセンブリ リソース ファイル」が見つかりませんでした)。さらに、「ビルド アクション」を「EmbeddedResource」に設定しました。

プログラム内には、次のことを行うクラスがあります

// load the resource file once
resourceManager = ResourceManager.CreateFileBasedResourceManager(file, filePath, null);

// depending on user selection, I set the CultureInfo in the code behind the form, i.e.
Thread.CurrentThread.CurrentUICulture = locales[0];   // which contains "en"

// and that's the method of the same class used to lookup the values
public string getValue ( string key )
{
    return resourceManager.GetString(key);
}

SharpDevelop 3.0.0.3437 .NET バージョン 2.0.50727.3053

コメントを注意深く調べて長い間グーグルで調べた後でも、例や解決策を見つけることができませんでした。したがって、質問:

  • リソース ファイル自体にカルチャを追加するにはどうすればよいですか?
  • 例またはリンクを提供できますか?

どうもありがとう!

4

2 に答える 2

1

CreateFileBasedResourceManagerは、バイナリの.resourcesファイルのみを処理します(.resxファイルは処理しません)。

リソースをアセンブリに埋め込むのではなく、外部ファイルからリソースをロードする必要がある場合は、resgenコマンドラインユーティリティを実行して.resourcesファイルを生成する必要があります。したがって、まだ行っていない場合は、サポートされているカルチャごとに1つ生成してください。

それ以外の場合は問題ないようです。

ただし、リソースをアセンブリに埋め込む場合は、プロパティウィンドウで、[ビルドアクション]を[埋め込みリソース]に設定します。

すべてのダーティな作業を処理して生成される厳密に型指定されたクラスも必要な場合は、ベースファイルのみ(不変のもの)のカスタムツールをResXFileCodeGeneratorに設定するか、必要に応じてPublicResXFileCodeGeneratorに設定します(サテライトアセンブリの作成に適しています)。

そうすれば、ローカライズされたリソースを自分でロードする必要はありません。生成されたクラスは、これらすべてを自動的に実行します。

リソース内のキーごとに、生成されたクラスで静的プロパティが生成されます。このプロパティを呼び出すだけで、非常にクリーンで、はるかに簡単な方法です。

.resourcesファイルからリソースをロードする特別な理由がない限り、私は常にそれらを(an)アセンブリに埋め込むことをお勧めします。

于 2008-11-20T17:39:09.463 に答える
0

使用している .NET のバージョンはわかりませんが、ランタイムがアセンブリを検索する方法に関するこの MSDN の記事が役立つ場合があります。

于 2008-11-20T16:46:17.777 に答える