我正在使用附属程序集来保存C#应用程序中的所有本地化资源。
我需要做的是在GUI中创建一个菜单,其中包含应用程序所存在的所有可用语言。有没有办法动态获取信息?
答案 0 :(得分:2)
此函数返回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();
}
答案 1 :(得分:1)
特定语言的每个附属程序集都命名相同,但位于以特定文化命名的子文件夹中,例如fr或fr-CA。
也许您可以使用此事实并扫描文件夹层次结构以动态构建该菜单。