.net dll の利用可能なリソース翻訳を取得する方法はありますか?
私たちのソフトウェアはいくつかの異なる言語に翻訳されています。ソフトウェアの言語を選択できるようにしたいと思いますが、翻訳された言語からのみ選択できるようにしたいと考えています。
.net dll の利用可能なリソース翻訳を取得する方法はありますか?
私たちのソフトウェアはいくつかの異なる言語に翻訳されています。ソフトウェアの言語を選択できるようにしたいと思いますが、翻訳された言語からのみ選択できるようにしたいと考えています。
同様の問題が発生したので、今後の参考のために。
私のソフトウェアの翻訳は、文化名にちなんで名付けられた独自のサブフォルダーの下にあるプログラム フォルダーにあります。コードはそれをすべて説明します:
private void SettingsForm_Load(object sender, EventArgs e)
{
// load default language to the list
languageList.Add(new Language("English", "en"));
string fileName = "myProgram.resources.dll";
// load other languages available in the folder
DirectoryInfo di = new DirectoryInfo(Application.StartupPath);
foreach (DirectoryInfo dir in di.GetDirectories())
{
if (File.Exists(dir.FullName + "\\" + fileName))
{
try
{
CultureInfo ci = new CultureInfo(dir.Name);
languageList.Add(new Language(ci.NativeName, ci.Name));
}
catch
{
// whatever happens just don't load the language and proceed ;)
continue;
}
}
}
}
例外処理のオーバーヘッドが発生しますが、ローカライズ ファイルとまったく同じ名前の偽のリソースを使用して、インストール ディレクトリにカスタム フォルダを作成するユーザーは何人でしょうか?? :P
ベース dll のカルチャを取得してから、すべてのサテライト dll を列挙できるようにする必要がありますか?
最初の部分は簡単です (アセンブリ レベルの属性を取得するだけです)。
後者の場合、クラス ResourceManager にヘルパーがないようです。つまり、プローブ メカニズムをエミュレートする必要があります (属性と .config ファイルで利用可能なすべてのオーバーライドを含む可能性があります)。
別の方法は、ビルドまたはインストール時にリストを作成することです (追加の言語を後で追加できる場合は、後者がうまく機能します)、.config ファイルのリストを作成します。