示例#1
0
        internal static LocalizedType ImportXml(Type type, DescriptionOptions opts, LocalizedAssembly assembly, XElement x)
        {
            string description = !opts.IsSetAssert(DescriptionOptions.Description, type) ? null :
                                 (x == null || x.Attribute("Name").Value != type.Name ? null : x.Attribute("Description")?.Value) ??
                                 (!assembly.IsDefault ? null : DescriptionManager.DefaultTypeDescription(type));

            var xMembers = x == null ? null : x.Elements("Member")
                           .Select(m => KVP.Create(m.Attribute("Name").Value, m.Attribute("Description").Value))
                           .Distinct(m => m.Key)
                           .ToDictionary();

            LocalizedType result = new LocalizedType
            {
                Type     = type,
                Options  = opts,
                Assembly = assembly,

                Description       = description,
                PluralDescription = !opts.IsSetAssert(DescriptionOptions.PluralDescription, type) ? null :
                                    ((x == null || x.Attribute("Name").Value != type.Name ? null : x.Attribute("PluralDescription")?.Value) ??
                                     (!assembly.IsDefault ? null : type.GetCustomAttribute <PluralDescriptionAttribute>()?.PluralDescription) ??
                                     (description == null ? null : NaturalLanguageTools.Pluralize(description, assembly.Culture))),

                Gender = !opts.IsSetAssert(DescriptionOptions.Gender, type) ? null :
                         ((x == null ? null : x.Attribute("Gender")?.Value.Single()) ??
                          (!assembly.IsDefault ? null : type.GetCustomAttribute <GenderAttribute>()?.Gender) ??
                          (description == null ? null : NaturalLanguageTools.GetGender(description, assembly.Culture))),

                Members = !opts.IsSetAssert(DescriptionOptions.Members, type) ? null :
                          (from m in GetMembers(type)
                           where DescriptionManager.OnShouldLocalizeMember(m)
                           let value = xMembers?.TryGetC(m.Name) ?? (!assembly.IsDefault ? null : DescriptionManager.DefaultMemberDescription(m))
                                       where value != null
                                       select KVP.Create(m.Name, value))
                          .ToDictionary()
            };

            return(result);
        }
