5

我正在使用附属程序集来保存 C# 应用程序中的所有本地化资源。

我需要做的是在 GUI 中创建一个菜单,其中包含应用程序存在的所有可用语言。有没有办法动态获取信息?

4

2 回答 2

2

此函数返回 App_GlobalResources 文件夹中所有已安装文化的数组 - 根据您的需要更改搜索路径。对于不变的文化,它返回“自动”。

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();
}
于 2009-07-04T22:47:28.940 回答
1

特定语言的每个附属程序集的名称相同,但位于以特定文化命名的子文件夹中,例如 fr 或 fr-CA。
也许您可以使用这个事实并扫描文件夹层次结构以动态构建该菜单。

于 2008-10-20T10:46:38.377 回答