Esempio n. 1
0
        /// <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();
        }
Esempio n. 2
0
        /// <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);
        }