private static void CleanupBackstories() { string activeLanguageCoreModFolderPath = TranslationFilesCleaner.GetActiveLanguageCoreModFolderPath(); string text = Path.Combine(activeLanguageCoreModFolderPath, "Backstories"); Directory.CreateDirectory(text); string path = Path.Combine(text, "Backstories.xml"); File.Delete(path); XDocument xDocument = new XDocument(); try { XElement xElement = new XElement("BackstoryTranslations"); xDocument.Add(xElement); xElement.Add(new XComment("NEWLINE")); foreach (KeyValuePair <string, Backstory> current in from x in BackstoryDatabase.allBackstories orderby x.Key select x) { try { XElement xElement2 = new XElement(current.Key); TranslationFilesCleaner.AddBackstoryFieldElement(xElement2, "title", current.Value.title, current.Value.untranslatedTitle, current.Value.titleTranslated); TranslationFilesCleaner.AddBackstoryFieldElement(xElement2, "titleFemale", current.Value.titleFemale, current.Value.untranslatedTitleFemale, current.Value.titleFemaleTranslated); TranslationFilesCleaner.AddBackstoryFieldElement(xElement2, "titleShort", current.Value.titleShort, current.Value.untranslatedTitleShort, current.Value.titleShortTranslated); TranslationFilesCleaner.AddBackstoryFieldElement(xElement2, "titleShortFemale", current.Value.titleShortFemale, current.Value.untranslatedTitleShortFemale, current.Value.titleShortFemaleTranslated); TranslationFilesCleaner.AddBackstoryFieldElement(xElement2, "desc", current.Value.baseDesc, current.Value.untranslatedDesc, current.Value.descTranslated); xElement.Add(xElement2); xElement.Add(new XComment("NEWLINE")); } catch (Exception ex) { Log.Error(string.Concat(new object[] { "Could not process backstory ", current.Key, ": ", ex }), false); } } } finally { TranslationFilesCleaner.SaveXMLDocumentWithProcessedNewlineTags(xDocument, path); } }
private static void DoCleanupTranslationFiles() { if (LanguageDatabase.activeLanguage == LanguageDatabase.defaultLanguage) { return; } try { try { TranslationFilesCleaner.CleanupKeyedTranslations(); } catch (Exception arg) { Log.Error("Could not cleanup keyed translations: " + arg, false); } try { TranslationFilesCleaner.CleanupDefInjections(); } catch (Exception arg2) { Log.Error("Could not cleanup def-injections: " + arg2, false); } try { TranslationFilesCleaner.CleanupBackstories(); } catch (Exception arg3) { Log.Error("Could not cleanup backstories: " + arg3, false); } Messages.Message("MessageTranslationFilesCleanupDone".Translate(new object[] { TranslationFilesCleaner.GetActiveLanguageCoreModFolderPath() }), MessageTypeDefOf.TaskCompletion, false); } catch (Exception arg4) { Log.Error("Could not cleanup translation files: " + arg4, false); } }
private static void CleanupDefInjections() { string activeLanguageCoreModFolderPath = TranslationFilesCleaner.GetActiveLanguageCoreModFolderPath(); string text = Path.Combine(activeLanguageCoreModFolderPath, "DefLinked"); string text2 = Path.Combine(activeLanguageCoreModFolderPath, "DefInjected"); DirectoryInfo directoryInfo = new DirectoryInfo(text); if (directoryInfo.Exists) { if (!Directory.Exists(text2)) { Directory.Move(text, text2); Thread.Sleep(1000); directoryInfo = new DirectoryInfo(text2); } } else { directoryInfo = new DirectoryInfo(text2); } if (!directoryInfo.Exists) { Log.Error("Could not find def-injections folder for the active language.", false); return; } FileInfo[] files = directoryInfo.GetFiles("*.xml", SearchOption.AllDirectories); for (int i = 0; i < files.Length; i++) { FileInfo fileInfo = files[i]; try { fileInfo.Delete(); } catch (Exception ex) { Log.Error(string.Concat(new object[] { "Could not delete ", fileInfo.Name, ": ", ex }), false); } } foreach (Type current in GenDefDatabase.AllDefTypesWithDatabases()) { try { TranslationFilesCleaner.CleanupDefInjectionsForDefType(current, directoryInfo.FullName); } catch (Exception ex2) { Log.Error(string.Concat(new object[] { "Could not process def-injections for type ", current.Name, ": ", ex2 }), false); } } }
private static void CleanupKeyedTranslations() { LoadedLanguage activeLanguage = LanguageDatabase.activeLanguage; LoadedLanguage english = LanguageDatabase.defaultLanguage; string activeLanguageCoreModFolderPath = TranslationFilesCleaner.GetActiveLanguageCoreModFolderPath(); string text = Path.Combine(activeLanguageCoreModFolderPath, "CodeLinked"); string text2 = Path.Combine(activeLanguageCoreModFolderPath, "Keyed"); DirectoryInfo directoryInfo = new DirectoryInfo(text); if (directoryInfo.Exists) { if (!Directory.Exists(text2)) { Directory.Move(text, text2); Thread.Sleep(1000); directoryInfo = new DirectoryInfo(text2); } } else { directoryInfo = new DirectoryInfo(text2); } if (!directoryInfo.Exists) { Log.Error("Could not find keyed translations folder for the active language.", false); return; } DirectoryInfo directoryInfo2 = new DirectoryInfo(Path.Combine(TranslationFilesCleaner.GetEnglishLanguageCoreModFolderPath(), "Keyed")); if (!directoryInfo2.Exists) { Log.Error("English keyed translations folder doesn't exist.", false); return; } FileInfo[] files = directoryInfo.GetFiles("*.xml", SearchOption.AllDirectories); for (int i = 0; i < files.Length; i++) { FileInfo fileInfo = files[i]; try { fileInfo.Delete(); } catch (Exception ex) { Log.Error(string.Concat(new object[] { "Could not delete ", fileInfo.Name, ": ", ex }), false); } } FileInfo[] files2 = directoryInfo2.GetFiles("*.xml", SearchOption.AllDirectories); for (int j = 0; j < files2.Length; j++) { FileInfo fileInfo2 = files2[j]; try { string path = new Uri(directoryInfo2.FullName + Path.DirectorySeparatorChar).MakeRelativeUri(new Uri(fileInfo2.FullName)).ToString(); string text3 = Path.Combine(directoryInfo.FullName, path); Directory.CreateDirectory(Path.GetDirectoryName(text3)); fileInfo2.CopyTo(text3); } catch (Exception ex2) { Log.Error(string.Concat(new object[] { "Could not copy ", fileInfo2.Name, ": ", ex2 }), false); } } List <LoadedLanguage.KeyedReplacement> list = (from x in activeLanguage.keyedReplacements where !x.Value.isPlaceholder && !english.HaveTextForKey(x.Key, false) select x.Value).ToList <LoadedLanguage.KeyedReplacement>(); HashSet <LoadedLanguage.KeyedReplacement> writtenUnusedKeyedTranslations = new HashSet <LoadedLanguage.KeyedReplacement>(); FileInfo[] files3 = directoryInfo.GetFiles("*.xml", SearchOption.AllDirectories); for (int k = 0; k < files3.Length; k++) { FileInfo fileInfo3 = files3[k]; try { XDocument xDocument = XDocument.Load(fileInfo3.FullName, LoadOptions.PreserveWhitespace); XElement xElement = xDocument.DescendantNodes().OfType <XElement>().FirstOrDefault <XElement>(); if (xElement != null) { try { foreach (XNode current in xElement.DescendantNodes()) { XElement xElement2 = current as XElement; if (xElement2 != null) { foreach (XNode current2 in xElement2.DescendantNodes()) { try { XText xText = current2 as XText; if (xText != null && !xText.Value.NullOrEmpty()) { string value = " EN: " + xText.Value + " "; current.AddBeforeSelf(new XComment(value)); current.AddBeforeSelf(Environment.NewLine); current.AddBeforeSelf(" "); } } catch (Exception ex3) { Log.Error(string.Concat(new object[] { "Could not add comment node in ", fileInfo3.Name, ": ", ex3 }), false); } current2.Remove(); } try { string text4; if (activeLanguage.TryGetTextFromKey(xElement2.Name.ToString(), out text4)) { if (!text4.NullOrEmpty()) { xElement2.Add(new XText(text4.Replace("\n", "\\n"))); } } else { xElement2.Add(new XText("TODO")); } } catch (Exception ex4) { Log.Error(string.Concat(new object[] { "Could not add existing translation or placeholder in ", fileInfo3.Name, ": ", ex4 }), false); } } } bool flag = false; foreach (LoadedLanguage.KeyedReplacement current3 in list) { if (new Uri(fileInfo3.FullName).Equals(new Uri(current3.fileSourceFullPath))) { if (!flag) { xElement.Add(" "); xElement.Add(new XComment(" UNUSED ")); xElement.Add(Environment.NewLine); flag = true; } XElement xElement3 = new XElement(current3.key); if (current3.isPlaceholder) { xElement3.Add(new XText("TODO")); } else if (!current3.value.NullOrEmpty()) { xElement3.Add(new XText(current3.value.Replace("\n", "\\n"))); } xElement.Add(" "); xElement.Add(xElement3); xElement.Add(Environment.NewLine); writtenUnusedKeyedTranslations.Add(current3); } } if (flag) { xElement.Add(Environment.NewLine); } } finally { TranslationFilesCleaner.SaveXMLDocumentWithProcessedNewlineTags(xDocument.Root, fileInfo3.FullName); } } } catch (Exception ex5) { Log.Error(string.Concat(new object[] { "Could not process ", fileInfo3.Name, ": ", ex5 }), false); } } foreach (IGrouping <string, LoadedLanguage.KeyedReplacement> current4 in from x in list where !writtenUnusedKeyedTranslations.Contains(x) group x by x.fileSourceFullPath) { try { if (File.Exists(current4.Key)) { Log.Error("Could not save unused keyed translations to " + current4.Key + " because this file already exists.", false); } else { object[] expr_676 = new object[1]; int arg_6DB_1 = 0; XName arg_6D6_0 = "LanguageData"; object[] expr_688 = new object[4]; expr_688[0] = new XComment("NEWLINE"); expr_688[1] = new XComment(" UNUSED "); expr_688[2] = current4.Select(delegate(LoadedLanguage.KeyedReplacement x) { string text5 = (!x.isPlaceholder) ? x.value : "TODO"; return(new XElement(x.key, new XText((!text5.NullOrEmpty()) ? text5.Replace("\n", "\\n") : string.Empty))); }); expr_688[3] = new XComment("NEWLINE"); expr_676[arg_6DB_1] = new XElement(arg_6D6_0, expr_688); XDocument doc = new XDocument(expr_676); TranslationFilesCleaner.SaveXMLDocumentWithProcessedNewlineTags(doc, current4.Key); } } catch (Exception ex6) { Log.Error(string.Concat(new object[] { "Could not save unused keyed translations to ", current4.Key, ": ", ex6 }), false); } } }