Beispiel #1
0
      public static string[] KakasiParamsHelper(KakasiSettings settings)
      {
          List <string> list = new List <string>();

          list.Add("kakasi");
          if (settings.CapitalizeRomaji)
          {
              list.Add("-C");
          }
          list.Add(settings.EnableHepburn ? "-rhepburn" : "-rkunrei");
          if (settings.EnableGraphicToAscii)
          {
              list.Add("-ga");
          }
          if (settings.EnableHiraganaToAscii)
          {
              list.Add("-Ha");
          }
          if (settings.EnableWakitagaki)
          {
              list.Add("-w");
          }
          if (settings.EnableJisRomanToAscii)
          {
              list.Add("-ja");
          }
          if (settings.EnableKanaToAscii)
          {
              list.Add("-ka");
          }
          if (settings.EnableKatakanaToAscii)
          {
              list.Add("-Ka");
          }
          if (settings.EnableKigouToAscii)
          {
              list.Add("-Ea");
          }
          if (settings.EnableKanjiToAscii)
          {
              list.Add("-Ja");
          }
          if (settings.InsertSeparateCharacters)
          {
              list.Add("-s");
          }
          if (settings.UpscaleRomaji)
          {
              list.Add("-U");
          }

          return(list.ToArray());
      }
        public static async Task JapaneseToReference(string filepath, string wikia, string language, int from, int to)
        {
            Settings.LogTime = DateTime.Now;
            IO.Write.Log($"Filepath: {filepath}", true);
            IO.Write.Log($"Wikia: {wikia}", true);
            IO.Write.Log($"Language: {language}", true);

            if (language == "ro")
            {
                _kakasiSettings = new KakasiSettings();
                Write.Log("Romaji settings:" + string.Join(" ", IO.Convert.KakasiParamsHelper(_kakasiSettings)), true);
                Kakasi.NET.Interop.KakasiLib.Init();
            }

            IO.Write.Log("Loading KUP file", true);
            var kup = Kontract.KUP.Load(filepath);

            int kupEntryCount = kup.Count;

            if (from == -1)
            {
                from = 0;
            }
            if (to == -1)
            {
                to = kupEntryCount;
            }

            IO.Write.Log($"From Count: {from}", true);
            IO.Write.Log($"To Count: {to}", true);

            var entries = kup.Entries.Where(x =>
                                            Convert.ToInt32(x.Name.Remove(0, 4)) >= from && Convert.ToInt32(x.Name.Remove(0, 4)) <= to).ToList();

            List <Entry> tempEntries = new List <Entry>();

            IO.Write.Log("Begin translation", true);

            foreach (var entry in entries)
            {
                bool isChanged = false;
                if (wikia != string.Empty)
                {
                    var textOri = entry.OriginalText;

                    textOri = textOri.Replace("[", "").Replace("]", "");

                    var textOriArray = textOri.Split(' ');
                    textOri = string.Empty;

                    foreach (string text in textOriArray)
                    {
                        if (text.Contains('/'))
                        {
                            textOri = textOri + text.Split('/')[0];
                        }

                        else
                        {
                            textOri = textOri + text;
                        }
                    }

                    var charCount   = textOri.Length;
                    var wikiaResult = WikiaCSharpWrapper.Client.RequestValuesFromWiki(wikia, textOri, false);

                    if (wikiaResult.Result != null)
                    {
                        foreach (var item in wikiaResult.Result.items)
                        {
                            var    matches    = regExSpanMatcher.Matches(item.snippet);
                            double percentage = ((double)matches.Count / charCount) * 100;
                            if (percentage == 100.00)
                            {
                                entry.EditedText = item.title;
                                isChanged        = true;
                                break;
                            }

                            var tempMatchVariable = string.Empty;
                            foreach (Match match in matches)
                            {
                                tempMatchVariable = tempMatchVariable + match.Value.Split('<')[0];
                            }

                            if (tempMatchVariable == textOri)
                            {
                                entry.EditedText = item.title;
                                isChanged        = true;
                                break;
                            }
                        }
                    }
                }

                if (!isChanged)
                {
                    tempEntries.Add(entry);
                }

                Write.Log($"{entry.OriginalText} => {entry.EditedText}");
            }

            Write.Log($"Translating now (the missing entries) to {language}", true);
            switch (language)
            {
            case "ro":
                tempEntries = await IO.Convert.ToRomaji(tempEntries, _kakasiSettings);

                break;

            case "en":
                tempEntries = await IO.Convert.ToEnglish(tempEntries);

                break;
            }

            if (tempEntries.Count > 0)
            {
                foreach (var changedItem in tempEntries)
                {
                    foreach (var entry in entries)
                    {
                        if (entry.Name == changedItem.Name)
                        {
                            entry.EditedText = changedItem.EditedText;
                            Write.Log($"{entry.OriginalText} => {entry.EditedText}");
                            break;
                        }
                    }
                }
            }

            IO.Write.Log("Saving KUP file", true);
            kup.Save(Settings.OutputPath + filepath.Split('\\').Last());
            IO.Write.NameExchangeList(entries, Settings.OutputPath + filepath.Split('\\').Last());
        }
Beispiel #3
0
      public static Task <List <Kontract.Entry> > ToRomaji(List <Kontract.Entry> entries, KakasiSettings settings)
      {
          Kakasi.NET.Interop.KakasiLib.Init();
          var kakasiParams = KakasiParamsHelper(settings);

          Kakasi.NET.Interop.KakasiLib.SetParams(kakasiParams);

          try
          {
              foreach (var entry in entries)
              {
                  entry.EditedText = Kakasi.NET.Interop.KakasiLib.DoKakasi(entry.OriginalText);
              }
          }

          catch (Exception ex)
          {
              Write.Log(ex.ToString());
          }

          Kakasi.NET.Interop.KakasiLib.Dispose();

          return(Task.FromResult(entries));
      }