protected virtual string GetExpressionName(ExpressionInfo ei)
        {
            if (ei.Property.Name == "Parent")
            {
                return("Children");
            }

            if (ei.IsUnique)
            {
                return(Reflector.CleanTypeName(ei.ToType));
            }

            return(NaturalLanguageTools.Pluralize(Reflector.CleanTypeName(ei.ToType).SpacePascal()).ToPascal());
        }
示例#2
0
        public JsonNetResult PluralAndGender()
        {
            string name = Request.Form["name"];

            CultureInfo ci = CultureInfo.GetCultureInfo(regex.Match(name).Groups["lang"].Value);

            string text = Request.Form["text"];

            return(this.JsonNet(new
            {
                gender = NaturalLanguageTools.GetGender(text, ci),
                plural = NaturalLanguageTools.Pluralize(text, ci)
            }));
        }
示例#3
0
        public bool IsTypeCompleted()
        {
            if ((Options & DescriptionOptions.Description) != 0 && !this.Description.HasText())
            {
                return(false);
            }

            if ((Options & DescriptionOptions.PluralDescription) != 0 && !this.PluralDescription.HasText())
            {
                return(false);
            }

            if ((Options & DescriptionOptions.Gender) != 0 && this.Gender == null && NaturalLanguageTools.HasGenders(this.Assembly.Culture))
            {
                return(false);
            }

            return(true);
        }
示例#4
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?.Elements("Member")
                           .Select(m => KeyValuePair.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?.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 KeyValuePair.Create(m.Name, value))
                          .ToDictionary()
            };

            return(result);
        }
示例#5
0
 public string?Gender(string culture, [Required, FromBody] string text)
 {
     return(NaturalLanguageTools.GetGender(text, CultureInfo.GetCultureInfo(culture))?.ToString());
 }
示例#6
0
 public string Pluralize(string culture, [Required, FromBody] string text)
 {
     return(NaturalLanguageTools.Pluralize(text, CultureInfo.GetCultureInfo(culture)));
 }
示例#7
0
    public static string GetPropertyHelp(PropertyRoute pr)
    {
        string?validations = Validator.TryGetPropertyValidator(pr)?.Let(vs => vs.Validators.Where(v => !(v is NotNullValidatorAttribute)).CommaAnd(v => v.HelpMessage));

        if (validations.HasText())
        {
            validations = HelpMessage.Should.NiceToString() + validations;
        }

        validations += ".";

        if (Reflector.IsIEntity(pr.Type))
        {
            Implementations imp = Schema.Current.FindImplementations(pr);

            return(EntityProperty(pr, pr.Type, imp.TypeLinks(pr.Type)) + validations);
        }
        else if (pr.Type.IsLite())
        {
            Type cleanType = Lite.Extract(pr.Type) !;

            Implementations imp = Schema.Current.FindImplementations(pr);

            return(EntityProperty(pr, cleanType, imp.TypeLinks(cleanType)) + validations);
        }
        else if (Reflector.IsEmbeddedEntity(pr.Type))
        {
            return(EntityProperty(pr, pr.Type, pr.Type.NiceName()));
        }
        else if (Reflector.IsMList(pr.Type))
        {
            Type elemType = pr.Type.ElementType() !;

            if (elemType.IsIEntity())
            {
                Implementations imp = Schema.Current.FindImplementations(pr.Add("Item"));

                return(HelpMessage._0IsACollectionOfElements1.NiceToString(pr.PropertyInfo !.NiceName(), imp.TypeLinks(elemType)) + validations);
            }
            else if (elemType.IsLite())
            {
                Implementations imp = Schema.Current.FindImplementations(pr.Add("Item"));

                return(HelpMessage._0IsACollectionOfElements1.NiceToString(pr.PropertyInfo !.NiceName(), imp.TypeLinks(Lite.Extract(elemType) !)) + validations);
            }
            else if (Reflector.IsEmbeddedEntity(elemType))
            {
                return(HelpMessage._0IsACollectionOfElements1.NiceToString(pr.PropertyInfo !.NiceName(), elemType.NiceName()) + validations);
            }
            else
            {
                string valueType = ValueType(pr.Add("Item"));
                return(HelpMessage._0IsACollectionOfElements1.NiceToString(pr.PropertyInfo !.NiceName(), valueType) + validations);
            }
        }
        else if (pr.Type.UnNullify() == typeof(PrimaryKey))
        {
            var vt = ValueType(PrimaryKey.Type(pr.RootType), false, null, null);
            return(HelpMessage._0IsThePrimaryKeyOf1OfType2.NiceToString().FormatWith(pr.PropertyInfo !.NiceName(), pr.RootType.NiceName(), vt) + validations);
        }
        else
        {
            string valueType = ValueType(pr);

            return(HelpMessage._0IsA1.NiceToString().ForGenderAndNumber(NaturalLanguageTools.GetGender(valueType)).FormatWith(pr.PropertyInfo !.NiceName(), valueType) + validations);
        }
    }
