Example #1
0
        public async Task <LocalizationError> Export(
            IEnumerable <LocalizedLanguage> languages,
            IPluginConfig config)
        {
            LocalizationError result = null;
            var outputDir            = string.Empty;

            try
            {
                outputDir = config.GetString("outputDir");
                var outputFile      = Path.Combine(outputDir, "{0}-Characters.txt");
                var includeAlphabet = config.GetBool("includeAlphabet", false);

                HashSet <char> uniqueCharacters = new HashSet <char>();
                if (includeAlphabet)
                {
                    // Include common characters if flag is present
                    var commonCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,:;?!'\"";
                    foreach (var character in commonCharacters)
                    {
                        uniqueCharacters.Add(character);
                    }
                }

                // Gather all the characters in every language
                foreach (var language in languages)
                {
                    // And all the characters per language
                    HashSet <char> uniqueCharactersForLanguage = new HashSet <char>();
                    foreach (var row in language.Rows.Values)
                    {
                        foreach (var character in row.Value)
                        {
                            if (Char.IsWhiteSpace(character))
                            {
                                continue;
                            }

                            uniqueCharactersForLanguage.Add(character);
                            uniqueCharacters.Add(character);
                        }

                        // Write the results for the current language
                        using (var stream = File.OpenWrite(string.Format(outputFile, language.Name)))
                            using (var streamWriter = new StreamWriter(stream))
                            {
                                foreach (var character in uniqueCharactersForLanguage)
                                {
                                    streamWriter.Write(character);
                                }

                                await streamWriter.FlushAsync();
                            }
                    }
                }

                // Write the results for all languages
                using (var stream = File.OpenWrite(string.Format(outputFile, "All")))
                    using (var streamWriter = new StreamWriter(stream))
                    {
                        foreach (var character in uniqueCharacters)
                        {
                            streamWriter.Write(character);
                        }

                        await streamWriter.FlushAsync();
                    }
            }
            catch (Exception e)
            {
                if (e is IOException)
                {
                    result = new LocalizationError(
                        LocalizationError.ErrorType.FileError,
                        string.Format("Unable to write to output file: {0}. {1}", outputDir, e.Message),
                        0);
                }
                else
                {
                    result = new LocalizationError(
                        LocalizationError.ErrorType.PluginError,
                        string.Format("Plugin failed: {0}", e.Message),
                        0);
                }
            }

            return(result);
        }