Exemple #1
0
        /// <summary>
        ///     Delegate constructor for getting field value from original translation
        /// </summary>
        /// <param name="settings">Language settings</param>
        /// <typeparam name="T">Type of data</typeparam>
        /// <returns>Resulting delegate to get string from</returns>
        /// <exception cref="ArgumentException">Throws exception if given field info was not found in assmebly</exception>
        public static Func <T, string> GetOriginalTextDelegate <T>(LanguageSettings settings)
        {
            var fieldInfo = typeof(T).GetField(settings.OriginalLanguage, BindingFlags.Public | BindingFlags.Instance);

            if (fieldInfo == null)
            {
                throw new ArgumentException($"LanguageSettings has incorrect original translation value -- used {settings.OriginalLanguage} but it do not exists");
            }

            var d = new Func <T, string>(arg => (string)fieldInfo.GetValue(arg));

            return(param => d(param));
        }
Exemple #2
0
        /// <summary>
        ///     Updates target file with new template data using settings
        /// </summary>
        /// <param name="settings">Settings</param>
        /// <param name="targetFile">Target file</param>
        /// <param name="template">Template file</param>
        public void UpdateTranslationItems(LanguageSettings settings, LanguageData targetFile, LanguageData template)
        {
            var missMatchList        = new List <TranslationProto>();
            var tempTranslationTable = targetFile.TranslationTable.ToList();

            // Find invalid or missing translations
            foreach (var translationProto in tempTranslationTable)
            {
                var match = template.TranslationTable.FirstOrDefault(proto => proto.Name == translationProto.Name);
                if (match != null)
                {
                    if (match.Original != translationProto.Original)
                    {
                        translationProto.IsValid = false;
                        missMatchList.Add(translationProto);
                        ConsoleLogger.LogWarning($"Translation for {translationProto.Original} -- {translationProto.Translation} is no longer valid! This entry original meaning has changed");
                    }
                    else
                    {
                        translationProto.Original = match.Original;
                        if (translationProto.Original.StartsWith("UI"))
                        {
                            translationProto.Translation = match.Original;
                        }
                    }
                }
                else
                {
                    translationProto.IsValid = false;
                    missMatchList.Add(translationProto);
                    ConsoleLogger.LogWarning($"Translation for {translationProto.Original} -- {translationProto.Translation} is no longer valid! This entry was probably removed");
                }
            }
            // New translations
            foreach (var translationProto in template.TranslationTable)
            {
                var match = targetFile.TranslationTable.FirstOrDefault(proto => proto.Name == translationProto.Name);
                if (match == null)
                {
                    missMatchList.Add(translationProto);
                    tempTranslationTable.Add(translationProto);
                    ConsoleLogger.LogWarning($"New translation entry for {translationProto.Original}  (Upgrade from {settings.GameVersion} to {GameConfig.gameVersion.ToFullString()})");
                }
            }

            targetFile.TranslationTable = tempTranslationTable;
            settings.GameVersion        = GameConfig.gameVersion.ToFullString();
        }
Exemple #3
0
        /// <summary>
        ///     Copy constructor to generate new Language data from in Game Data
        /// </summary>
        /// <param name="settings">Settings</param>
        /// <param name="stringProto">In game translations</param>
        public LanguageData(LanguageSettings settings, ProtoSet <StringProto> stringProto)
        {
            settings.VersionUpdate();
            TranslationTable = new List <TranslationProto>(stringProto.Length);
            var translationDelegate = GetOriginalTextDelegate <StringProto>(settings);

            for (var i = 0; i < stringProto.dataArray.Length; i++)
            {
                var proto = stringProto.dataArray[i];
                TranslationProto translationProto = new TranslationProto();
                translationProto.IsValid     = true;
                translationProto.Original    = translationDelegate(proto);
                translationProto.Translation = translationDelegate(proto);
                translationProto.Name        = proto.Name;
                TranslationTable.Add(translationProto);
            }
        }
Exemple #4
0
 /// <summary>
 ///     Constructor of the container with settings alread loaded into memory
 /// </summary>
 /// <param name="settings"></param>
 public LanguageContainer(LanguageSettings settings)
 {
     Settings = settings;
 }