コード例 #1
0
        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;
        }
コード例 #2
0
        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);
            }
        }