/// <summary>
        /// Gets all cultures found in the directory. The search is donde by:
        /// 1) Enumerate all folders named with valid culture names
        /// 2) Check that the folder contains resource files
        /// The result is not cached
        /// </summary>
        /// <param name="executingDirectory">The directory to chek</param>
        /// <returns>The cultures found. If none an empty list is returned.</returns>
        internal static IReadOnlyList <CultureInfo> GetAllCultures(DirectoryInfo executingDirectory)
        {
            if (!executingDirectory.Exists)
            {
                return(EmptyCultures);
            }

            List <CultureInfo> cultures = null;

            foreach (var directory in executingDirectory.EnumerateDirectories())
            {
                var cultureName = directory.Name;
                if (!Culture.Exists(directory.Name))
                {
                    continue;
                }

                if (directory.EnumerateFiles("*.resources.dll", SearchOption.TopDirectoryOnly).Any())
                {
                    if (cultures == null)
                    {
                        cultures = new List <CultureInfo>();
                    }

                    cultures.Add(CultureInfo.GetCultureInfo(cultureName));
                }
            }

            return(cultures ?? EmptyCultures);
        }
Пример #2
0
        /// <summary>
        /// Gets all cultures found in the directory. The search is donde by:
        /// 1) Enumerate all folders named with valid culture names
        /// 2) Check that the folder contains resource files
        /// The result is not cached
        /// </summary>
        /// <param name="executingDirectory">The directory to check</param>
        /// <returns>The cultures found. If none an empty list is returned.</returns>
        internal static IReadOnlyList <CultureInfo> GetAllCultures(DirectoryInfo executingDirectory)
        {
            if (!executingDirectory.Exists)
            {
                return(EmptyCultures);
            }

            HashSet <CultureInfo> cultures = null;

            foreach (var directory in executingDirectory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly))
            {
                var cultureName = directory.Name;
                if (!Culture.Exists(directory.Name))
                {
                    continue;
                }

                if (directory.EnumerateFiles("*.resources.dll", SearchOption.TopDirectoryOnly).Any())
                {
                    if (Culture.TryGet(cultureName, out var culture))
                    {
                        if (cultures == null)
                        {
                            cultures = new HashSet <CultureInfo>(CultureInfoComparer.ByName);
                        }

                        cultures.Add(culture);
                    }
                }
            }

            var entryAssembly = Assembly.GetEntryAssembly();

            if (entryAssembly != null)
            {
                var neutralLanguageAttribute = (NeutralResourcesLanguageAttribute)Attribute.GetCustomAttribute(entryAssembly, typeof(NeutralResourcesLanguageAttribute));
                var name = neutralLanguageAttribute?.CultureName;
                if (name != null && Culture.TryGet(name, out var neutralCulture))
                {
                    if (cultures == null)
                    {
                        cultures = new HashSet <CultureInfo>(CultureInfoComparer.ByName);
                    }

                    cultures.Add(neutralCulture);
                }
            }

            return(cultures?.OrderBy(x => x.Name).ToArray() ?? EmptyCultures);
        }