示例#2
0
        public static LocalizedAssembly FromXml(Assembly assembly, CultureInfo cultureInfo, XDocument doc, Dictionary <string, string> replacements /*new -> old*/)
        {
            Dictionary <string, XElement> file = doc == null ? null : doc.Element("Translations").Elements("Type")
                                                 .Select(x => KVP.Create(x.Attribute("Name").Value, x))
                                                 .Distinct(x => x.Key)
                                                 .ToDictionary();

            var result = new LocalizedAssembly
            {
                Assembly  = assembly,
                Culture   = cultureInfo,
                IsDefault = GetDefaultAssemblyCulture(assembly) == cultureInfo.Name
            };

            result.Types = (from t in assembly.GetTypes()
                            let opts = GetDescriptionOptions(t)
                                       where opts != DescriptionOptions.None
                                       let x = file?.TryGetC(replacements?.TryGetC(t.Name) ?? t.Name)
                                               select LocalizedType.ImportXml(t, opts, result, x))
                           .ToDictionary(lt => lt.Type);

            return(result);
        }
 internal void Apply(LocalizedType lt)
 {
     switch (Kind)
     {
         case TranslationRecordKind.Description: lt.Description = Value; break;
         case TranslationRecordKind.PluralDescription: lt.PluralDescription = Value; break;
         case TranslationRecordKind.Gender: lt.Gender = Value != null ? (char?)Value[0] : null; break;
         case TranslationRecordKind.Member: lt.Members[Member] = Value; break;
         default: throw new InvalidOperationException("Unexpected kind {0}".FormatWith(Kind));
     }
 }
        static Dictionary<CultureInfo, TypeNameConflict> TypeConflicts(LocalizedType target, LocalizedType master, List<LocalizedType> support)
        {
            if(master.Description == null)
                return null;

            if (target != null && target.Description != null)
                return null;

            var sentences = new Dictionary<CultureInfo, TypeNameConflict>();

            sentences.Add(master.Assembly.Culture, new TypeNameConflict { Original = master });

            sentences.AddRange(from lt in support
                               where lt.Description != null
                               select KVP.Create(lt.Assembly.Culture, new TypeNameConflict { Original = lt }));

            return sentences;
        }
        static Dictionary<CultureInfo, MemberNameConflict> MemberConflicts(string member, LocalizedType target, LocalizedType master, List<LocalizedType> support)
        {
            if (master.Members.TryGetC(member) == null)
                return null;

            if (target != null && target.Members.TryGetC(member) != null)
                return null;

            var sentences = new Dictionary<CultureInfo, MemberNameConflict>();

            sentences.Add(master.Assembly.Culture, new MemberNameConflict { Original = master.Members.TryGetC(member) });

            sentences.AddRange(from lt in support
                               where lt.Members.TryGetC(member).HasText()
                               select KVP.Create(lt.Assembly.Culture, new MemberNameConflict { Original = lt.Members.TryGetC(member) }));

            return sentences;
        }
        private IEnumerable<KeyValuePair<string, string>> GetAllTranslations(LocalizedType from, LocalizedType to)
        {
            if(from.Description.HasText() && to.Description.HasText())
                yield return KVP.Create(from.Description, to.Description);

            if(from.PluralDescription.HasText() && to.PluralDescription.HasText())
                yield return KVP.Create(from.PluralDescription, to.PluralDescription);

            foreach (var item in from.Members)
	        {
                var toMember = to.Members.TryGetC(item.Key);

                if(toMember.HasText())
                    yield return KVP.Create(item.Value, toMember);
	        }
        }
        internal static LocalizedType ImportXml(Type type, DescriptionOptions opts, LocalizedAssembly assembly, XElement x)
        {
            string name = !opts.IsSetAssert(DescriptionOptions.Description, type) ? null :
                (x == null ? null : x.Attribute("Description").Try(xa => xa.Value)) ??
                (!assembly.IsDefault ? null : DescriptionManager.DefaultTypeDescription(type));

            var xMembers = x == null ? null : x.Elements("Member")
                .Select(m => KVP.Create(m.Attribute("Name").Value, m.Attribute("Description").Value))
                .Distinct(m => m.Key)
                .ToDictionary();

            LocalizedType result = new LocalizedType
            {
                Type = type,
                Options = opts,
                Assembly = assembly,

                Description = name,
                PluralDescription = !opts.IsSetAssert(DescriptionOptions.PluralDescription, type) ? null :
                             ((x == null ? null : x.Attribute("PluralDescription").Try(xa => xa.Value)) ??
                             (!assembly.IsDefault ? null : type.SingleAttribute<PluralDescriptionAttribute>().Try(t => t.PluralDescription)) ??
                             (name == null ? null : NaturalLanguageTools.Pluralize(name, assembly.Culture))),

                Gender = !opts.IsSetAssert(DescriptionOptions.Gender, type) ? null :
                         ((x == null ? null : x.Attribute("Gender").Try(xa => xa.Value.Single())) ??
                         (!assembly.IsDefault ? null : type.SingleAttribute<GenderAttribute>().Try(t => t.Gender)) ??
                         (name == null ? null : NaturalLanguageTools.GetGender(name, assembly.Culture))),

                Members = !opts.IsSetAssert(DescriptionOptions.Members, type) ? null :
                          (from m in GetMembers(type)
                           where DescriptionManager.OnShouldLocalizeMember(m)
                           let value = xMembers.TryGetC(m.Name) ?? (!assembly.IsDefault ? null : DescriptionManager.DefaultMemberDescription(m))
                           where value != null
                           select KVP.Create(m.Name, value))
                           .ToDictionary()
            };

            return result;
        }