从附属程序集中获取所有受支持的区域性

本文关键字:支持 区域性 获取 附属 程序 程序集 集中 | 更新日期: 2023-09-27 17:47:50

我正在使用一个卫星程序集来保存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
也许你可以利用这个事实,扫描文件夹层次结构来动态构建菜单。