Список доступных культур - PullRequest
4 голосов
/ 31 августа 2009

У меня есть приложение WinForms, которое можно локализовать с помощью спутниковых сборок для resx-файлов. Пользователь может переключать язык приложения во время выполнения.

Итак, мой вопрос: есть ли способ динамически выяснить, какие культуры поставляются с моим клиентом как локализованные ресурсы?

Ответы [ 2 ]

5 голосов
/ 31 августа 2009

Вот код, который я использую. Поиск спутниковых сборок в подкаталогах программы

    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();
    }
0 голосов
/ 31 августа 2009

Самый простой способ, который мы нашли, - это просмотреть файлы сателлитных сборок и определить их по именам их родительских каталогов, которые используют стандартные имена в стиле "en-US".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...