Holen Sie sich alle unterstützten Kulturen von Satellitenassemblies
-
03-07-2019 - |
Frage
Ich bin mit einer Satelliten-Baugruppe all Lokalisierungsressourcen in einer C # -Anwendung zu halten.
Was muss ich tun, ist ein Menü in der GUI mit allen verfügbaren Sprachen erstellen, die für die Anwendung vorhanden ist. Gibt es eine Möglichkeit, Informationen dynamisch zu bekommen?
Lösung
Diese Funktion gibt einen Array aller installierten Kulturen im Ordner App_GlobalResources - Suchpfad nach Ihren Bedürfnissen. Für die invariante Kultur gibt es „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();
}
Sie können auch diesen für mehr Funktionalität verwenden, um die vollen Instanzen bekommen Culture:
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();
}
Andere Tipps
Jeder Satellit Baugruppe für eine bestimmte Sprache ist, die benannt werden, sondern befindet sich in einem Unterordner nach der spezifischen Kultur namens z.B. fr oder fr-CA.
Vielleicht können Sie diese Tatsache nutzen und die Ordnerhierarchie scannen dynamisch dieses Menü aufzubauen.