diff options
Diffstat (limited to 'Thronefall_1_57/Decompile/I2.Loc/TranslationJob_WEB.cs')
| -rw-r--r-- | Thronefall_1_57/Decompile/I2.Loc/TranslationJob_WEB.cs | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/Thronefall_1_57/Decompile/I2.Loc/TranslationJob_WEB.cs b/Thronefall_1_57/Decompile/I2.Loc/TranslationJob_WEB.cs new file mode 100644 index 0000000..4136e38 --- /dev/null +++ b/Thronefall_1_57/Decompile/I2.Loc/TranslationJob_WEB.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEngine.Networking; + +namespace I2.Loc; + +public class TranslationJob_WEB : TranslationJob_WWW +{ + private Dictionary<string, TranslationQuery> _requests; + + private GoogleTranslation.fnOnTranslationReady _OnTranslationReady; + + public string mErrorMessage; + + private string mCurrentBatch_ToLanguageCode; + + private string mCurrentBatch_FromLanguageCode; + + private List<string> mCurrentBatch_Text; + + private List<KeyValuePair<string, string>> mQueries; + + public TranslationJob_WEB(Dictionary<string, TranslationQuery> requests, GoogleTranslation.fnOnTranslationReady OnTranslationReady) + { + _requests = requests; + _OnTranslationReady = OnTranslationReady; + FindAllQueries(); + ExecuteNextBatch(); + } + + private void FindAllQueries() + { + mQueries = new List<KeyValuePair<string, string>>(); + foreach (KeyValuePair<string, TranslationQuery> request in _requests) + { + string[] targetLanguagesCode = request.Value.TargetLanguagesCode; + foreach (string text in targetLanguagesCode) + { + mQueries.Add(new KeyValuePair<string, string>(request.Value.OrigText, request.Value.LanguageCode + ":" + text)); + } + } + mQueries.Sort((KeyValuePair<string, string> a, KeyValuePair<string, string> b) => a.Value.CompareTo(b.Value)); + } + + private void ExecuteNextBatch() + { + if (mQueries.Count == 0) + { + mJobState = eJobState.Succeeded; + return; + } + mCurrentBatch_Text = new List<string>(); + string text = null; + int num = 200; + StringBuilder stringBuilder = new StringBuilder(); + int i; + for (i = 0; i < mQueries.Count; i++) + { + string key = mQueries[i].Key; + string value = mQueries[i].Value; + if (text == null || value == text) + { + if (i != 0) + { + stringBuilder.Append("|||"); + } + stringBuilder.Append(key); + mCurrentBatch_Text.Add(key); + text = value; + } + if (stringBuilder.Length > num) + { + break; + } + } + mQueries.RemoveRange(0, i); + string[] array = text.Split(':'); + mCurrentBatch_FromLanguageCode = array[0]; + mCurrentBatch_ToLanguageCode = array[1]; + string text2 = $"http://www.google.com/translate_t?hl=en&vi=c&ie=UTF8&oe=UTF8&submit=Translate&langpair={mCurrentBatch_FromLanguageCode}|{mCurrentBatch_ToLanguageCode}&text={Uri.EscapeUriString(stringBuilder.ToString())}"; + Debug.Log(text2); + www = UnityWebRequest.Get(text2); + I2Utils.SendWebRequest(www); + } + + public override eJobState GetState() + { + if (www != null && www.isDone) + { + ProcessResult(www.downloadHandler.data, www.error); + www.Dispose(); + www = null; + } + if (www == null) + { + ExecuteNextBatch(); + } + return mJobState; + } + + public void ProcessResult(byte[] bytes, string errorMsg) + { + if (string.IsNullOrEmpty(errorMsg)) + { + string @string = Encoding.UTF8.GetString(bytes, 0, bytes.Length); + Debug.Log(ParseTranslationResult(@string, "aab")); + if (string.IsNullOrEmpty(errorMsg)) + { + if (_OnTranslationReady != null) + { + _OnTranslationReady(_requests, null); + } + return; + } + } + mJobState = eJobState.Failed; + mErrorMessage = errorMsg; + } + + private string ParseTranslationResult(string html, string OriginalText) + { + try + { + int num = html.IndexOf("TRANSLATED_TEXT='", StringComparison.Ordinal) + "TRANSLATED_TEXT='".Length; + int num2 = html.IndexOf("';var", num, StringComparison.Ordinal); + string input = html.Substring(num, num2 - num); + input = Regex.Replace(input, "\\\\x([a-fA-F0-9]{2})", (Match match) => char.ConvertFromUtf32(int.Parse(match.Groups[1].Value, NumberStyles.HexNumber))); + input = Regex.Replace(input, "&#(\\d+);", (Match match) => char.ConvertFromUtf32(int.Parse(match.Groups[1].Value))); + input = input.Replace("<br>", "\n"); + if (OriginalText.ToUpper() == OriginalText) + { + input = input.ToUpper(); + } + else if (GoogleTranslation.UppercaseFirst(OriginalText) == OriginalText) + { + input = GoogleTranslation.UppercaseFirst(input); + } + else if (GoogleTranslation.TitleCase(OriginalText) == OriginalText) + { + input = GoogleTranslation.TitleCase(input); + } + return input; + } + catch (Exception ex) + { + Debug.LogError(ex.Message); + return string.Empty; + } + } +} |
