Ejemplo n.º 1
0
        public static IList<TranslationItemWithCategory> LoadNeutralItems()
        {
            Translation neutralTranslation = new Translation();
            try
            {
                //Set language to neutral to get neutral translations
                GitCommands.Settings.CurrentTranslation = "";

                List<Type> translatableTypes = TranslationUtl.GetTranslatableTypes();
                foreach (Type type in translatableTypes)
                {
                    ITranslate obj = TranslationUtl.CreateInstanceOfClass(type) as ITranslate;
                    if (obj != null)
                        obj.AddTranslationItems(neutralTranslation);
                }
            }
            finally
            {
                neutralTranslation.Sort();

                //Restore translation
                GitCommands.Settings.CurrentTranslation = null;
            }

            IList<TranslationItemWithCategory> neutralItems =
                (from translationCategory in neutralTranslation.GetTranslationCategories()
                 from translationItem in translationCategory.GetTranslationItems()
                 select new TranslationItemWithCategory(translationCategory.Name, translationItem)).ToList();
            return neutralItems;
        }
Ejemplo n.º 2
0
        public static List<TranslationItemWithCategory> LoadTranslation(Translation translation, IEnumerable<TranslationItemWithCategory> neutralItems)
        {
            List<TranslationItemWithCategory> translateItems = new List<TranslationItemWithCategory>();

            var oldTranslationItems =
                (from translationCategory in translation.GetTranslationCategories()
                 from translationItem in translationCategory.GetTranslationItems()
                 select new TranslationItemWithCategory(translationCategory.Name, translationItem)).ToList();

            Dictionary<string, string> dict = new Dictionary<string, string>();
            foreach (var item in neutralItems)
            {
                var curItem =
                    (from trItem in oldTranslationItems
                     where trItem.Category.TrimStart('_') == item.Category.TrimStart('_') &&
                     trItem.Name.TrimStart('_') == item.Name.TrimStart('_') &&
                     trItem.Property == item.Property
                     select trItem).FirstOrDefault();

                if (curItem == null)
                {
                    curItem = item.Clone();
                    translateItems.Add(curItem);
                    continue;
                }

                oldTranslationItems.Remove(curItem);
                curItem.Category = item.Category;
                curItem.Name = item.Name;
                if (curItem.Status == TranslationType.Translated || curItem.Status == TranslationType.Obsolete)
                {
                    string source = curItem.NeutralValue ?? item.NeutralValue;
                    if (!String.IsNullOrEmpty(curItem.TranslatedValue) && !dict.ContainsKey(source))
                        dict.Add(source, curItem.TranslatedValue);
                }
                if ((curItem.Status == TranslationType.Translated || curItem.Status == TranslationType.Obsolete) &&
                    !curItem.IsSourceEqual(item.NeutralValue))
                    curItem.Status = TranslationType.Unfinished;
                else if (curItem.Status == TranslationType.Obsolete && curItem.IsSourceEqual(item.NeutralValue))
                    curItem.Status = TranslationType.Translated;
                if (curItem.Status == TranslationType.Unfinished)
                {
                    if (!String.IsNullOrEmpty(curItem.TranslatedValue) &&
                        curItem.OldNeutralValue == null && curItem.NeutralValue != item.NeutralValue)
                        curItem.OldNeutralValue = curItem.NeutralValue;
                }
                else
                    curItem.OldNeutralValue = null;
                curItem.NeutralValue = item.NeutralValue;
                translateItems.Add(curItem);
            }

            foreach (var item in oldTranslationItems)
            {
                if (String.IsNullOrEmpty(item.TranslatedValue))
                    continue;

                if ((item.Status == TranslationType.Translated || item.Status == TranslationType.Obsolete) &&
                    item.NeutralValue != null && !dict.ContainsKey(item.NeutralValue))
                    dict.Add(item.NeutralValue, item.TranslatedValue);

                item.Status = TranslationType.Obsolete;
                item.OldNeutralValue = null;
                translateItems.Add(item);
            }

            // update untranslated items
            var untranlatedItems = from trItem in translateItems
                                   where trItem.Status == TranslationType.New &&
                                   dict.ContainsKey(trItem.NeutralValue)
                                   select trItem;

            foreach (var untranlatedItem in untranlatedItems)
            {
                untranlatedItem.TranslatedValue = dict[untranlatedItem.NeutralValue];
                untranlatedItem.Status = TranslationType.Unfinished;
            }
            return translateItems;
        }