From f687bf1e03d2251de3e518cd9ffcebe0e4a04b80 Mon Sep 17 00:00:00 2001 From: Mohamed-Waiel-Shikfa Date: Sat, 13 Jul 2024 22:19:40 +0300 Subject: [PATCH 1/3] Refactored translation dictionaries storing them in json files and loading them in shape_logic.py --- .../Translation Dictionaries/aligns.json | 47 ++ .../Translation Dictionaries/app_attrs.json | 38 + .../Translation Dictionaries/booleans.json | 5 + .../Translation Dictionaries/color_names.json | 449 +++++++++++ .../Translation Dictionaries/globals.json | 116 +++ .../gradient_starts.json | 47 ++ .../Translation Dictionaries/key_names.json | 44 ++ .../Translation Dictionaries/shape_attrs.json | 177 +++++ .../Translation Dictionaries/strings.json | 736 ++++++++++++++++++ .../user_function_names.json | 32 + cmu_graphics/shape_logic.py | 42 +- 11 files changed, 1717 insertions(+), 16 deletions(-) create mode 100644 cmu_graphics/Translation Dictionaries/aligns.json create mode 100644 cmu_graphics/Translation Dictionaries/app_attrs.json create mode 100644 cmu_graphics/Translation Dictionaries/booleans.json create mode 100644 cmu_graphics/Translation Dictionaries/color_names.json create mode 100644 cmu_graphics/Translation Dictionaries/globals.json create mode 100644 cmu_graphics/Translation Dictionaries/gradient_starts.json create mode 100644 cmu_graphics/Translation Dictionaries/key_names.json create mode 100644 cmu_graphics/Translation Dictionaries/shape_attrs.json create mode 100644 cmu_graphics/Translation Dictionaries/strings.json create mode 100644 cmu_graphics/Translation Dictionaries/user_function_names.json diff --git a/cmu_graphics/Translation Dictionaries/aligns.json b/cmu_graphics/Translation Dictionaries/aligns.json new file mode 100644 index 00000000..c248a1c7 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/aligns.json @@ -0,0 +1,47 @@ +{ + "keys": [ + "left-top", + "top", + "right-top", + "left", + "center", + "right", + "left-bottom", + "bottom", + "right-bottom", + "top-left", + "top-right", + "bottom-left", + "bottom-right" + ], + "es": { + "left-top": "izquierda-superior", + "top": "superior", + "right-top": "derecha-superior", + "left": "izquierda", + "center": "centro", + "right": "derecha", + "left-bottom": "izquierda-inferior", + "bottom": "inferior", + "right-bottom": "derecha-inferior", + "top-left": "superior-izquierda", + "top-right": "superior-derecha", + "bottom-left": "inferior-izquierda", + "bottom-right": "inferior-derecha" + }, + "de": { + "left-top": "links-oben", + "top": "oben", + "right-top": "rechts-oben", + "left": "links", + "center": "mitte", + "right": "rechts", + "left-bottom": "links-unten", + "bottom": "unten", + "right-bottom": "rechts-unten", + "top-left": "oben-links", + "top-right": "oben-rechts", + "bottom-left": "unten-links", + "bottom-right": "unten-rechts" + } +} diff --git a/cmu_graphics/Translation Dictionaries/app_attrs.json b/cmu_graphics/Translation Dictionaries/app_attrs.json new file mode 100644 index 00000000..906d1bb2 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/app_attrs.json @@ -0,0 +1,38 @@ +{ + "keys": [ + "background", + "getTextInput", + "group", + "maxShapeCount", + "paused", + "setTextInputs", + "stepsPerSecond", + "stop", + "stopped", + "setMaxShapeCount" + ], + "es": { + "background": "fondo", + "getTextInput": "obtenerEntradaDeTexto", + "group": "grupo", + "maxShapeCount": "maxCuentaDeFiguras", + "paused": "pausada", + "setTextInputs": "establecerEntradaDeTexto", + "stepsPerSecond": "pasosPorSegundo", + "stop": "detener", + "stopped": "detenido", + "setMaxShapeCount": "establecerCuentaFormasMaximas" + }, + "de": { + "background": "hintergrund", + "getTextInput": "holeTextEingabe", + "group": "gruppe", + "maxShapeCount": "maximaleFormMenge", + "paused": "pausiert", + "setTextInputs": "setzeTextEingaben", + "stepsPerSecond": "schritteProSekunde", + "stop": "stop", + "stopped": "gestoppt", + "setMaxShapeCount": "setzeMaxFormAnzahl" + } +} diff --git a/cmu_graphics/Translation Dictionaries/booleans.json b/cmu_graphics/Translation Dictionaries/booleans.json new file mode 100644 index 00000000..4635e494 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/booleans.json @@ -0,0 +1,5 @@ +{ + "keys": ["True", "False"], + "es": { "True": "Verdadero", "False": "Falso" }, + "de": { "True": "Wahr", "False": "Falsch" } +} diff --git a/cmu_graphics/Translation Dictionaries/color_names.json b/cmu_graphics/Translation Dictionaries/color_names.json new file mode 100644 index 00000000..4b571ee7 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/color_names.json @@ -0,0 +1,449 @@ +{ + "keys": [ + "aliceblue", + "antiquewhite", + "aqua", + "aquamarine", + "azure", + "beige", + "bisque", + "black", + "blanchedalmond", + "blue", + "blueviolet", + "brown", + "burlywood", + "cadetblue", + "chartreuse", + "chocolate", + "coral", + "cornsilk", + "cornflowerblue", + "crimson", + "cyan", + "darkblue", + "darkcyan", + "darkgoldenrod", + "darkgray", + "darkgreen", + "darkgrey", + "darkkhaki", + "darkmagenta", + "darkolivegreen", + "darkorange", + "darkorchid", + "darkred", + "darksalmon", + "darkseagreen", + "darkslateblue", + "darkslategray", + "darkslategrey", + "darkturquoise", + "darkviolet", + "deeppink", + "deepskyblue", + "dimgray", + "dimgrey", + "dodgerblue", + "firebrick", + "floralwhite", + "forestgreen", + "fuchsia", + "gainsboro", + "ghostwhite", + "gold", + "goldenrod", + "gray", + "green", + "greenyellow", + "grey", + "honeydew", + "hotpink", + "indianred", + "indigo", + "ivory", + "khaki", + "lavender", + "lavenderblush", + "lawngreen", + "lemonchiffon", + "lightblue", + "lightcoral", + "lightcyan", + "lightgoldenrodyellow", + "lightgray", + "lightgreen", + "lightgrey", + "lightpink", + "lightsalmon", + "lightseagreen", + "lightskyblue", + "lightslategray", + "lightslategrey", + "lightsteelblue", + "lightyellow", + "lime", + "limegreen", + "linen", + "magenta", + "maroon", + "mediumaquamarine", + "mediumblue", + "mediumorchid", + "mediumpurple", + "mediumseagreen", + "mediumslateblue", + "mediumspringgreen", + "mediumturquoise", + "mediumvioletred", + "midnightblue", + "mintcream", + "mistyrose", + "moccasin", + "navajowhite", + "navy", + "oldlace", + "olive", + "olivedrab", + "orange", + "orangered", + "orchid", + "palegoldenrod", + "palegreen", + "paleturquoise", + "palevioletred", + "papayawhip", + "peachpuff", + "peru", + "pink", + "plum", + "powderblue", + "purple", + "red", + "rosybrown", + "royalblue", + "saddlebrown", + "salmon", + "sandybrown", + "seagreen", + "seashell", + "sienna", + "silver", + "skyblue", + "slateblue", + "slategray", + "slategrey", + "snow", + "springgreen", + "steelblue", + "tan", + "teal", + "thistle", + "tomato", + "turquoise", + "violet", + "wheat", + "white", + "whitesmoke", + "yellow", + "yellowgreen" + ], + "es": { + "aliceblue": "azulalica", + "antiquewhite": "blancoantiguo", + "aqua": "agua", + "aquamarine": "aguamarina", + "azure": "azur", + "beige": "beige", + "bisque": "bisque", + "black": "negro", + "blanchedalmond": "almendrablanqueada", + "blue": "azul", + "blueviolet": "azulvioleta", + "brown": "marrón", + "burlywood": "madera", + "cadetblue": "azulcadete", + "chartreuse": "verdeamarillento", + "chocolate": "chocolate", + "coral": "coral", + "cornsilk": "maizseda", + "cornflowerblue": "azualaciano", + "crimson": "carmesí", + "cyan": "cian", + "darkblue": "azuloscuro", + "darkcyan": "cianoscuro", + "darkgoldenrod": "varilladoradaoscura", + "darkgray": "grisoscuro", + "darkgreen": "verdeoscuro", + "darkgrey": "grisoscuro", + "darkkhaki": "caquioscuro", + "darkmagenta": "magentaoscuro", + "darkolivegreen": "verdeolivaoscuro", + "darkorange": "naranjaoscuro", + "darkorchid": "orquídeaoscura", + "darkred": "rojooscuro", + "darksalmon": "salmónoscuro", + "darkseagreen": "marverdeoscuro", + "darkslateblue": "azulpizarraoscuro", + "darkslategray": "grispizarraoscuro", + "darkslategrey": "grispizarraoscuro", + "darkturquoise": "turquesaoscuro", + "darkviolet": "violetaoscuro", + "deeppink": "rosadoprofundo", + "deepskyblue": "azulcieloprofundo", + "dimgray": "gristurbio", + "dimgrey": "gristurbio", + "dodgerblue": "azulgandul", + "firebrick": "ladrillo", + "floralwhite": "blancofloral", + "forestgreen": "verdebosque", + "fuchsia": "fucsia", + "gainsboro": "gainsboro", + "ghostwhite": "blancofantasma", + "gold": "oro", + "goldenrod": "varilladorada", + "gray": "gris", + "green": "verde", + "greenyellow": "verdeamarillo", + "grey": "gris", + "honeydew": "melón", + "hotpink": "rosadofuerte", + "indianred": "rojoindio", + "indigo": "índigo", + "ivory": "marfil", + "khaki": "caqui", + "lavender": "lavanda", + "lavenderblush": "ruborlavanda", + "lawngreen": "cespedverde", + "lemonchiffon": "limónchifón", + "lightblue": "azulclaro", + "lightcoral": "coralclaro", + "lightcyan": "cianclaro", + "lightgoldenrodyellow": "varilladoradaclaraamarilla", + "lightgray": "grisclaro", + "lightgreen": "verdeclaro", + "lightgrey": "grisclaro", + "lightpink": "rosadoclaro", + "lightsalmon": "salmónclaro", + "lightseagreen": "marverdeclaro", + "lightskyblue": "azulcieloclaro", + "lightslategray": "grispizarraclaro", + "lightslategrey": "grispizarraclaro", + "lightsteelblue": "azulaceroclaro", + "lightyellow": "amarilloclaro", + "lime": "lima", + "limegreen": "limaverde", + "linen": "lino", + "magenta": "magenta", + "maroon": "granate", + "mediumaquamarine": "aguamarinamedio", + "mediumblue": "azulmedio", + "mediumorchid": "orquídeamedio", + "mediumpurple": "púrpuramedio", + "mediumseagreen": "marverdemedio", + "mediumslateblue": "pizarraazulmedio", + "mediumspringgreen": "verdeprimaveramedio", + "mediumturquoise": "turquesamedio", + "mediumvioletred": "violetarojomedio", + "midnightblue": "azulmedianoche", + "mintcream": "cremamenta", + "mistyrose": "nebulosarosa", + "moccasin": "mocasín", + "navajowhite": "blanconaranja", + "navy": "azulmarino", + "oldlace": "cordónviejo", + "olive": "oliva", + "olivedrab": "verdemilitar", + "orange": "naranja", + "orangered": "rojonaranja", + "orchid": "orquídea", + "palegoldenrod": "varilladoradapálida", + "palegreen": "verdepálido", + "paleturquoise": "turquesapálido", + "palevioletred": "rojovioletapálido", + "papayawhip": "látigodepapaya", + "peachpuff": "durazno", + "peru": "naranjamarrón", + "pink": "rosado", + "plum": "ciruela", + "powderblue": "azulpolvo", + "purple": "púrpura", + "red": "rojo", + "rosybrown": "marrónrosado", + "royalblue": "azulreal", + "saddlebrown": "marróncuero", + "salmon": "salmón", + "sandybrown": "marrónarenoso", + "seagreen": "marverde", + "seashell": "caracol", + "sienna": "tierra", + "silver": "plateado", + "skyblue": "azulcielo", + "slateblue": "azulpizarra", + "slategray": "grispizarra", + "slategrey": "grispizarra", + "snow": "nieve", + "springgreen": "verdeprimavera", + "steelblue": "azulacero", + "tan": "bronceado", + "teal": "verdeazulado", + "thistle": "cardo", + "tomato": "tomate", + "turquoise": "turquesa", + "violet": "violeta", + "wheat": "trigo", + "white": "blanco", + "whitesmoke": "humoblanco", + "yellow": "amarillo", + "yellowgreen": "amarilloverde" + }, + "de": { + "aliceblue": "aliceblau", + "antiquewhite": "altweiß", + "aqua": "wasser", + "aquamarine": "aquamarin", + "azure": "azurblau", + "beige": "beige", + "bisque": "biskuit", + "black": "schwarz", + "blanchedalmond": "bleichemandel", + "blue": "blau", + "blueviolet": "blauviolett", + "brown": "braun", + "burlywood": "wurzelholz", + "cadetblue": "kadettenblau", + "chartreuse": "chartreuse", + "chocolate": "schokolade", + "coral": "koralle", + "cornsilk": "maisseide", + "cornflowerblue": "kornfeldblau", + "crimson": "purpur", + "cyan": "cyan", + "darkblue": "dunkelblau", + "darkcyan": "dunkelcyan", + "darkgoldenrod": "dunkelgoldrute", + "darkgray": "dunkelgrau", + "darkgreen": "dunkelgrün", + "darkgrey": "dunkelgrau", + "darkkhaki": "dunkelkhaki", + "darkmagenta": "dunkelmagenta", + "darkolivegreen": "dunkelolivegrün", + "darkorange": "dunkelorange", + "darkorchid": "dunkeorchidee", + "darkred": "dunkelrot", + "darksalmon": "dunkellachs", + "darkseagreen": "dunkelseegrün", + "darkslateblue": "dunkelschieferblau", + "darkslategray": "dunkelschiefergrau", + "darkslategrey": "dunkelschiefergraube", + "darkturquoise": "dunkeltürkis", + "darkviolet": "dunkelviolett", + "deeppink": "dunkelrosa", + "deepskyblue": "dunkelhimmelblau", + "dimgray": "mittelgrau", + "dimgrey": "mittelgraube", + "dodgerblue": "dodgerblau", + "firebrick": "backstein", + "floralwhite": "blütenweiß", + "forestgreen": "waldgrün", + "fuchsia": "fuchsie", + "gainsboro": "gainsboro", + "ghostwhite": "geisterweiß", + "gold": "gold", + "goldenrod": "goldrute", + "gray": "grau", + "green": "grün", + "greenyellow": "grüngelb", + "grey": "graube", + "honeydew": "honigtau", + "hotpink": "kräftigpink", + "indianred": "indischrot", + "indigo": "indigo", + "ivory": "eisen", + "khaki": "khaki", + "lavender": "lavendel", + "lavenderblush": "lavendelröte", + "lawngreen": "rasengrün", + "lemonchiffon": "zitronenchiffon", + "lightblue": "hellblau", + "lightcoral": "hellkoralle", + "lightcyan": "hellcyan", + "lightgoldenrodyellow": "leichtgoldrutengelb", + "lightgray": "hellgrau", + "lightgreen": "hellgrün", + "lightgrey": "hellgraube", + "lightpink": "hellrosa", + "lightsalmon": "helllachs", + "lightseagreen": "hellseegrün", + "lightskyblue": "hellhimmelblau", + "lightslategray": "hellschiefergrau", + "lightslategrey": "hellschiefergraube", + "lightsteelblue": "hellstahlblau", + "lightyellow": "hellgelb", + "lime": "limette", + "limegreen": "limettengrün", + "linen": "leinen", + "magenta": "magenta", + "maroon": "kastanie", + "mediumaquamarine": "mittelaquamarine", + "mediumblue": "mittelblau", + "mediumorchid": "mittelorchidee", + "mediumpurple": "mittelviolett", + "mediumseagreen": "mittelseegrün", + "mediumslateblue": "mittelschieferblau", + "mediumspringgreen": "mittelfrühlingsgrün", + "mediumturquoise": "mitteltürkis", + "mediumvioletred": "mittelviolettrot", + "midnightblue": "mitternachtsblau", + "mintcream": "mintcreme", + "mistyrose": "nebligrose", + "moccasin": "mokassin", + "navajowhite": "navajoweiß", + "navy": "marineblau", + "oldlace": "altgold", + "olive": "olive", + "olivedrab": "trübolive", + "orange": "orange", + "orangered": "orangerot", + "orchid": "orchidee", + "palegoldenrod": "blassegoldrute", + "palegreen": "blassgrün", + "paleturquoise": "blasstürkis", + "palevioletred": "blasslilarot", + "papayawhip": "papayafarben", + "peachpuff": "pfirsich", + "peru": "peru", + "pink": "rosa", + "plum": "pflaume", + "powderblue": "taubenblau", + "purple": "lila", + "red": "rot", + "rosybrown": "rostbraun", + "royalblue": "köningsblau", + "saddlebrown": "sattelbraun", + "salmon": "lachs", + "sandybrown": "sandbraun", + "seagreen": "seegrün", + "seashell": "muschel", + "sienna": "sienna", + "silver": "silber", + "skyblue": "himmelblau", + "slateblue": "schieferblau", + "slategray": "schiefergrau", + "slategrey": "schiefergraube", + "snow": "schneeweiß", + "springgreen": "frühlingsgrün", + "steelblue": "stahlblau", + "tan": "gelbbraun", + "teal": "petrol", + "thistle": "diestel", + "tomato": "tomate", + "turquoise": "türkis", + "violet": "violett", + "wheat": "weizen", + "white": "weiß", + "whitesmoke": "weißerrauch", + "yellow": "gelb", + "yellowgreen": "gelbgrün" + } +} diff --git a/cmu_graphics/Translation Dictionaries/globals.json b/cmu_graphics/Translation Dictionaries/globals.json new file mode 100644 index 00000000..39437433 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/globals.json @@ -0,0 +1,116 @@ +{ + "keys": [ + "Arc", + "Circle", + "Group", + "Image", + "Label", + "Line", + "Oval", + "Polygon", + "Rect", + "RegularPolygon", + "Robot", + "Sound", + "Star", + "almostEqual", + "angleTo", + "app", + "assertEqual", + "choice", + "distance", + "fromPythonAngle", + "getPointInDir", + "gradient", + "makeList", + "onKeyHolds", + "onSteps", + "print", + "pythonRound", + "random", + "randrange", + "rgb", + "round", + "rounded", + "seed", + "toPythonAngle", + "onKeyPresses", + "CMUImage" + ], + "es": { + "Arc": "Arco", + "Circle": "Círculo", + "Group": "Grupo", + "Image": "Imagen", + "Label": "Rótulo", + "Line": "Línea", + "Oval": "Óvalo", + "Polygon": "Polígono", + "Rect": "Rect", + "RegularPolygon": "PolígonoRegular", + "Robot": "Robot", + "Sound": "Sonido", + "Star": "Estrella", + "almostEqual": "casiIgualA", + "angleTo": "ánguloA", + "app": "app", + "assertEqual": "afirmarIgualdad", + "choice": "opción", + "distance": "distancia", + "fromPythonAngle": "deÁnguloPython", + "getPointInDir": "obtenerPuntoEnDir", + "gradient": "gradiente", + "makeList": "hacerLista", + "onKeyHolds": "enTeclasRetenidas", + "onSteps": "enPasos", + "print": "imprime", + "pythonRound": "redondearPython", + "random": "aleatorio", + "randrange": "rangoAleatorio", + "rgb": "rgb", + "round": "redondear", + "rounded": "redondeado", + "seed": "semilla", + "toPythonAngle": "aÁnguloPython", + "onKeyPresses": "enTeclaPresionadas", + "CMUImage": "CMUImage" + }, + "de": { + "Arc": "Bogen", + "Circle": "Kreis", + "Group": "Gruppe", + "Image": "Bild", + "Label": "Beschriftung", + "Line": "Linie", + "Oval": "Oval", + "Polygon": "Vieleck", + "Rect": "Rechteck", + "RegularPolygon": "RegelmäßigesVieleck", + "Robot": "Roboter", + "Sound": "Geräusch", + "Star": "Stern", + "almostEqual": "fastGleich", + "angleTo": "winkelNach", + "app": "anwendung", + "assertEqual": "gleichsetzen", + "choice": "auswahl", + "distance": "distanz", + "fromPythonAngle": "vomPythonWinkel", + "getPointInDir": "erhaltePunktInRichtung", + "gradient": "farbverlauf", + "makeList": "macheListe", + "onKeyHolds": "wennTasteGedrückt", + "onSteps": "schrittweise", + "print": "ausgabe", + "pythonRound": "pythonRunden", + "random": "zufall", + "randrange": "zufallsspanne", + "rgb": "RGB", + "round": "runden", + "rounded": "gerundet", + "seed": "kerne", + "toPythonAngle": "zumPythonWinkel", + "onKeyPresses": "wennTasteGedrückt", + "CMUImage": "CMUImage" + } +} diff --git a/cmu_graphics/Translation Dictionaries/gradient_starts.json b/cmu_graphics/Translation Dictionaries/gradient_starts.json new file mode 100644 index 00000000..d2ac4303 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/gradient_starts.json @@ -0,0 +1,47 @@ +{ + "keys": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right", + "left-top", + "top", + "right-top", + "left", + "center", + "right", + "left-bottom", + "bottom", + "right-bottom" + ], + "es": { + "top-left": "superior-izquierda", + "top-right": "superior-derecha", + "bottom-left": "inferior-izquierda", + "bottom-right": "inferior-derecha", + "left-top": "izquierda-superior", + "top": "superior", + "right-top": "derecha-superior", + "left": "izquierda", + "center": "centro", + "right": "derecha", + "left-bottom": "izquierda-inferior", + "bottom": "inferior", + "right-bottom": "derecha-inferior" + }, + "de": { + "top-left": "oben-links", + "top-right": "oben-rechts", + "bottom-left": "unten-links", + "bottom-right": "unten-rechts", + "left-top": "links-oben", + "top": "oben", + "right-top": "rechts-oben", + "left": "links", + "center": "mitte", + "right": "rechts", + "left-bottom": "links-unten", + "bottom": "unten", + "right-bottom": "rechts-unten" + } +} diff --git a/cmu_graphics/Translation Dictionaries/key_names.json b/cmu_graphics/Translation Dictionaries/key_names.json new file mode 100644 index 00000000..01712046 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/key_names.json @@ -0,0 +1,44 @@ +{ + "keys": [ + "space", + "enter", + "left", + "right", + "up", + "down", + "pageup", + "pagedown", + "escape", + "delete", + "backspace", + "tab" + ], + "es": { + "space": "espacio", + "enter": "intro", + "left": "izquierda", + "right": "derecha", + "up": "arriba", + "down": "abajo", + "pageup": "repág", + "pagedown": "avpág", + "escape": "escapar", + "delete": "suprimir", + "backspace": "retroceso", + "tab": "pestaña" + }, + "de": { + "space": "leertaste", + "enter": "enter", + "left": "links", + "right": "rechts", + "up": "pfeil-hoch", + "down": "pfeil-runter", + "pageup": "bild-hoch", + "pagedown": "bild-runter", + "escape": "escape", + "delete": "entfernen", + "backspace": "löschen", + "tab": "tab" + } +} diff --git a/cmu_graphics/Translation Dictionaries/shape_attrs.json b/cmu_graphics/Translation Dictionaries/shape_attrs.json new file mode 100644 index 00000000..2359cfba --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/shape_attrs.json @@ -0,0 +1,177 @@ +{ + "keys": [ + "group", + "play", + "pause", + "loop", + "restart", + "remove", + "bold", + "opacity", + "centerX", + "hits", + "borderWidth", + "centerY", + "url", + "left", + "add", + "points", + "startAngle", + "toBack", + "x2", + "y1", + "size", + "initialPoints", + "top", + "align", + "dashes", + "right", + "start", + "y2", + "radius", + "border", + "containsShape", + "background", + "height", + "lineWidth", + "toFront", + "roundness", + "arrowEnd", + "x1", + "fill", + "bottom", + "clear", + "sweepAngle", + "value", + "contains", + "italic", + "visible", + "arrowStart", + "hitsShape", + "font", + "children", + "hitTest", + "width", + "rotateAngle", + "red", + "blue", + "green" + ], + "es": { + "group": "grupo", + "play": "toca", + "pause": "pausa", + "loop": "repetir", + "restart": "reiniciar", + "remove": "quitar", + "bold": "negrito", + "opacity": "opacidad", + "centerX": "centroX", + "hits": "toca", + "borderWidth": "anchuraDeBorde", + "centerY": "centroY", + "url": "url", + "left": "izquierda", + "add": "agregar", + "points": "puntos", + "startAngle": "ánguloInicial", + "toBack": "alFondo", + "x2": "x2", + "y1": "y1", + "size": "tamaño", + "initialPoints": "puntosIniciales", + "top": "superior", + "align": "alinear", + "dashes": "guión", + "right": "derecha", + "start": "inicio", + "colors": "colores", + "y2": "y2", + "radius": "radio", + "border": "borde", + "containsShape": "contieneFigura", + "background": "fondo", + "height": "altura", + "lineWidth": "anchuraDeLínea", + "toFront": "alFrente", + "roundness": "redondez", + "arrowEnd": "finalDeFlecha", + "x1": "x1", + "fill": "relleno", + "bottom": "inferior", + "clear": "vaciar", + "sweepAngle": "ánguloDeBarrido", + "value": "valor", + "contains": "contiene", + "italic": "itálica", + "visible": "visible", + "arrowStart": "inicioDeFlecha", + "hitsShape": "tocaFigura", + "font": "fuente", + "children": "hijos", + "hitTest": "tocarPrueba", + "width": "ancho", + "rotateAngle": "rotarÁngulo", + "red": "red", + "blue": "blue", + "green": "green" + }, + "de": { + "group": "gruppe", + "play": "abspielen", + "pause": "pausieren", + "loop": "wiederholen", + "restart": "neustarten", + "remove": "entferne", + "bold": "fett", + "opacity": "deckkraft", + "centerX": "mitteX", + "hits": "trifft", + "borderWidth": "randBreite", + "centerY": "mitteY", + "url": "url", + "left": "links", + "add": "fügeHinzu", + "points": "punkte", + "startAngle": "anfangsWinkel", + "toBack": "nachHinten", + "x2": "x2", + "y1": "y1", + "size": "größe", + "initialPoints": "startPunkte", + "top": "oben", + "align": "ausrichtung", + "dashes": "gestrichelt", + "right": "rechts", + "start": "start", + "y2": "y2", + "radius": "radius", + "border": "rand", + "containsShape": "beinhaltetForm", + "background": "hintergrund", + "height": "höhe", + "lineWidth": "linienBreite", + "toFront": "nachVorn", + "roundness": "rundung", + "arrowEnd": "pfeilEnde", + "x1": "x1", + "fill": "füllen", + "bottom": "unten", + "clear": "leeren", + "sweepAngle": "krümmungsWinkel", + "value": "wert", + "contains": "beinhaltet", + "italic": "kursiv", + "visible": "sichtbar", + "arrowStart": "pfeilStart", + "hitsShape": "trifftForm", + "font": "schriftart", + "children": "kinder", + "hitTest": "treffenTest", + "width": "breite", + "rotateAngle": "drehWinkel", + "red": "red", + "blue": "blue", + "green": "green" + } +} diff --git a/cmu_graphics/Translation Dictionaries/strings.json b/cmu_graphics/Translation Dictionaries/strings.json new file mode 100644 index 00000000..5cff7301 --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/strings.json @@ -0,0 +1,736 @@ +{ + "keys": [ + "Arc", + "Circle", + "Group", + "Image", + "Label", + "Line", + "Oval", + "Polygon", + "Rect", + "RegularPolygon", + "Robot", + "Sound", + "Star", + "almostEqual", + "angleTo", + "app", + "assertEqual", + "choice", + "distance", + "fromPythonAngle", + "getPointInDir", + "gradient", + "makeList", + "onKeyHolds", + "onSteps", + "print", + "pythonRound", + "random", + "randrange", + "rgb", + "round", + "rounded", + "seed", + "toPythonAngle", + "onKeyPresses", + "Arc", + "Circle", + "Group", + "Image", + "Label", + "Line", + "Oval", + "Polygon", + "Rect", + "RegularPolygon", + "Robot", + "Sound", + "Star", + "almostEqual", + "angleTo", + "app", + "assertEqual", + "choice", + "distance", + "fromPythonAngle", + "getPointInDir", + "gradient", + "makeList", + "onKeyHolds", + "onSteps", + "print", + "pythonRound", + "random", + "randrange", + "rgb", + "round", + "rounded", + "seed", + "toPythonAngle", + "onKeyPresses", + "remove", + "bold", + "opacity", + "centerX", + "hits", + "borderWidth", + "centerY", + "url", + "left", + "add", + "points", + "startAngle", + "toBack", + "x2", + "y1", + "size", + "initialPoints", + "top", + "align", + "dashes", + "right", + "start", + "y2", + "radius", + "border", + "containsShape", + "background", + "height", + "lineWidth", + "toFront", + "roundness", + "arrowEnd", + "x1", + "fill", + "bottom", + "clear", + "sweepAngle", + "value", + "contains", + "italic", + "visible", + "arrowStart", + "hitsShape", + "font", + "children", + "hitTest", + "width", + "rotateAngle", + "\"{{align}}\" is not a valid Polygon constructor argument", + "\"{{attr}}\" is not a valid shape constructor argument", + "**** Error in onError()!!! ****", + "An assertEqual() statement in a test case failed. See the Console for details.", + "An error occurred. Here is the stack trace:", + "App", + "App.group is readonly", + "App.stopped is readonly", + "Arc", + "Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}", + "Arguments to setTextInputs must be strings. %r is not a string.", + "Autograder: error executing solution code!", + "Autograder: error executing user code!", + "Autograding is taking a long time. Your code may have an infinite loop.", + "Both rows and cols must be >= 0", + "Cannot set Image's url", + "Cannot set Label's height", + "Cannot set Label's width", + "Cannot set Line's border", + "Cannot set Line's borderWidth", + "Circle", + "Circle{{attrs}}", + "Failed to get text input", + "Failed to load image data", + "Font not found: {{baseFontName}}\n", + "Group", + "Group()", + "Group.add(shape)", + "Group.remove(shape)", + "Group.{{attr}} cannot be read or modified", + "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}", + "{{error}}: Illegal gradient start ({{start}})", + "Image", + "Image{{args}}", + "Internal error (no solution shapes!). Please try again.", + "Label", + "Label({{args}})", + "Line", + "Line{{args}}", + "Must have an even number of x,y values in initialPoints list", + "Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}", + "No activeDrawing for new Shape", + "No such attribute: {{attr}}", + "None", + "Oval", + "Oval{{args}}", + "Polygon", + "Polygon{{args}}", + "Recording Starts In", + "Rect", + "Rect{{args}}", + "RegularPolygon", + "RegularPolygon{{args}}", + "Robot", + "Shape", + "Shape()", + "Shapes drawn in wrong order", + "Sorry, you cannot use Python's input function in CMU CS Academy", + "Sound", + "Sound \"{{soundSource}}\" failed to play. Disabling it.", + "Star", + "Star{{args}}", + "The loop argument to Sound.play must be True or False, got {{loopRepr}}", + "The restart argument to Sound.play must be True or False, got {{restartRepr}}", + "Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).", + "Traceback (most recent call last):", + "{{error}}: None cannot be used inside gradient.colors", + "{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})", + "{{error}}: {{color}} cannot be used inside gradient.colors", + "{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name", + "Undefined poster in new _CmuGraphics", + "Unknown message {{cmd}}", + "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound", + "Wait for fonts to load before using them", + "Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})", + "You are missing {{missingCount}} shape(s)", + "You can't change the size of this group because {{shape}} can't be resized", + "You can't get or set the align property", + "You have {{extraCount}} extra shape(s)", + "Your code appeared to be in an infinite loop, so it was terminated.", + "\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n", + "addPoint", + "add{{xy}}", + "align", + "app.background should not be {{userBackgroundString}}", + "app.setMaxShapeCount(n)", + "arrowEnd", + "arrowStart", + "at line", + "background", + "black", + "bold", + "border", + "borderWidth", + "bottom", + "bottom-left", + "bottom-right", + "center", + "centerX", + "centerY", + "centroidX", + "centroidY", + "color", + "containsShape(targetShape)", + "dashes", + "fill", + "font", + "gradient({{colors}}, start={{start}})", + "height", + "hits(x, y)", + "hitsShape(targetShape)", + "initialPoints", + "initialPoints (x value)", + "initialPoints (y value)", + "integer", + "italic", + "keys must be a list", + "left", + "left-bottom", + "left-top", + "line", + "lineWidth", + "list", + "n", + "non-negative-number", + "number", + "number-greater-than-2", + "number-in-range-{{lo}}-{{hi}}", + "opacity", + "oval size", + "points", + "positive-number", + "radius", + "rgb({{r}}, {{g}}, {{b}})", + "right", + "right-bottom", + "right-top", + "rotate.cx", + "rotate.cy", + "rotate.degrees", + "rotateAngle", + "roundness", + "scale{{xy}}", + "shape", + "size", + "startAngle", + "string", + "sweepAngle", + "targetShape", + "top", + "top-left", + "top-right", + "url", + "value", + "visible", + "width", + "x", + "x1", + "x2", + "y", + "y1", + "y2", + "{{actual}} != {{expected}}", + "{{attr}} in {{object}}", + "{{attr}} should not be {{value}}", + "{{ordinalName}} point mismatch at {{location}}", + "play", + "pause", + "restart", + "loop", + "TypeError", + "{{error}}: in {{callSpec}}, {{value}} is not a legal align value", + "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'", + "contains(x, y)", + "hitTest(x, y)", + "addPoint(x, y)", + "red", + "green", + "blue", + "{{callSpec}} must start with http:// or https://" + ], + "es": { + "Arc": "Arco", + "Circle": "Círculo", + "Group": "Grupo", + "Image": "Imagen", + "Label": "Rótulo", + "Line": "Línea", + "Oval": "Óvalo", + "Polygon": "Polígono", + "Rect": "Rect", + "RegularPolygon": "PolígonoRegular", + "Robot": "Robot", + "Sound": "Sonido", + "Star": "Estrella", + "almostEqual": "casiIgualA", + "angleTo": "ánguloA", + "app": "app", + "assertEqual": "afirmarIgualdad", + "choice": "opción", + "distance": "distancia", + "fromPythonAngle": "deÁnguloPython", + "getPointInDir": "obtenerPuntoEnDir", + "gradient": "gradiente", + "makeList": "hacerLista", + "onKeyHolds": "enTeclasRetenidas", + "onSteps": "enPasos", + "print": "imprime", + "pythonRound": "redondearPython", + "random": "aleatorio", + "randrange": "rangoAleatorio", + "rgb": "rgb", + "round": "redondear", + "rounded": "redondeado", + "seed": "semilla", + "toPythonAngle": "aÁnguloPython", + "onKeyPresses": "enTeclaPresionadas", + "remove": "quitar", + "bold": "negrito", + "opacity": "opacidad", + "centerX": "centroX", + "hits": "toca", + "borderWidth": "anchuraDeBorde", + "centerY": "centroY", + "url": "url", + "left": "izquierda", + "add": "agregar", + "points": "puntos", + "startAngle": "ánguloInicial", + "toBack": "alFondo", + "x2": "x2", + "y1": "y1", + "size": "tamaño", + "initialPoints": "puntosIniciales", + "top": "superior", + "align": "alinear", + "dashes": "guión", + "right": "derecha", + "start": "inicio", + "colors": "colores", + "y2": "y2", + "radius": "radio", + "border": "borde", + "containsShape": "contieneFigura", + "background": "fondo", + "height": "altura", + "lineWidth": "anchuraDeLínea", + "toFront": "alFrente", + "roundness": "redondez", + "arrowEnd": "finalDeFlecha", + "x1": "x1", + "fill": "relleno", + "bottom": "inferior", + "clear": "vaciar", + "sweepAngle": "ánguloDeBarrido", + "value": "valor", + "contains": "contiene", + "italic": "itálica", + "visible": "visible", + "arrowStart": "inicioDeFlecha", + "hitsShape": "tocaFigura", + "font": "fuente", + "children": "hijos", + "hitTest": "tocarPrueba", + "width": "ancho", + "rotateAngle": "rotarÁngulo", + "\"{{align}}\" is not a valid Polygon constructor argument": "\"alinear\" no es un argumento de constructor de Polígono válido", + "\"{{attr}}\" is not a valid shape constructor argument": "\"{{attr}}\" no es un argumento de constructor de formas válido", + "**** Error in onError()!!! ****": "**** ¡¡¡Error dentro de enError()!!! ****", + "An assertEqual() statement in a test case failed. See the Console for details.": "Una sentencia assertEqual() dentro de un caso de prueba falló. Mire la consola para detalles.", + "An error occurred. Here is the stack trace:": "Ocurrió un error. Aquí está el seguimiento de la pila:", + "App": "App", + "App.group is readonly": "App.grupo es sólo lectura", + "App.stopped is readonly": "App.detenido es sólo lectura", + "Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}": "Arg Count Error: {{callSpec}}() toma {{argNamesLen}} argumentos ({{argNames}}), no {{argsLen}}", + "Arguments to setTextInputs must be strings. %r is not a string.": "Arguments to setTextInputs must be strings. %r is not a string.", + "Autograder: error executing solution code!": "Evaluador: ¡error al ejecutar el código de la solución!", + "Autograder: error executing user code!": "Evaluador: ¡error al ejecutar el código del usuario!", + "Autograding is taking a long time. Your code may have an infinite loop.": "El evaluador está tardando mucho. Su código puede tener un bucle infinito.", + "Both rows and cols must be >= 0": "Ambos las filas y las cols deben ser >= 0", + "Cannot set Image's url": "No se puede establecer el url de una Imagen", + "Cannot set Label's height": "No se puede establecer la altura de una Línea", + "Cannot set Label's width": "No se puede establecer la anchura de una Línea", + "Cannot set Line's border": "No se puede establecer el borde de una Línea", + "Cannot set Line's borderWidth": "No se puede establecer la anchura de una Línea", + "Circle{{attrs}}": "Círculo{{attrs}}", + "Failed to get text input": "No se pudo obtener entrade de texto", + "Failed to load image data": "No se puedo cargar los datos de la imagen", + "Font not found: {{baseFontName}}\n": "Fuente no encontrada: {{baseFontName}}\\n", + "Group()": "Grupo()", + "Group.add(shape)": "Grupo.agregar(figura)", + "Group.remove(shape)": "Grupo.quitar(figura)", + "Group.{{attr}} cannot be read or modified": "Grupo.{{attr}} no se puede leer ni modificar", + "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}": "Grupo.{{attr}} no tiene valor porque no todos sus elementos secundarios tienen el mismo valor para {{attr}}", + "{{error}}: Illegal gradient start ({{start}})": "{{error}}: Inicio de gradiente ilegal ({{start}})", + "Image{{args}}": "Imagen{{args}}", + "Internal error (no solution shapes!). Please try again.": "Error internal (¡no figuras en su solución!). Por favor inténtelo otra vez.", + "Label({{args}})": "Rótulo({{args}})", + "Line{{args}}": "Línea{{args}}", + "Must have an even number of x,y values in initialPoints list": "Debe tener un número par de valores x,y dentro de la lista puntosIniciales", + "Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}": "Necesita dar al menos 2 colores a gradiente(); diste {{colorsLength}}", + "No activeDrawing for new Shape": "No hay un dibujoActivo para la Figura nueva", + "No such attribute: {{attr}}": "No existe tal atributo: {{attr}}", + "None": "None", + "Oval{{args}}": "Óvalo{{args}}", + "Polygon{{args}}": "Polígono{{args}}", + "Recording Starts In": "Grabación comenzando en", + "Rect{{args}}": "Rect{{args}}", + "RegularPolygon{{args}}": "PolígonoRegular{{args}}", + "Shape": "Figura", + "Shape()": "Figura()", + "Shapes drawn in wrong order": "Figuras dibujadas en el orden equivocado", + "Sorry, you cannot use Python's input function in CMU CS Academy": "Lo lamento, no puede usar la función de entrada de Python en CMU CS Academy", + "Sound \"{{soundSource}}\" failed to play. Disabling it.": "Sonido \"{{soundSource}}\" no pudo jugar. Desactivando.", + "Star{{args}}": "Estrella{{args}}", + "The loop argument to Sound.play must be True or False, got {{loopRepr}}": "El argumento de repetición de Sonido.tocar debe ser Verdadero o Falso, obtuvo {{loopRepr}}", + "The restart argument to Sound.play must be True or False, got {{restartRepr}}": "El argumento de reinicio de Sonido.tocar debe ser Verdadero o Falso, obtuvo {{reiniciarRepr}}", + "Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).": "Demasiadas formas: Su código creó más de {{maxShapeCount}} formas. Si desea aumentar este límite, aunque puede hacer que su código se ejecute lentamente, llame a app.establecerCuentaFormasMaximas(n).", + "Traceback (most recent call last):": "rastreo (última llamada más reciente):", + "{{error}}: None cannot be used inside gradient.colors": "{{error}}: None no se puede usar dentro de gradientes.colores", + "{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})": "{{error}}: {{callSpec}} debe ser {{typeName}} (pero {{value}} es de tipo {{valueType}})", + "{{error}}: {{color}} cannot be used inside gradient.colors": "{{error}}: {{color}} no se puede utilizar dentro de gradiente.colores", + "{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name": "{{error}}: {{callSpec}} debe ser un color, y {{value}} no es un nombre de color legal", + "Undefined poster in new _CmuGraphics": "Posteador indefinido en nuevo _CmuGraphics", + "Unknown message {{cmd}}": "Mensaje desconocido {{cmd}}", + "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound": "Use nuestra función redondear(n) en lugar del \"round(n)\" de Python\\n ¡La función \"round(n)\" de Python 3 no funciona como uno espera!\\n Si todavía quiere usar el \"round\" de Python, use \"pythonRound\"", + "Wait for fonts to load before using them": "Espere a que se carguen las fuentes antes de usarlas", + "Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})": "# incorrecto de puntos ({{userPtsLen}} debe ser {{solnPtsLen}})", + "You are missing {{missingCount}} shape(s)": "Te faltan {{missingCount}} forma(s)", + "You can't change the size of this group because {{shape}} can't be resized": "No puedes cambiar el tamaño de este grupo porque no se puede cambiar el tamaño de {{shape}}", + "You can't get or set the align property": "No puede obtener o establecer la propiedad de alinear", + "You have {{extraCount}} extra shape(s)": "Tienes {{extraCount}} forma(s) adicionales", + "Your code appeared to be in an infinite loop, so it was terminated.": "Your code appeared to be in an infinite loop, so it was terminated.", + "\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n": "\\nAdvertencia: Su código creó rótulos con más de\\n 1,000 caracteres de texto en total. Esto puede hacer que su\\n programa se ejecute muy lentamente.\\n", + "addPoint": "agregarPunto", + "add{{xy}}": "añadir{{xy}}", + "app.background should not be {{userBackgroundString}}": "app.fondo no debe ser {{userBackgroundString}}", + "app.setMaxShapeCount(n)": "app.establecerMáximaCuentaDeFiguras(n)", + "at line": "en la línea", + "black": "negro", + "bottom-left": "inferior-izquierda", + "bottom-right": "inferior-derecha", + "center": "centro", + "centroidX": "centroideX", + "centroidY": "centroideY", + "color": "color", + "containsShape(targetShape)": "contieneFigura(figuraObjetivo)", + "gradient({{colors}}, start={{start}})": "gradient({{colors}}, start={{start}})", + "hits(x, y)": "toca(x, y)", + "hitsShape(targetShape)": "tocaFigura(figuraObjetivo)", + "initialPoints (x value)": "puntosIniciales (valor x)", + "initialPoints (y value)": "puntosIniciales (valor y)", + "integer": "número entero", + "keys must be a list": "teclas debe ser una lista", + "left-bottom": "izquierda-inferior", + "left-top": "izquierda-superior", + "line": "línea", + "list": "lista", + "n": "n", + "non-negative-number": "número-no-negativo", + "number": "número", + "number-greater-than-2": "número-mayor-que-2", + "number-in-range-{{lo}}-{{hi}}": "número-en-rango-{{lo}}-{{hi}}", + "oval size": "tamaño de óvalo", + "positive-number": "número-positivo", + "rgb({{r}}, {{g}}, {{b}})": "rgb({{r}}, {{g}}, {{b}})", + "right-bottom": "derecha-inferior", + "right-top": "derecha-superior", + "rotate.cx": "rotar.cx", + "rotate.cy": "rotar.cy", + "rotate.degrees": "rotar.grados", + "scale{{xy}}": "escala{{xy}}", + "shape": "figura", + "string": "cadena", + "targetShape": "figuraObjetivo", + "top-left": "superior-izquierda", + "top-right": "superior-derecha", + "x": "x", + "y": "y", + "{{actual}} != {{expected}}": "{{actual}} != {{expected}}", + "{{attr}} in {{object}}": "{{attr}} dentro de {{object}}", + "{{attr}} should not be {{value}}": "{{attr}} no debe ser {{value}}", + "{{ordinalName}} point mismatch at {{location}}": "{{ordinalName}} desajuste de puntos en {{location}}", + "play": "toca", + "pause": "pausa", + "restart": "reiniciar", + "loop": "repetir", + "TypeError": "Error de tipo", + "{{error}}: in {{callSpec}}, {{value}} is not a legal align value": "{{error}}: en {{callSpec}}, {{value}} no es un valor legal de alineación", + "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} tiene un argumento de palabra clave inesperado '{{arg}}'", + "contains(x, y)": "contiene(x, y)", + "hitTest(x, y)": "tocarPrueba(x, y)", + "addPoint(x, y)": "agregarPunto(x, y)", + "red": "red", + "green": "green", + "blue": "blue", + "{{callSpec}} must start with http:// or https://": "{{callSpec}} debe comenzar con http:// o https://", + "Cannot modify attribute '{{attr}}' of '{{className}}' object": "No se puede modificar el atributo '{{attr}}' del objeto de '{{className}}'" + }, + "de": { + "Arc": "Bogen", + "Circle": "Kreis", + "Group": "Gruppe", + "Image": "Bild", + "Label": "Beschriftung", + "Line": "Linie", + "Oval": "Oval", + "Polygon": "Vieleck", + "Rect": "Rechteck", + "RegularPolygon": "RegelmäßigesVieleck", + "Robot": "Roboter", + "Sound": "Geräusch", + "Star": "Stern", + "almostEqual": "fastGleich", + "angleTo": "winkelNach", + "app": "anwendung", + "assertEqual": "gleichsetzen", + "choice": "auswahl", + "distance": "distanz", + "fromPythonAngle": "vomPythonWinkel", + "getPointInDir": "erhaltePunktInRichtung", + "gradient": "farbverlauf", + "makeList": "macheListe", + "onKeyHolds": "wennTasteGedrückt", + "onSteps": "schrittweise", + "print": "ausgabe", + "pythonRound": "pythonRunden", + "random": "zufall", + "randrange": "zufallsspanne", + "rgb": "RGB", + "round": "runden", + "rounded": "gerundet", + "seed": "kerne", + "toPythonAngle": "zumPythonWinkel", + "onKeyPresses": "wennTasteGedrückt", + "remove": "entferne", + "bold": "fett", + "opacity": "deckkraft", + "centerX": "mitteX", + "hits": "trifft", + "borderWidth": "randBreite", + "centerY": "mitteY", + "url": "url", + "left": "links", + "add": "fügeHinzu", + "points": "punkte", + "startAngle": "anfangsWinkel", + "toBack": "nachHinten", + "x2": "x2", + "y1": "y1", + "size": "größe", + "initialPoints": "startPunkte", + "top": "oben", + "align": "ausrichtung", + "dashes": "gestrichelt", + "right": "rechts", + "start": "start", + "y2": "y2", + "radius": "radius", + "border": "rand", + "containsShape": "beinhaltetForm", + "background": "hintergrund", + "height": "höhe", + "lineWidth": "linienBreite", + "toFront": "nachVorn", + "roundness": "rundung", + "arrowEnd": "pfeilEnde", + "x1": "x1", + "fill": "füllen", + "bottom": "unten", + "clear": "leeren", + "sweepAngle": "krümmungsWinkel", + "value": "wert", + "contains": "beinhaltet", + "italic": "kursiv", + "visible": "sichtbar", + "arrowStart": "pfeilStart", + "hitsShape": "trifftForm", + "font": "schriftart", + "children": "kinder", + "hitTest": "treffenTest", + "width": "breite", + "rotateAngle": "drehWinkel", + "\"{{align}}\" is not a valid Polygon constructor argument": "\"alinear\" ist kein gültiges Argument für den Konstruktor von Polygon", + "\"{{attr}}\" is not a valid shape constructor argument": "\"{{attr}}\" ist kein valides Argument des Konstruktors von Form", + "**** Error in onError()!!! ****": "**** Fehler in wennFehler()!!! ****", + "An assertEqual() statement in a test case failed. See the Console for details.": "Eine assertEqual() Anweisung in einem Testfall ist fehlgeschlagen. Schau auf die Konsole um Details zu sehen.", + "An error occurred. Here is the stack trace:": "Ein unbekannter Fehler ist aufgetreten. Hier ist der Stack Tracke:", + "App": "Anwendung", + "App.group is readonly": "App.gruppe nur lesbar", + "App.stopped is readonly": "App.gestoppt ist nur lesbar", + "Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}": "Fehlerhafte Anzahl der Argumente: {{callSpec}} () akzeptiert {{argNamesLen}} Argumente ({{argNames}}), nicht {{argsLen}}", + "Arguments to setTextInputs must be strings. %r is not a string.": "Arguments to setTextInputs must be strings. %r is not a string.", + "Autograder: error executing solution code!": "Autograder: Fehler beim Ausführen des Lösungscodes!", + "Autograder: error executing user code!": "Autograder: Fehler beim Ausführen des Benutzercodes!", + "Autograding is taking a long time. Your code may have an infinite loop.": "Autograding dauert lange. Möglicherweise gibt es eine Endlosschleife in deinem Code.", + "Both rows and cols must be >= 0": "Sowohl Zeilen als auch Spalten müssen >= 0 sein", + "Cannot set Image's url": "Die URL des Bildes kann nicht festgelegt werden", + "Cannot set Label's height": "Die Höhe des Labels kann nicht eingestellt werden", + "Cannot set Label's width": "Breite des Labels kann nicht gesetzt werden", + "Cannot set Line's border": "Der Linienrand kann nicht festgelegt werden", + "Cannot set Line's borderWidth": "Die Rahmenbreite von Line kann nicht festgelegt werden", + "Circle{{attrs}}": "Kreis{{attrs}}", + "Failed to get text input": "Fehler bei der Texteingabe", + "Failed to load image data": "Fehler beim Laden der Bilddaten", + "Font not found: {{baseFontName}}\n": "Schriftart nicht gefunden: {{baseFontName}}\\n", + "Group()": "Gruppe()", + "Group.add(shape)": "Gruppe.fügeHinzu(form)", + "Group.remove(shape)": "Gruppe.entferne(form)", + "Group.{{attr}} cannot be read or modified": "Gruppe.{{attr}} kann nicht gelesen oder geändert werden", + "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}": "Gruppe.{{attr}} hat keinen Wert, da die untergeordneten Elemente nicht alle den gleichen Wert für {{attr}} haben", + "{{error}}: Illegal gradient start ({{start}})": "{{error}}: Illegaler Start des Farbverlaufs ({{start}})", + "Image{{args}}": "Bild{{args}}", + "Internal error (no solution shapes!). Please try again.": "Interner Fehler (keine Lösungsformen!). Bitte versuche es noche einmal.", + "Label({{args}})": "Beschriftung({{args}})", + "Line{{args}}": "Linie{{args}}", + "Must have an even number of x,y values in initialPoints list": "Muss eine gerade Anzahl von x,y Werten in der Liste anfangsPunkte haben", + "Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}": "Es müssen mindestens 2 Farben an farbverlauf() übergeben werden. Du hast {{farbenLänge}} gegeben", + "No activeDrawing for new Shape": "Keine aktiveZeichnung für neue Form", + "No such attribute: {{attr}}": "Kein solches Attribut: {{attr}}", + "None": "None", + "Oval{{args}}": "Oval{{args}}", + "Polygon{{args}}": "Polygon{{args}}", + "Recording Starts In": "Aufnahme startet in", + "Rect{{args}}": "Rechteck{{args}}", + "RegularPolygon{{args}}": "RegularPolygon {{args}}", + "Shape": "Form", + "Shape()": "Form()", + "Shapes drawn in wrong order": "Formen werden in der falschen Reihenfolge gezeichnet", + "Sorry, you cannot use Python's input function in CMU CS Academy": "Leider kannst du Python's input Funktion nicht in CMU CS Academy nutzen", + "Sound \"{{soundSource}}\" failed to play. Disabling it.": "Klang \"{{soundSource}}\" konnte nicht abgespielt werden. Wird deaktiviert.", + "Star{{args}}": "Stern{{args}}", + "The loop argument to Sound.play must be True or False, got {{loopRepr}}": "Das Schleifenargument für Sound.play muss True oder False sein, {{loopRepr}}", + "The restart argument to Sound.play must be True or False, got {{restartRepr}}": "Das Argument um Sound.play neuzustarten muss True oder False sein und {{restartRepr}} erhalten haben", + "Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).": "Zu viele Formen: Ihr Code hat mehr als {{maxShapeCount}} Formen erstellt. Wenn Sie dieses Limit erhöhen möchten, obwohl Ihr Code dadurch möglicherweise langsam ausgeführt wird, rufen Sie app.setzeMaxFormAnzahl(n) auf.", + "Traceback (most recent call last):": "Aufrufliste (jüngster Aufruf zuletzt)", + "{{error}}: None cannot be used inside gradient.colors": "{{error}}: None kann nicht innerhalb von farbverlauf.farben verwendet werden", + "{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})": "{{error}}: {{callSpec}} sollte {{typeName}} sein (aber {{value}} ist vom Typ {{valueType}})", + "{{error}}: {{color}} cannot be used inside gradient.colors": "{{error}}: {{color}} kann nicht in gradient.colors verwendet werden", + "{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name": "{{error}}: {{callSpec}} sollte eine Farbe sein, und {{value}} ist kein zulässiger Farbname", + "Undefined poster in new _CmuGraphics": "Nicht definiertes Poster in neuem _CmuGraphics", + "Unknown message {{cmd}}": "Unbekannte Nachricht {{cmd}}", + "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound": "Verwenden Sie unsere Funktion rounded(n) anstelle der Python 3 Funktion round(n)\\n Python 3's round(n) funktioniert nicht wie erwartet!\\n Wenn Sie die Funktion round() von Python 3 weiterhin verwenden möchten, dann nutzen Sie pythonRound", + "Wait for fonts to load before using them": "Warte, bis Zeichensatz geladen ist, bevor du ihn verwendest", + "Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})": "Falsche Anzahl von Punkten ({{userPtsLen}} sollte ${{solnPtsLen}} sein)", + "You are missing {{missingCount}} shape(s)": "Ihnen fehlen {{missingCount}} Form(en)", + "You can't change the size of this group because {{shape}} can't be resized": "Sie können die Größe dieser Gruppe nicht ändern, da die Größe von {{form}} nicht geändert werden kann", + "You can't get or set the align property": "Sie können die Align-Eigenschaft nicht abrufen oder festlegen", + "You have {{extraCount}} extra shape(s)": "Du hast {{extraCount}} zusätzliche Form(en)", + "Your code appeared to be in an infinite loop, so it was terminated.": "Your code appeared to be in an infinite loop, so it was terminated.", + "\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n": "\\nWarnung: Ihr Code hat Beschriftungen mit insgesamt mehr als\\n 1.000 Textzeichen erstellt. Dies kann dazu führen, dass Ihr\\n Programm sehr langsam ausgeführt wird.\\n", + "addPoint": "fügePunktHinzu", + "add{{xy}}": "addiere{{xy}}", + "app.background should not be {{userBackgroundString}}": "anwendung.hintergrund sollte nicht {{userBackgroundString}} sein", + "app.setMaxShapeCount(n)": "anwendung.setzeMaxFormAnzahl(n)", + "at line": "in Zeile", + "black": "schwarz", + "bottom-left": "unten-links", + "bottom-right": "unten-rechts", + "center": "mitte", + "centroidX": "mittelpunktX", + "centroidY": "mittelpunktY", + "color": "Farbe", + "containsShape(targetShape)": "beinhaltetForm(zielForm)", + "gradient({{colors}}, start={{start}})": "gradient({{colors}}, start={{start}})", + "hits(x, y)": "trifft(x,y)", + "hitsShape(targetShape)": "trifftForm(zielForm)", + "initialPoints (x value)": "anfangsPunkte (x wert)", + "initialPoints (y value)": "anfangsPunkte (y wert)", + "integer": "Integer", + "keys must be a list": "Schlüssel müssen eine Liste sein", + "left-bottom": "links-unten", + "left-top": "links-oben", + "line": "Linie", + "list": "Liste", + "n": "n", + "non-negative-number": "Nicht-negative Zahl", + "number": "Nummer", + "number-greater-than-2": "Zahl-größer-als-2", + "number-in-range-{{lo}}-{{hi}}": "Aufnahme startet in", + "oval size": "Größe Oval", + "positive-number": "Positive Zahl", + "rgb({{r}}, {{g}}, {{b}})": "RGB({{r}}, {{g}}, {{b}})", + "right-bottom": "rechts-unten", + "right-top": "rechts-oben", + "rotate.cx": "drehung.cx", + "rotate.cy": "drehung.cy", + "rotate.degrees": "drehung.winkel", + "scale{{xy}}": "skaliere{{xy}}", + "shape": "Form", + "string": "string", + "targetShape": "zielForm", + "top-left": "oben-links", + "top-right": "oben-rechts", + "x": "x", + "y": "y", + "{{actual}} != {{expected}}": "{{aktuell}}! = {{erwartet}}", + "{{attr}} in {{object}}": "{{attr}} in {{object}}", + "{{attr}} should not be {{value}}": "{{attr}} sollte nicht {{value}} sein", + "{{ordinalName}} point mismatch at {{location}}": "{{ordinalName}} Punkt stimmt nicht mit {{location}} überein", + "play": "abspielen", + "pause": "pausieren", + "restart": "neustarten", + "loop": "wiederholen", + "TypeError": "Typfehler", + "{{error}}: in {{callSpec}}, {{value}} is not a legal align value": "{{error}}: in {{callSpec}}, {{value}} is not a legal align value", + "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'", + "contains(x, y)": "beinhaltet(x, y)", + "hitTest(x, y)": "treffenTest(x, y)", + "addPoint(x, y)": "fügePunktHinzu(x, y)", + "red": "red", + "green": "green", + "blue": "blue", + "{{callSpec}} must start with http:// or https://": "{{callSpec}} muss mit http:// or https:// beginnen" + } +} diff --git a/cmu_graphics/Translation Dictionaries/user_function_names.json b/cmu_graphics/Translation Dictionaries/user_function_names.json new file mode 100644 index 00000000..896c8f5c --- /dev/null +++ b/cmu_graphics/Translation Dictionaries/user_function_names.json @@ -0,0 +1,32 @@ +{ + "keys": [ + "onKeyHold", + "onKeyPress", + "onKeyRelease", + "onMouseDrag", + "onMouseMove", + "onMousePress", + "onMouseRelease", + "onStep" + ], + "es": { + "onKeyHold": "enTeclaRetenida", + "onKeyPress": "enTeclaPresionada", + "onKeyRelease": "enTeclaSoltada", + "onMouseDrag": "enRatónArrastrado", + "onMouseMove": "enRatónMovido", + "onMousePress": "enRatónPresionado", + "onMouseRelease": "enRatónSoltado", + "onStep": "enPaso" + }, + "de": { + "onKeyHold": "beiTasteHalten", + "onKeyPress": "beiTasteRunter", + "onKeyRelease": "beiTasteHoch", + "onMouseDrag": "beiMausMitTasteZiehen", + "onMouseMove": "beiMausbewegung", + "onMousePress": "beiMaustasteRunter", + "onMouseRelease": "beiMaustasteHoch", + "onStep": "beimSchritt" + } +} diff --git a/cmu_graphics/shape_logic.py b/cmu_graphics/shape_logic.py index 61161691..d42aa60f 100644 --- a/cmu_graphics/shape_logic.py +++ b/cmu_graphics/shape_logic.py @@ -24,16 +24,26 @@ import re # start_translate -TRANSLATED_COLOR_NAMES = {'keys': ['aliceblue', 'antiquewhite', 'aqua', 'aquamarine', 'azure', 'beige', 'bisque', 'black', 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornsilk', 'cornflowerblue', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray', 'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange', 'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray', 'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray', 'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'fuchsia', 'gainsboro', 'ghostwhite', 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'grey', 'honeydew', 'hotpink', 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray', 'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue', 'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'lime', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy', 'oldlace', 'olive', 'olivedrab', 'orange', 'orangered', 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple', 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen', 'seashell', 'sienna', 'silver', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow', 'springgreen', 'steelblue', 'tan', 'teal', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'], 'es': {'aliceblue': 'azulalica', 'antiquewhite': 'blancoantiguo', 'aqua': 'agua', 'aquamarine': 'aguamarina', 'azure': 'azur', 'beige': 'beige', 'bisque': 'bisque', 'black': 'negro', 'blanchedalmond': 'almendrablanqueada', 'blue': 'azul', 'blueviolet': 'azulvioleta', 'brown': 'marrón', 'burlywood': 'madera', 'cadetblue': 'azulcadete', 'chartreuse': 'verdeamarillento', 'chocolate': 'chocolate', 'coral': 'coral', 'cornsilk': 'maizseda', 'cornflowerblue': 'azualaciano', 'crimson': 'carmesí', 'cyan': 'cian', 'darkblue': 'azuloscuro', 'darkcyan': 'cianoscuro', 'darkgoldenrod': 'varilladoradaoscura', 'darkgray': 'grisoscuro', 'darkgreen': 'verdeoscuro', 'darkgrey': 'grisoscuro', 'darkkhaki': 'caquioscuro', 'darkmagenta': 'magentaoscuro', 'darkolivegreen': 'verdeolivaoscuro', 'darkorange': 'naranjaoscuro', 'darkorchid': 'orquídeaoscura', 'darkred': 'rojooscuro', 'darksalmon': 'salmónoscuro', 'darkseagreen': 'marverdeoscuro', 'darkslateblue': 'azulpizarraoscuro', 'darkslategray': 'grispizarraoscuro', 'darkslategrey': 'grispizarraoscuro', 'darkturquoise': 'turquesaoscuro', 'darkviolet': 'violetaoscuro', 'deeppink': 'rosadoprofundo', 'deepskyblue': 'azulcieloprofundo', 'dimgray': 'gristurbio', 'dimgrey': 'gristurbio', 'dodgerblue': 'azulgandul', 'firebrick': 'ladrillo', 'floralwhite': 'blancofloral', 'forestgreen': 'verdebosque', 'fuchsia': 'fucsia', 'gainsboro': 'gainsboro', 'ghostwhite': 'blancofantasma', 'gold': 'oro', 'goldenrod': 'varilladorada', 'gray': 'gris', 'green': 'verde', 'greenyellow': 'verdeamarillo', 'grey': 'gris', 'honeydew': 'melón', 'hotpink': 'rosadofuerte', 'indianred': 'rojoindio', 'indigo': 'índigo', 'ivory': 'marfil', 'khaki': 'caqui', 'lavender': 'lavanda', 'lavenderblush': 'ruborlavanda', 'lawngreen': 'cespedverde', 'lemonchiffon': 'limónchifón', 'lightblue': 'azulclaro', 'lightcoral': 'coralclaro', 'lightcyan': 'cianclaro', 'lightgoldenrodyellow': 'varilladoradaclaraamarilla', 'lightgray': 'grisclaro', 'lightgreen': 'verdeclaro', 'lightgrey': 'grisclaro', 'lightpink': 'rosadoclaro', 'lightsalmon': 'salmónclaro', 'lightseagreen': 'marverdeclaro', 'lightskyblue': 'azulcieloclaro', 'lightslategray': 'grispizarraclaro', 'lightslategrey': 'grispizarraclaro', 'lightsteelblue': 'azulaceroclaro', 'lightyellow': 'amarilloclaro', 'lime': 'lima', 'limegreen': 'limaverde', 'linen': 'lino', 'magenta': 'magenta', 'maroon': 'granate', 'mediumaquamarine': 'aguamarinamedio', 'mediumblue': 'azulmedio', 'mediumorchid': 'orquídeamedio', 'mediumpurple': 'púrpuramedio', 'mediumseagreen': 'marverdemedio', 'mediumslateblue': 'pizarraazulmedio', 'mediumspringgreen': 'verdeprimaveramedio', 'mediumturquoise': 'turquesamedio', 'mediumvioletred': 'violetarojomedio', 'midnightblue': 'azulmedianoche', 'mintcream': 'cremamenta', 'mistyrose': 'nebulosarosa', 'moccasin': 'mocasín', 'navajowhite': 'blanconaranja', 'navy': 'azulmarino', 'oldlace': 'cordónviejo', 'olive': 'oliva', 'olivedrab': 'verdemilitar', 'orange': 'naranja', 'orangered': 'rojonaranja', 'orchid': 'orquídea', 'palegoldenrod': 'varilladoradapálida', 'palegreen': 'verdepálido', 'paleturquoise': 'turquesapálido', 'palevioletred': 'rojovioletapálido', 'papayawhip': 'látigodepapaya', 'peachpuff': 'durazno', 'peru': 'naranjamarrón', 'pink': 'rosado', 'plum': 'ciruela', 'powderblue': 'azulpolvo', 'purple': 'púrpura', 'red': 'rojo', 'rosybrown': 'marrónrosado', 'royalblue': 'azulreal', 'saddlebrown': 'marróncuero', 'salmon': 'salmón', 'sandybrown': 'marrónarenoso', 'seagreen': 'marverde', 'seashell': 'caracol', 'sienna': 'tierra', 'silver': 'plateado', 'skyblue': 'azulcielo', 'slateblue': 'azulpizarra', 'slategray': 'grispizarra', 'slategrey': 'grispizarra', 'snow': 'nieve', 'springgreen': 'verdeprimavera', 'steelblue': 'azulacero', 'tan': 'bronceado', 'teal': 'verdeazulado', 'thistle': 'cardo', 'tomato': 'tomate', 'turquoise': 'turquesa', 'violet': 'violeta', 'wheat': 'trigo', 'white': 'blanco', 'whitesmoke': 'humoblanco', 'yellow': 'amarillo', 'yellowgreen': 'amarilloverde'}, 'de': {'aliceblue': 'aliceblau', 'antiquewhite': 'altweiß', 'aqua': 'wasser', 'aquamarine': 'aquamarin', 'azure': 'azurblau', 'beige': 'beige', 'bisque': 'biskuit', 'black': 'schwarz', 'blanchedalmond': 'bleichemandel', 'blue': 'blau', 'blueviolet': 'blauviolett', 'brown': 'braun', 'burlywood': 'wurzelholz', 'cadetblue': 'kadettenblau', 'chartreuse': 'chartreuse', 'chocolate': 'schokolade', 'coral': 'koralle', 'cornsilk': 'maisseide', 'cornflowerblue': 'kornfeldblau', 'crimson': 'purpur', 'cyan': 'cyan', 'darkblue': 'dunkelblau', 'darkcyan': 'dunkelcyan', 'darkgoldenrod': 'dunkelgoldrute', 'darkgray': 'dunkelgrau', 'darkgreen': 'dunkelgrün', 'darkgrey': 'dunkelgrau', 'darkkhaki': 'dunkelkhaki', 'darkmagenta': 'dunkelmagenta', 'darkolivegreen': 'dunkelolivegrün', 'darkorange': 'dunkelorange', 'darkorchid': 'dunkeorchidee', 'darkred': 'dunkelrot', 'darksalmon': 'dunkellachs', 'darkseagreen': 'dunkelseegrün', 'darkslateblue': 'dunkelschieferblau', 'darkslategray': 'dunkelschiefergrau', 'darkslategrey': 'dunkelschiefergraube', 'darkturquoise': 'dunkeltürkis', 'darkviolet': 'dunkelviolett', 'deeppink': 'dunkelrosa', 'deepskyblue': 'dunkelhimmelblau', 'dimgray': 'mittelgrau', 'dimgrey': 'mittelgraube', 'dodgerblue': 'dodgerblau', 'firebrick': 'backstein', 'floralwhite': 'blütenweiß', 'forestgreen': 'waldgrün', 'fuchsia': 'fuchsie', 'gainsboro': 'gainsboro', 'ghostwhite': 'geisterweiß', 'gold': 'gold', 'goldenrod': 'goldrute', 'gray': 'grau', 'green': 'grün', 'greenyellow': 'grüngelb', 'grey': 'graube', 'honeydew': 'honigtau', 'hotpink': 'kräftigpink', 'indianred': 'indischrot', 'indigo': 'indigo', 'ivory': 'eisen', 'khaki': 'khaki', 'lavender': 'lavendel', 'lavenderblush': 'lavendelröte', 'lawngreen': 'rasengrün', 'lemonchiffon': 'zitronenchiffon', 'lightblue': 'hellblau', 'lightcoral': 'hellkoralle', 'lightcyan': 'hellcyan', 'lightgoldenrodyellow': 'leichtgoldrutengelb', 'lightgray': 'hellgrau', 'lightgreen': 'hellgrün', 'lightgrey': 'hellgraube', 'lightpink': 'hellrosa', 'lightsalmon': 'helllachs', 'lightseagreen': 'hellseegrün', 'lightskyblue': 'hellhimmelblau', 'lightslategray': 'hellschiefergrau', 'lightslategrey': 'hellschiefergraube', 'lightsteelblue': 'hellstahlblau', 'lightyellow': 'hellgelb', 'lime': 'limette', 'limegreen': 'limettengrün', 'linen': 'leinen', 'magenta': 'magenta', 'maroon': 'kastanie', 'mediumaquamarine': 'mittelaquamarine', 'mediumblue': 'mittelblau', 'mediumorchid': 'mittelorchidee', 'mediumpurple': 'mittelviolett', 'mediumseagreen': 'mittelseegrün', 'mediumslateblue': 'mittelschieferblau', 'mediumspringgreen': 'mittelfrühlingsgrün', 'mediumturquoise': 'mitteltürkis', 'mediumvioletred': 'mittelviolettrot', 'midnightblue': 'mitternachtsblau', 'mintcream': 'mintcreme', 'mistyrose': 'nebligrose', 'moccasin': 'mokassin', 'navajowhite': 'navajoweiß', 'navy': 'marineblau', 'oldlace': 'altgold', 'olive': 'olive', 'olivedrab': 'trübolive', 'orange': 'orange', 'orangered': 'orangerot', 'orchid': 'orchidee', 'palegoldenrod': 'blassegoldrute', 'palegreen': 'blassgrün', 'paleturquoise': 'blasstürkis', 'palevioletred': 'blasslilarot', 'papayawhip': 'papayafarben', 'peachpuff': 'pfirsich', 'peru': 'peru', 'pink': 'rosa', 'plum': 'pflaume', 'powderblue': 'taubenblau', 'purple': 'lila', 'red': 'rot', 'rosybrown': 'rostbraun', 'royalblue': 'köningsblau', 'saddlebrown': 'sattelbraun', 'salmon': 'lachs', 'sandybrown': 'sandbraun', 'seagreen': 'seegrün', 'seashell': 'muschel', 'sienna': 'sienna', 'silver': 'silber', 'skyblue': 'himmelblau', 'slateblue': 'schieferblau', 'slategray': 'schiefergrau', 'slategrey': 'schiefergraube', 'snow': 'schneeweiß', 'springgreen': 'frühlingsgrün', 'steelblue': 'stahlblau', 'tan': 'gelbbraun', 'teal': 'petrol', 'thistle': 'diestel', 'tomato': 'tomate', 'turquoise': 'türkis', 'violet': 'violett', 'wheat': 'weizen', 'white': 'weiß', 'whitesmoke': 'weißerrauch', 'yellow': 'gelb', 'yellowgreen': 'gelbgrün'}} -TRANSLATED_GRADIENT_STARTS = {'keys': ['top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top', 'top', 'right-top', 'left', 'center', 'right', 'left-bottom', 'bottom', 'right-bottom'], 'es': {'top-left': 'superior-izquierda', 'top-right': 'superior-derecha', 'bottom-left': 'inferior-izquierda', 'bottom-right': 'inferior-derecha', 'left-top': 'izquierda-superior', 'top': 'superior', 'right-top': 'derecha-superior', 'left': 'izquierda', 'center': 'centro', 'right': 'derecha', 'left-bottom': 'izquierda-inferior', 'bottom': 'inferior', 'right-bottom': 'derecha-inferior'}, 'de': {'top-left': 'oben-links', 'top-right': 'oben-rechts', 'bottom-left': 'unten-links', 'bottom-right': 'unten-rechts', 'left-top': 'links-oben', 'top': 'oben', 'right-top': 'rechts-oben', 'left': 'links', 'center': 'mitte', 'right': 'rechts', 'left-bottom': 'links-unten', 'bottom': 'unten', 'right-bottom': 'rechts-unten'}} -TRANSLATED_ALIGNS = {'keys': ['left-top', 'top', 'right-top', 'left', 'center', 'right', 'left-bottom', 'bottom', 'right-bottom', 'top-left', 'top-right', 'bottom-left', 'bottom-right'], 'es': {'left-top': 'izquierda-superior', 'top': 'superior', 'right-top': 'derecha-superior', 'left': 'izquierda', 'center': 'centro', 'right': 'derecha', 'left-bottom': 'izquierda-inferior', 'bottom': 'inferior', 'right-bottom': 'derecha-inferior', 'top-left': 'superior-izquierda', 'top-right': 'superior-derecha', 'bottom-left': 'inferior-izquierda', 'bottom-right': 'inferior-derecha'}, 'de': {'left-top': 'links-oben', 'top': 'oben', 'right-top': 'rechts-oben', 'left': 'links', 'center': 'mitte', 'right': 'rechts', 'left-bottom': 'links-unten', 'bottom': 'unten', 'right-bottom': 'rechts-unten', 'top-left': 'oben-links', 'top-right': 'oben-rechts', 'bottom-left': 'unten-links', 'bottom-right': 'unten-rechts'}} -TRANSLATED_SHAPE_ATTRS = {'keys': ['group', 'play', 'pause', 'loop', 'restart', 'remove', 'bold', 'opacity', 'centerX', 'hits', 'borderWidth', 'centerY', 'url', 'left', 'add', 'points', 'startAngle', 'toBack', 'x2', 'y1', 'size', 'initialPoints', 'top', 'align', 'dashes', 'right', 'start', 'y2', 'radius', 'border', 'containsShape', 'background', 'height', 'lineWidth', 'toFront', 'roundness', 'arrowEnd', 'x1', 'fill', 'bottom', 'clear', 'sweepAngle', 'value', 'contains', 'italic', 'visible', 'arrowStart', 'hitsShape', 'font', 'children', 'hitTest', 'width', 'rotateAngle', 'red', 'blue', 'green'], 'es': {'group': 'grupo', 'play': 'toca', 'pause': 'pausa', 'loop': 'repetir', 'restart': 'reiniciar', 'remove': 'quitar', 'bold': 'negrito', 'opacity': 'opacidad', 'centerX': 'centroX', 'hits': 'toca', 'borderWidth': 'anchuraDeBorde', 'centerY': 'centroY', 'url': 'url', 'left': 'izquierda', 'add': 'agregar', 'points': 'puntos', 'startAngle': 'ánguloInicial', 'toBack': 'alFondo', 'x2': 'x2', 'y1': 'y1', 'size': 'tamaño', 'initialPoints': 'puntosIniciales', 'top': 'superior', 'align': 'alinear', 'dashes': 'guión', 'right': 'derecha', 'start': 'inicio', 'colors': 'colores', 'y2': 'y2', 'radius': 'radio', 'border': 'borde', 'containsShape': 'contieneFigura', 'background': 'fondo', 'height': 'altura', 'lineWidth': 'anchuraDeLínea', 'toFront': 'alFrente', 'roundness': 'redondez', 'arrowEnd': 'finalDeFlecha', 'x1': 'x1', 'fill': 'relleno', 'bottom': 'inferior', 'clear': 'vaciar', 'sweepAngle': 'ánguloDeBarrido', 'value': 'valor', 'contains': 'contiene', 'italic': 'itálica', 'visible': 'visible', 'arrowStart': 'inicioDeFlecha', 'hitsShape': 'tocaFigura', 'font': 'fuente', 'children': 'hijos', 'hitTest': 'tocarPrueba', 'width': 'ancho', 'rotateAngle': 'rotarÁngulo', 'red': 'red', 'blue': 'blue', 'green': 'green'}, 'de': {'group': 'gruppe', 'play': 'abspielen', 'pause': 'pausieren', 'loop': 'wiederholen', 'restart': 'neustarten', 'remove': 'entferne', 'bold': 'fett', 'opacity': 'deckkraft', 'centerX': 'mitteX', 'hits': 'trifft', 'borderWidth': 'randBreite', 'centerY': 'mitteY', 'url': 'url', 'left': 'links', 'add': 'fügeHinzu', 'points': 'punkte', 'startAngle': 'anfangsWinkel', 'toBack': 'nachHinten', 'x2': 'x2', 'y1': 'y1', 'size': 'größe', 'initialPoints': 'startPunkte', 'top': 'oben', 'align': 'ausrichtung', 'dashes': 'gestrichelt', 'right': 'rechts', 'start': 'start', 'y2': 'y2', 'radius': 'radius', 'border': 'rand', 'containsShape': 'beinhaltetForm', 'background': 'hintergrund', 'height': 'höhe', 'lineWidth': 'linienBreite', 'toFront': 'nachVorn', 'roundness': 'rundung', 'arrowEnd': 'pfeilEnde', 'x1': 'x1', 'fill': 'füllen', 'bottom': 'unten', 'clear': 'leeren', 'sweepAngle': 'krümmungsWinkel', 'value': 'wert', 'contains': 'beinhaltet', 'italic': 'kursiv', 'visible': 'sichtbar', 'arrowStart': 'pfeilStart', 'hitsShape': 'trifftForm', 'font': 'schriftart', 'children': 'kinder', 'hitTest': 'treffenTest', 'width': 'breite', 'rotateAngle': 'drehWinkel', 'red': 'red', 'blue': 'blue', 'green': 'green'}} -TRANSLATED_BOOLEANS = {'keys': ['True', 'False'], 'es': {'True': 'Verdadero', 'False': 'Falso'}, 'de': {'True': 'Wahr', 'False': 'Falsch'}} -TRANSLATED_GLOBALS = {'keys': ['Arc', 'Circle', 'Group', 'Image', 'Label', 'Line', 'Oval', 'Polygon', 'Rect', 'RegularPolygon', 'Robot', 'Sound', 'Star', 'almostEqual', 'angleTo', 'app', 'assertEqual', 'choice', 'distance', 'fromPythonAngle', 'getPointInDir', 'gradient', 'makeList', 'onKeyHolds', 'onSteps', 'print', 'pythonRound', 'random', 'randrange', 'rgb', 'round', 'rounded', 'seed', 'toPythonAngle', 'onKeyPresses', 'CMUImage'], 'es': {'Arc': 'Arco', 'Circle': 'Círculo', 'Group': 'Grupo', 'Image': 'Imagen', 'Label': 'Rótulo', 'Line': 'Línea', 'Oval': 'Óvalo', 'Polygon': 'Polígono', 'Rect': 'Rect', 'RegularPolygon': 'PolígonoRegular', 'Robot': 'Robot', 'Sound': 'Sonido', 'Star': 'Estrella', 'almostEqual': 'casiIgualA', 'angleTo': 'ánguloA', 'app': 'app', 'assertEqual': 'afirmarIgualdad', 'choice': 'opción', 'distance': 'distancia', 'fromPythonAngle': 'deÁnguloPython', 'getPointInDir': 'obtenerPuntoEnDir', 'gradient': 'gradiente', 'makeList': 'hacerLista', 'onKeyHolds': 'enTeclasRetenidas', 'onSteps': 'enPasos', 'print': 'imprime', 'pythonRound': 'redondearPython', 'random': 'aleatorio', 'randrange': 'rangoAleatorio', 'rgb': 'rgb', 'round': 'redondear', 'rounded': 'redondeado', 'seed': 'semilla', 'toPythonAngle': 'aÁnguloPython', 'onKeyPresses': 'enTeclaPresionadas', 'CMUImage': 'CMUImage'}, 'de': {'Arc': 'Bogen', 'Circle': 'Kreis', 'Group': 'Gruppe', 'Image': 'Bild', 'Label': 'Beschriftung', 'Line': 'Linie', 'Oval': 'Oval', 'Polygon': 'Vieleck', 'Rect': 'Rechteck', 'RegularPolygon': 'RegelmäßigesVieleck', 'Robot': 'Roboter', 'Sound': 'Geräusch', 'Star': 'Stern', 'almostEqual': 'fastGleich', 'angleTo': 'winkelNach', 'app': 'anwendung', 'assertEqual': 'gleichsetzen', 'choice': 'auswahl', 'distance': 'distanz', 'fromPythonAngle': 'vomPythonWinkel', 'getPointInDir': 'erhaltePunktInRichtung', 'gradient': 'farbverlauf', 'makeList': 'macheListe', 'onKeyHolds': 'wennTasteGedrückt', 'onSteps': 'schrittweise', 'print': 'ausgabe', 'pythonRound': 'pythonRunden', 'random': 'zufall', 'randrange': 'zufallsspanne', 'rgb': 'RGB', 'round': 'runden', 'rounded': 'gerundet', 'seed': 'kerne', 'toPythonAngle': 'zumPythonWinkel', 'onKeyPresses': 'wennTasteGedrückt', 'CMUImage': 'CMUImage'}} -TRANSLATED_USER_FUNCTION_NAMES = {'keys': ['onKeyHold', 'onKeyPress', 'onKeyRelease', 'onMouseDrag', 'onMouseMove', 'onMousePress', 'onMouseRelease', 'onStep'], 'es': {'onKeyHold': 'enTeclaRetenida', 'onKeyPress': 'enTeclaPresionada', 'onKeyRelease': 'enTeclaSoltada', 'onMouseDrag': 'enRatónArrastrado', 'onMouseMove': 'enRatónMovido', 'onMousePress': 'enRatónPresionado', 'onMouseRelease': 'enRatónSoltado', 'onStep': 'enPaso'}, 'de': {'onKeyHold': 'beiTasteHalten', 'onKeyPress': 'beiTasteRunter', 'onKeyRelease': 'beiTasteHoch', 'onMouseDrag': 'beiMausMitTasteZiehen', 'onMouseMove': 'beiMausbewegung', 'onMousePress': 'beiMaustasteRunter', 'onMouseRelease': 'beiMaustasteHoch', 'onStep': 'beimSchritt'}} -TRANSLATED_KEY_NAMES = {'keys': ['space', 'enter', 'left', 'right', 'up', 'down', 'pageup', 'pagedown', 'escape', 'delete', 'backspace', 'tab'], 'es': {'space': 'espacio', 'enter': 'intro', 'left': 'izquierda', 'right': 'derecha', 'up': 'arriba', 'down': 'abajo', 'pageup': 'repág', 'pagedown': 'avpág', 'escape': 'escapar', 'delete': 'suprimir', 'backspace': 'retroceso', 'tab': 'pestaña'}, 'de': {'space': 'leertaste', 'enter': 'enter', 'left': 'links', 'right': 'rechts', 'up': 'pfeil-hoch', 'down': 'pfeil-runter', 'pageup': 'bild-hoch', 'pagedown': 'bild-runter', 'escape': 'escape', 'delete': 'entfernen', 'backspace': 'löschen', 'tab': 'tab'}} -TRANSLATED_APP_ATTRS = {'keys': ['background', 'getTextInput', 'group', 'maxShapeCount', 'paused', 'setTextInputs', 'stepsPerSecond', 'stop', 'stopped', 'setMaxShapeCount'], 'es': {'background': 'fondo', 'getTextInput': 'obtenerEntradaDeTexto', 'group': 'grupo', 'maxShapeCount': 'maxCuentaDeFiguras', 'paused': 'pausada', 'setTextInputs': 'establecerEntradaDeTexto', 'stepsPerSecond': 'pasosPorSegundo', 'stop': 'detener', 'stopped': 'detenido', 'setMaxShapeCount': 'establecerCuentaFormasMaximas'}, 'de': {'background': 'hintergrund', 'getTextInput': 'holeTextEingabe', 'group': 'gruppe', 'maxShapeCount': 'maximaleFormMenge', 'paused': 'pausiert', 'setTextInputs': 'setzeTextEingaben', 'stepsPerSecond': 'schritteProSekunde', 'stop': 'stop', 'stopped': 'gestoppt', 'setMaxShapeCount': 'setzeMaxFormAnzahl'}} -TRANSLATED_STRINGS = {'keys': ['Arc', 'Circle', 'Group', 'Image', 'Label', 'Line', 'Oval', 'Polygon', 'Rect', 'RegularPolygon', 'Robot', 'Sound', 'Star', 'almostEqual', 'angleTo', 'app', 'assertEqual', 'choice', 'distance', 'fromPythonAngle', 'getPointInDir', 'gradient', 'makeList', 'onKeyHolds', 'onSteps', 'print', 'pythonRound', 'random', 'randrange', 'rgb', 'round', 'rounded', 'seed', 'toPythonAngle', 'onKeyPresses', 'Arc', 'Circle', 'Group', 'Image', 'Label', 'Line', 'Oval', 'Polygon', 'Rect', 'RegularPolygon', 'Robot', 'Sound', 'Star', 'almostEqual', 'angleTo', 'app', 'assertEqual', 'choice', 'distance', 'fromPythonAngle', 'getPointInDir', 'gradient', 'makeList', 'onKeyHolds', 'onSteps', 'print', 'pythonRound', 'random', 'randrange', 'rgb', 'round', 'rounded', 'seed', 'toPythonAngle', 'onKeyPresses', 'remove', 'bold', 'opacity', 'centerX', 'hits', 'borderWidth', 'centerY', 'url', 'left', 'add', 'points', 'startAngle', 'toBack', 'x2', 'y1', 'size', 'initialPoints', 'top', 'align', 'dashes', 'right', 'start', 'y2', 'radius', 'border', 'containsShape', 'background', 'height', 'lineWidth', 'toFront', 'roundness', 'arrowEnd', 'x1', 'fill', 'bottom', 'clear', 'sweepAngle', 'value', 'contains', 'italic', 'visible', 'arrowStart', 'hitsShape', 'font', 'children', 'hitTest', 'width', 'rotateAngle', '"{{align}}" is not a valid Polygon constructor argument', '"{{attr}}" is not a valid shape constructor argument', '**** Error in onError()!!! ****', 'An assertEqual() statement in a test case failed. See the Console for details.', 'An error occurred. Here is the stack trace:', 'App', 'App.group is readonly', 'App.stopped is readonly', 'Arc', 'Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}', 'Arguments to setTextInputs must be strings. %r is not a string.', 'Autograder: error executing solution code!', 'Autograder: error executing user code!', 'Autograding is taking a long time. Your code may have an infinite loop.', 'Both rows and cols must be >= 0', "Cannot set Image's url", "Cannot set Label's height", "Cannot set Label's width", "Cannot set Line's border", "Cannot set Line's borderWidth", 'Circle', 'Circle{{attrs}}', 'Failed to get text input', 'Failed to load image data', 'Font not found: {{baseFontName}}\n', 'Group', 'Group()', 'Group.add(shape)', 'Group.remove(shape)', 'Group.{{attr}} cannot be read or modified', "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}", '{{error}}: Illegal gradient start ({{start}})', 'Image', 'Image{{args}}', 'Internal error (no solution shapes!). Please try again.', 'Label', 'Label({{args}})', 'Line', 'Line{{args}}', 'Must have an even number of x,y values in initialPoints list', 'Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}', 'No activeDrawing for new Shape', 'No such attribute: {{attr}}', 'None', 'Oval', 'Oval{{args}}', 'Polygon', 'Polygon{{args}}', 'Recording Starts In', 'Rect', 'Rect{{args}}', 'RegularPolygon', 'RegularPolygon{{args}}', 'Robot', 'Shape', 'Shape()', 'Shapes drawn in wrong order', "Sorry, you cannot use Python's input function in CMU CS Academy", 'Sound', 'Sound "{{soundSource}}" failed to play. Disabling it.', 'Star', 'Star{{args}}', 'The loop argument to Sound.play must be True or False, got {{loopRepr}}', 'The restart argument to Sound.play must be True or False, got {{restartRepr}}', 'Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).', 'Traceback (most recent call last):', '{{error}}: None cannot be used inside gradient.colors', '{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})', '{{error}}: {{color}} cannot be used inside gradient.colors', '{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name', 'Undefined poster in new _CmuGraphics', 'Unknown message {{cmd}}', "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound", 'Wait for fonts to load before using them', 'Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})', 'You are missing {{missingCount}} shape(s)', "You can't change the size of this group because {{shape}} can't be resized", "You can't get or set the align property", 'You have {{extraCount}} extra shape(s)', 'Your code appeared to be in an infinite loop, so it was terminated.', '\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n', 'addPoint', 'add{{xy}}', 'align', 'app.background should not be {{userBackgroundString}}', 'app.setMaxShapeCount(n)', 'arrowEnd', 'arrowStart', 'at line', 'background', 'black', 'bold', 'border', 'borderWidth', 'bottom', 'bottom-left', 'bottom-right', 'center', 'centerX', 'centerY', 'centroidX', 'centroidY', 'color', 'containsShape(targetShape)', 'dashes', 'fill', 'font', 'gradient({{colors}}, start={{start}})', 'height', 'hits(x, y)', 'hitsShape(targetShape)', 'initialPoints', 'initialPoints (x value)', 'initialPoints (y value)', 'integer', 'italic', 'keys must be a list', 'left', 'left-bottom', 'left-top', 'line', 'lineWidth', 'list', 'n', 'non-negative-number', 'number', 'number-greater-than-2', 'number-in-range-{{lo}}-{{hi}}', 'opacity', 'oval size', 'points', 'positive-number', 'radius', 'rgb({{r}}, {{g}}, {{b}})', 'right', 'right-bottom', 'right-top', 'rotate.cx', 'rotate.cy', 'rotate.degrees', 'rotateAngle', 'roundness', 'scale{{xy}}', 'shape', 'size', 'startAngle', 'string', 'sweepAngle', 'targetShape', 'top', 'top-left', 'top-right', 'url', 'value', 'visible', 'width', 'x', 'x1', 'x2', 'y', 'y1', 'y2', '{{actual}} != {{expected}}', '{{attr}} in {{object}}', '{{attr}} should not be {{value}}', '{{ordinalName}} point mismatch at {{location}}', 'play', 'pause', 'restart', 'loop', 'TypeError', '{{error}}: in {{callSpec}}, {{value}} is not a legal align value', "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'", 'contains(x, y)', 'hitTest(x, y)', 'addPoint(x, y)', 'red', 'green', 'blue', '{{callSpec}} must start with http:// or https://'], 'es': {'Arc': 'Arco', 'Circle': 'Círculo', 'Group': 'Grupo', 'Image': 'Imagen', 'Label': 'Rótulo', 'Line': 'Línea', 'Oval': 'Óvalo', 'Polygon': 'Polígono', 'Rect': 'Rect', 'RegularPolygon': 'PolígonoRegular', 'Robot': 'Robot', 'Sound': 'Sonido', 'Star': 'Estrella', 'almostEqual': 'casiIgualA', 'angleTo': 'ánguloA', 'app': 'app', 'assertEqual': 'afirmarIgualdad', 'choice': 'opción', 'distance': 'distancia', 'fromPythonAngle': 'deÁnguloPython', 'getPointInDir': 'obtenerPuntoEnDir', 'gradient': 'gradiente', 'makeList': 'hacerLista', 'onKeyHolds': 'enTeclasRetenidas', 'onSteps': 'enPasos', 'print': 'imprime', 'pythonRound': 'redondearPython', 'random': 'aleatorio', 'randrange': 'rangoAleatorio', 'rgb': 'rgb', 'round': 'redondear', 'rounded': 'redondeado', 'seed': 'semilla', 'toPythonAngle': 'aÁnguloPython', 'onKeyPresses': 'enTeclaPresionadas', 'remove': 'quitar', 'bold': 'negrito', 'opacity': 'opacidad', 'centerX': 'centroX', 'hits': 'toca', 'borderWidth': 'anchuraDeBorde', 'centerY': 'centroY', 'url': 'url', 'left': 'izquierda', 'add': 'agregar', 'points': 'puntos', 'startAngle': 'ánguloInicial', 'toBack': 'alFondo', 'x2': 'x2', 'y1': 'y1', 'size': 'tamaño', 'initialPoints': 'puntosIniciales', 'top': 'superior', 'align': 'alinear', 'dashes': 'guión', 'right': 'derecha', 'start': 'inicio', 'colors': 'colores', 'y2': 'y2', 'radius': 'radio', 'border': 'borde', 'containsShape': 'contieneFigura', 'background': 'fondo', 'height': 'altura', 'lineWidth': 'anchuraDeLínea', 'toFront': 'alFrente', 'roundness': 'redondez', 'arrowEnd': 'finalDeFlecha', 'x1': 'x1', 'fill': 'relleno', 'bottom': 'inferior', 'clear': 'vaciar', 'sweepAngle': 'ánguloDeBarrido', 'value': 'valor', 'contains': 'contiene', 'italic': 'itálica', 'visible': 'visible', 'arrowStart': 'inicioDeFlecha', 'hitsShape': 'tocaFigura', 'font': 'fuente', 'children': 'hijos', 'hitTest': 'tocarPrueba', 'width': 'ancho', 'rotateAngle': 'rotarÁngulo', '"{{align}}" is not a valid Polygon constructor argument': '"alinear" no es un argumento de constructor de Polígono válido', '"{{attr}}" is not a valid shape constructor argument': '"{{attr}}" no es un argumento de constructor de formas válido', '**** Error in onError()!!! ****': '**** ¡¡¡Error dentro de enError()!!! ****', 'An assertEqual() statement in a test case failed. See the Console for details.': 'Una sentencia assertEqual() dentro de un caso de prueba falló. Mire la consola para detalles.', 'An error occurred. Here is the stack trace:': 'Ocurrió un error. Aquí está el seguimiento de la pila:', 'App': 'App', 'App.group is readonly': 'App.grupo es sólo lectura', 'App.stopped is readonly': 'App.detenido es sólo lectura', 'Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}': 'Arg Count Error: {{callSpec}}() toma {{argNamesLen}} argumentos ({{argNames}}), no {{argsLen}}', 'Arguments to setTextInputs must be strings. %r is not a string.': 'Arguments to setTextInputs must be strings. %r is not a string.', 'Autograder: error executing solution code!': 'Evaluador: ¡error al ejecutar el código de la solución!', 'Autograder: error executing user code!': 'Evaluador: ¡error al ejecutar el código del usuario!', 'Autograding is taking a long time. Your code may have an infinite loop.': 'El evaluador está tardando mucho. Su código puede tener un bucle infinito.', 'Both rows and cols must be >= 0': 'Ambos las filas y las cols deben ser >= 0', "Cannot set Image's url": 'No se puede establecer el url de una Imagen', "Cannot set Label's height": 'No se puede establecer la altura de una Línea', "Cannot set Label's width": 'No se puede establecer la anchura de una Línea', "Cannot set Line's border": 'No se puede establecer el borde de una Línea', "Cannot set Line's borderWidth": 'No se puede establecer la anchura de una Línea', 'Circle{{attrs}}': 'Círculo{{attrs}}', 'Failed to get text input': 'No se pudo obtener entrade de texto', 'Failed to load image data': 'No se puedo cargar los datos de la imagen', 'Font not found: {{baseFontName}}\n': 'Fuente no encontrada: {{baseFontName}}\\n', 'Group()': 'Grupo()', 'Group.add(shape)': 'Grupo.agregar(figura)', 'Group.remove(shape)': 'Grupo.quitar(figura)', 'Group.{{attr}} cannot be read or modified': 'Grupo.{{attr}} no se puede leer ni modificar', "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}": 'Grupo.{{attr}} no tiene valor porque no todos sus elementos secundarios tienen el mismo valor para {{attr}}', '{{error}}: Illegal gradient start ({{start}})': '{{error}}: Inicio de gradiente ilegal ({{start}})', 'Image{{args}}': 'Imagen{{args}}', 'Internal error (no solution shapes!). Please try again.': 'Error internal (¡no figuras en su solución!). Por favor inténtelo otra vez.', 'Label({{args}})': 'Rótulo({{args}})', 'Line{{args}}': 'Línea{{args}}', 'Must have an even number of x,y values in initialPoints list': 'Debe tener un número par de valores x,y dentro de la lista puntosIniciales', 'Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}': 'Necesita dar al menos 2 colores a gradiente(); diste {{colorsLength}}', 'No activeDrawing for new Shape': 'No hay un dibujoActivo para la Figura nueva', 'No such attribute: {{attr}}': 'No existe tal atributo: {{attr}}', 'None': 'None', 'Oval{{args}}': 'Óvalo{{args}}', 'Polygon{{args}}': 'Polígono{{args}}', 'Recording Starts In': 'Grabación comenzando en', 'Rect{{args}}': 'Rect{{args}}', 'RegularPolygon{{args}}': 'PolígonoRegular{{args}}', 'Shape': 'Figura', 'Shape()': 'Figura()', 'Shapes drawn in wrong order': 'Figuras dibujadas en el orden equivocado', "Sorry, you cannot use Python's input function in CMU CS Academy": 'Lo lamento, no puede usar la función de entrada de Python en CMU CS Academy', 'Sound "{{soundSource}}" failed to play. Disabling it.': 'Sonido "{{soundSource}}" no pudo jugar. Desactivando.', 'Star{{args}}': 'Estrella{{args}}', 'The loop argument to Sound.play must be True or False, got {{loopRepr}}': 'El argumento de repetición de Sonido.tocar debe ser Verdadero o Falso, obtuvo {{loopRepr}}', 'The restart argument to Sound.play must be True or False, got {{restartRepr}}': 'El argumento de reinicio de Sonido.tocar debe ser Verdadero o Falso, obtuvo {{reiniciarRepr}}', 'Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).': 'Demasiadas formas: Su código creó más de {{maxShapeCount}} formas. Si desea aumentar este límite, aunque puede hacer que su código se ejecute lentamente, llame a app.establecerCuentaFormasMaximas(n).', 'Traceback (most recent call last):': 'rastreo (última llamada más reciente):', '{{error}}: None cannot be used inside gradient.colors': '{{error}}: None no se puede usar dentro de gradientes.colores', '{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})': '{{error}}: {{callSpec}} debe ser {{typeName}} (pero {{value}} es de tipo {{valueType}})', '{{error}}: {{color}} cannot be used inside gradient.colors': '{{error}}: {{color}} no se puede utilizar dentro de gradiente.colores', '{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name': '{{error}}: {{callSpec}} debe ser un color, y {{value}} no es un nombre de color legal', 'Undefined poster in new _CmuGraphics': 'Posteador indefinido en nuevo _CmuGraphics', 'Unknown message {{cmd}}': 'Mensaje desconocido {{cmd}}', "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound": 'Use nuestra función redondear(n) en lugar del "round(n)" de Python\\n ¡La función "round(n)" de Python 3 no funciona como uno espera!\\n Si todavía quiere usar el "round" de Python, use "pythonRound"', 'Wait for fonts to load before using them': 'Espere a que se carguen las fuentes antes de usarlas', 'Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})': '# incorrecto de puntos ({{userPtsLen}} debe ser {{solnPtsLen}})', 'You are missing {{missingCount}} shape(s)': 'Te faltan {{missingCount}} forma(s)', "You can't change the size of this group because {{shape}} can't be resized": 'No puedes cambiar el tamaño de este grupo porque no se puede cambiar el tamaño de {{shape}}', "You can't get or set the align property": 'No puede obtener o establecer la propiedad de alinear', 'You have {{extraCount}} extra shape(s)': 'Tienes {{extraCount}} forma(s) adicionales', 'Your code appeared to be in an infinite loop, so it was terminated.': 'Your code appeared to be in an infinite loop, so it was terminated.', '\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n': '\\nAdvertencia: Su código creó rótulos con más de\\n 1,000 caracteres de texto en total. Esto puede hacer que su\\n programa se ejecute muy lentamente.\\n', 'addPoint': 'agregarPunto', 'add{{xy}}': 'añadir{{xy}}', 'app.background should not be {{userBackgroundString}}': 'app.fondo no debe ser {{userBackgroundString}}', 'app.setMaxShapeCount(n)': 'app.establecerMáximaCuentaDeFiguras(n)', 'at line': 'en la línea', 'black': 'negro', 'bottom-left': 'inferior-izquierda', 'bottom-right': 'inferior-derecha', 'center': 'centro', 'centroidX': 'centroideX', 'centroidY': 'centroideY', 'color': 'color', 'containsShape(targetShape)': 'contieneFigura(figuraObjetivo)', 'gradient({{colors}}, start={{start}})': 'gradient({{colors}}, start={{start}})', 'hits(x, y)': 'toca(x, y)', 'hitsShape(targetShape)': 'tocaFigura(figuraObjetivo)', 'initialPoints (x value)': 'puntosIniciales (valor x)', 'initialPoints (y value)': 'puntosIniciales (valor y)', 'integer': 'número entero', 'keys must be a list': 'teclas debe ser una lista', 'left-bottom': 'izquierda-inferior', 'left-top': 'izquierda-superior', 'line': 'línea', 'list': 'lista', 'n': 'n', 'non-negative-number': 'número-no-negativo', 'number': 'número', 'number-greater-than-2': 'número-mayor-que-2', 'number-in-range-{{lo}}-{{hi}}': 'número-en-rango-{{lo}}-{{hi}}', 'oval size': 'tamaño de óvalo', 'positive-number': 'número-positivo', 'rgb({{r}}, {{g}}, {{b}})': 'rgb({{r}}, {{g}}, {{b}})', 'right-bottom': 'derecha-inferior', 'right-top': 'derecha-superior', 'rotate.cx': 'rotar.cx', 'rotate.cy': 'rotar.cy', 'rotate.degrees': 'rotar.grados', 'scale{{xy}}': 'escala{{xy}}', 'shape': 'figura', 'string': 'cadena', 'targetShape': 'figuraObjetivo', 'top-left': 'superior-izquierda', 'top-right': 'superior-derecha', 'x': 'x', 'y': 'y', '{{actual}} != {{expected}}': '{{actual}} != {{expected}}', '{{attr}} in {{object}}': '{{attr}} dentro de {{object}}', '{{attr}} should not be {{value}}': '{{attr}} no debe ser {{value}}', '{{ordinalName}} point mismatch at {{location}}': '{{ordinalName}} desajuste de puntos en {{location}}', 'play': 'toca', 'pause': 'pausa', 'restart': 'reiniciar', 'loop': 'repetir', 'TypeError': 'Error de tipo', '{{error}}: in {{callSpec}}, {{value}} is not a legal align value': '{{error}}: en {{callSpec}}, {{value}} no es un valor legal de alineación', "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} tiene un argumento de palabra clave inesperado '{{arg}}'", 'contains(x, y)': 'contiene(x, y)', 'hitTest(x, y)': 'tocarPrueba(x, y)', 'addPoint(x, y)': 'agregarPunto(x, y)', 'red': 'red', 'green': 'green', 'blue': 'blue', '{{callSpec}} must start with http:// or https://': '{{callSpec}} debe comenzar con http:// o https://', "Cannot modify attribute '{{attr}}' of '{{className}}' object": "No se puede modificar el atributo '{{attr}}' del objeto de '{{className}}'"}, 'de': {'Arc': 'Bogen', 'Circle': 'Kreis', 'Group': 'Gruppe', 'Image': 'Bild', 'Label': 'Beschriftung', 'Line': 'Linie', 'Oval': 'Oval', 'Polygon': 'Vieleck', 'Rect': 'Rechteck', 'RegularPolygon': 'RegelmäßigesVieleck', 'Robot': 'Roboter', 'Sound': 'Geräusch', 'Star': 'Stern', 'almostEqual': 'fastGleich', 'angleTo': 'winkelNach', 'app': 'anwendung', 'assertEqual': 'gleichsetzen', 'choice': 'auswahl', 'distance': 'distanz', 'fromPythonAngle': 'vomPythonWinkel', 'getPointInDir': 'erhaltePunktInRichtung', 'gradient': 'farbverlauf', 'makeList': 'macheListe', 'onKeyHolds': 'wennTasteGedrückt', 'onSteps': 'schrittweise', 'print': 'ausgabe', 'pythonRound': 'pythonRunden', 'random': 'zufall', 'randrange': 'zufallsspanne', 'rgb': 'RGB', 'round': 'runden', 'rounded': 'gerundet', 'seed': 'kerne', 'toPythonAngle': 'zumPythonWinkel', 'onKeyPresses': 'wennTasteGedrückt', 'remove': 'entferne', 'bold': 'fett', 'opacity': 'deckkraft', 'centerX': 'mitteX', 'hits': 'trifft', 'borderWidth': 'randBreite', 'centerY': 'mitteY', 'url': 'url', 'left': 'links', 'add': 'fügeHinzu', 'points': 'punkte', 'startAngle': 'anfangsWinkel', 'toBack': 'nachHinten', 'x2': 'x2', 'y1': 'y1', 'size': 'größe', 'initialPoints': 'startPunkte', 'top': 'oben', 'align': 'ausrichtung', 'dashes': 'gestrichelt', 'right': 'rechts', 'start': 'start', 'y2': 'y2', 'radius': 'radius', 'border': 'rand', 'containsShape': 'beinhaltetForm', 'background': 'hintergrund', 'height': 'höhe', 'lineWidth': 'linienBreite', 'toFront': 'nachVorn', 'roundness': 'rundung', 'arrowEnd': 'pfeilEnde', 'x1': 'x1', 'fill': 'füllen', 'bottom': 'unten', 'clear': 'leeren', 'sweepAngle': 'krümmungsWinkel', 'value': 'wert', 'contains': 'beinhaltet', 'italic': 'kursiv', 'visible': 'sichtbar', 'arrowStart': 'pfeilStart', 'hitsShape': 'trifftForm', 'font': 'schriftart', 'children': 'kinder', 'hitTest': 'treffenTest', 'width': 'breite', 'rotateAngle': 'drehWinkel', '"{{align}}" is not a valid Polygon constructor argument': '"alinear" ist kein gültiges Argument für den Konstruktor von Polygon', '"{{attr}}" is not a valid shape constructor argument': '"{{attr}}" ist kein valides Argument des Konstruktors von Form', '**** Error in onError()!!! ****': '**** Fehler in wennFehler()!!! ****', 'An assertEqual() statement in a test case failed. See the Console for details.': 'Eine assertEqual() Anweisung in einem Testfall ist fehlgeschlagen. Schau auf die Konsole um Details zu sehen.', 'An error occurred. Here is the stack trace:': 'Ein unbekannter Fehler ist aufgetreten. Hier ist der Stack Tracke:', 'App': 'Anwendung', 'App.group is readonly': 'App.gruppe nur lesbar', 'App.stopped is readonly': 'App.gestoppt ist nur lesbar', 'Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}': 'Fehlerhafte Anzahl der Argumente: {{callSpec}} () akzeptiert {{argNamesLen}} Argumente ({{argNames}}), nicht {{argsLen}}', 'Arguments to setTextInputs must be strings. %r is not a string.': 'Arguments to setTextInputs must be strings. %r is not a string.', 'Autograder: error executing solution code!': 'Autograder: Fehler beim Ausführen des Lösungscodes!', 'Autograder: error executing user code!': 'Autograder: Fehler beim Ausführen des Benutzercodes!', 'Autograding is taking a long time. Your code may have an infinite loop.': 'Autograding dauert lange. Möglicherweise gibt es eine Endlosschleife in deinem Code.', 'Both rows and cols must be >= 0': 'Sowohl Zeilen als auch Spalten müssen >= 0 sein', "Cannot set Image's url": 'Die URL des Bildes kann nicht festgelegt werden', "Cannot set Label's height": 'Die Höhe des Labels kann nicht eingestellt werden', "Cannot set Label's width": 'Breite des Labels kann nicht gesetzt werden', "Cannot set Line's border": 'Der Linienrand kann nicht festgelegt werden', "Cannot set Line's borderWidth": 'Die Rahmenbreite von Line kann nicht festgelegt werden', 'Circle{{attrs}}': 'Kreis{{attrs}}', 'Failed to get text input': 'Fehler bei der Texteingabe', 'Failed to load image data': 'Fehler beim Laden der Bilddaten', 'Font not found: {{baseFontName}}\n': 'Schriftart nicht gefunden: {{baseFontName}}\\n', 'Group()': 'Gruppe()', 'Group.add(shape)': 'Gruppe.fügeHinzu(form)', 'Group.remove(shape)': 'Gruppe.entferne(form)', 'Group.{{attr}} cannot be read or modified': 'Gruppe.{{attr}} kann nicht gelesen oder geändert werden', "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}": 'Gruppe.{{attr}} hat keinen Wert, da die untergeordneten Elemente nicht alle den gleichen Wert für {{attr}} haben', '{{error}}: Illegal gradient start ({{start}})': '{{error}}: Illegaler Start des Farbverlaufs ({{start}})', 'Image{{args}}': 'Bild{{args}}', 'Internal error (no solution shapes!). Please try again.': 'Interner Fehler (keine Lösungsformen!). Bitte versuche es noche einmal.', 'Label({{args}})': 'Beschriftung({{args}})', 'Line{{args}}': 'Linie{{args}}', 'Must have an even number of x,y values in initialPoints list': 'Muss eine gerade Anzahl von x,y Werten in der Liste anfangsPunkte haben', 'Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}': 'Es müssen mindestens 2 Farben an farbverlauf() übergeben werden. Du hast {{farbenLänge}} gegeben', 'No activeDrawing for new Shape': 'Keine aktiveZeichnung für neue Form', 'No such attribute: {{attr}}': 'Kein solches Attribut: {{attr}}', 'None': 'None', 'Oval{{args}}': 'Oval{{args}}', 'Polygon{{args}}': 'Polygon{{args}}', 'Recording Starts In': 'Aufnahme startet in', 'Rect{{args}}': 'Rechteck{{args}}', 'RegularPolygon{{args}}': 'RegularPolygon {{args}}', 'Shape': 'Form', 'Shape()': 'Form()', 'Shapes drawn in wrong order': 'Formen werden in der falschen Reihenfolge gezeichnet', "Sorry, you cannot use Python's input function in CMU CS Academy": "Leider kannst du Python's input Funktion nicht in CMU CS Academy nutzen", 'Sound "{{soundSource}}" failed to play. Disabling it.': 'Klang "{{soundSource}}" konnte nicht abgespielt werden. Wird deaktiviert.', 'Star{{args}}': 'Stern{{args}}', 'The loop argument to Sound.play must be True or False, got {{loopRepr}}': 'Das Schleifenargument für Sound.play muss True oder False sein, {{loopRepr}}', 'The restart argument to Sound.play must be True or False, got {{restartRepr}}': 'Das Argument um Sound.play neuzustarten muss True oder False sein und {{restartRepr}} erhalten haben', 'Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).': 'Zu viele Formen: Ihr Code hat mehr als {{maxShapeCount}} Formen erstellt. Wenn Sie dieses Limit erhöhen möchten, obwohl Ihr Code dadurch möglicherweise langsam ausgeführt wird, rufen Sie app.setzeMaxFormAnzahl(n) auf.', 'Traceback (most recent call last):': 'Aufrufliste (jüngster Aufruf zuletzt)', '{{error}}: None cannot be used inside gradient.colors': '{{error}}: None kann nicht innerhalb von farbverlauf.farben verwendet werden', '{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})': '{{error}}: {{callSpec}} sollte {{typeName}} sein (aber {{value}} ist vom Typ {{valueType}})', '{{error}}: {{color}} cannot be used inside gradient.colors': '{{error}}: {{color}} kann nicht in gradient.colors verwendet werden', '{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name': '{{error}}: {{callSpec}} sollte eine Farbe sein, und {{value}} ist kein zulässiger Farbname', 'Undefined poster in new _CmuGraphics': 'Nicht definiertes Poster in neuem _CmuGraphics', 'Unknown message {{cmd}}': 'Unbekannte Nachricht {{cmd}}', "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound": "Verwenden Sie unsere Funktion rounded(n) anstelle der Python 3 Funktion round(n)\\n Python 3's round(n) funktioniert nicht wie erwartet!\\n Wenn Sie die Funktion round() von Python 3 weiterhin verwenden möchten, dann nutzen Sie pythonRound", 'Wait for fonts to load before using them': 'Warte, bis Zeichensatz geladen ist, bevor du ihn verwendest', 'Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})': 'Falsche Anzahl von Punkten ({{userPtsLen}} sollte ${{solnPtsLen}} sein)', 'You are missing {{missingCount}} shape(s)': 'Ihnen fehlen {{missingCount}} Form(en)', "You can't change the size of this group because {{shape}} can't be resized": 'Sie können die Größe dieser Gruppe nicht ändern, da die Größe von {{form}} nicht geändert werden kann', "You can't get or set the align property": 'Sie können die Align-Eigenschaft nicht abrufen oder festlegen', 'You have {{extraCount}} extra shape(s)': 'Du hast {{extraCount}} zusätzliche Form(en)', 'Your code appeared to be in an infinite loop, so it was terminated.': 'Your code appeared to be in an infinite loop, so it was terminated.', '\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n': '\\nWarnung: Ihr Code hat Beschriftungen mit insgesamt mehr als\\n 1.000 Textzeichen erstellt. Dies kann dazu führen, dass Ihr\\n Programm sehr langsam ausgeführt wird.\\n', 'addPoint': 'fügePunktHinzu', 'add{{xy}}': 'addiere{{xy}}', 'app.background should not be {{userBackgroundString}}': 'anwendung.hintergrund sollte nicht {{userBackgroundString}} sein', 'app.setMaxShapeCount(n)': 'anwendung.setzeMaxFormAnzahl(n)', 'at line': 'in Zeile', 'black': 'schwarz', 'bottom-left': 'unten-links', 'bottom-right': 'unten-rechts', 'center': 'mitte', 'centroidX': 'mittelpunktX', 'centroidY': 'mittelpunktY', 'color': 'Farbe', 'containsShape(targetShape)': 'beinhaltetForm(zielForm)', 'gradient({{colors}}, start={{start}})': 'gradient({{colors}}, start={{start}})', 'hits(x, y)': 'trifft(x,y)', 'hitsShape(targetShape)': 'trifftForm(zielForm)', 'initialPoints (x value)': 'anfangsPunkte (x wert)', 'initialPoints (y value)': 'anfangsPunkte (y wert)', 'integer': 'Integer', 'keys must be a list': 'Schlüssel müssen eine Liste sein', 'left-bottom': 'links-unten', 'left-top': 'links-oben', 'line': 'Linie', 'list': 'Liste', 'n': 'n', 'non-negative-number': 'Nicht-negative Zahl', 'number': 'Nummer', 'number-greater-than-2': 'Zahl-größer-als-2', 'number-in-range-{{lo}}-{{hi}}': 'Aufnahme startet in', 'oval size': 'Größe Oval', 'positive-number': 'Positive Zahl', 'rgb({{r}}, {{g}}, {{b}})': 'RGB({{r}}, {{g}}, {{b}})', 'right-bottom': 'rechts-unten', 'right-top': 'rechts-oben', 'rotate.cx': 'drehung.cx', 'rotate.cy': 'drehung.cy', 'rotate.degrees': 'drehung.winkel', 'scale{{xy}}': 'skaliere{{xy}}', 'shape': 'Form', 'string': 'string', 'targetShape': 'zielForm', 'top-left': 'oben-links', 'top-right': 'oben-rechts', 'x': 'x', 'y': 'y', '{{actual}} != {{expected}}': '{{aktuell}}! = {{erwartet}}', '{{attr}} in {{object}}': '{{attr}} in {{object}}', '{{attr}} should not be {{value}}': '{{attr}} sollte nicht {{value}} sein', '{{ordinalName}} point mismatch at {{location}}': '{{ordinalName}} Punkt stimmt nicht mit {{location}} überein', 'play': 'abspielen', 'pause': 'pausieren', 'restart': 'neustarten', 'loop': 'wiederholen', 'TypeError': 'Typfehler', '{{error}}: in {{callSpec}}, {{value}} is not a legal align value': '{{error}}: in {{callSpec}}, {{value}} is not a legal align value', "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'", 'contains(x, y)': 'beinhaltet(x, y)', 'hitTest(x, y)': 'treffenTest(x, y)', 'addPoint(x, y)': 'fügePunktHinzu(x, y)', 'red': 'red', 'green': 'green', 'blue': 'blue', '{{callSpec}} must start with http:// or https://': '{{callSpec}} muss mit http:// or https:// beginnen'}} +with open('./Translation Dictionaries/color_names.json', 'r') as file: + TRANSLATED_COLOR_NAMES = json.load(file) +with open('./Translation Dictionaries/gradient_starts.json', 'r') as file: + TRANSLATED_GRADIENT_STARTS = json.load(file) +with open('./Translation Dictionaries/aligns.json', 'r') as file: + TRANSLATED_ALIGNS = json.load(file) +with open('./Translation Dictionaries/shape_attrs.json', 'r') as file: + TRANSLATED_SHAPE_ATTRS = json.load(file) +with open('./Translation Dictionaries/booleans.json', 'r') as file: + TRANSLATED_BOOLEANS = json.load(file) +with open('./Translation Dictionaries/globals.json', 'r') as file: + TRANSLATED_GLOBALS = json.load(file) +with open('./Translation Dictionaries/user_function_names.json', 'r') as file: + TRANSLATED_USER_FUNCTION_NAMES = json.load(file) +with open('./Translation Dictionaries/key_names.json', 'r') as file: + TRANSLATED_KEY_NAMES = json.load(file) +with open('./Translation Dictionaries/app_attrs.json', 'r') as file: + TRANSLATED_APP_ATTRS = json.load(file) +with open('./Translation Dictionaries/strings.json', 'r') as file: + TRANSLATED_STRINGS = json.load(file) # end_translate @@ -2033,14 +2043,14 @@ def toString(self): class Line(Polygon): def __init__(self, attrs): attrs['initialPoints'] = utils.flatten(utils.getLinePoints(attrs['x1'], attrs['y1'], attrs['x2'], attrs['y2'], 2)) - + exactValues = { 'x1': attrs['x1'], 'x2': attrs['x2'], 'y1': attrs['y1'], 'y2': attrs['y2'], } - + del attrs['x1'] del attrs['y1'] del attrs['x2'] @@ -2071,7 +2081,7 @@ def rotate(self, degrees = None, cx = None, cy = None): def getXY(self, i0, i1, j, name): if (name in self.exactValues): return self.exactValues[name] - + points = self.pointList return (points[i0][j] + points[i1][j]) / 2 @@ -2411,12 +2421,12 @@ def getBezierFragment(sweepAngle, offsetAngle, isMvc): angle -= (math.pi / 2) result = utils.rotatePoints( - result, + result, utils.toDegrees(angle), - 0, + 0, 0 ) - + if isMvc: result = [[pair[0],-pair[1]] for pair in result] return result From 0b3f0dc180a36050c3f31e6955ba8f8aba187054 Mon Sep 17 00:00:00 2001 From: Mohamed-Waiel-Shikfa Date: Sun, 14 Jul 2024 11:03:08 +0300 Subject: [PATCH 2/3] Made french translation except for the largest 3 --- .../Translation Dictionaries/aligns.json | 15 ++++++++ .../Translation Dictionaries/app_attrs.json | 12 ++++++ .../Translation Dictionaries/booleans.json | 3 +- .../Translation Dictionaries/globals.json | 38 +++++++++++++++++++ .../gradient_starts.json | 15 ++++++++ .../Translation Dictionaries/key_names.json | 14 +++++++ .../user_function_names.json | 10 +++++ 7 files changed, 106 insertions(+), 1 deletion(-) diff --git a/cmu_graphics/Translation Dictionaries/aligns.json b/cmu_graphics/Translation Dictionaries/aligns.json index c248a1c7..5810895c 100644 --- a/cmu_graphics/Translation Dictionaries/aligns.json +++ b/cmu_graphics/Translation Dictionaries/aligns.json @@ -43,5 +43,20 @@ "top-right": "oben-rechts", "bottom-left": "unten-links", "bottom-right": "unten-rechts" + }, + "fr": { + "left-top": "gauche-haut", + "top": "haut", + "right-top": "droite-haut", + "left": "gauche", + "center": "centre", + "right": "droite", + "left-bottom": "gauche-bas", + "bottom": "bas", + "right-bottom": "droite-bas", + "top-left": "haut-gauche", + "top-right": "haut-droite", + "bottom-left": "bas-gauche", + "bottom-right": "bas-droite" } } diff --git a/cmu_graphics/Translation Dictionaries/app_attrs.json b/cmu_graphics/Translation Dictionaries/app_attrs.json index 906d1bb2..d02a702f 100644 --- a/cmu_graphics/Translation Dictionaries/app_attrs.json +++ b/cmu_graphics/Translation Dictionaries/app_attrs.json @@ -34,5 +34,17 @@ "stop": "stop", "stopped": "gestoppt", "setMaxShapeCount": "setzeMaxFormAnzahl" + }, + "fr": { + "background": "arrièrePlan", + "getTextInput": "saisieDeTexte", + "group": "groupe", + "maxShapeCount": "nombreMaximaleDeFormes", + "paused": "enPause", + "setTextInputs": "définirSaisieDeTexte", + "stepsPerSecond": "étapesParSeconde", + "stop": "arrêter", + "stopped": "arrêté", + "setMaxShapeCount": "définirNombreMaximaleDeFormes" } } diff --git a/cmu_graphics/Translation Dictionaries/booleans.json b/cmu_graphics/Translation Dictionaries/booleans.json index 4635e494..a3a9f5c6 100644 --- a/cmu_graphics/Translation Dictionaries/booleans.json +++ b/cmu_graphics/Translation Dictionaries/booleans.json @@ -1,5 +1,6 @@ { "keys": ["True", "False"], "es": { "True": "Verdadero", "False": "Falso" }, - "de": { "True": "Wahr", "False": "Falsch" } + "de": { "True": "Wahr", "False": "Falsch" }, + "fr": { "True": "Vrai", "False": "Faux" } } diff --git a/cmu_graphics/Translation Dictionaries/globals.json b/cmu_graphics/Translation Dictionaries/globals.json index 39437433..073b4c64 100644 --- a/cmu_graphics/Translation Dictionaries/globals.json +++ b/cmu_graphics/Translation Dictionaries/globals.json @@ -112,5 +112,43 @@ "toPythonAngle": "zumPythonWinkel", "onKeyPresses": "wennTasteGedrückt", "CMUImage": "CMUImage" + }, + "fr": { + "Arc": "Arc", + "Circle": "Cercle", + "Group": "Groupe", + "Image": "Image", + "Label": "Étiquette", + "Line": "Ligne", + "Oval": "Ovale", + "Polygon": "Polygone", + "Rect": "Rect", + "RegularPolygon": "PolygoneRégulier", + "Robot": "Robot", + "Sound": "Son", + "Star": "Étoile", + "almostEqual": "presqueÉgal", + "angleTo": "angleVers", + "app": "app", + "assertEqual": "assertÉgal", + "choice": "choix", + "distance": "distance", + "fromPythonAngle": "depuisAnglePython", + "getPointInDir": "obtenirPointDansDir", + "gradient": "dégradé", + "makeList": "faireListe", + "onKeyHolds": "surToucheMaintenue", + "onSteps": "surPas", + "print": "imprimer", + "pythonRound": "arrondirPython", + "random": "aléatoire", + "randrange": "intervalleAléatoire", + "rgb": "RGB", + "round": "arrondir", + "rounded": "arrondi", + "seed": "graine", + "toPythonAngle": "versAnglePython", + "onKeyPresses": "surTouchePressée", + "CMUImage": "ImageCMU" } } diff --git a/cmu_graphics/Translation Dictionaries/gradient_starts.json b/cmu_graphics/Translation Dictionaries/gradient_starts.json index d2ac4303..d98e1571 100644 --- a/cmu_graphics/Translation Dictionaries/gradient_starts.json +++ b/cmu_graphics/Translation Dictionaries/gradient_starts.json @@ -43,5 +43,20 @@ "left-bottom": "links-unten", "bottom": "unten", "right-bottom": "rechts-unten" + }, + "fr": { + "top-left": "haut-gauche", + "top-right": "haut-droite", + "bottom-left": "bas-gauche", + "bottom-right": "bas-droite", + "left-top": "gauche-haut", + "top": "haut", + "right-top": "droite-haut", + "left": "gauche", + "center": "centre", + "right": "droite", + "left-bottom": "gauche-bas", + "bottom": "bas", + "right-bottom": "droite-bas" } } diff --git a/cmu_graphics/Translation Dictionaries/key_names.json b/cmu_graphics/Translation Dictionaries/key_names.json index 01712046..6ba0b2c3 100644 --- a/cmu_graphics/Translation Dictionaries/key_names.json +++ b/cmu_graphics/Translation Dictionaries/key_names.json @@ -40,5 +40,19 @@ "delete": "entfernen", "backspace": "löschen", "tab": "tab" + }, + "fr": { + "space": "espace", + "enter": "entrée", + "left": "gauche", + "right": "droite", + "up": "haut", + "down": "bas", + "pageup": "pagehaut", + "pagedown": "pagebas", + "escape": "échapper", + "delete": "supprimer", + "backspace": "backspace", + "tab": "tab" } } diff --git a/cmu_graphics/Translation Dictionaries/user_function_names.json b/cmu_graphics/Translation Dictionaries/user_function_names.json index 896c8f5c..0248a217 100644 --- a/cmu_graphics/Translation Dictionaries/user_function_names.json +++ b/cmu_graphics/Translation Dictionaries/user_function_names.json @@ -28,5 +28,15 @@ "onMousePress": "beiMaustasteRunter", "onMouseRelease": "beiMaustasteHoch", "onStep": "beimSchritt" + }, + "fr": { + "onKeyHold": "surToucheMaintenue", + "onKeyPress": "surToucheAppuyée", + "onKeyRelease": "surToucheRelâchée", + "onMouseDrag": "surGlissementSouris", + "onMouseMove": "surDéplacementSouris", + "onMousePress": "surAppuiSouris", + "onMouseRelease": "surRelâchementSouris", + "onStep": "surPas" } } From 4778c681255bf3c7d11e75e0c75dee592812bc80 Mon Sep 17 00:00:00 2001 From: Mohamed-Waiel-Shikfa Date: Sun, 14 Jul 2024 12:18:11 +0300 Subject: [PATCH 3/3] primary french translation done. --- .../Translation Dictionaries/color_names.json | 149 ++++++++++++ .../Translation Dictionaries/shape_attrs.json | 58 +++++ .../Translation Dictionaries/strings.json | 228 +++++++++++++++++- cmu_graphics/shape_logic.py | 34 ++- 4 files changed, 454 insertions(+), 15 deletions(-) diff --git a/cmu_graphics/Translation Dictionaries/color_names.json b/cmu_graphics/Translation Dictionaries/color_names.json index 4b571ee7..d7bd93e2 100644 --- a/cmu_graphics/Translation Dictionaries/color_names.json +++ b/cmu_graphics/Translation Dictionaries/color_names.json @@ -445,5 +445,154 @@ "whitesmoke": "weißerrauch", "yellow": "gelb", "yellowgreen": "gelbgrün" + }, + "fr": { + "aliceblue": "bleualice", + "antiquewhite": "blanccassé", + "aqua": "aqua", + "aquamarine": "aigue-marine", + "azure": "azur", + "beige": "beige", + "bisque": "bisque", + "black": "noir", + "blanchedalmond": "amandeémondée", + "blue": "bleu", + "blueviolet": "bleuviolet", + "brown": "brun", + "burlywood": "boisdérable", + "cadetblue": "bleucadet", + "chartreuse": "chartreuse", + "chocolate": "chocolat", + "coral": "corail", + "cornsilk": "soiedemaïs", + "cornflowerblue": "bleuet", + "crimson": "cramoisi", + "cyan": "cyan", + "darkblue": "bleufoncé", + "darkcyan": "cyanfoncé", + "darkgoldenrod": "vergeedorfoncé", + "darkgray": "grisfoncé", + "darkgreen": "vertfoncé", + "darkgrey": "grisfoncé", + "darkkhaki": "kakifoncé", + "darkmagenta": "magentafoncé", + "darkolivegreen": "vertolivefoncé", + "darkorange": "orangefoncé", + "darkorchid": "orchidéefoncée", + "darkred": "rougefoncé", + "darksalmon": "saumonfoncé", + "darkseagreen": "vertmerfoncé", + "darkslateblue": "ardoisebleufoncé", + "darkslategray": "ardoisegrisfoncé", + "darkslategrey": "ardoisegrisfoncé", + "darkturquoise": "turquoisefoncé", + "darkviolet": "violetfoncé", + "deeppink": "roseprofond", + "deepskyblue": "bleucielprofond", + "dimgray": "grisâtre", + "dimgrey": "grisâtre", + "dodgerblue": "bleudodger", + "firebrick": "briquedefeu", + "floralwhite": "blancfloral", + "forestgreen": "vertforêt", + "fuchsia": "fuchsia", + "gainsboro": "gainsboro", + "ghostwhite": "blancfantôme", + "gold": "or", + "goldenrod": "vergeedor", + "gray": "gris", + "green": "vert", + "greenyellow": "jaunevert", + "grey": "gris", + "honeydew": "miellat", + "hotpink": "rosechaud", + "indianred": "rougeindien", + "indigo": "indigo", + "ivory": "ivoire", + "khaki": "kaki", + "lavender": "lavande", + "lavenderblush": "lavanderose", + "lawngreen": "vertpelouse", + "lemonchiffon": "mousselinecitron", + "lightblue": "bleuléger", + "lightcoral": "corailleger", + "lightcyan": "cyanléger", + "lightgoldenrodyellow": "jaunevergeedorléger", + "lightgray": "grisclair", + "lightgreen": "vertclair", + "lightgrey": "grisclair", + "lightpink": "roseclair", + "lightsalmon": "saumonclair", + "lightseagreen": "vertmerclair", + "lightskyblue": "bleucielclair", + "lightslategray": "ardoisegrisclair", + "lightslategrey": "ardoisegrisclair", + "lightsteelblue": "bleuacierclair", + "lightyellow": "jauneclair", + "lime": "citronvert", + "limegreen": "vertcitron", + "linen": "lin", + "magenta": "magenta", + "maroon": "marron", + "mediumaquamarine": "moyenneaiguemarine", + "mediumblue": "moyenbleu", + "mediumorchid": "moyenneorchidée", + "mediumpurple": "moyenviolet", + "mediumseagreen": "moyenvertmer", + "mediumslateblue": "moyenardoisebleu", + "mediumspringgreen": "moyenprintempsvert", + "mediumturquoise": "moyenturquoise", + "mediumvioletred": "moyenvioletrouge", + "midnightblue": "bleunuit", + "mintcream": "crèmeminthe", + "mistyrose": "rosebrumeux", + "moccasin": "mocassin", + "navajowhite": "blancnavajo", + "navy": "bleumarine", + "oldlace": "vieuxdentelle", + "olive": "olive", + "olivedrab": "olivevert", + "orange": "orange", + "orangered": "orangerouge", + "orchid": "orchidée", + "palegoldenrod": "pâlevergeedor", + "palegreen": "pâlevert", + "paleturquoise": "pâleturquoise", + "palevioletred": "pâlevioletrouge", + "papayawhip": "papaye", + "peachpuff": "pêche", + "peru": "pérou", + "pink": "rose", + "plum": "prune", + "powderblue": "bleupoudre", + "purple": "pourpre", + "red": "rouge", + "rosybrown": "brunrosé", + "royalblue": "bleuroyal", + "saddlebrown": "brunselle", + "salmon": "saumon", + "sandybrown": "brunsable", + "seagreen": "vertmer", + "seashell": "coquillage", + "sienna": "sienne", + "silver": "argent", + "skyblue": "bleuciel", + "slateblue": "ardoisebleu", + "slategray": "ardoisegris", + "slategrey": "ardoisegris", + "snow": "neige", + "springgreen": "vertprintemps", + "steelblue": "bleuacier", + "tan": "brunclaire", + "teal": "sarcelle", + "thistle": "chardon", + "tomato": "tomate", + "turquoise": "turquoise", + "violet": "violet", + "wheat": "blé", + "white": "blanc", + "whitesmoke": "fuméeblanche", + "yellow": "jaune", + "yellowgreen": "jaunevert" } } diff --git a/cmu_graphics/Translation Dictionaries/shape_attrs.json b/cmu_graphics/Translation Dictionaries/shape_attrs.json index 2359cfba..dff793ee 100644 --- a/cmu_graphics/Translation Dictionaries/shape_attrs.json +++ b/cmu_graphics/Translation Dictionaries/shape_attrs.json @@ -173,5 +173,63 @@ "red": "red", "blue": "blue", "green": "green" + }, + "fr": { + "group": "groupe", + "play": "jouer", + "pause": "pause", + "loop": "boucle", + "restart": "redémarrer", + "remove": "retirer", + "bold": "gras", + "opacity": "opacité", + "centerX": "centreX", + "hits": "touches", + "borderWidth": "largeurBordure", + "centerY": "centreY", + "url": "url", + "left": "gauche", + "add": "ajouter", + "points": "points", + "startAngle": "angleDépart", + "toBack": "àL'arrière", + "x2": "x2", + "y1": "y1", + "size": "taille", + "initialPoints": "pointsInitiaux", + "top": "haut", + "align": "aligner", + "dashes": "tirets", + "right": "droite", + "start": "démarrer", + "y2": "y2", + "radius": "rayon", + "border": "bordure", + "containsShape": "contientForme", + "background": "arrière-plan", + "height": "hauteur", + "lineWidth": "largeurLigne", + "toFront": "àL'avant", + "roundness": "rondeur", + "arrowEnd": "finFlèche", + "x1": "x1", + "fill": "remplir", + "bottom": "bas", + "clear": "effacer", + "sweepAngle": "angleBalayage", + "value": "valeur", + "contains": "contient", + "italic": "italique", + "visible": "visible", + "arrowStart": "débutFlèche", + "hitsShape": "toucheForme", + "font": "police", + "children": "enfants", + "hitTest": "testDeCollision", + "width": "largeur", + "rotateAngle": "angleRotation", + "red": "rouge", + "blue": "bleu", + "green": "vert" } } diff --git a/cmu_graphics/Translation Dictionaries/strings.json b/cmu_graphics/Translation Dictionaries/strings.json index 5cff7301..883627f0 100644 --- a/cmu_graphics/Translation Dictionaries/strings.json +++ b/cmu_graphics/Translation Dictionaries/strings.json @@ -297,7 +297,8 @@ "red", "green", "blue", - "{{callSpec}} must start with http:// or https://" + "{{callSpec}} must start with http:// or https://", + "Cannot modify attribute '{{attr}}' of '{{className}}' object" ], "es": { "Arc": "Arco", @@ -723,14 +724,233 @@ "restart": "neustarten", "loop": "wiederholen", "TypeError": "Typfehler", - "{{error}}: in {{callSpec}}, {{value}} is not a legal align value": "{{error}}: in {{callSpec}}, {{value}} is not a legal align value", - "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'", + "{{error}}: in {{callSpec}}, {{value}} is not a legal align value": "{{error}}: in {{callSpec}}, {{value}} ist kein gültiger Ausrichtungswert", + "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} hat ein unerwartetes Schlüsselwortargument '{{arg}}'", "contains(x, y)": "beinhaltet(x, y)", "hitTest(x, y)": "treffenTest(x, y)", "addPoint(x, y)": "fügePunktHinzu(x, y)", "red": "red", "green": "green", "blue": "blue", - "{{callSpec}} must start with http:// or https://": "{{callSpec}} muss mit http:// or https:// beginnen" + "{{callSpec}} must start with http:// or https://": "{{callSpec}} muss mit http:// or https:// beginnen", + "Cannot modify attribute '{{attr}}' of '{{className}}' object": "Kann das Attribut '{{attr}}' des Objekts '{{className}}' nicht ändern" + }, + "fr": { + "Arc": "Arc", + "Circle": "Cercle", + "Group": "Groupe", + "Image": "Image", + "Label": "Étiquette", + "Line": "Ligne", + "Oval": "Ovale", + "Polygon": "Polygone", + "Rect": "Rectangle", + "RegularPolygon": "PolygoneRégulier", + "Robot": "Robot", + "Sound": "Son", + "Star": "Étoile", + "almostEqual": "presqueÉgalÀ", + "angleTo": "angleÀ", + "app": "appli", + "assertEqual": "vérifierÉgalité", + "choice": "choix", + "distance": "distance", + "fromPythonAngle": "deAnglePython", + "getPointInDir": "obtenirPointDansDir", + "gradient": "gradient", + "makeList": "créerListe", + "onKeyHolds": "surTouchesMaintenues", + "onSteps": "surPas", + "print": "imprime", + "pythonRound": "arrondirPython", + "random": "aléatoire", + "randrange": "plageAléatoire", + "rgb": "rgb", + "round": "arrondir", + "rounded": "arrondi", + "seed": "graine", + "toPythonAngle": "àAnglePython", + "onKeyPresses": "surToucheAppuyées", + "remove": "retirer", + "bold": "gras", + "opacity": "opacité", + "centerX": "centreX", + "hits": "touche", + "borderWidth": "largeurBordure", + "centerY": "centreY", + "url": "url", + "left": "gauche", + "add": "ajouter", + "points": "points", + "startAngle": "angleDépart", + "toBack": "auFond", + "x2": "x2", + "y1": "y1", + "size": "taille", + "initialPoints": "pointsInitiaux", + "top": "haut", + "align": "aligner", + "dashes": "tirets", + "right": "droite", + "start": "début", + "colors": "couleurs", + "y2": "y2", + "radius": "rayon", + "border": "bordure", + "containsShape": "contientForme", + "background": "arrière-plan", + "height": "hauteur", + "lineWidth": "largeurLigne", + "toFront": "auPremierPlan", + "roundness": "rondeur", + "arrowEnd": "extrémitéFlèche", + "x1": "x1", + "fill": "remplissage", + "bottom": "bas", + "clear": "effacer", + "sweepAngle": "angleBalayage", + "value": "valeur", + "contains": "contient", + "italic": "italique", + "visible": "visible", + "arrowStart": "débutFlèche", + "hitsShape": "toucheForme", + "font": "police", + "children": "enfants", + "hitTest": "testTouche", + "width": "largeur", + "rotateAngle": "rotationAngle", + "\"{{align}}\" is not a valid Polygon constructor argument": "\"{{align}}\" n'est pas un argument valide pour le constructeur de Polygone", + "\"{{attr}}\" is not a valid shape constructor argument": "\"{{attr}}\" n'est pas un argument valide pour le constructeur de forme", + "**** Error in onError()!!! ****": "**** Erreur dans onError() !!! ****", + "An assertEqual() statement in a test case failed. See the Console for details.": "Une instruction assertEqual() dans un cas de test a échoué. Voir la console pour les détails.", + "An error occurred. Here is the stack trace:": "Une erreur s'est produite. Voici la trace de la pile :", + "App": "Appli", + "App.group is readonly": "App.groupe est en lecture seule", + "App.stopped is readonly": "App.arrêté est en lecture seule", + "Arg Count Error: {{callSpec}}() takes {{argNamesLen}} arguments ({{argNames}}), not {{argsLen}}": "Erreur de comptage d'arguments : {{callSpec}}() prend {{argNamesLen}} arguments ({{argNames}}), pas {{argsLen}}", + "Arguments to setTextInputs must be strings. %r is not a string.": "Les arguments de setTextInputs doivent être des chaînes. %r n'est pas une chaîne.", + "Autograder: error executing solution code!": "Autograder : erreur d'exécution du code de solution !", + "Autograder: error executing user code!": "Autograder : erreur d'exécution du code utilisateur !", + "Autograding is taking a long time. Your code may have an infinite loop.": "L'autograding prend beaucoup de temps. Votre code peut avoir une boucle infinie.", + "Both rows and cols must be >= 0": "Les lignes et les colonnes doivent être >= 0", + "Cannot set Image's url": "Impossible de définir l'url de l'image", + "Cannot set Label's height": "Impossible de définir la hauteur de l'étiquette", + "Cannot set Label's width": "Impossible de définir la largeur de l'étiquette", + "Cannot set Line's border": "Impossible de définir la bordure de la ligne", + "Cannot set Line's borderWidth": "Impossible de définir la largeur de la ligne", + "Circle{{attrs}}": "Cercle{{attrs}}", + "Failed to get text input": "Échec de l'obtention de l'entrée de texte", + "Failed to load image data": "Échec du chargement des données de l'image", + "Font not found: {{baseFontName}}\n": "Police non trouvée : {{baseFontName}}\\n", + "Group()": "Groupe()", + "Group.add(shape)": "Groupe.ajouter(forme)", + "Group.remove(shape)": "Groupe.retirer(forme)", + "Group.{{attr}} cannot be read or modified": "Groupe.{{attr}} ne peut pas être lu ou modifié", + "Group.{{attr}} has no value because its children don't all have the same value for {{attr}}": "Groupe.{{attr}} n'a pas de valeur car ses enfants n'ont pas tous la même valeur pour {{attr}}", + "{{error}}: Illegal gradient start ({{start}})": "{{error}}: Début de gradient illégal ({{start}})", + "Image{{args}}": "Image{{args}}", + "Internal error (no solution shapes!). Please try again.": "Erreur interne (pas de formes de solution !). Veuillez réessayer.", + "Label({{args}})": "Étiquette({{args}})", + "Line{{args}}": "Ligne{{args}}", + "Must have an even number of x,y values in initialPoints list": "Doit avoir un nombre pair de valeurs x,y dans la liste pointsInitiaux", + "Need to pass at least 2 colors to gradient(); you gave {{colorsLength}}": "Vous devez passer au moins 2 couleurs à gradient(); vous avez donné {{colorsLength}}", + "No activeDrawing for new Shape": "Pas de activeDrawing pour nouvelle Forme", + "No such attribute: {{attr}}": "Pas un tel attribut : {{attr}}", + "None": "Aucun", + "Oval{{args}}": "Ovale{{args}}", + "Polygon{{args}}": "Polygone{{args}}", + "Recording Starts In": "Enregistrement commence dans", + "Rect{{args}}": "Rectangle{{args}}", + "RegularPolygon{{args}}": "PolygoneRégulier{{args}}", + "Shape": "Forme", + "Shape()": "Forme()", + "Shapes drawn in wrong order": "Formes dessinées dans le mauvais ordre", + "Sorry, you cannot use Python's input function in CMU CS Academy": "Désolé, vous ne pouvez pas utiliser la fonction input de Python dans CMU CS Academy", + "Sound \"{{soundSource}}\" failed to play. Disabling it.": "Échec de la lecture du son \"{{soundSource}}\". Désactivation.", + "Star{{args}}": "Étoile{{args}}", + "The loop argument to Sound.play must be True or False, got {{loopRepr}}": "L'argument de boucle pour Sound.play doit être Vrai ou Faux, obtenu {{loopRepr}}", + "The restart argument to Sound.play must be True or False, got {{restartRepr}}": "L'argument de redémarrage pour Sound.play doit être Vrai ou Faux, obtenu {{restartRepr}}", + "Too many shapes: Your code created more than {{maxShapeCount}} shapes. If you would like to increase this limit even though it may cause your code to run slowly, call app.setMaxShapeCount(n).": "Trop de formes : Votre code a créé plus de {{maxShapeCount}} formes. Si vous souhaitez augmenter cette limite même si cela peut ralentir votre code, appelez app.setMaxShapeCount(n).", + "Traceback (most recent call last):": "Traceback (appel le plus récent en dernier) :", + "{{error}}: None cannot be used inside gradient.colors": "{{error}}: None ne peut pas être utilisé à l'intérieur de gradient.couleurs", + "{{error}}: {{callSpec}} should be {{typeName}} (but {{value}} is of type {{valueType}})": "{{error}}: {{callSpec}} devrait être {{typeName}} (mais {{value}} est de type {{valueType}})", + "{{error}}: {{color}} cannot be used inside gradient.colors": "{{error}}: {{color}} ne peut pas être utilisé à l'intérieur de gradient.couleurs", + "{{error}}: {{callSpec}} should be a color, and {{value}} is not a legal color name": "{{error}}: {{callSpec}} devrait être une couleur, et {{value}} n'est pas un nom de couleur légal", + "Undefined poster in new _CmuGraphics": "Poster indéfini dans new _CmuGraphics", + "Unknown message {{cmd}}": "Message inconnu {{cmd}}", + "Use our rounded(n) instead of Python 3's round(n)\n Python 3's round(n) does not work as one might expect!\n If you still want Python 3's round, use pythonRound": "Utilisez notre fonction arrondi(n) plutôt que round(n) de Python 3\\n round(n) de Python 3 ne fonctionne pas comme on pourrait s'y attendre !\\n Si vous voulez toujours utiliser round de Python 3, utilisez pythonRound", + "Wait for fonts to load before using them": "Attendez que les polices soient chargées avant de les utiliser", + "Wrong # of points ({{userPtsLen}} should be {{solnPtsLen}})": "Mauvais nombre de points ({{userPtsLen}} devrait être {{solnPtsLen}})", + "You are missing {{missingCount}} shape(s)": "Il vous manque {{missingCount}} forme(s)", + "You can't change the size of this group because {{shape}} can't be resized": "Vous ne pouvez pas changer la taille de ce groupe car {{shape}} ne peut pas être redimensionné", + "You can't get or set the align property": "Vous ne pouvez pas obtenir ou définir la propriété d'alignement", + "You have {{extraCount}} extra shape(s)": "Vous avez {{extraCount}} forme(s) supplémentaire(s)", + "Your code appeared to be in an infinite loop, so it was terminated.": "Votre code semblait être dans une boucle infinie, il a donc été arrêté.", + "\nWarning: Your code created labels with more than\n 1,000 total characters of text. This may cause your\n program to run very slowly.\n": "\nAvertissement : Votre code a créé des étiquettes avec plus de\n 1,000 caractères de texte au total. Cela peut ralentir\n considérablement l'exécution de votre programme.\n", + "addPoint": "ajouterPoint", + "add{{xy}}": "ajouter{{xy}}", + "app.background should not be {{userBackgroundString}}": "app.fond ne devrait pas être {{userBackgroundString}}", + "app.setMaxShapeCount(n)": "app.setMaxShapeCount(n)", + "at line": "à la ligne", + "black": "noir", + "bottom-left": "en bas à gauche", + "bottom-right": "en bas à droite", + "center": "centre", + "centroidX": "centroidX", + "centroidY": "centroidY", + "color": "couleur", + "containsShape(targetShape)": "contientForme(formeCible)", + "gradient({{colors}}, start={{start}})": "gradient({{colors}}, début={{start}})", + "hits(x, y)": "touche(x, y)", + "hitsShape(targetShape)": "toucheForme(formeCible)", + "initialPoints (x value)": "pointsInitiaux (valeur x)", + "initialPoints (y value)": "pointsInitiaux (valeur y)", + "integer": "entier", + "keys must be a list": "les clés doivent être une liste", + "left-bottom": "gauche en bas", + "left-top": "gauche en haut", + "line": "ligne", + "list": "liste", + "n": "n", + "non-negative-number": "nombre-non-négatif", + "number": "nombre", + "number-greater-than-2": "nombre-supérieur-à-2", + "number-in-range-{{lo}}-{{hi}}": "nombre-dans-intervalle-{{lo}}-{{hi}}", + "oval size": "taille d'ovale", + "positive-number": "nombre-positif", + "rgb({{r}}, {{g}}, {{b}})": "rgb({{r}}, {{g}}, {{b}})", + "right-bottom": "droite en bas", + "right-top": "droite en haut", + "rotate.cx": "rotation.cx", + "rotate.cy": "rotation.cy", + "rotate.degrees": "rotation.degrés", + "scale{{xy}}": "échelle{{xy}}", + "shape": "forme", + "string": "chaîne", + "targetShape": "formeCible", + "top-left": "en haut à gauche", + "top-right": "en haut à droite", + "x": "x", + "y": "y", + "{{actual}} != {{expected}}": "{{actual}} != {{expected}}", + "{{attr}} in {{object}}": "{{attr}} dans {{object}}", + "{{attr}} should not be {{value}}": "{{attr}} ne devrait pas être {{value}}", + "{{ordinalName}} point mismatch at {{location}}": "Désaccord de point {{ordinalName}} à {{location}}", + "play": "jouer", + "pause": "pause", + "restart": "redémarrer", + "loop": "boucle", + "TypeError": "Erreur de type", + "{{error}}: in {{callSpec}}, {{value}} is not a legal align value": "{{error}}: dans {{callSpec}}, {{value}} n'est pas une valeur d'alignement légale", + "{{error}}: {{callSpec}} got an unexpected keyword argument '{{arg}}'": "{{error}}: {{callSpec}} a reçu un argument de mot-clé '{{arg}}' inattendu", + "contains(x, y)": "contient(x, y)", + "hitTest(x, y)": "testTouche(x, y)", + "addPoint(x, y)": "ajouterPoint(x, y)", + "red": "rouge", + "green": "vert", + "blue": "bleu", + "{{callSpec}} must start with http:// or https://": "{{callSpec}} doit commencer par http:// ou https://", + "Cannot modify attribute '{{attr}}' of '{{className}}' object": "Impossible de modifier l'attribut '{{attr}}' de l'objet '{{className}}'" } } diff --git a/cmu_graphics/shape_logic.py b/cmu_graphics/shape_logic.py index d42aa60f..7ca4a0a9 100644 --- a/cmu_graphics/shape_logic.py +++ b/cmu_graphics/shape_logic.py @@ -24,25 +24,37 @@ import re # start_translate -with open('./Translation Dictionaries/color_names.json', 'r') as file: +fileDir = str(os.path.dirname(os.path.abspath(__file__))) +with open(fileDir + '/Translation Dictionaries/color_names.json', 'r', + encoding='utf-8') as file: TRANSLATED_COLOR_NAMES = json.load(file) -with open('./Translation Dictionaries/gradient_starts.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/gradient_starts.json', 'r', + encoding='utf-8') as file: TRANSLATED_GRADIENT_STARTS = json.load(file) -with open('./Translation Dictionaries/aligns.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/aligns.json', 'r', + encoding='utf-8') as file: TRANSLATED_ALIGNS = json.load(file) -with open('./Translation Dictionaries/shape_attrs.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/shape_attrs.json', 'r', + encoding='utf-8') as file: TRANSLATED_SHAPE_ATTRS = json.load(file) -with open('./Translation Dictionaries/booleans.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/booleans.json', 'r', + encoding='utf-8') as file: TRANSLATED_BOOLEANS = json.load(file) -with open('./Translation Dictionaries/globals.json', 'r') as file: +print(TRANSLATED_BOOLEANS) +with open(fileDir + '/Translation Dictionaries/globals.json', 'r', + encoding='utf-8') as file: TRANSLATED_GLOBALS = json.load(file) -with open('./Translation Dictionaries/user_function_names.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/user_function_names.json', 'r', + encoding='utf-8') as file: TRANSLATED_USER_FUNCTION_NAMES = json.load(file) -with open('./Translation Dictionaries/key_names.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/key_names.json', 'r', + encoding='utf-8') as file: TRANSLATED_KEY_NAMES = json.load(file) -with open('./Translation Dictionaries/app_attrs.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/app_attrs.json', 'r', + encoding='utf-8') as file: TRANSLATED_APP_ATTRS = json.load(file) -with open('./Translation Dictionaries/strings.json', 'r') as file: +with open(fileDir + '/Translation Dictionaries/strings.json', 'r', + encoding='utf-8') as file: TRANSLATED_STRINGS = json.load(file) # end_translate @@ -166,7 +178,7 @@ def toEnglish(key, context, returnLanguage = False): else: return translation -supportedLanguages = ['en', 'es', 'de'] +supportedLanguages = ['en', 'es', 'de', 'fr'] class CMUException(Exception): pass