示例#8
0
        public override void Execute()
        {
            #line 10 "..\..\Translation\Views\View.cshtml"

            CultureInfo culture        = ViewBag.Culture;
            CultureInfo defaultCulture = ViewBag.DefaultCulture;
            Assembly    assembly       = ViewBag.Assembly;

            ViewBag.Title = TranslationMessage.View0In1.NiceToString().FormatWith(assembly.GetName().Name, culture == null ? TranslationMessage.AllLanguages.NiceToString() : culture.DisplayName);

            Func <CultureInfo, bool> editCulture = c => culture == null || culture.Name == c.Name;

            Func <LocalizedType, string> locKey = lt => lt.Type.Name + "." + lt.Assembly.Culture.Name;


            #line default
            #line hidden
            WriteLiteral("\r\n");


            #line 21 "..\..\Translation\Views\View.cshtml"
            Write(Html.ScriptCss("~/Translation/Content/Translation.css"));


            #line default
            #line hidden
            WriteLiteral("\r\n\r\n<h2>");


            #line 23 "..\..\Translation\Views\View.cshtml"
            Write(ViewBag.Title);


            #line default
            #line hidden
            WriteLiteral("</h2>\r\n\r\n<div>\r\n");


            #line 26 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 26 "..\..\Translation\Views\View.cshtml"
            using (Html.BeginForm("View", "Translation", FormMethod.Get))
            {
            #line default
            #line hidden

            #line 28 "..\..\Translation\Views\View.cshtml"
                Write(Html.Hidden("assembly"));


            #line default
            #line hidden

            #line 28 "..\..\Translation\Views\View.cshtml"



            #line default
            #line hidden

            #line 29 "..\..\Translation\Views\View.cshtml"
                Write(Html.Hidden("culture"));


            #line default
            #line hidden

            #line 29 "..\..\Translation\Views\View.cshtml"



            #line default
            #line hidden

            #line 30 "..\..\Translation\Views\View.cshtml"
                Write(Html.TextBox("filter", (string)ViewBag.Filter));


            #line default
            #line hidden

            #line 30 "..\..\Translation\Views\View.cshtml"
                ;



            #line default
            #line hidden
                WriteLiteral("        <input");

                WriteLiteral(" type=\"hidden\"");

                WriteLiteral(" name=\"searchPressed\"");

                WriteLiteral(" value=\"true\"");

                WriteLiteral(" />\r\n");

                WriteLiteral("        <input");

                WriteLiteral(" type=\"submit\"");

                WriteAttribute("value", Tuple.Create(" value=\"", 1230), Tuple.Create("\"", 1279)

            #line 33 "..\..\Translation\Views\View.cshtml"
                               , Tuple.Create(Tuple.Create("", 1238), Tuple.Create <System.Object, System.Int32>(TranslationMessage.Search.NiceToString()

            #line default
            #line hidden
                                                                                                                 , 1238), false)
                               );

                WriteLiteral(" />\r\n");


            #line 34 "..\..\Translation\Views\View.cshtml"
            }


            #line default
            #line hidden
            WriteLiteral("</div>\r\n\r\n");


            #line 37 "..\..\Translation\Views\View.cshtml"
            if (Model == null)
            {
            #line default
            #line hidden
                WriteLiteral("    <em>");


            #line 39 "..\..\Translation\Views\View.cshtml"
                Write(TranslationMessage.PressSearchForResults.NiceToString());


            #line default
            #line hidden
                WriteLiteral("</em>\r\n");


            #line 40 "..\..\Translation\Views\View.cshtml"
            }
            else
            {
                var defaultLocAssembly = Model.GetOrThrow(defaultCulture);
                var filter             = (string)ViewBag.Filter;
                var all = string.IsNullOrEmpty(filter);

                var types = defaultLocAssembly.Types.Values.Where(lt => all || Model.Values.Any(la => la.Types[lt.Type].Contains(filter))).ToList();

                if (types.IsEmpty())
                {
            #line default
            #line hidden
                    WriteLiteral("        <strong>");


            #line 51 "..\..\Translation\Views\View.cshtml"
                    Write(TranslationMessage.NoResultsFound.NiceToString());


            #line default
            #line hidden
                    WriteLiteral("</strong>\r\n");


            #line 52 "..\..\Translation\Views\View.cshtml"
                }
                else
                {
                    using (Html.BeginForm((TranslationController tc) => tc.SaveView(assembly.GetName().Name, culture == null ? null : culture.Name, filter)))
                    {
            #line default
            #line hidden
                        WriteLiteral("            <table");

                        WriteLiteral(" id=\"results\"");

                        WriteLiteral(" style=\"width: 100%; margin: 0px\"");

                        WriteLiteral(" class=\"st\"");

                        WriteAttribute("pluralandgender", Tuple.Create(" pluralandgender=\"", 2072), Tuple.Create("\"", 2153)

            #line 59 "..\..\Translation\Views\View.cshtml"
                                       , Tuple.Create(Tuple.Create("", 2090), Tuple.Create <System.Object, System.Int32>(Url.Action((TranslationController tc) => tc.PluralAndGender())

            #line default
            #line hidden
                                                                                                                         , 2090), false)
                                       );

                        WriteLiteral(">\r\n");


            #line 60 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 60 "..\..\Translation\Views\View.cshtml"
                        foreach (var defaultLocType in types)
                        {
                            bool hasDescription = defaultLocType.Options.IsSet(DescriptionOptions.Description);

                            bool hasPlural = defaultLocType.Options.IsSet(DescriptionOptions.PluralDescription);

                            bool hasGenderOption = defaultLocType.Options.IsSet(DescriptionOptions.Gender);

                            bool hasMembers = defaultLocType.Options.IsSet(DescriptionOptions.Members);



            #line default
            #line hidden
                            WriteLiteral("                    <thead>\r\n                        <tr>\r\n                      " +
                                         "      <th");

                            WriteLiteral(" class=\"leftCell\"");

                            WriteLiteral(">");


            #line 73 "..\..\Translation\Views\View.cshtml"
                            Write(TranslationMessage.Type.NiceToString());


            #line default
            #line hidden
                            WriteLiteral("</th>\r\n                            <th");

                            WriteLiteral(" colspan=\"4\"");

                            WriteLiteral(" class=\"titleCell\"");

                            WriteLiteral(">");


            #line 74 "..\..\Translation\Views\View.cshtml"
                            Write(defaultLocType.Type.Name);


            #line default
            #line hidden
                            WriteLiteral(" (");


            #line 74 "..\..\Translation\Views\View.cshtml"
                            Write("/".Combine(hasDescription ? "Singular" : null, hasPlural ? "Plural" : null, hasGenderOption ? "Gender" : null, hasMembers ? "Members" : null));


            #line default
            #line hidden
                            WriteLiteral(")</th>\r\n                        </tr>\r\n                    </thead>\r\n");


            #line 77 "..\..\Translation\Views\View.cshtml"

                            if (defaultLocType.Options.IsSet(DescriptionOptions.Description))
                            {
                                foreach (var locType in Model.Values.Select(la => la.Types[defaultLocType.Type])
                                         .Where(lt => editCulture(lt.Assembly.Culture) || lt.Description.HasText())
                                         .Where(lt => all || lt.ContainsDescription(filter)))
                                {
                                    bool hasGender = hasGenderOption && NaturalLanguageTools.HasGenders(locType.Assembly.Culture);



            #line default
            #line hidden
                                    WriteLiteral("                            <tr>\r\n                                <th");

                                    WriteLiteral(" class=\"leftCell\"");

                                    WriteLiteral(">");


            #line 87 "..\..\Translation\Views\View.cshtml"
                                    Write(locType.Assembly.Culture.Name);


            #line default
            #line hidden
                                    WriteLiteral("</th>\r\n                                <th");

                                    WriteLiteral(" class=\"smallCell monospaceCell\"");

                                    WriteLiteral(">\r\n");


            #line 89 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 89 "..\..\Translation\Views\View.cshtml"
                                    if (hasGender)
                                    {
                                        if (editCulture(locType.Assembly.Culture))
                                        {
                                            var gd = NaturalLanguageTools.GenderDetectors.TryGetC(locType.Assembly.Culture.TwoLetterISOLanguageName);

                                            var list = gd?.Pronoms.EmptyIfNull()
                                                       .Select(pi => new SelectListItem {
                                                Value = pi.Gender.ToString(), Text = pi.Singular, Selected = pi.Gender == locType.Gender
                                            }).ToList();

                                            if (locType.Gender == null)
                                            {
                                                list.Insert(0, new SelectListItem {
                                                    Value = "", Text = "-", Selected = true
                                                });
                                            }


            #line default
            #line hidden

            #line 102 "..\..\Translation\Views\View.cshtml"
                                            Write(Html.SafeDropDownList(locKey(locType) + ".Gender", list));


            #line default
            #line hidden

            #line 102 "..\..\Translation\Views\View.cshtml"
                                            ;
                                        }
                                        else
                                        {
            #line default
            #line hidden

            #line 106 "..\..\Translation\Views\View.cshtml"
                                            Write(locType.Gender != null ? NaturalLanguageTools.GetPronom(locType.Gender.Value, plural: false, culture: locType.Assembly.Culture) : "-");


            #line default
            #line hidden

            #line 106 "..\..\Translation\Views\View.cshtml"
                                        }
                                    }


            #line default
            #line hidden
                                    WriteLiteral("                                </th>\r\n                                <th");

                                    WriteLiteral(" class=\"monospaceCell\"");

                                    WriteLiteral(">\r\n");


            #line 111 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 111 "..\..\Translation\Views\View.cshtml"
                                    if (editCulture(locType.Assembly.Culture))
                                    {
            #line default
            #line hidden

            #line 113 "..\..\Translation\Views\View.cshtml"
                                        Write(Html.TextArea(locKey(locType) + ".Description", locType.Description, new { style = "width:90%;" }));


            #line default
            #line hidden

            #line 113 "..\..\Translation\Views\View.cshtml"
                                    }
                                    else
                                    {
            #line default
            #line hidden

            #line 117 "..\..\Translation\Views\View.cshtml"
                                        Write(locType.Description);


            #line default
            #line hidden

            #line 117 "..\..\Translation\Views\View.cshtml"
                                    }


            #line default
            #line hidden
                                    WriteLiteral("                                </th>\r\n                                <th");

                                    WriteLiteral(" class=\"smallCell\"");

                                    WriteLiteral(">\r\n");


            #line 121 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 121 "..\..\Translation\Views\View.cshtml"
                                    if (hasPlural && hasGender)
                                    {
            #line default
            #line hidden

            #line 123 "..\..\Translation\Views\View.cshtml"
                                        Write(locType.Gender != null ? NaturalLanguageTools.GetPronom(locType.Gender.Value, plural: true, culture: locType.Assembly.Culture) : "-");


            #line default
            #line hidden

            #line 123 "..\..\Translation\Views\View.cshtml"
                                    }


            #line default
            #line hidden
                                    WriteLiteral("                                </th>\r\n                                <th");

                                    WriteLiteral(" class=\"monospaceCell\"");

                                    WriteLiteral(">\r\n");


            #line 127 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 127 "..\..\Translation\Views\View.cshtml"
                                    if (hasPlural)
                                    {
                                        if (editCulture(locType.Assembly.Culture))
                                        {
            #line default
            #line hidden

            #line 131 "..\..\Translation\Views\View.cshtml"
                                            Write(Html.TextArea(locKey(locType) + ".PluralDescription", locType.PluralDescription, new { style = "width:90%;" }));


            #line default
            #line hidden

            #line 131 "..\..\Translation\Views\View.cshtml"
                                        }
                                        else
                                        {
            #line default
            #line hidden

            #line 135 "..\..\Translation\Views\View.cshtml"
                                            Write(locType.PluralDescription);


            #line default
            #line hidden

            #line 135 "..\..\Translation\Views\View.cshtml"
                                        }
                                    }


            #line default
            #line hidden
                                    WriteLiteral("                                </th>\r\n                            </tr>\r\n");


            #line 140 "..\..\Translation\Views\View.cshtml"
                                }
                            }


                            if (defaultLocType.Options.IsSet(DescriptionOptions.Members))
                            {
                                foreach (string key in defaultLocType.Members.Keys.Where(k => all || k.Contains(filter, StringComparison.InvariantCultureIgnoreCase) ||
                                                                                         Model.Values.Select(la => la.Types[defaultLocType.Type]).Any(t => t.Members.ContainsKey(k) && t.Members[k].Contains(filter, StringComparison.InvariantCultureIgnoreCase))))
                                {
            #line default
            #line hidden
                                    WriteLiteral("                            <tr>\r\n                                <th");

                                    WriteLiteral(" class=\"leftCell\"");

                                    WriteLiteral(">\r\n");

                                    WriteLiteral("                                    ");


            #line 151 "..\..\Translation\Views\View.cshtml"
                                    Write(TranslationMessage.Member.NiceToString());


            #line default
            #line hidden
                                    WriteLiteral("\r\n                                </th>\r\n                                <th");

                                    WriteLiteral(" colspan=\"4\"");

                                    WriteLiteral(">\r\n");

                                    WriteLiteral("                                    ");


            #line 154 "..\..\Translation\Views\View.cshtml"
                                    Write(key);


            #line default
            #line hidden
                                    WriteLiteral("\r\n                                </th>\r\n                            </tr>\r\n");


            #line 157 "..\..\Translation\Views\View.cshtml"

                                    foreach (var locType in Model.Values.Select(la => la.Types[defaultLocType.Type]).Where(lt => editCulture(lt.Assembly.Culture) || lt.Members.ContainsKey(key)))
                                    {
            #line default
            #line hidden
                                        WriteLiteral("                                <tr>\r\n                                    <td");

                                        WriteLiteral(" class=\"leftCell\"");

                                        WriteLiteral(">");


            #line 161 "..\..\Translation\Views\View.cshtml"
                                        Write(locType.Assembly.Culture.Name);


            #line default
            #line hidden
                                        WriteLiteral("</td>\r\n                                    <td");

                                        WriteLiteral(" colspan=\"4\"");

                                        WriteLiteral(" class=\"monospaceCell\"");

                                        WriteLiteral(">\r\n\r\n");


            #line 164 "..\..\Translation\Views\View.cshtml"


            #line default
            #line hidden

            #line 164 "..\..\Translation\Views\View.cshtml"
                                        if (editCulture(locType.Assembly.Culture))
                                        {
            #line default
            #line hidden

            #line 166 "..\..\Translation\Views\View.cshtml"
                                            Write(Html.TextArea(locKey(locType) + ".Member." + key, locType.Members.TryGetC(key), new { style = "width:90%;" }));


            #line default
            #line hidden

            #line 166 "..\..\Translation\Views\View.cshtml"
                                        }
                                        else
                                        {
            #line default
            #line hidden

            #line 170 "..\..\Translation\Views\View.cshtml"
                                            Write(locType.Members.TryGetC(key));


            #line default
            #line hidden

            #line 170 "..\..\Translation\Views\View.cshtml"
                                        }


            #line default
            #line hidden
                                        WriteLiteral("                                    </td>\r\n                                </tr>\r" +
                                                     "\n");


            #line 174 "..\..\Translation\Views\View.cshtml"
                                    }
                                }
                            }
                        }


            #line default
            #line hidden
                        WriteLiteral("            </table>\r\n");

                        WriteLiteral("            <input");

                        WriteLiteral(" type=\"submit\"");

                        WriteAttribute("value", Tuple.Create(" value=\"", 9259), Tuple.Create("\"", 9306)

            #line 179 "..\..\Translation\Views\View.cshtml"
                                       , Tuple.Create(Tuple.Create("", 9267), Tuple.Create <System.Object, System.Int32>(TranslationMessage.Save.NiceToString()

            #line default
            #line hidden
                                                                                                                         , 9267), false)
                                       );

                        WriteLiteral(" />\r\n");


            #line 180 "..\..\Translation\Views\View.cshtml"
                    }
                }
            }


            #line default
            #line hidden
            WriteLiteral("\r\n<script>\r\n    $(function () {\r\n");

            WriteLiteral("        ");


            #line 186 "..\..\Translation\Views\View.cshtml"
            Write(Signum.Web.Translation.TranslationClient.Module["fixTextAreas"]());


            #line default
            #line hidden
            WriteLiteral("\r\n    });\r\n</script>\r\n\r\n");
        }
