示例#1
0
 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
                 };
             }
         }
     }
 }
示例#2
0
 public virtual void AddTranslation(TextTranslation translation)
 {
     if ((translation.Flag & TextTranslationFlag.Regex) > TextTranslationFlag.None)
     {
         RegexSpacial.Add(translation);
     }
     else
     {
         RawSpacial.Add(translation);
     }
 }
示例#3
0
        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);
        }
示例#4
0
        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;
                }
            }
        }
示例#5
0
        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.");
        }