示例#1
0
    /** Create the string that can be written to a file to form the csv
     */
    private static string generateCSVText(string messagesFolderPath)
    {
        var variableNames = getAllVariables(messagesFolderPath);  // all variables accross all messages files
        var messagesFiles = getMessagesFiles(messagesFolderPath); // all messages files without preceding path

        List <CSVLine> csvContent = new List <CSVLine>();

        var languages = messagesFiles.Select(m => { return(new Lang(m.Split('.').Last())); }).ToList();

        // initialize each line of the csv file to ensure columns are correct
        variableNames.ToList().ForEach(v =>
        {
            csvContent.Add(new CSVLine(v, languages));
        });

        messagesFiles.ToList().ForEach(messageFile =>
        {
            string line;
            Lang language = new Lang(messageFile.Split('.').Last());

            System.IO.StreamReader file = new System.IO.StreamReader(messagesFolderPath + "/" + messageFile);

            while ((line = file.ReadLine()) != null)
            {
                string[] split          = line.Split('=');
                string varName          = split.First <String>();
                string content          = string.Join("", split.Skip(1).ToArray()); // concatenate the tail
                LangAndValue langAndVal = new LangAndValue(language, content);

                csvContent.ForEach(c =>
                {
                    if (c.variableName == varName)
                    {
                        c.addContent(langAndVal);
                    }
                });
            }
        });

        var    langHeadings = csvContent.First().contentByLang.Keys.ToList().Select(k => { return(k.code); });
        string headings     = "VARIABLE NAME," + string.Join(",", langHeadings.ToArray());

        return(headings + "\n" + string.Join("\n", csvContent.Select(c => { return c.ToString(); }).ToArray()));
    }
示例#2
0
        public void addContent(LangAndValue content)
        {
            contentByLanguage =
                contentByLanguage.Select(c =>
            {
                KeyValuePair <Lang, string> result;

                if (c.Key == content.language)
                {
                    result = new KeyValuePair <Lang, string>(content.language, content.content);
                }
                else
                {
                    result = c;
                }

                return(result);
            }).ToDictionary(k => k.Key, k => k.Value);
        }