private IEnumerator TranslateBaidu(string text, string fromCulture, string toCulture, TranslationData translation) { fromCulture = fromCulture.ToLower(); toCulture = toCulture.ToLower(); translation.ProcessedText = text; translation.State = TranslationState.Failed; // From http://blog.csdn.net/u014571132/article/details/53334930 string salt = System.DateTime.Now.Millisecond.ToString(); string md5 = CreateMD5(_appId + text + salt + _appSecret); string url = String.Format("http://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from={1}&to={2}&appid={3}&salt={4}&sign={5}", WWW.EscapeURL(text), fromCulture, toCulture, _appId, salt, md5); var headers = new Dictionary <string, string> { { "User-Agent", "Mozilla/5.0" }, { "Accept-Charset", "UTF-8" } }; var www = new WWW(url, null, headers); yield return(www); if (www.error != null) { Logger.LogError(www.error); yield break; } string result = string.Empty; var jsonResult = JsonFx.Json.JsonReader.Deserialize <TranslationResult>(www.text); Logger.Log(www.text); for (int i = 0; i < jsonResult.trans_result.Length; i++) { // Only add non-japanese chars to prevent repeated translation foreach (char ch in jsonResult.trans_result[i].dst) { if (!AutoTranslatePlugin.is_japanese_char(ch)) { result += ch; } } } result = result.Replace("\\n", ""); Logger.Log($"Got Translation from Baidu: {result}", Level.Debug); translation.Translation = result; translation.State = TranslationState.Finished; }
public static bool HookTranslationEvent(AutoTranslatePlugin atp) { try { var curAssembly = Assembly.GetAssembly(typeof(TranslationPluginHook)); var namespace_ = "CM3D2.AutoTranslate.Plugin.Hooks"; var hookName = namespace_ + "." + _hook.Info.HandlerModuleName; var hookType = curAssembly.GetType( hookName ); // System.Type has a overloaded operator== // Somehow this operator can't be loaded, it throws a MissingMethod exception ingame // Because it's just a check for null, a cast to object works and // prevents calling the overloaded operator if ((object)hookType == null) { Logger.LogError($"Failed to get hook loader type '{hookName}'. This is a bug, aborting plugin!"); return(false); } var handler = Activator.CreateInstance(hookType, new object[] { atp }) as TranslationPluginHook; if (handler == null) { return(false); } _hook.PluginHandler = handler; _hook.Plugin = Object.FindObjectOfType(handler.PluginType) as MonoBehaviour; if (_hook.Plugin == null) { Logger.LogError($"Couldn't find {TranslationPlugin} Plugin!"); } handler.RegisterHook(_hook.Plugin); return(true); } catch (Exception e) { Logger.LogError("Got Exception while hooking!", e); return(false); } }