public static void AssociateSubHierarchyWithTransformInfo(Transform root, TransformInfo info)
        {
            var transforms = root.GetComponentsInChildren <Transform>(true);

            foreach (var transform in transforms)
            {
                transform.SetExtensionData(info);
            }

            SetTextCacheForAllObjectsInHierachy(root.gameObject, info.TextCache);
        }
        public static void SetTextCacheForAllObjectsInHierachy(GameObject go, IReadOnlyTextTranslationCache cache)
        {
            try
            {
                foreach (var comp in go.GetAllTextComponentsInChildren())
                {
                    var info = comp.GetOrCreateTextTranslationInfo();
                    info.TextCache = cache;
                }

                var ti = new TransformInfo {
                    TextCache = cache
                };
                foreach (var transform in go.GetComponentsInChildren <Transform>(true))
                {
                    transform.SetExtensionData(ti);
                }
            }
            catch (Exception e)
            {
                XuaLogger.AutoTranslator.Error(e, "An error occurred while scanning object hierarchy for text components.");
            }
        }