using PluginManager.Others; using System.Collections.Generic; using System; using System.IO; namespace PluginManager.LanguageSystem { public class Language { /// /// The active language /// public static Language? ActiveLanguage = null; private static readonly string LanguageFileExtension = ".lng"; /// /// The name of the language /// public string LanguageName { get; } /// /// The file where the language is imported from /// public string fileName { get; } /// /// The dictionary of the language /// public Dictionary LanguageWords { get; } /// /// The Language constructor /// /// The file to import the language from /// The dictionary of the language /// The name of the language private Language(string fileName, Dictionary words, string LanguageName) { this.fileName = fileName; this.LanguageName = LanguageName; LanguageWords = words; } /// /// Load language from file /// /// The file path /// public static Language? CreateLanguageFromFile(string LanguageFileLocation) { if (!LanguageFileLocation.EndsWith(LanguageFileExtension)) { Console.WriteLine("Failed to load language from file: " + LanguageFileLocation + "\nFile extension is not " + LanguageFileExtension); return null; } string[] lines = File.ReadAllLines(LanguageFileLocation); var languageName = "Unknown"; var words = new Dictionary(); foreach (string line in lines) { if (line.StartsWith("#") || line.Length < 4) continue; string[] sLine = line.Split('='); if (sLine[0] == "LANGUAGE_NAME") { languageName = sLine[1]; continue; } words.Add(sLine[0], sLine[1]); } Functions.WriteLogFile("Successfully loaded language: " + languageName + " from file : " + LanguageFileLocation.Replace('\\', '/')); return new Language(LanguageFileLocation, words, languageName); } /// /// Format text by inserting parameters /// /// The raw text /// The arguments /// public string FormatText(string text, params string[] args) { if (ActiveLanguage == null) return text; int l = args.Length; for (var i = 0; i < l; i++) text = text.Replace($"{i}", args[i]); return text; } } }