サテライト アセンブリを使用して、C# アプリケーションのすべてのローカリゼーション リソースを保持しています。
私がしなければならないことは、アプリケーションに存在するすべての利用可能な言語で GUI にメニューを作成することです。情報を動的に取得する方法はありますか?
サテライト アセンブリを使用して、C# アプリケーションのすべてのローカリゼーション リソースを保持しています。
私がしなければならないことは、アプリケーションに存在するすべての利用可能な言語で GUI にメニューを作成することです。情報を動的に取得する方法はありますか?
この関数は、App_GlobalResources フォルダーにインストールされているすべてのカルチャの配列を返します。必要に応じて検索パスを変更してください。インバリアント カルチャの場合、"auto" が返されます。
public static string[] GetInstalledCultures()
{
List<string> cultures = new List<string>();
foreach (string file in Directory.GetFiles(HttpContext.Current.Server.MapPath("/App_GlobalResources"), \\Change folder to search in if needed.
"*.resx", SearchOption.TopDirectoryOnly))
{
string name = file.Split('\\').Last();
name = name.Split('.')[1];
cultures.Add(name != "resx" ? name : "auto"); \\Change "auto" to something else like "en-US" if needed.
}
return cultures.ToArray();
}
これを使用して、完全な CultureInfo インスタンスを取得する機能を追加することもできます。
public static CultureInfo[] GetInstalledCultures()
{
List<CultureInfo> cultures = new List<CultureInfo>();
foreach (string file in Directory.GetFiles(HttpContext.Current.Server.MapPath("/App_GlobalResources"), "*.resx", SearchOption.TopDirectoryOnly))
{
string name = file.Split('\\').Last();
name = name.Split('.')[1];
string culture = name != "resx" ? name : "en-US";
cultures.Add(new CultureInfo(culture));
}
return cultures.ToArray();
}
特定の言語の各衛星アセンブリには同じ名前が付けられていますが、frやfr-CAなどの特定の文化にちなんで名付けられたサブフォルダーにあります。
たぶん、この事実を利用して、フォルダ階層をスキャンして、そのメニューを動的に構築することができます。