{
+ ['$'] = "dollar",
+ ['%'] = "percent",
+ ['&'] = "and",
+ ['<'] = "less",
+ ['>'] = "greater",
+ ['|'] = "or",
+ ['¢'] = "cent",
+ ['£'] = "pound",
+ ['¤'] = "currency",
+ ['¥'] = "yen",
+ ['©'] = "(c)",
+ ['ª'] = "a",
+ ['®'] = "(r)",
+ ['º'] = "o",
['À'] = "A",
- ['à'] = "a",
- ['Ā'] = "A",
- ['Ġ'] = "G",
- ['ŀ'] = "l",
- ['Š'] = "S",
- ['Ǡ'] = "A",
- ['Ȁ'] = "A",
['Á'] = "A",
- ['á'] = "a",
- ['ā'] = "a",
- ['ġ'] = "g",
- ['Ł'] = "L",
- ['š'] = "s",
- ['ǡ'] = "a",
- ['ȁ'] = "a",
['Â'] = "A",
- ['â'] = "a",
- ['Ă'] = "A",
- ['Ģ'] = "G",
- ['ł'] = "l",
- ['Ţ'] = "T",
- ['Ǣ'] = "Ae",
- ['Ȃ'] = "A",
['Ã'] = "A",
- ['ã'] = "a",
- ['ă'] = "a",
- ['ģ'] = "g",
- ['Ń'] = "N",
- ['ţ'] = "t",
- ['ǣ'] = "ae",
- ['ȃ'] = "a",
- ['Ä'] = "Ae",
- ['ä'] = "ae",
- ['Ą'] = "A",
- ['Ĥ'] = "H",
- ['ń'] = "n",
- ['Ť'] = "T",
- ['DŽ'] = "DZ",
- ['Ǥ'] = "G",
- ['Ȅ'] = "E",
+ ['Ä'] = "AE",
['Å'] = "A",
- ['å'] = "a",
- ['ą'] = "a",
- ['ĥ'] = "h",
- ['Ņ'] = "N",
- ['ť'] = "t",
- ['Dž'] = "Dz",
- ['ǥ'] = "g",
- ['ȅ'] = "e",
['Æ'] = "AE",
- ['æ'] = "ae",
- ['Ć'] = "C",
- ['Ħ'] = "H",
- ['ņ'] = "n",
- ['Ŧ'] = "T",
- ['dž'] = "dz",
- ['Ǧ'] = "G",
- ['Ȇ'] = "E",
['Ç'] = "C",
- ['ç'] = "c",
- ['ć'] = "c",
- ['ħ'] = "h",
- ['Ň'] = "N",
- ['ŧ'] = "t",
- ['LJ'] = "W",
- ['ǧ'] = "g",
- ['ȇ'] = "e",
['È'] = "E",
- ['è'] = "E",
- ['Ĉ'] = "C",
- ['Ĩ'] = "I",
- ['ň'] = "n",
- ['Ũ'] = "U",
- ['Lj'] = "Lj",
- ['Ǩ'] = "K",
- ['Ȉ'] = "I",
['É'] = "E",
- ['é'] = "e",
- ['ĉ'] = "c",
- ['ĩ'] = "i",
- ['ʼn'] = "n",
- ['ũ'] = "u",
- ['lj'] = "lj",
- ['ǩ'] = "k",
- ['ȉ'] = "i",
['Ê'] = "E",
- ['ê'] = "e",
- ['Ċ'] = "C",
- ['Ī'] = "I",
- ['Ŋ'] = "n",
- ['Ū'] = "U",
- ['NJ'] = "NJ",
- ['Ǫ'] = "O",
- ['Ȋ'] = "I",
['Ë'] = "E",
- ['ë'] = "e",
- ['ċ'] = "c",
- ['ī'] = "i",
- ['ŋ'] = "n",
- ['ū'] = "u",
- ['Nj'] = "Nj",
- ['ǫ'] = "o",
- ['ȋ'] = "i",
['Ì'] = "I",
- ['ì'] = "i",
- ['Č'] = "C",
- ['Ĭ'] = "I",
- ['Ō'] = "O",
- ['Ŭ'] = "U",
- ['nj'] = "nj",
- ['Ǭ'] = "O",
- ['Ȍ'] = "O",
['Í'] = "I",
- ['í'] = "i",
- ['č'] = "c",
- ['ĭ'] = "i",
- ['ō'] = "o",
- ['ŭ'] = "u",
- ['Ǎ'] = "A",
- ['ǭ'] = "o",
- ['ȍ'] = "o",
['Î'] = "I",
- ['î'] = "i",
- ['Ď'] = "D",
- ['Į'] = "I",
- ['Ŏ'] = "O",
- ['Ů'] = "U",
- ['ǎ'] = "a",
- ['Ǯ'] = "z",
- ['Ȏ'] = "O",
['Ï'] = "I",
- ['ï'] = "i",
- ['ď'] = "d",
- ['į'] = "i",
- ['ŏ'] = "o",
- ['ů'] = "u",
- ['Ǐ'] = "I",
- ['ǯ'] = "z",
- ['ȏ'] = "o",
['Ð'] = "D",
- ['ð'] = "d",
- ['Đ'] = "D",
- ['İ'] = "I",
- ['Ő'] = "O",
- ['Ű'] = "U",
- ['ǐ'] = "i",
- ['ǰ'] = "j",
- ['Ȑ'] = "R",
['Ñ'] = "N",
- ['ñ'] = "n",
- ['đ'] = "d",
- ['ı'] = "i",
- ['ő'] = "o",
- ['ű'] = "u",
- ['Ǒ'] = "O",
- ['DZ'] = "DZ",
- ['ȑ'] = "r",
['Ò'] = "O",
- ['ò'] = "o",
- ['Ē'] = "E",
- ['IJ'] = "LJ",
- ['Œ'] = "OE",
- ['Ų'] = "U",
- ['ǒ'] = "o",
- ['Dz'] = "Dz",
- ['Ȓ'] = "R",
['Ó'] = "O",
- ['ó'] = "o",
- ['ē'] = "e",
- ['ij'] = "ij",
- ['œ'] = "oe",
- ['ų'] = "u",
- ['Ǔ'] = "U",
- ['dz'] = "dz",
- ['ȓ'] = "r",
['Ô'] = "O",
- ['ô'] = "o",
- ['Ĕ'] = "E",
- ['Ĵ'] = "J",
- ['Ŕ'] = "R",
- ['Ŵ'] = "W",
- ['ǔ'] = "u",
- ['Ǵ'] = "G",
- ['Ȕ'] = "U",
['Õ'] = "O",
+ ['Ö'] = "OE",
+ ['Ø'] = "O",
+ ['Ù'] = "U",
+ ['Ú'] = "U",
+ ['Û'] = "U",
+ ['Ü'] = "UE",
+ ['Ý'] = "Y",
+ ['Þ'] = "TH",
+ ['ß'] = "ss",
+ ['à'] = "a",
+ ['á'] = "a",
+ ['â'] = "a",
+ ['ã'] = "a",
+ ['ä'] = "ae",
+ ['å'] = "a",
+ ['æ'] = "ae",
+ ['ç'] = "c",
+ ['è'] = "e",
+ ['é'] = "e",
+ ['ê'] = "e",
+ ['ë'] = "e",
+ ['ì'] = "i",
+ ['í'] = "i",
+ ['î'] = "i",
+ ['ï'] = "i",
+ ['ð'] = "d",
+ ['ñ'] = "n",
+ ['ò'] = "o",
+ ['ó'] = "o",
+ ['ô'] = "o",
['õ'] = "o",
- ['ĕ'] = "e",
- ['ĵ'] = "j",
- ['ŕ'] = "r",
- ['ŵ'] = "w",
- ['Ǖ'] = "U",
- ['ǵ'] = "g",
- ['ȕ'] = "u",
- ['Ö'] = "Oe",
['ö'] = "oe",
- ['Ė'] = "E",
- ['Ķ'] = "K",
- ['Ŗ'] = "R",
- ['Ŷ'] = "Y",
- ['ǖ'] = "u",
- ['Ƕ'] = "Hj",
- ['Ȗ'] = "U",
- ['ė'] = "e",
- ['ķ'] = "k",
- ['ŗ'] = "r",
- ['ŷ'] = "y",
- ['Ǘ'] = "U",
- ['ȗ'] = "u",
- ['Ø'] = "O",
['ø'] = "o",
- ['Ę'] = "E",
- ['ĸ'] = "k",
- ['Ř'] = "R",
- ['Ÿ'] = "Y",
- ['ǘ'] = "u",
- ['Ǹ'] = "N",
- ['Ș'] = "S",
- ['Ù'] = "U",
['ù'] = "u",
- ['ę'] = "e",
- ['Ĺ'] = "L",
- ['ř'] = "r",
- ['Ź'] = "Z",
- ['Ǚ'] = "U",
- ['ǹ'] = "n",
- ['ș'] = "s",
- ['Ú'] = "U",
['ú'] = "u",
- ['Ě'] = "E",
- ['ĺ'] = "l",
- ['Ś'] = "S",
- ['ź'] = "z",
- ['ǚ'] = "u",
- ['Ǻ'] = "A",
- ['Ț'] = "T",
- ['Û'] = "U",
['û'] = "u",
+ ['ü'] = "ue",
+ ['ý'] = "y",
+ ['þ'] = "th",
+ ['ÿ'] = "y",
+ ['Ā'] = "A",
+ ['ā'] = "a",
+ ['Ă'] = "A",
+ ['ă'] = "a",
+ ['Ą'] = "A",
+ ['ą'] = "a",
+ ['Ć'] = "C",
+ ['ć'] = "c",
+ ['Č'] = "C",
+ ['č'] = "c",
+ ['Ď'] = "D",
+ ['ď'] = "d",
+ ['Đ'] = "DJ",
+ ['đ'] = "dj",
+ ['Ē'] = "E",
+ ['ē'] = "e",
+ ['Ė'] = "E",
+ ['ė'] = "e",
+ ['Ę'] = "e",
+ ['ę'] = "e",
+ ['Ě'] = "E",
['ě'] = "e",
+ ['Ğ'] = "G",
+ ['ğ'] = "g",
+ ['Ģ'] = "G",
+ ['ģ'] = "g",
+ ['Ĩ'] = "I",
+ ['ĩ'] = "i",
+ ['Ī'] = "i",
+ ['ī'] = "i",
+ ['Į'] = "I",
+ ['į'] = "i",
+ ['İ'] = "I",
+ ['ı'] = "i",
+ ['Ķ'] = "k",
+ ['ķ'] = "k",
['Ļ'] = "L",
+ ['ļ'] = "l",
+ ['Ľ'] = "L",
+ ['ľ'] = "l",
+ ['Ł'] = "L",
+ ['ł'] = "l",
+ ['Ń'] = "N",
+ ['ń'] = "n",
+ ['Ņ'] = "N",
+ ['ņ'] = "n",
+ ['Ň'] = "N",
+ ['ň'] = "n",
+ ['Ő'] = "O",
+ ['ő'] = "o",
+ ['Œ'] = "OE",
+ ['œ'] = "oe",
+ ['Ŕ'] = "R",
+ ['ŕ'] = "r",
+ ['Ř'] = "R",
+ ['ř'] = "r",
+ ['Ś'] = "S",
['ś'] = "s",
+ ['Ş'] = "S",
+ ['ş'] = "s",
+ ['Š'] = "S",
+ ['š'] = "s",
+ ['Ţ'] = "T",
+ ['ţ'] = "t",
+ ['Ť'] = "T",
+ ['ť'] = "t",
+ ['Ũ'] = "U",
+ ['ũ'] = "u",
+ ['Ū'] = "u",
+ ['ū'] = "u",
+ ['Ů'] = "U",
+ ['ů'] = "u",
+ ['Ű'] = "U",
+ ['ű'] = "u",
+ ['Ų'] = "U",
+ ['ų'] = "u",
+ ['Ź'] = "Z",
+ ['ź'] = "z",
['Ż'] = "Z",
- ['Ǜ'] = "U",
- ['ǻ'] = "a",
- ['ț'] = "t",
- ['Ü'] = "Ue",
- ['ü'] = "ue",
- ['Ĝ'] = "G",
- ['ļ'] = "l",
- ['Ŝ'] = "S",
['ż'] = "z",
- ['ǜ'] = "u",
- ['Ǽ'] = "AE",
- ['Ȝ'] = "z",
- ['Ý'] = "Y",
- ['ý'] = "y",
- ['ĝ'] = "g",
- ['Ľ'] = "L",
- ['ŝ'] = "s",
['Ž'] = "Z",
- ['ǝ'] = "e",
- ['ǽ'] = "ae",
- ['ȝ'] = "z",
- ['Þ'] = "p",
- ['þ'] = "p",
- ['Ğ'] = "G",
- ['ľ'] = "L",
- ['Ş'] = "S",
['ž'] = "z",
- ['Ǟ'] = "A",
- ['Ǿ'] = "O",
- ['Ȟ'] = "H",
- ['ß'] = "ss",
- ['ÿ'] = "y",
- ['ğ'] = "g",
- ['Ŀ'] = "L",
- ['ş'] = "s",
- ['ſ'] = "l",
- ['ǟ'] = "a",
- ['ǿ'] = "o",
- ['ȟ'] = "h"
+ ['ƒ'] = "f",
+ ['Ơ'] = "O",
+ ['ơ'] = "o",
+ ['Ư'] = "U",
+ ['ư'] = "u",
+ ['Lj'] = "LJ",
+ ['lj'] = "lj",
+ ['Nj'] = "NJ",
+ ['nj'] = "nj",
+ ['Ș'] = "S",
+ ['ș'] = "s",
+ ['Ț'] = "T",
+ ['ț'] = "t",
+ ['˚'] = "o",
+ ['Ά'] = "A",
+ ['Έ'] = "E",
+ ['Ή'] = "H",
+ ['Ί'] = "I",
+ ['Ό'] = "O",
+ ['Ύ'] = "Y",
+ ['Ώ'] = "W",
+ ['ΐ'] = "i",
+ ['Α'] = "A",
+ ['Β'] = "B",
+ ['Γ'] = "G",
+ ['Δ'] = "D",
+ ['Ε'] = "E",
+ ['Ζ'] = "Z",
+ ['Η'] = "H",
+ ['Θ'] = "8",
+ ['Ι'] = "I",
+ ['Κ'] = "K",
+ ['Λ'] = "L",
+ ['Μ'] = "M",
+ ['Ν'] = "N",
+ ['Ξ'] = "3",
+ ['Ο'] = "O",
+ ['Π'] = "P",
+ ['Ρ'] = "R",
+ ['Σ'] = "S",
+ ['Τ'] = "T",
+ ['Υ'] = "Y",
+ ['Φ'] = "F",
+ ['Χ'] = "X",
+ ['Ψ'] = "PS",
+ ['Ω'] = "W",
+ ['Ϊ'] = "I",
+ ['Ϋ'] = "Y",
+ ['ά'] = "a",
+ ['έ'] = "e",
+ ['ή'] = "h",
+ ['ί'] = "i",
+ ['ΰ'] = "y",
+ ['α'] = "a",
+ ['β'] = "b",
+ ['γ'] = "g",
+ ['δ'] = "d",
+ ['ε'] = "e",
+ ['ζ'] = "z",
+ ['η'] = "h",
+ ['θ'] = "8",
+ ['ι'] = "i",
+ ['κ'] = "k",
+ ['λ'] = "l",
+ ['μ'] = "m",
+ ['ν'] = "n",
+ ['ξ'] = "3",
+ ['ο'] = "o",
+ ['π'] = "p",
+ ['ρ'] = "r",
+ ['ς'] = "s",
+ ['σ'] = "s",
+ ['τ'] = "t",
+ ['υ'] = "y",
+ ['φ'] = "f",
+ ['χ'] = "x",
+ ['ψ'] = "ps",
+ ['ω'] = "w",
+ ['ϊ'] = "i",
+ ['ϋ'] = "y",
+ ['ό'] = "o",
+ ['ύ'] = "y",
+ ['ώ'] = "w",
+ ['Ё'] = "Yo",
+ ['Ђ'] = "DJ",
+ ['Є'] = "Ye",
+ ['І'] = "I",
+ ['Ї'] = "Yi",
+ ['Ј'] = "J",
+ ['Љ'] = "LJ",
+ ['Њ'] = "NJ",
+ ['Ћ'] = "C",
+ ['Џ'] = "DZ",
+ ['А'] = "A",
+ ['Б'] = "B",
+ ['В'] = "V",
+ ['Г'] = "G",
+ ['Д'] = "D",
+ ['Е'] = "E",
+ ['Ж'] = "Zh",
+ ['З'] = "Z",
+ ['И'] = "I",
+ ['Й'] = "J",
+ ['К'] = "K",
+ ['Л'] = "L",
+ ['М'] = "M",
+ ['Н'] = "N",
+ ['О'] = "O",
+ ['П'] = "P",
+ ['Р'] = "R",
+ ['С'] = "S",
+ ['Т'] = "T",
+ ['У'] = "U",
+ ['Ф'] = "F",
+ ['Х'] = "H",
+ ['Ц'] = "C",
+ ['Ч'] = "Ch",
+ ['Ш'] = "Sh",
+ ['Щ'] = "Sh",
+ ['Ъ'] = "U",
+ ['Ы'] = "Y",
+ ['Ь'] = "b",
+ ['Э'] = "E",
+ ['Ю'] = "Yu",
+ ['Я'] = "Ya",
+ ['а'] = "a",
+ ['б'] = "b",
+ ['в'] = "v",
+ ['г'] = "g",
+ ['д'] = "d",
+ ['е'] = "e",
+ ['ж'] = "zh",
+ ['з'] = "z",
+ ['и'] = "i",
+ ['й'] = "j",
+ ['к'] = "k",
+ ['л'] = "l",
+ ['м'] = "m",
+ ['н'] = "n",
+ ['о'] = "o",
+ ['п'] = "p",
+ ['р'] = "r",
+ ['с'] = "s",
+ ['т'] = "t",
+ ['у'] = "u",
+ ['ф'] = "f",
+ ['х'] = "h",
+ ['ц'] = "c",
+ ['ч'] = "ch",
+ ['ш'] = "sh",
+ ['щ'] = "sh",
+ ['ъ'] = "u",
+ ['ы'] = "y",
+ ['ь'] = "s",
+ ['э'] = "e",
+ ['ю'] = "yu",
+ ['я'] = "ya",
+ ['ё'] = "yo",
+ ['ђ'] = "dj",
+ ['є'] = "ye",
+ ['і'] = "i",
+ ['ї'] = "yi",
+ ['ј'] = "j",
+ ['љ'] = "lj",
+ ['њ'] = "nj",
+ ['ћ'] = "c",
+ ['џ'] = "dz",
+ ['Ґ'] = "G",
+ ['ґ'] = "g",
+ ['฿'] = "baht",
+ ['ა'] = "a",
+ ['ბ'] = "b",
+ ['გ'] = "g",
+ ['დ'] = "d",
+ ['ე'] = "e",
+ ['ვ'] = "v",
+ ['ზ'] = "z",
+ ['თ'] = "t",
+ ['ი'] = "i",
+ ['კ'] = "k",
+ ['ლ'] = "l",
+ ['მ'] = "m",
+ ['ნ'] = "n",
+ ['ო'] = "o",
+ ['პ'] = "p",
+ ['ჟ'] = "zh",
+ ['რ'] = "r",
+ ['ს'] = "s",
+ ['ტ'] = "t",
+ ['უ'] = "u",
+ ['ფ'] = "f",
+ ['ქ'] = "k",
+ ['ღ'] = "gh",
+ ['ყ'] = "q",
+ ['შ'] = "sh",
+ ['ჩ'] = "ch",
+ ['ც'] = "ts",
+ ['ძ'] = "dz",
+ ['წ'] = "ts",
+ ['ჭ'] = "ch",
+ ['ხ'] = "kh",
+ ['ჯ'] = "j",
+ ['ჰ'] = "h",
+ ['ẞ'] = "SS",
+ ['Ạ'] = "A",
+ ['ạ'] = "a",
+ ['Ả'] = "A",
+ ['ả'] = "a",
+ ['Ấ'] = "A",
+ ['ấ'] = "a",
+ ['Ầ'] = "A",
+ ['ầ'] = "a",
+ ['Ẩ'] = "A",
+ ['ẩ'] = "a",
+ ['Ẫ'] = "A",
+ ['ẫ'] = "a",
+ ['Ậ'] = "A",
+ ['ậ'] = "a",
+ ['Ắ'] = "A",
+ ['ắ'] = "a",
+ ['Ằ'] = "A",
+ ['ằ'] = "a",
+ ['Ẳ'] = "A",
+ ['ẳ'] = "a",
+ ['Ẵ'] = "A",
+ ['ẵ'] = "a",
+ ['Ặ'] = "A",
+ ['ặ'] = "a",
+ ['Ẹ'] = "E",
+ ['ẹ'] = "e",
+ ['Ẻ'] = "E",
+ ['ẻ'] = "e",
+ ['Ẽ'] = "E",
+ ['ẽ'] = "e",
+ ['Ế'] = "E",
+ ['ế'] = "e",
+ ['Ề'] = "E",
+ ['ề'] = "e",
+ ['Ể'] = "E",
+ ['ể'] = "e",
+ ['Ễ'] = "E",
+ ['ễ'] = "e",
+ ['Ệ'] = "E",
+ ['ệ'] = "e",
+ ['Ỉ'] = "I",
+ ['ỉ'] = "i",
+ ['Ị'] = "I",
+ ['ị'] = "i",
+ ['Ọ'] = "O",
+ ['ọ'] = "o",
+ ['Ỏ'] = "O",
+ ['ỏ'] = "o",
+ ['Ố'] = "O",
+ ['ố'] = "o",
+ ['Ồ'] = "O",
+ ['ồ'] = "o",
+ ['Ổ'] = "O",
+ ['ổ'] = "o",
+ ['Ỗ'] = "O",
+ ['ỗ'] = "o",
+ ['Ộ'] = "O",
+ ['ộ'] = "o",
+ ['Ớ'] = "O",
+ ['ớ'] = "o",
+ ['Ờ'] = "O",
+ ['ờ'] = "o",
+ ['Ở'] = "O",
+ ['ở'] = "o",
+ ['Ỡ'] = "O",
+ ['ỡ'] = "o",
+ ['Ợ'] = "O",
+ ['ợ'] = "o",
+ ['Ụ'] = "U",
+ ['ụ'] = "u",
+ ['Ủ'] = "U",
+ ['ủ'] = "u",
+ ['Ứ'] = "U",
+ ['ứ'] = "u",
+ ['Ừ'] = "U",
+ ['ừ'] = "u",
+ ['Ử'] = "U",
+ ['ử'] = "u",
+ ['Ữ'] = "U",
+ ['ữ'] = "u",
+ ['Ự'] = "U",
+ ['ự'] = "u",
+ ['Ỳ'] = "Y",
+ ['ỳ'] = "y",
+ ['Ỵ'] = "Y",
+ ['ỵ'] = "y",
+ ['Ỷ'] = "Y",
+ ['ỷ'] = "y",
+ ['Ỹ'] = "Y",
+ ['ỹ'] = "y",
+ ['‘'] = "\'",
+ ['’'] = "\'",
+ ['“'] = "\\\"",
+ ['”'] = "\\\"",
+ ['†'] = "+",
+ ['•'] = "*",
+ ['…'] = "...",
+ ['₠'] = "ecu",
+ ['₢'] = "cruzeiro",
+ ['₣'] = "french franc",
+ ['₤'] = "lira",
+ ['₥'] = "mill",
+ ['₦'] = "naira",
+ ['₧'] = "peseta",
+ ['₨'] = "rupee",
+ ['₩'] = "won",
+ ['₪'] = "new shequel",
+ ['₫'] = "dong",
+ ['€'] = "euro",
+ ['₭'] = "kip",
+ ['₮'] = "tugrik",
+ ['₯'] = "drachma",
+ ['₰'] = "penny",
+ ['₱'] = "peso",
+ ['₲'] = "guarani",
+ ['₳'] = "austral",
+ ['₴'] = "hryvnia",
+ ['₵'] = "cedi",
+ ['₹'] = "indian rupee",
+ ['₽'] = "russian ruble",
+ ['₿'] = "bitcoin",
+ ['℠'] = "sm",
+ ['™'] = "tm",
+ ['∂'] = "d",
+ ['∆'] = "delta",
+ ['∑'] = "sum",
+ ['∞'] = "infinity",
+ ['♥'] = "love",
+ ['元'] = "yuan",
+ ['円'] = "yen",
+ ['﷼'] = "rial"
};
static StringExtensions()
@@ -530,7 +742,7 @@ namespace Squidex.Infrastructure
if (LowerCaseDiacritics.TryGetValue(character, out var replacement))
{
- if (singleCharDiactric)
+ if (singleCharDiactric && replacement.Length == 2)
{
result.Append(replacement[0]);
}
diff --git a/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs b/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
index 25c965033..6c8eeba2f 100644
--- a/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
+++ b/src/Squidex/Areas/Api/Controllers/Backups/BackupContentController.cs
@@ -6,8 +6,11 @@
// ==========================================================================
using System;
+using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Orleans;
+using Squidex.Domain.Apps.Entities.Backup;
using Squidex.Infrastructure.Assets;
using Squidex.Infrastructure.Commands;
using Squidex.Web;
@@ -21,11 +24,13 @@ namespace Squidex.Areas.Api.Controllers.Backups
public class BackupContentController : ApiController
{
private readonly IAssetStore assetStore;
+ private readonly IGrainFactory grainFactory;
- public BackupContentController(ICommandBus commandBus, IAssetStore assetStore)
+ public BackupContentController(ICommandBus commandBus, IAssetStore assetStore, IGrainFactory grainFactory)
: base(commandBus)
{
this.assetStore = assetStore;
+ this.grainFactory = grainFactory;
}
///
@@ -43,9 +48,21 @@ namespace Squidex.Areas.Api.Controllers.Backups
[ProducesResponseType(typeof(FileResult), 200)]
[ApiCosts(0)]
[AllowAnonymous]
- public IActionResult GetBackupContent(string app, Guid id)
+ public async Task GetBackupContent(string app, Guid id)
{
- return new FileCallbackResult("application/zip", "Backup.zip", false, bodyStream =>
+ var backupGrain = grainFactory.GetGrain(AppId);
+
+ var backups = await backupGrain.GetStateAsync();
+ var backup = backups.Value.Find(x => x.Id == id);
+
+ if (backup == null || backup.Status != JobStatus.Completed)
+ {
+ return NotFound();
+ }
+
+ var fileName = $"backup-{app}-{backup.Started:yyyy-MM-dd_HH-mm-ss}.zip";
+
+ return new FileCallbackResult("application/zip", fileName, false, bodyStream =>
{
return assetStore.DownloadAsync(id.ToString(), 0, null, bodyStream);
});
diff --git a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/AssetsFieldPropertiesDto.cs b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/AssetsFieldPropertiesDto.cs
index 30a43fd08..9ef6cff0c 100644
--- a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/AssetsFieldPropertiesDto.cs
+++ b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/AssetsFieldPropertiesDto.cs
@@ -73,6 +73,11 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models.Fields
///
public string[] AllowedExtensions { get; set; }
+ ///
+ /// True, if duplicate values are allowed.
+ ///
+ public bool AllowDuplicates { get; set; }
+
public override FieldProperties ToProperties()
{
var result = SimpleMapper.Map(this, new AssetsFieldProperties());
diff --git a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/ReferencesFieldPropertiesDto.cs b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/ReferencesFieldPropertiesDto.cs
index 07ee52dc5..8e73ed212 100644
--- a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/ReferencesFieldPropertiesDto.cs
+++ b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/ReferencesFieldPropertiesDto.cs
@@ -23,6 +23,11 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models.Fields
///
public int? MaxItems { get; set; }
+ ///
+ /// True, if duplicate values are allowed.
+ ///
+ public bool AllowDuplicates { get; set; }
+
///
/// The id of the referenced schema.
///
diff --git a/src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.html b/src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.html
index 722b4b726..98c89760d 100644
--- a/src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.html
+++ b/src/Squidex/app/features/schemas/pages/schema/types/assets-validation.component.html
@@ -94,6 +94,17 @@
+
+
+
+