using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit.HttpNet; using Cysharp.Threading.Tasks; using System.Threading.Tasks; using RotaryHeart.Lib.SerializableDictionary; using System; using UnityEngine.UIElements; using System.Text; using System.IO; using System.Linq; using System.Text.RegularExpressions; namespace BITKit { public class GoogleSheetTranslator : MonoBehaviour, IAction { [SerializeReference, SubclassSelector] public References url; [SerializeReference, SubclassSelector] public IWebProvider webProvider; public SerializableDictionaryBase dictionary; public async void Execute() { var csv = await webProvider.GetAsync(url); var lines = csv.Split("\n").ToList(); var e = lines.GetEnumerator(); e.MoveNext(); var langs = e.Current.Split(",").Skip(1).Where(x => x is not "\"\""); foreach (var lang in langs) { var _langs = lang; _langs = _langs.Substring(1); _langs = _langs.Substring(0, _langs.Length - 1); _langs = _langs.Replace("#", string.Empty); Debug.Log($"已获取语言{_langs}"); } while (e.MoveNext()) { var words = e.Current .Split(",", langs.Count() + 1) .Take(langs.Count()) .ToArray(); var source = words[0].Substring(1); source = source.Substring(0, source.Length - 1); words = e.Current.Split(",", langs.Count() + 1).Skip(1).ToArray(); //Debug.Log($"已获取到语言:{string.Join(",", words)}"); int index = 0; foreach (var word in words) { if (word is "\"\"") { continue; } string currentLangs = langs .ElementAt(index++) .Replace("#", string.Empty) .Substring(1); currentLangs = currentLangs.Substring(0, currentLangs.Length - 1); if (dictionary.TryGetValue(currentLangs, out var so)) { string s1 = "\""; //结束字符串 string s2 = "\""; Regex rg = new Regex("(?<=(" + s1 + "))[.\\s\\S]*?(?=(" + s2 + "))", RegexOptions.Multiline | RegexOptions.Singleline); string _word = rg.Match(word).Value; so.dictionary.Insert(source, _word); #if UNITY_EDITOR UnityEditor.EditorUtility.SetDirty(so); #endif } } } } public void GetDifference() { BITAppForUnity.ThrowIfNotPlaying(); var sources = DI.Get().GetAllSourceText(); var result = MathE.Subtract(sources.Distinct(), dictionary.First().Value.dictionary.Keys.Distinct()); var key = string.Join("\n", result); Debug.Log($"已获取到未翻译文本数量:{result.Count()}"); Debug.Log(key); } } #if UNITY_EDITOR [UnityEditor.CustomEditor(typeof(GoogleSheetTranslator))] public class GoogleSheetTranslatorInspector : BITInspector { public override VisualElement CreateInspectorGUI() { FillDefaultInspector(root, serializedObject, true); var excuteButton = root.Create