using System.Collections.Generic; using System.Text; namespace Crowdin.Plugin.Helpers.FileHelpers { using Server_API.Helpers; public static class CreateFileHelper { private static readonly List RowData = new List(); public static void SaveTranslationsToFile(string filepath, string table, bool withTranslations) { RowData.Clear(); var scheme = SettingsHelper.GetLanguageScheme(); // Creating First row of titles manually.. var rowDataTemp = new string[scheme.Count + 3]; rowDataTemp[0] = "\"Key\""; rowDataTemp[1] = "\"Context\""; rowDataTemp[2] = $"\"{SettingsHelper.GetSourceLanguage()}\""; foreach (var languageItem in scheme) { rowDataTemp[languageItem.collumPos + 1] = $"\"{languageItem.langType}\""; } RowData.Add(rowDataTemp); foreach (var translationString in TranslationsHelper.GetTranslationStrings(table)) { if (translationString == null) { continue; } rowDataTemp = new string[rowDataTemp.Length]; var key = translationString.key.Replace("\"", "\"\""); var value = translationString.sourceString.Replace("\"", "\"\""); var context = translationString.context?.Replace("\"", "\"\""); rowDataTemp[0] = $"\"{key}\""; rowDataTemp[1] = $"\"{context}\""; rowDataTemp[2] = $"\"{value}\""; if (withTranslations) { foreach (var languageItem in scheme) { var translationIndex = translationString.translations.FindIndex(item => item.language == languageItem.langType); if (translationIndex == -1) { continue; } var textValue = translationString.translations[translationIndex].text; if (textValue == null) { continue; } var translation = $"\"{textValue.Replace("\"", "\"\"")}\""; rowDataTemp[languageItem.collumPos + 1] = translation; } } RowData.Add(rowDataTemp); } var output = new string[RowData.Count][]; for (var i = 0; i < output.Length; i++) { output[i] = RowData[i]; } var length = output.GetLength(0); const string delimiter = ","; var stringBuilder = new StringBuilder(); for (var index = 0; index < length; index++) stringBuilder.AppendLine(string.Join(delimiter, output[index])); RemoveFileHelper.RemoveFile(filepath); var outStream = System.IO.File.CreateText(filepath); outStream.WriteLine(stringBuilder.ToString().Trim()); outStream.Close(); } } }