示例#1
0
        public void TranslateControl(object controlToTranslate)
        {
            if (Translator.translation == null)
            {
                return;
            }

            string name;

            if (controlToTranslate is Control)
            {
                name = ((Control)controlToTranslate).Name;
            }
            else
            {
                name = controlToTranslate.GetType().Name;
            }

            if (!Translator.translation.HasTranslationCategory(name))
            {
                return;
            }

            TranslationCategory translationCategory = Translator.translation.GetTranslationCategory(name);

            foreach (TranslationItem translationItem in translationCategory.GetTranslationItems())
            {
                object subControl = null;

                if (translationItem.Name.Equals("$this"))
                {
                    subControl = controlToTranslate;
                }
                else
                {
                    FieldInfo fieldInfo = controlToTranslate.GetType().GetField(translationItem.Name, BindingFlags.NonPublic | BindingFlags.Instance);
                    if (fieldInfo != null)
                    {
                        subControl = fieldInfo.GetValue(controlToTranslate);
                    }
                }

                if (subControl == null)
                {
                    continue;
                }

                PropertyInfo propertyInfo = subControl.GetType().GetProperty(translationItem.Property, BindingFlags.Public | BindingFlags.Instance);
                if (propertyInfo != null)
                {
                    propertyInfo.SetValue(subControl, translationItem.Value, null);
                }
            }
        }