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); } } }