示例#9
0
 protected virtual string GetFieldMListName(DiffTable table, DiffTable relatedTable, MListInfo mListInfo)
 {
     return(NaturalLanguageTools.Pluralize(relatedTable.Name.Name.RemovePrefix(table.Name.Name)));
 }
        protected virtual string GetFieldMListName(DiffTable table, DiffTable relatedTable, MListInfo mListInfo)
        {
            ObjectName name = mListInfo.TrivialElementColumn?.ForeignKey.TargetTable ?? relatedTable.Name;

            return NaturalLanguageTools.Pluralize(GetEntityName(name).RemoveSuffix("Entity")).FirstLower();
        }
示例#11
0
        public override void Execute()
        {
            #line 10 "..\..\Translation\Views\Sync.cshtml"

            CultureInfo       culture      = ViewBag.Culture;
            int               totalTypes   = ViewBag.TotalTypes;
            Lite <RoleEntity> selectedRole = ViewBag.Role;

            ViewBag.Title = TranslationMessage.Synchronize0In1.NiceToString().FormatWith(Model.LocalizedAssembly.Assembly.GetName().Name, Model.LocalizedAssembly.Culture.DisplayName);

            if (Model.Types.Count < totalTypes)
            {
                ViewBag.Title = ViewBag.Title + " [{0}/{1} {2}]".FormatWith(Model.Types.Count, totalTypes, selectedRole);
            }

            Func <IEnumerable <string>, List <SelectListItem> > selectListItems = values =>
            {
                var items = values.Select(s => new SelectListItem {
                    Value = s, Text = s
                }).ToList();

                if (values.Count() > 1 && values.Distinct().Count() == 1 || TranslationClient.Translator.AutoSelect())
                {
                    items.First().Selected = true;
                    items.Insert(0, new SelectListItem {
                        Value = "", Text = "-"
                    });
                }
                else
                {
                    items.Insert(0, new SelectListItem {
                        Value = "", Text = "-", Selected = true
                    });
                }

                return(items);
            };

            Func <LocalizedType, string> locKey = lt => lt.Type.Name + "." + lt.Assembly.Culture.Name;


            #line default
            #line hidden
            WriteLiteral("\r\n\r\n");


            #line 42 "..\..\Translation\Views\Sync.cshtml"
            Write(Html.ScriptCss("~/Translation/Content/Translation.css"));


            #line default
            #line hidden
            WriteLiteral("\r\n\r\n");


            #line 44 "..\..\Translation\Views\Sync.cshtml"
            if (Model.Types.IsEmpty())
            {
            #line default
            #line hidden
                WriteLiteral("    <h2>");


            #line 46 "..\..\Translation\Views\Sync.cshtml"
                Write(TranslationMessage._0AlreadySynchronized.NiceToString().FormatWith(Model.LocalizedAssembly.Assembly.GetName().Name));


            #line default
            #line hidden
                WriteLiteral("</h2>\r\n");


            #line 47 "..\..\Translation\Views\Sync.cshtml"
            }
            else
            {
            #line default
            #line hidden
                WriteLiteral("    <h2>");


            #line 50 "..\..\Translation\Views\Sync.cshtml"
                Write(ViewBag.Title);


            #line default
            #line hidden
                WriteLiteral("</h2>\r\n");


            #line 51 "..\..\Translation\Views\Sync.cshtml"

                using (Html.BeginForm((TranslationController c) => c.SaveSync(Model.LocalizedAssembly.Assembly.GetName().Name, culture.Name)))
                {
            #line default
            #line hidden
                    WriteLiteral("        <table");

                    WriteLiteral(" id=\"results\"");

                    WriteLiteral(" style=\"width: 100%; margin: 0px\"");

                    WriteLiteral(" class=\"st\"");

                    WriteLiteral("\r\n               data-pluralandgender=\"");


            #line 55 "..\..\Translation\Views\Sync.cshtml"
                    Write(Url.Action((TranslationController tc) => tc.PluralAndGender()));


            #line default
            #line hidden
                    WriteLiteral("\"");

                    WriteLiteral("\r\n               data-feedback=\"");


            #line 56 "..\..\Translation\Views\Sync.cshtml"
                    Write(Url.Action("Feedback", "Translation"));


            #line default
            #line hidden
                    WriteLiteral("\"");

                    WriteLiteral("\r\n               data-culture=\"");


            #line 57 "..\..\Translation\Views\Sync.cshtml"
                    Write(culture.Name);


            #line default
            #line hidden
                    WriteLiteral("\"");

                    WriteLiteral(">\r\n");


            #line 58 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 58 "..\..\Translation\Views\Sync.cshtml"
                    foreach (var typeChanges in Model.Types)
                    {
            #line default
            #line hidden
                        WriteLiteral("                <thead>\r\n                    <tr>\r\n                        <th");

                        WriteLiteral(" class=\"leftCell\"");

                        WriteLiteral(">");


            #line 62 "..\..\Translation\Views\Sync.cshtml"
                        Write(TranslationMessage.Type.NiceToString());


            #line default
            #line hidden
                        WriteLiteral("</th>\r\n                        <th");

                        WriteLiteral(" colspan=\"4\"");

                        WriteLiteral(" class=\"titleCell\"");

                        WriteLiteral(">");


            #line 63 "..\..\Translation\Views\Sync.cshtml"
                        Write(typeChanges.Type.Type.Name);


            #line default
            #line hidden
                        WriteLiteral("</th>\r\n                    </tr>\r\n                </thead>\r\n");


            #line 66 "..\..\Translation\Views\Sync.cshtml"

                        if (typeChanges.TypeConflict != null)
                        {
                            bool hasGenderOption = typeChanges.Type.Options.IsSet(DescriptionOptions.Gender);
                            bool hasPlural       = typeChanges.Type.Options.IsSet(DescriptionOptions.PluralDescription);

                            foreach (var tc in typeChanges.TypeConflict)
                            {
                                var locType = tc.Value.Original;

                                var hasGender = hasGenderOption && NaturalLanguageTools.HasGenders(tc.Key);


            #line default
            #line hidden
                                WriteLiteral("                        <tr>\r\n                            <th");

                                WriteLiteral(" class=\"leftCell\"");

                                WriteLiteral(">");


            #line 79 "..\..\Translation\Views\Sync.cshtml"
                                Write(tc.Key.Name);


            #line default
            #line hidden
                                WriteLiteral("</th>\r\n                            <th");

                                WriteLiteral(" class=\"smallCell monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 81 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 81 "..\..\Translation\Views\Sync.cshtml"
                                if (hasGender)
                                {
            #line default
            #line hidden

            #line 83 "..\..\Translation\Views\Sync.cshtml"
                                    Write(locType.Gender != null ? NaturalLanguageTools.GetPronom(locType.Gender.Value, plural: false, culture: locType.Assembly.Culture) : "-");


            #line default
            #line hidden

            #line 83 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("                            </th>\r\n                            <th");

                                WriteLiteral(" class=\"monospaceCell\"");

                                WriteLiteral(">\r\n");

                                WriteLiteral("                                ");


            #line 87 "..\..\Translation\Views\Sync.cshtml"
                                Write(locType.Description);


            #line default
            #line hidden
                                WriteLiteral("\r\n                            </th>\r\n                            <th");

                                WriteLiteral(" class=\"smallCell monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 90 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 90 "..\..\Translation\Views\Sync.cshtml"
                                if (hasGender && hasPlural)
                                {
            #line default
            #line hidden

            #line 92 "..\..\Translation\Views\Sync.cshtml"
                                    Write(locType.Gender != null ? NaturalLanguageTools.GetPronom(locType.Gender.Value, plural: true, culture: locType.Assembly.Culture) : "-");


            #line default
            #line hidden

            #line 92 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("                            </th>\r\n                            <th");

                                WriteLiteral(" class=\"monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 96 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 96 "..\..\Translation\Views\Sync.cshtml"
                                if (hasPlural)
                                {
            #line default
            #line hidden

            #line 98 "..\..\Translation\Views\Sync.cshtml"
                                    Write(locType.PluralDescription ?? "-");


            #line default
            #line hidden

            #line 98 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("                            </th>\r\n                        </tr>\r\n");


            #line 102 "..\..\Translation\Views\Sync.cshtml"
                            }

                            {
                                var locType = typeChanges.Type;

                                var hasGender = hasGenderOption && NaturalLanguageTools.HasGenders(culture);



            #line default
            #line hidden
                                WriteLiteral("                        <tr>\r\n                            <th");

                                WriteLiteral(" class=\"leftCell\"");

                                WriteLiteral(">");


            #line 110 "..\..\Translation\Views\Sync.cshtml"
                                Write(culture.Name);


            #line default
            #line hidden
                                WriteLiteral("</th>\r\n                            <th");

                                WriteLiteral(" class=\"smallCell monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 112 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 112 "..\..\Translation\Views\Sync.cshtml"
                                if (hasGender)
                                {
                                    var gd = NaturalLanguageTools.GenderDetectors.TryGetC(locType.Assembly.Culture.TwoLetterISOLanguageName);

                                    var list = gd?.Pronoms.EmptyIfNull()
                                               .Select(pi => new SelectListItem {
                                        Value = pi.Gender.ToString(), Text = pi.Singular, Selected = pi.Gender == locType.Gender
                                    }).ToList();

                                    if (typeChanges.Type.Gender == null)
                                    {
                                        list.Insert(0, new SelectListItem {
                                            Value = "", Text = "-", Selected = true
                                        });
                                    }


            #line default
            #line hidden

            #line 123 "..\..\Translation\Views\Sync.cshtml"
                                    Write(Html.SafeDropDownList(locKey(typeChanges.Type) + ".Gender", list));


            #line default
            #line hidden

            #line 123 "..\..\Translation\Views\Sync.cshtml"
                                    ;
                                }


            #line default
            #line hidden
                                WriteLiteral("\r\n                            </th>\r\n                            <th");

                                WriteLiteral(" class=\"monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 128 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 128 "..\..\Translation\Views\Sync.cshtml"

                                var items = selectListItems(typeChanges.TypeConflict.Values.Select(a => a.Translated));

                                var elemName = locKey(typeChanges.Type) + ".Description";
                                if (items.Count == 1)
                                {
            #line default
            #line hidden
                                    WriteLiteral("                                    <textarea");

                                    WriteAttribute("name", Tuple.Create(" name=\"", 6201), Tuple.Create("\"", 6217)

            #line 134 "..\..\Translation\Views\Sync.cshtml"
                                                   , Tuple.Create(Tuple.Create("", 6208), Tuple.Create <System.Object, System.Int32>(elemName

            #line default
            #line hidden
                                                                                                                                     , 6208), false)
                                                   );

                                    WriteLiteral(" style=\"width:90%\"");

                                    WriteLiteral(">");


            #line 134 "..\..\Translation\Views\Sync.cshtml"
                                    Write(items.First());


            #line default
            #line hidden
                                    WriteLiteral("</textarea>\r\n");

                                    WriteLiteral("                                    <button");

                                    WriteLiteral(" class=\"rememberChange\"");

                                    WriteLiteral(">");


            #line 135 "..\..\Translation\Views\Sync.cshtml"
                                    Write(TranslationJavascriptMessage.RememberChange.NiceToString());


            #line default
            #line hidden
                                    WriteLiteral("</button>\r\n");


            #line 136 "..\..\Translation\Views\Sync.cshtml"
                                }
                                else
                                {
            #line default
            #line hidden

            #line 139 "..\..\Translation\Views\Sync.cshtml"
                                    Write(Html.SafeDropDownList(elemName, items, new { style = "width:90%" }));


            #line default
            #line hidden

            #line 139 "..\..\Translation\Views\Sync.cshtml"
                                    ;


            #line default
            #line hidden
                                    WriteLiteral("                                    <a");

                                    WriteLiteral(" class=\"edit\"");

                                    WriteLiteral(">");


            #line 140 "..\..\Translation\Views\Sync.cshtml"
                                    Write(TranslationMessage.Edit.NiceToString());


            #line default
            #line hidden
                                    WriteLiteral("</a>\r\n");


            #line 141 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("\r\n\r\n                            </th>\r\n                            <th");

                                WriteLiteral(" class=\"smallCell monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 146 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 146 "..\..\Translation\Views\Sync.cshtml"
                                if (hasGender && hasPlural)
                                {
            #line default
            #line hidden

            #line 148 "..\..\Translation\Views\Sync.cshtml"
                                    Write(locType.Gender != null ? NaturalLanguageTools.GetPronom(locType.Gender.Value, plural: true, culture: locType.Assembly.Culture) : "-");


            #line default
            #line hidden

            #line 148 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("                            </th>\r\n                            <th");

                                WriteLiteral(" class=\"monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 152 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 152 "..\..\Translation\Views\Sync.cshtml"
                                if (hasPlural)
                                {
            #line default
            #line hidden

            #line 154 "..\..\Translation\Views\Sync.cshtml"
                                    Write(Html.TextArea(locKey(locType) + ".PluralDescription", locType.PluralDescription, new { style = "width:90%;" }));


            #line default
            #line hidden

            #line 154 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("                            </th>\r\n                        </tr>\r\n");


            #line 158 "..\..\Translation\Views\Sync.cshtml"
                            }
                        }

                        {
                            var locType = typeChanges.Type;
                            foreach (var conflict in typeChanges.MemberConflicts)
                            {
            #line default
            #line hidden
                                WriteLiteral("                        <tr>\r\n                            <th");

                                WriteLiteral(" class=\"leftCell\"");

                                WriteLiteral(">\r\n");

                                WriteLiteral("                                ");


            #line 170 "..\..\Translation\Views\Sync.cshtml"
                                Write(TranslationMessage.Member.NiceToString());


            #line default
            #line hidden
                                WriteLiteral("\r\n                        </th>\r\n                        <th");

                                WriteLiteral(" colspan=\"4\"");

                                WriteLiteral(">\r\n");

                                WriteLiteral("                            ");


            #line 173 "..\..\Translation\Views\Sync.cshtml"
                                Write(conflict.Key);


            #line default
            #line hidden
                                WriteLiteral("\r\n                    </th>\r\n                </tr>\r\n");


            #line 176 "..\..\Translation\Views\Sync.cshtml"
                                foreach (var mc in conflict.Value)
                                {
            #line default
            #line hidden
                                    WriteLiteral("                            <tr>\r\n                                <td");

                                    WriteLiteral(" class=\"leftCell\"");

                                    WriteLiteral(">");


            #line 179 "..\..\Translation\Views\Sync.cshtml"
                                    Write(mc.Key.Name);


            #line default
            #line hidden
                                    WriteLiteral("</td>\r\n                                <td");

                                    WriteLiteral(" colspan=\"4\"");

                                    WriteLiteral(" class=\"monospaceCell\"");

                                    WriteLiteral(">\r\n");

                                    WriteLiteral("                                    ");


            #line 181 "..\..\Translation\Views\Sync.cshtml"
                                    Write(mc.Value.Original);


            #line default
            #line hidden
                                    WriteLiteral("\r\n\r\n                                </td>\r\n                            </tr>\r\n");


            #line 185 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("                        <tr>\r\n                            <td");

                                WriteLiteral(" class=\"leftCell\"");

                                WriteLiteral(">");


            #line 187 "..\..\Translation\Views\Sync.cshtml"
                                Write(culture.Name);


            #line default
            #line hidden
                                WriteLiteral("</td>\r\n                            <td");

                                WriteLiteral(" colspan=\"4\"");

                                WriteLiteral(" class=\"monospaceCell\"");

                                WriteLiteral(">\r\n");


            #line 189 "..\..\Translation\Views\Sync.cshtml"


            #line default
            #line hidden

            #line 189 "..\..\Translation\Views\Sync.cshtml"

                                var items    = selectListItems(conflict.Value.Values.Select(a => a.Translated));
                                var elemName = locKey(typeChanges.Type) + ".Member." + conflict.Key;
                                if (items.Count == 1)
                                {
            #line default
            #line hidden
                                    WriteLiteral("                            <textarea");

                                    WriteAttribute("name", Tuple.Create(" name=\"", 9093), Tuple.Create("\"", 9109)

            #line 194 "..\..\Translation\Views\Sync.cshtml"
                                                   , Tuple.Create(Tuple.Create("", 9100), Tuple.Create <System.Object, System.Int32>(elemName

            #line default
            #line hidden
                                                                                                                                     , 9100), false)
                                                   );

                                    WriteLiteral(" style=\"width:90%\"");

                                    WriteLiteral(">");


            #line 194 "..\..\Translation\Views\Sync.cshtml"
                                    Write(items.First());


            #line default
            #line hidden
                                    WriteLiteral("</textarea>\r\n");

                                    WriteLiteral("                                    <button");

                                    WriteLiteral(" class=\"rememberChange\"");

                                    WriteLiteral(">");


            #line 195 "..\..\Translation\Views\Sync.cshtml"
                                    Write(TranslationJavascriptMessage.RememberChange.NiceToString());


            #line default
            #line hidden
                                    WriteLiteral("</button>\r\n");


            #line 196 "..\..\Translation\Views\Sync.cshtml"
                                }
                                else
                                {
            #line default
            #line hidden

            #line 199 "..\..\Translation\Views\Sync.cshtml"
                                    Write(Html.SafeDropDownList(elemName, items));


            #line default
            #line hidden

            #line 199 "..\..\Translation\Views\Sync.cshtml"
                                    ;


            #line default
            #line hidden
                                    WriteLiteral("                                    <a");

                                    WriteLiteral(" class=\"edit\"");

                                    WriteLiteral(">");


            #line 200 "..\..\Translation\Views\Sync.cshtml"
                                    Write(TranslationMessage.Edit.NiceToString());


            #line default
            #line hidden
                                    WriteLiteral("</a>\r\n");


            #line 201 "..\..\Translation\Views\Sync.cshtml"
                                }


            #line default
            #line hidden
                                WriteLiteral("\r\n\r\n                            </td>\r\n                        </tr>\r\n");


            #line 206 "..\..\Translation\Views\Sync.cshtml"
                            }
                        }
                    }


            #line default
            #line hidden
                    WriteLiteral("        </table>\r\n");

                    WriteLiteral("        <input");

                    WriteLiteral(" type=\"submit\"");

                    WriteAttribute("value", Tuple.Create(" value=\"", 9777), Tuple.Create("\"", 9824)

            #line 210 "..\..\Translation\Views\Sync.cshtml"
                                   , Tuple.Create(Tuple.Create("", 9785), Tuple.Create <System.Object, System.Int32>(TranslationMessage.Save.NiceToString()

            #line default
            #line hidden
                                                                                                                     , 9785), false)
                                   );

                    WriteLiteral(" />\r\n");


            #line 211 "..\..\Translation\Views\Sync.cshtml"
                }
            }


            #line default
            #line hidden
            WriteLiteral("\r\n<script>\r\n    $(function () {\r\n");

            WriteLiteral("        ");


            #line 216 "..\..\Translation\Views\Sync.cshtml"
            Write(TranslationClient.Module["pluralAndGender"]());


            #line default
            #line hidden
            WriteLiteral("\r\n");

            WriteLiteral("        ");


            #line 217 "..\..\Translation\Views\Sync.cshtml"
            Write(TranslationClient.Module["editAndRemember"](TranslationClient.Translator is ITranslatorWithFeedback));


            #line default
            #line hidden
            WriteLiteral("\r\n");

            WriteLiteral("        ");


            #line 218 "..\..\Translation\Views\Sync.cshtml"
            Write(TranslationClient.Module["fixTextAreas"]());


            #line default
            #line hidden
            WriteLiteral("\r\n    });\r\n</script>\r\n");
        }
    private static LocalizedAssemblyChanges Translate(ITranslator[] translators, LocalizedAssembly target, List <LocalizedTypeChanges> types)
    {
        List <IGrouping <CultureInfo, TypeNameConflict> > typeGroups =
            (from t in types
             where t.TypeConflict != null
             from tc in t.TypeConflict !
             select tc).GroupBy(a => a.Key, a => a.Value).ToList();

        foreach (IGrouping <CultureInfo, TypeNameConflict> gr in typeGroups)
        {
            var valid = gr.Where(a => a.Original.Description != null);

            var originalDescriptions = valid.Select(a =>
                                                    (a.Original.Options.HasFlag(DescriptionOptions.Gender) ? (NaturalLanguageTools.GetDeterminer(a.Original.Gender, false, gr.Key) + " " + a.Original.Description !) : a.Original.Description) +
                                                    (a.Original.Options.HasFlag(DescriptionOptions.PluralDescription) ? "\n" + a.Original.PluralDescription : "")
                                                    ).ToList();

            foreach (var tr in translators)
            {
                var translations = tr.TranslateBatch(originalDescriptions, gr.Key.Name, target.Culture.Name);
                if (translations != null)
                {
                    valid.ZipForeach(translations, (sp, translated) =>
                    {
                        if (translated != null)
                        {
                            var lines    = translated.Lines();
                            var singular = lines[0];
                            var plural   = sp.Original.Options.HasFlag(DescriptionOptions.PluralDescription) ? lines[1] : null;

                            char?gender = null;

                            if (sp.Original.Options.HasFlag(DescriptionOptions.Gender) && NaturalLanguageTools.TryGetGenderFromDeterminer(singular.TryBefore(" "), false, target.Culture, out gender))
                            {
                                singular = singular.After(" ");
                            }

                            sp.AutomaticTranslations.Add(new AutomaticTypeTranslation {
                                Singular = singular, Plural = plural, Gender = gender, TranslatorName = tr.Name
                            });
                        }
                    });
                }
            }
        }

        List <IGrouping <CultureInfo, MemberNameConflict> > memberGroups =
            (from t in types
             where t.MemberConflicts != null
             from mcKVP in t.MemberConflicts
             from mc in mcKVP.Value
             select mc).GroupBy(a => a.Key, a => a.Value).ToList();

        foreach (IGrouping <CultureInfo, MemberNameConflict> gr in memberGroups)
        {
            var valid = gr.Where(a => a.Original != null).ToList();
            var originalDescriptions = valid.Select(a => a.Original !).ToList();

            foreach (var tr in translators)
            {
                var translations = tr.TranslateBatch(originalDescriptions, gr.Key.Name, target.Culture.Name);
                if (translations != null)
                {
                    gr.ZipForeach(translations, (sp, translated) =>
                    {
                        if (translated != null)
                        {
                            sp.AutomaticTranslations.Add(new AutomaticTranslation {
                                Text = translated, TranslatorName = tr.Name
                            });
                        }
                    });
                }
            }
        }

        return(new LocalizedAssemblyChanges
        {
            LocalizedAssembly = target,
            Types = types,
        });
    }