可用文化列表

时间:2009-08-31 13:58:10

标签: .net winforms localization

我有一个WinForms应用程序,可以通过附属文件的附属程序集进行本地化。用户可以在运行时切换应用程序语言。

所以我的问题是:有没有办法动态找出哪些文化作为本地化资源与我的客户一起发送?

2 个答案:

答案 0 :(得分:5)

这是我使用的代码。它搜索程序子目录中的附属程序集

    private static ReadOnlyCollection<CultureInfo> GetAvailableCultures()
    {
        List<CultureInfo> list = new List<CultureInfo>();

        string startupDir = Application.StartupPath;
        Assembly asm = Assembly.GetEntryAssembly();

        CultureInfo neutralCulture = CultureInfo.InvariantCulture;
        if (asm != null)
        {
            NeutralResourcesLanguageAttribute attr = Attribute.GetCustomAttribute(asm, typeof(NeutralResourcesLanguageAttribute)) as NeutralResourcesLanguageAttribute;
            if (attr != null)
                neutralCulture = CultureInfo.GetCultureInfo(attr.CultureName);
        }
        list.Add(neutralCulture);

        if (asm != null)
        {
            string baseName = asm.GetName().Name;
            foreach (string dir in Directory.GetDirectories(startupDir))
            {
                // Check that the directory name is a valid culture
                DirectoryInfo dirinfo = new DirectoryInfo(dir);
                CultureInfo tCulture = null;
                try
                {
                    tCulture = CultureInfo.GetCultureInfo(dirinfo.Name);
                }
                // Not a valid culture : skip that directory
                catch (ArgumentException)
                {
                    continue;
                }

                // Check that the directory contains satellite assemblies
                if (dirinfo.GetFiles(baseName + ".resources.dll").Length > 0)
                {
                    list.Add(tCulture);
                }

            }
        }
        return list.AsReadOnly();
    }

答案 1 :(得分:0)

我们找到的最简单的方法是查看附属程序集文件,并从父目录名称中进行处理,这些名称使用标准的“en-US”样式名称。