public void AddTranslation(TextTranslation translation) { if ((translation.Flag & TextTranslationFlag.TextPart) > TextTranslationFlag.None) { NamePool.AddTranslation(translation); } else { if ((translation.Flag & TextTranslationFlag.Regex) > TextTranslationFlag.None) { RegexSpacial.Add(translation); } else { if (RawSpacial.ContainsKey(translation.Original)) { RawSpacial[translation.Original]?.Add(translation); } else { RawSpacial[translation.Original] = new HashSet <TextTranslation>() { translation }; } } } }
public virtual void AddTranslation(TextTranslation translation) { if ((translation.Flag & TextTranslationFlag.Regex) > TextTranslationFlag.None) { RegexSpacial.Add(translation); } else { RawSpacial.Add(translation); } }
public TextTranslation Clone() { var result = new TextTranslation(NamePool) { Original = Original, Regex = Regex, Translation = Translation, Flag = Flag, }; foreach (var value in Scene) { result.Scene.Add(value); } foreach (var value in Level) { result.Level.Add(value); } foreach (var value in ObjectName) { result.ObjectName.Add(value); } foreach (var value in ObjectId) { result.ObjectId.Add(value); } foreach (var value in Type) { result.Type.Add(value); } foreach (var value in Source) { result.Source.Add(value); } return(result); }
private void ConfigTranslationSetting(TextTranslation translation, string value) { var data = value.Split(new[] { ':' }, 2); if (data.Length == 2) { switch (data[0]) { case "type": foreach (var type in data[1].Split(',')) { try { translation.Type.Add( (TextType)Enum.Parse(typeof(TextType), type, true)); } catch { // Ignore } } break; case "source": foreach (var source in data[1].Split(',')) { try { translation.Source.Add( (TextSource)Enum.Parse(typeof(TextSource), source, true)); } catch { // Ignore } } break; case "scene": foreach (var scene in data[1].Split(',')) { translation.Scene.Add(scene); } break; case "level": foreach (var level in data[1].Split(',')) { if (int.TryParse(level, out var result)) { translation.Level.Add(result); } } break; case "objectName": foreach (var name in data[1].Split(',')) { translation.ObjectName.Add(name); } break; case "objectId": foreach (var id in data[1].Split(',')) { translation.ObjectId.Add(id); } break; } } }
public void LoadTextTranslation() { var textPool = new TextTranslationPool(); var count = 0; var translationFiles = Directory.GetFiles(TextTranslationDir, "*.txt", SearchOption.AllDirectories); foreach (var file in translationFiles) { var lines = File.ReadAllLines(file); var baseTranslation = new TextTranslation(textPool.NamePool); var translation = baseTranslation.Clone(); foreach (var line in lines) { if (string.IsNullOrEmpty(line) || EmptyStringRegex.IsMatch(line)) { if (translation.IsValid) { textPool.AddTranslation(translation); count++; } translation = baseTranslation.Clone(); continue; } switch (line[0]) { case '#': break; case '&': ConfigTranslationSetting(baseTranslation, line.Substring(1)); ConfigTranslationSetting(translation, line.Substring(1)); break; case '%': baseTranslation = new TextTranslation(textPool.NamePool); break; case '*': ConfigTranslationSetting(translation, line.Substring(1)); break; case '-': translation.Original = line.Substring(1).Unescape(); translation.Flag |= TextTranslationFlag.TextPart; break; case '+': translation.Regex = new Regex($"^{line.Substring(1)}$", RegexOptions.Compiled); translation.Flag |= TextTranslationFlag.Regex; translation.Flag |= TextTranslationFlag.TextPart; break; case '>': translation.Original = line.Substring(1).Unescape(); break; case '$': translation.Regex = new Regex($"^{line.Substring(1)}$", RegexOptions.Compiled); translation.Flag |= TextTranslationFlag.Regex; break; case '<': translation.Translation = line.Substring(1).Unescape(); break; default: break; } } if (translation.IsValid) { textPool.AddTranslation(translation); count++; } } TextTranslationPool = textPool; Logger.Log(LogLevel.Debug, $"[MaidTranslate] {count} text translation loaded."); }