/// <summary> /// Generates a language template for the mod /// </summary> public void GenerateLanguageTemplate() { List <FieldInfo> translatableFields = GetTranslatableFields(_toolBase.ModSettings.MainAssembly); Language exportableLanguage = new Language() { _readableName = "Exported Language", _uniqueName = "export" }; foreach (FieldInfo translatableField in translatableFields) { object[] foundAttributes = translatableField.GetCustomAttributes(typeof(TranslatableAttribute), false); if (foundAttributes.Length > 0) { TranslatableAttribute translatableInfo = foundAttributes[0] as TranslatableAttribute; exportableLanguage._conversionDictionary.Add(translatableInfo.identifier, ""); } } XmlSerializer xmlSerialiser = new XmlSerializer(typeof(Language)); StreamWriter writer = new StreamWriter("exportedLanguage.xml"); xmlSerialiser.Serialize(writer, exportableLanguage); writer.Close(); }
/// <summary> /// Translate all text into the specified language /// </summary> /// <param name="languageID">The unique language name to translate to</param> public bool TranslateTo(string languageID) { LoadLanguages(); bool success = false; foreach (Language availableLanguage in _languages) { if (availableLanguage._uniqueName == languageID) { _currentLanguage = availableLanguage; List <FieldInfo> translatableFields = GetTranslatableFields(_toolBase.ModSettings.MainAssembly); foreach (FieldInfo translatableField in translatableFields) { object[] foundAttributes = translatableField.GetCustomAttributes(typeof(TranslatableAttribute), false); if (foundAttributes.Length > 0) { TranslatableAttribute translatableInfo = foundAttributes[0] as TranslatableAttribute; string identifier = translatableInfo.identifier; if (_currentLanguage._conversionDictionary.ContainsKey(identifier)) { translatableField.SetValue(null, _currentLanguage._conversionDictionary[identifier]); _toolBase.DetailedLogger.Log("Translation language \"" + languageID + "\" is returning \"" + _currentLanguage._conversionDictionary[identifier] + "\" for \"" + identifier + "\""); } else { translatableField.SetValue(null, identifier); _toolBase.DetailedLogger.LogWarning("Translation language \"" + languageID + "\" doesn't contain a suitable translation for \"" + identifier + "\""); } } } if (OnLanguageChanged != null) { Delegate[] invocationList = OnLanguageChanged.GetInvocationList(); _toolBase.DetailedLogger.Log("Invocation list size: " + invocationList.Length.ToString()); int count = 0; foreach (Delegate method in invocationList) { _toolBase.DetailedLogger.Log("Event #" + (++count).ToString()); _toolBase.DetailedLogger.Log("Invoking language change on " + method.Method.Name); method.DynamicInvoke(languageID); } } success = true; break; } } return(success); }