コード例 #1
0
        /// <summary>
        ///     Helper to create the location of a file
        /// </summary>
        /// <param name="checkStartupDirectory"></param>
        /// <param name="postfix"></param>
        /// <param name="specifiedDirectory"></param>
        /// <returns>File location</returns>
        private string CreateFileLocation(bool checkStartupDirectory, string postfix = "", string specifiedDirectory = null)
        {
            string file = null;

            if (specifiedDirectory != null)
            {
                file = Path.Combine(specifiedDirectory, $"{_iniFileConfig.FileName}{postfix}.{_iniFileConfig.IniExtension}");
            }
            else
            {
                if (checkStartupDirectory)
                {
                    var startPath = FileLocations.StartupDirectory;
                    if (startPath != null)
                    {
                        file = Path.Combine(startPath, $"{_iniFileConfig.FileName}{postfix}.{_iniFileConfig.IniExtension}");
                    }
                }
                if (file is null || !File.Exists(file))
                {
                    var appDataDirectory = FileLocations.RoamingAppDataDirectory(_iniFileConfig.ApplicationName);
                    file = Path.Combine(appDataDirectory, $"{_iniFileConfig.FileName}{postfix}.{_iniFileConfig.IniExtension}");
                }
            }
            Log.Verbose().WriteLine("File location: {0}", file);
            return(file);
        }
コード例 #2
0
        /// <summary>
        ///     Helper to create the location of a file
        /// </summary>
        private void ScanFiles(LanguageConfig languageConfig)
        {
            var directories = new List <string>();

            if (languageConfig.SpecifiedDirectories != null)
            {
                directories.AddRange(languageConfig.SpecifiedDirectories);
            }
            if (languageConfig.CheckStartupDirectory)
            {
                var startupDirectory = FileLocations.StartupDirectory;
                if (startupDirectory != null)
                {
                    directories.Add(Path.Combine(startupDirectory, "languages"));
                }
            }
            if (languageConfig.CheckAppDataDirectory)
            {
                var appDataDirectory = FileLocations.RoamingAppDataDirectory(languageConfig.ApplicationName);
                if (appDataDirectory != null)
                {
                    directories.Add(Path.Combine(appDataDirectory, "languages"));
                }
            }

            if (Log.IsDebugEnabled())
            {
                Log.Debug().WriteLine("Scanning directories: {0}", string.Join(",", directories));
            }

            Files = FileLocations.Scan(directories, _filePattern)
                    .GroupBy(x => x.Item2.Groups["IETF"].Value)
                    .ToDictionary(group => group.Key, group => group.Select(x => x.Item1)
                                  .ToList());

            if (Log.IsDebugEnabled())
            {
                Log.Debug().WriteLine("Detected language ietfs: {0}", string.Join(",", Files.Keys));
            }

            var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
                              .ToLookup(e => e.IetfLanguageTag, StringComparer.OrdinalIgnoreCase).ToDictionary(x => x.Key, x => x.First());

            // TODO: Create custom culture for all not available, see: https://msdn.microsoft.com/en-us/library/ms172469(v=vs.90).aspx
            // TODO: Add Embedded resources, especially for the assemblies to which ILanguage interfaces belong

            AvailableLanguages = (from ietf in Files.Keys
                                  where allCultures.ContainsKey(ietf)
                                  select ietf).Distinct().ToDictionary(ietf => ietf, ietf => allCultures[ietf].NativeName);

            if (Log.IsVerboseEnabled())
            {
                Log.Verbose().WriteLine("Languages found: {0}", string.Join(",", AvailableLanguages.Keys));
            }
        }
コード例 #3
0
        public void TestRoamingAppData()
        {
            var roamingAppDataDirectory = FileLocations.RoamingAppDataDirectory("Dapplo");

            Assert.EndsWith(@"AppData\Roaming\Dapplo", roamingAppDataDirectory);
        }