質問

サテライトアセンブリを使用して、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。
たぶん、この事実を使用して、フォルダー階層をスキャンして、そのメニューを動的に構築できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top