diff --git a/src/Compiler/Checking/ConstraintSolver.fs b/src/Compiler/Checking/ConstraintSolver.fs
index e711ec7e262..f74e7509df9 100644
--- a/src/Compiler/Checking/ConstraintSolver.fs
+++ b/src/Compiler/Checking/ConstraintSolver.fs
@@ -1090,7 +1090,12 @@ and SolveAnonInfoEqualsAnonInfo (csenv: ConstraintSolverEnv) m2 (anonInfo1: Anon
let missingFields = String.concat ", " missingFields
FSComp.SR.tcAnonRecdMultipleFieldsNameSubset(string missingFields)
| Superset extraFields ->
- FSComp.SR.tcAnonRecdFieldNameSuperset(string extraFields)
+ match extraFields with
+ | [extraField] ->
+ FSComp.SR.tcAnonRecdSingleFieldNameSuperset(string extraField)
+ | _ ->
+ let extraFields = String.concat ", " extraFields
+ FSComp.SR.tcAnonRecdMultipleFieldsNameSuperset(string extraFields)
| Overlap (missingFields, extraFields) ->
FSComp.SR.tcAnonRecdFieldNameMismatch(string missingFields, string extraFields)
| CompletelyDifferent missingFields ->
diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt
index 9f786ad9b18..b6d363e374e 100644
--- a/src/Compiler/FSComp.txt
+++ b/src/Compiler/FSComp.txt
@@ -1397,7 +1397,8 @@ tcAnonRecdCcuMismatch,"Two anonymous record types are from different assemblies
tcAnonRecdFieldNameMismatch,"This anonymous record does not exactly match the expected shape. Add the missing fields %s and remove the extra fields %s."
tcAnonRecdSingleFieldNameSubset,"This anonymous record is missing field '%s'."
tcAnonRecdMultipleFieldsNameSubset,"This anonymous record is missing fields '%s'."
-tcAnonRecdFieldNameSuperset,"This anonymous record has too many fields. Remove the extra fields %s."
+tcAnonRecdSingleFieldNameSuperset,"This anonymous record has an extra field. Remove field '%s'."
+tcAnonRecdMultipleFieldsNameSuperset,"This anonymous record has extra fields. Remove fields '%s'."
tcAnonRecdFieldNameDifferent,"This is the wrong anonymous record. It should have the fields %s."
keywordDescriptionAbstract,"Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation."
keywordDescriptionAnd,"Used in mutually recursive bindings, in property declarations, and with multiple constraints on generic parameters."
diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf
index eafe702269c..122ea1de3b8 100644
--- a/src/Compiler/xlf/FSComp.txt.cs.xlf
+++ b/src/Compiler/xlf/FSComp.txt.cs.xlf
@@ -1027,11 +1027,6 @@
Toto je nesprávný anonymní záznam. Měl by mít pole {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Tento anonymní záznam má příliš mnoho polí. Odeberte nadbytečná pole {0}.
-
- Invalid Anonymous Record type declaration.Neplatná deklarace typu anonymního záznamu
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.Pole {0} se v tomto anonymním typu záznamu vyskytuje vícekrát.
diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf
index 181d79f304d..230776c2d0e 100644
--- a/src/Compiler/xlf/FSComp.txt.de.xlf
+++ b/src/Compiler/xlf/FSComp.txt.de.xlf
@@ -1027,11 +1027,6 @@
Dies ist der falsche anonyme Datensatz. Er muss folgende Felder umfassen: {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Dieser anonyme Datensatz enthält zu viele Felder. Entfernen Sie die zusätzlichen Felder ({0}).
-
- Invalid Anonymous Record type declaration.Ungültige Deklaration für anonymen Datensatztyp.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.Das Feld "{0}" ist in diesem anonymen Datensatztyp mehrmals vorhanden.
diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf
index b0d9d82dc97..735892b2d63 100644
--- a/src/Compiler/xlf/FSComp.txt.es.xlf
+++ b/src/Compiler/xlf/FSComp.txt.es.xlf
@@ -1027,11 +1027,6 @@
Este es un registro anónimo incorrecto. Debe tener los campos {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Este registro anónimo tiene demasiados campos. Quite los campos adicionales {0}.
-
- Invalid Anonymous Record type declaration.Declaración de tipo de registro anónimo no válido.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.El campo "{0}" aparece varias veces en este tipo de registro anónimo.
diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf
index e80c6033a52..f0b0110c1d4 100644
--- a/src/Compiler/xlf/FSComp.txt.fr.xlf
+++ b/src/Compiler/xlf/FSComp.txt.fr.xlf
@@ -1027,11 +1027,6 @@
Il s'agit de l'enregistrement anonyme incorrect. Il doit contenir les champs {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Cet enregistrement anonyme a trop de champs. Supprimez les champs supplémentaires {0}.
-
- Invalid Anonymous Record type declaration.Déclaration de type d'enregistrement anonyme non valide.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.Le champ '{0}' apparaît plusieurs fois dans ce type d'enregistrement anonyme.
diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf
index e40b57dae11..30c0a6222a1 100644
--- a/src/Compiler/xlf/FSComp.txt.it.xlf
+++ b/src/Compiler/xlf/FSComp.txt.it.xlf
@@ -1027,11 +1027,6 @@
Si tratta del record anonimo errato. Deve includere i campi {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Questo record anonimo contiene troppi campi. Rimuovere i campi aggiuntivi {0}.
-
- Invalid Anonymous Record type declaration.La dichiarazione di tipo Record anonimo non è valida.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.Il campo '{0}' viene visualizzato più volte in questo tipo di record anonimo.
diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf
index 9f9830e214f..3e8d4113a7b 100644
--- a/src/Compiler/xlf/FSComp.txt.ja.xlf
+++ b/src/Compiler/xlf/FSComp.txt.ja.xlf
@@ -1027,11 +1027,6 @@
この匿名レコードは正しくありません。フィールド {0} を含んでいる必要があります。
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- この匿名レコードはフィールドが多すぎます。不要なフィールド {0} を削除してください。
-
- Invalid Anonymous Record type declaration.匿名レコードの型宣言が無効です。
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.この匿名レコードの種類に、フィールド '{0}' が複数回出現します。
diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf
index f5b2130327e..f15468f49eb 100644
--- a/src/Compiler/xlf/FSComp.txt.ko.xlf
+++ b/src/Compiler/xlf/FSComp.txt.ko.xlf
@@ -1027,11 +1027,6 @@
잘못된 익명 레코드입니다. {0} 필드가 있어야 합니다.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- 이 익명 레코드에 필드가 너무 많습니다. 추가 필드 {0}을(를) 제거하세요.
-
- Invalid Anonymous Record type declaration.익명 레코드 형식 선언이 잘못되었습니다.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.'{0}' 필드가 이 익명 레코드 형식에서 여러 번 나타납니다.
diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf
index 8ba98da9f2d..3f1b221b367 100644
--- a/src/Compiler/xlf/FSComp.txt.pl.xlf
+++ b/src/Compiler/xlf/FSComp.txt.pl.xlf
@@ -1027,11 +1027,6 @@
To jest nieprawidłowy rekord anonimowy. Powinien zawierać pola {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Ten rekord anonimowy ma za dużo pól. Usuń dodatkowe pola {0}.
-
- Invalid Anonymous Record type declaration.Nieprawidłowa deklaracja typu rekordu anonimowego.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.Pole „{0}” występuje wielokrotnie w tym anonimowym typie rekordu.
diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf
index a9c5544273f..f48acd7ac59 100644
--- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf
+++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf
@@ -1027,11 +1027,6 @@
Este é o registro anônimo errado. Ele deve ter os campos {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Este registro anônimo tem muitos campos. Remova os campos extras {0}.
-
- Invalid Anonymous Record type declaration.Declaração inválida de tipo de Registro Anônimo.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.O campo '{0}' aparece várias vezes nesse tipo de registro anônimo.
diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf
index 46e5d7ba3d9..3fc0f495b55 100644
--- a/src/Compiler/xlf/FSComp.txt.ru.xlf
+++ b/src/Compiler/xlf/FSComp.txt.ru.xlf
@@ -1027,11 +1027,6 @@
Неправильная анонимная запись. Она должна содержать поля {0}.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Эта анонимная запись содержит слишком много полей. Удалите лишние поля {0}.
-
- Invalid Anonymous Record type declaration.Недопустимое объявление типа анонимной записи.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.Поле "{0}" появляется несколько раз в этом типе анонимной записи.
diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf
index 0bf209b346b..99c064c052a 100644
--- a/src/Compiler/xlf/FSComp.txt.tr.xlf
+++ b/src/Compiler/xlf/FSComp.txt.tr.xlf
@@ -1027,11 +1027,6 @@
Bu anonim kayıt yanlış. Kayıt, {0} alanlarını içermelidir.
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- Bu anonim kayıtta çok fazla alan var. Ek {0} alanlarını kaldırın.
-
- Invalid Anonymous Record type declaration.Anonim Kayıt türü bildirimi geçersiz.
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.'{0}' alanı bu anonim kayıt türünde birden fazla yerde görünüyor.
diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf
index 978497120a0..a4ddd603216 100644
--- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf
+++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf
@@ -1027,11 +1027,6 @@
此匿名记录不正确。它应具有字段 {0}。
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- 此匿名记录的字段太多。请删除额外的字段 {0}。
-
- Invalid Anonymous Record type declaration.匿名记录类型声明无效。
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.字段“{0}”在此匿名记录类型中多次出现。
diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf
index 770e440ac62..5044ef52e5b 100644
--- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf
+++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf
@@ -1027,11 +1027,6 @@
此為錯誤的匿名記錄。其應有欄位 {0}。
-
- This anonymous record has too many fields. Remove the extra fields {0}.
- 此匿名記錄有太多欄位。請移除額外的欄位 {0}。
-
- Invalid Anonymous Record type declaration.匿名記錄型別宣告無效。
@@ -1042,11 +1037,21 @@
This anonymous record is missing fields '{0}'.
+
+ This anonymous record has extra fields. Remove fields '{0}'.
+ This anonymous record has extra fields. Remove fields '{0}'.
+
+ This anonymous record is missing field '{0}'.This anonymous record is missing field '{0}'.
+
+ This anonymous record has an extra field. Remove field '{0}'.
+ This anonymous record has an extra field. Remove field '{0}'.
+
+ The field '{0}' appears multiple times in this anonymous record type.欄位 '{0}' 在這個匿名記錄類型中出現多次。
diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs
index 98796407286..faa24a3e17a 100644
--- a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs
+++ b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs
@@ -41,6 +41,28 @@ let x () : {| A: int; B: string; C: int |} = {| A = 123 |}
|> withDiagnostics [
(Error 1, Line 2, Col 48, Line 2, Col 61, "This anonymous record is missing fields 'B, C'.")
]
+
+ []
+ let ``Anonymous Record with extra field`` () =
+ Fsx """
+let x () : {| A: int; B: string |} = {| A = 123; B = ""; C = 1 |}
+"""
+ |> compile
+ |> shouldFail
+ |> withDiagnostics [
+ (Error 1, Line 2, Col 40, Line 2, Col 68, "This anonymous record has an extra field. Remove field 'C'.")
+ ]
+
+ []
+ let ``Anonymous Record with extra fields`` () =
+ Fsx """
+let x () : {| A: int |} = {| A = 123 ; B = ""; C = 1 |}
+"""
+ |> compile
+ |> shouldFail
+ |> withDiagnostics [
+ (Error 1, Line 2, Col 29, Line 2, Col 58, "This anonymous record has extra fields. Remove fields 'B, C'.")
+ ]
[]
let ``Anonymous Records with duplicate labels - Copy and update expression`` () =