public override void RenderControl(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");
            writer.RenderBeginTag(HtmlTextWriterTag.Script);

            if (ObjectName.Contains("."))
            {
                //generate function check
                writer.Write("if (typeof " + ObjectName + " != 'function') {");
            }
            else
            {
                //generate object check
                writer.Write("if (typeof " + ObjectName + " == 'undefined') {");
            }

            writer.Write("document.write('<script src=\"" + FileName + "\" type=\"text/javascript\"></' + 'script>');");
            writer.Write("}");
            writer.RenderEndTag();
        }
示例#2
0
        public bool Translate(Scene?scene, object source, TextTranslationEventArgs e, string original, out string translate)
        {
            if (Type.Count > 0)
            {
                if (!Type.Contains(e.Type))
                {
                    translate = null;
                    return(false);
                }
            }

            if (Source.Count > 0)
            {
                if (!Source.Contains(e.Source))
                {
                    translate = null;
                    return(false);
                }
            }

            if (Scene.Count > 0)
            {
                if (!Scene.Contains(scene?.name))
                {
                    translate = null;
                    return(false);
                }
            }

            if (Scene.Count > 0)
            {
                if (!Scene.Contains(scene?.name))
                {
                    translate = null;
                    return(false);
                }
            }

            if (Level.Count > 0)
            {
                if (!Level.Contains(scene?.buildIndex ?? -1))
                {
                    translate = null;
                    return(false);
                }
            }

            var objectName = (source as UnityEngine.Object)?.name;

            if (ObjectName.Count > 0)
            {
                if (!ObjectName.Contains(objectName))
                {
                    translate = null;
                    return(false);
                }
            }

            var objectId = (source as UnityEngine.Object)?.GetInstanceID();

            if (ObjectId.Count > 0)
            {
                if (!ObjectId.Contains(objectId?.ToString()))
                {
                    translate = null;
                    return(false);
                }
            }

            if ((Flag & TextTranslationFlag.TextPart) > TextTranslationFlag.None)
            {
                if ((Flag & TextTranslationFlag.Regex) > TextTranslationFlag.None)
                {
                    if (!Regex.IsMatch(original))
                    {
                        translate = null;
                        return(false);
                    }

                    translate = Regex.Replace(original, Translation);
                    if (e.Debug)
                    {
                        Logger.Log(LogLevel.Info, $"TextPart {original} >> {translate}");
                    }
                    return(true);
                }
                else
                {
                    if (original != Original)
                    {
                        translate = null;
                        return(false);
                    }

                    translate = Translation;
                    if (e.Debug)
                    {
                        Logger.Log(LogLevel.Info, $"TextPart {original} >> {translate}");
                    }
                    return(true);
                }
            }
            else
            {
                if ((Flag & TextTranslationFlag.Regex) > TextTranslationFlag.None)
                {
                    var matches = Regex.Matches(original);

                    if (matches.Count == 0)
                    {
                        translate = null;
                        return(false);
                    }

                    var originalTemp = new StringBuilder(original, 32);

                    foreach (Match match in matches)
                    {
                        var raw           = match.Value;
                        var translateTemp = new StringBuilder(Translation, 32);

                        for (var i = match.Groups.Count - 1; i >= 0; i--)
                        {
                            var group = match.Groups[i];
                            if (!NamePool.Translate(scene, source, e, group.Value, out var groupValue))
                            {
                                groupValue = group.Value;
                            }

                            translateTemp = translateTemp.Replace($"${i}", groupValue);
                            translateTemp = translateTemp.Replace($"${{{i}}}", groupValue);
                        }

                        foreach (var name in Regex.GetGroupNames())
                        {
                            var group = match.Groups[name];
                            if (!NamePool.Translate(scene, source, e, group.Value, out var groupValue))
                            {
                                groupValue = group.Value;
                            }

                            translateTemp = translateTemp.Replace($"${{{name}}}", groupValue);
                        }

                        originalTemp = originalTemp.Replace(raw, translateTemp.ToString(), match.Index, match.Length);
                    }

                    translate = originalTemp.ToString();
                    if (e.Debug)
                    {
                        Logger.Log(LogLevel.Info, $"{original} >> {translate}");
                    }
                    return(true);
                }
                else
                {
                    if (original != Original)
                    {
                        translate = null;
                        return(false);
                    }

                    translate = Translation;
                    if (e.Debug)
                    {
                        Logger.Log(LogLevel.Info, $"{original} >> {translate}");
                    }
                    return(true);
                }
            }
        }