From 0e78265f352b59ccfb6b935b1b077668bda8dc60 Mon Sep 17 00:00:00 2001 From: Juri Wolf Date: Thu, 8 Sep 2022 01:30:03 +0200 Subject: [PATCH] V4 updates 4 (#198) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated extensions Updated extensions * Fixed typo Fixed typo * update locales * Updated core strings for german language Updated core strings for german language * Fixed typo Fixed typo * First part translated First part translated * Updated translation Updated translation * Aktualisierte Übersetzung Aktualisierte Übersetzung * Updated translation Updated translation * Updated translation Updated translation * Set BLE services explicit * remove v3 locales * Change setting strings * fix shake button events * Update banner text * updates for app experience * add codecards for new mobile app project * Simulator: Reduce LED glow and fix MIC icon position Co-authored-by: Jørn Alraun --- docs/calliope/templates.md | 27 + docs/calliope/templates/16KB.png | Bin 0 -> 20667 bytes docs/calliope/templates/16KB_L.png | Bin 0 -> 35079 bytes docs/calliope/templates/32KB.png | Bin 0 -> 17506 bytes docs/calliope/templates/32KB_L.png | Bin 0 -> 34648 bytes docs/hero-banner.md | 2 +- docs/projects.md | 7 + docs/projects/SUMMARY.md | 3 + libs/core/_locales/de/core-jsdoc-strings.json | 911 ++++++++++++++---- libs/core/_locales/de/core-strings.json | 716 ++++++++++---- libs/core/pxt.json | 16 +- sim/visuals/microbit.ts | 14 +- targetconfig.json | 33 +- theme/style.less | 9 + 14 files changed, 1294 insertions(+), 444 deletions(-) create mode 100644 docs/calliope/templates.md create mode 100644 docs/calliope/templates/16KB.png create mode 100644 docs/calliope/templates/16KB_L.png create mode 100644 docs/calliope/templates/32KB.png create mode 100644 docs/calliope/templates/32KB_L.png diff --git a/docs/calliope/templates.md b/docs/calliope/templates.md new file mode 100644 index 00000000..d1403f8a --- /dev/null +++ b/docs/calliope/templates.md @@ -0,0 +1,27 @@ +# Projects + +Here are some cool tutorials to get you started with your @boardname@! + +## Basic + +```codecard +[ +{ + "name": "Calliope mini 2.x", + "url":"_f7ACuxgaocvr", + "description": "The Calliope mini 2.0 and newer has a larger memory than the previous versions. If you use this template for your project, you can make the most of all the features on your Calliope mini!", + "imageUrl": "/calliope/templates/32KB.png", + "largeImageUrl": "/calliope/templates/32KB_L.png", + "cardType": "sharedExample", + "buttonLabel": "New project" +},{ + "name": "Calliope mini 1.x", + "url":"_7YbU6iMhoTdR", + "description": "This template is designed for all Calliope mini, but especially for those up to version 1.3. If you have such a Calliope mini or an earlier version, you can start directly with this template.", + "imageUrl": "/calliope/templates/16KB.png", + "largeImageUrl": "/calliope/templates/16KB_L.png", + "cardType": "sharedExample", + "buttonLabel": "New project" +} +] +``` \ No newline at end of file diff --git a/docs/calliope/templates/16KB.png b/docs/calliope/templates/16KB.png new file mode 100644 index 0000000000000000000000000000000000000000..edc7e005b0abbb23883fd1c7059181fc9d2c813a GIT binary patch literal 20667 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 literal 0 HcmV?d00001 diff --git a/docs/hero-banner.md b/docs/hero-banner.md index c6183d06..2469f164 100644 --- a/docs/hero-banner.md +++ b/docs/hero-banner.md @@ -9,7 +9,7 @@ Here are some cool activities to get you started with your @boardname@! * description: CALLIOPEO – Taking the Calliope mini to the ISS. * imageUrl: /calliope/02_Hero_CalliopEO.png * url: https://calliope.cc/calliopeo -* buttonLabel: Participate! +* buttonLabel: Explore! * cardType: link --- * name: The 5x5 LED matrix diff --git a/docs/projects.md b/docs/projects.md index bd0d0e2d..1cb8c077 100644 --- a/docs/projects.md +++ b/docs/projects.md @@ -2,6 +2,12 @@ ```codecard [ + { + "name": "New Project (iPad)", + "url": "/calliope/templates", + "imageUrl": "/calliope/templates/32KB.png", + "largeImageUrl": "/calliope/templates/32KB_L.png" + }, { "name": "First Steps", "url": "/calliope/firststeps", @@ -23,6 +29,7 @@ ## See Also +[New Project (iPad)](/calliope/templates), [First Steps](/calliope/firststeps), [Tutorials](/calliope/tutorials), [Calliope Links](/calliope/links) diff --git a/docs/projects/SUMMARY.md b/docs/projects/SUMMARY.md index 44f7c58a..553129cf 100644 --- a/docs/projects/SUMMARY.md +++ b/docs/projects/SUMMARY.md @@ -1,5 +1,8 @@ # Projects +* [New Project (iPad)](/calliope/templates) + * [Calliope mini 2.x](_f7ACuxgaocvr) + * [Calliope mini 1.x](_7YbU6iMhoTdR) * [First Steps](/calliope/firststeps) * [Get Ready](/calliope/firststeps/firstSteps) * [The 5x5 LED matrix](/calliope/firststeps/5x5LED) diff --git a/libs/core/_locales/de/core-jsdoc-strings.json b/libs/core/_locales/de/core-jsdoc-strings.json index 9fa1157a..8cdf0e53 100644 --- a/libs/core/_locales/de/core-jsdoc-strings.json +++ b/libs/core/_locales/de/core-jsdoc-strings.json @@ -1,214 +1,701 @@ { - "Math.abs": "Gibt den absoluten Wert einer Zahl aus (den Wert unabhängig davon, ob er positiv oder negativ ist).\nDer absolute Wert von -5 ist zum Beispiel der gleiche wie der von 5.", - "Math.abs|param|x": "Ein numerischer Ausdruck, für den der absolute Wert benötigt wird.", - "Math.max": "Gibt den größeren von zwei vorhandenen numerischen Ausdrücken aus.", - "Math.min": "Gibt den niedrigeren von zwei vorhandenen numerischen Ausdrücken aus.", - "Math.pow": "Gibt den Wert eines grundlegenden Ausdrucks bis zu einer bestimmten Stärke aus.", - "Math.pow|param|x": "Der Basiswert des Ausdrucks.", - "Math.pow|param|y": "Der exponentielle Wert des Ausdrucks.", - "Math.random": "Gibt eine pseudozufüllige Zahl zwischen 0 und `max`aus.", - "Math.randomBoolean": "Erzeugt zufällig einen \"wahr\" oder \"falsch\"-Wert, wie bei einem Münzwurf.", - "Math.sign": "Gibt das Vorzeichen von x aus und zeigt an, ob dieses positiv, negativ oder null ist.", - "Math.sign|param|x": "Der numerische Ausdruck, der getestet werden soll", - "Math.sqrt": "Gibt die Quadratwurzel einer Zahl aus.", - "Math.sqrt|param|x": "Ein numerischer Ausdruck.", - "String.charAt": "Gibt den Buchstaben beim angegebenen Index aus.", - "String.charAt|param|index": "Der null-basierte index des gewünschten Zeichens.", - "String.charCodeAt": "Gibt den Unicode-Wert des Zeichens am vorgegebenen Ort aus.", - "String.charCodeAt|param|index": "Der null-basierte Index des gewünschten Zeichens. Wenn kein Zeichen am angegeben Index vorhanden ist, wird NaN ausgegeben.", - "String.compare": "Bestimmt die relative Reihenfolge zweier Strings (in ASCII).", - "String.compare|param|that": "Zeichenfolge, die mit der Zielzeichenfolge verglichen werden soll", - "String.concat": "Gibt eine Zeichenfolge aus, die die Verkettung von zwei oder mehr Zeichenfolgen ist.", - "String.concat|param|other": "Die Zeichenfolge, die an das Ende einer Zeichenfolge angehängt werden soll.", - "String.fromCharCode": "Erstelle Sie eine Zeichenfolge aus dem angegebenen ASCII-Zeichencode.", - "String.isEmpty": "Gibt einen Wert aus, der anzeigt, ob die Zeichenfolge leer ist", - "String.length": "Gibt die Länge einer Zeichenfolge aus.", - "String.substr": "Gibt eine Teilzeichenfolge der aktuellen Zeichenfolge aus.", - "String.substr|param|length": "Anzahl der zu extrahierenden Zeichen", - "String.substr|param|start": "Erster Zeichenindex, kann beim zählen vom Ende negativ sein, zum Beispiel: 0", - "basic": "Bietet Zugriff auf grundlegende mini-Funktionalität.", - "basic.clearScreen": "Schalte alle LEDs aus", - "basic.color": "Konvertiert den Farbnamen in eine Nummer", - "basic.forever": "Wiederholt immer wieder den Code im Hintergrund. Bei jeder Iteration ist es möglich, anderen Code auszuführen.", - "basic.pause": "Pausiere für die angegebene Zeit in Millisekunden", - "basic.pause|param|ms": "wie lange pausieren, z.B.: 100, 200, 500, 1000, 2000", - "basic.plotLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", - "basic.plotLeds|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", - "basic.rgbw": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe", - "basic.rgbw|param|blue": "Blauwert zwischen 0 und 255, z.B. 255", - "basic.rgbw|param|green": "Grünwert zwischen 0 und 255, z.B. 255", - "basic.rgbw|param|red": "Rotwert zwischen 0 und 255, z.B. 255", - "basic.rgbw|param|white": "Weißwert zwischen 0 und 255, z.B. 0", - "basic.rgb": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe", - "basic.rgb|param|blue": "Blauwert zwischen 0 und 255, z.B. 255", - "basic.rgb|param|green": "Grünwert zwischen 0 und 255, z.B. 255", - "basic.rgb|param|red": "Rotwert zwischen 0 und 255, z.B. 255", - "basic.setLedColor": "Legt die Farbe der eingebauten LED fest. Setze auf 0, um diese abzuschalten.", - "basic.showAnimation": "Zeigt eine Abfolge von LED-Anzeigen als Animation.", - "basic.showAnimation|param|interval": "Zeit in Millisekunden zwischen jedem Neuzeichnen", - "basic.showAnimation|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", - "basic.showLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", - "basic.showLeds|param|interval": "Zeit in Millisekunden, die nach der Zeichnung gewartet wird", - "basic.showLeds|param|leds": "Muster der LEDs, die ein- und ausgeschaltet werden", - "basic.showNumber": "Zeige eine Nummer auf dem Display. Wenn die Nummer auf das Display passt (es sich also um eine einstellige Zahl handelt), scrolle nicht weiter.", - "basic.showNumber|param|interval": "Scroll-Geschwindigkeit; z.B. 150, 100, 200,-100", - "basic.showString": "Zeige Text auf dem Display an, Buchstabe für Buchstabe. Wenn die Zeichenfolge in das Display passt (also wenn es sich um einen einzelnen Buchstaben handelt), scrolle nicht weiter.", - "basic.showString|param|interval": "Wie schnell die Zeichen geändert werden; z.B. 150, 100, 200,-100", - "basic.showString|param|text": "Text auf dem Bildschirm dargestellt werden soll, z.B.: \"Hallo!\"", - "control": "Laufzeit- und Event-Dienstprogramme.", - "control.assert": "Wenn die Bedingung falsch ist, zeige eine Nachricht auf der seriellen Konsole und gebe Panic-Code 098 aus", - "control.deviceName": "Erzeugt einen Namen für das Gerät, basierend auf der Seriennummer", - "control.eventSourceId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", - "control.eventTimestamp": "Holt den Zeitstempel des letzten Events auf dem Bus", - "control.eventValue": "Holt den Wert des letzten ausgeführten Events auf dem Bus", - "control.eventValueId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", - "control.inBackground": "Plant Code, der im Hintergrund wiedergegeben wird.", - "control.onEvent": "Startet ein Event auf dem Event-Bus.", - "control.panic": "Zeigt einen spezifizierten Fehlercode und hält das Programm an.", - "control.raiseEvent": "Startet ein Event auf dem Event-Bus.", - "control.raiseEvent|param|mode": "optionale Definition davon, wie ein Event nach dem Erstellen ausgeführt wird (Standard ist \"CREATE_AND_FIRE).", - "control.raiseEvent|param|src": "ID der Calliope mini-Komponente, die das Event generiert hat, zum Beispiel CALLIOPE_ID_BUTTON_A.", - "control.raiseEvent|param|value": "Komponentenspezifischer Code, der den Grund des Events angibt.", - "control.reset": "Seit den mini zurück.", - "control.runtimeWarning": "Zeige Warnmeldung im Simulator.", - "control.waitMicros": "Sperrt die aktuelle Leitung für die Dauer der angegebenen Mikrosekunden", - "control.waitMicros|param|micros": "Anzahl der Mikrosekunden, die gewartet werden soll, z.B.: 4", - "game": "Eine Einzel-LED-Sprite-Spielumgebung", - "game.addLife": "Fügt Leben zum aktuellen Spielstand hinzu", - "game.addScore": "Fügt zum aktuellen Spielstand Punkte hinzu", - "game.addScore|param|points": "Anzahl von zu verändernden Punkten, z.B.: 1", - "game.createSprite": "Erzeugt einen neuen LED-Sprite, der nach rechts zeigt.", - "game.createSprite|param|x": "horizontale Koordinate des Sprites, z.B. 2", - "game.createSprite|param|y": "vertikale Koordinate des Sprites, z.B. 2", - "game.currentTime": "Ruft die verbliebene Zeit (seit `starte Countdown`) oder die aktuelle Zeit (seit das Gerät gestartet wurde oder eine Stoppuhr aktiviert wurde) an.", - "game.gameOver": "Gibt über eine Animation ein Spiel wieder.", - "game.invalidSprite": "Ruft einen invaliden Sprite ab; wird genutzt, um Locale zu initialisieren.", - "game.isGameOver": "Zeigt an, ob das Spil die \"Game Over\"-Sequenz angezeigt hat.", - "game.isRunning": "Holt einen Wert, der anzeigt, ob das Spiel noch läuft. Gibt `falsch`aus, wenn das Spiel zu Ende ist.", - "game.level": "Ruft das aktuelle Level ab", - "game.levelUp": "Erhöht das Level und zeigt eine Nachricht an.", - "game.life": "Ruft das aktuelle Leben ab", - "game.removeLife": "Entfernt ein Leben", - "game.score": "Ruft den aktuellen Punktestand ab", - "game.setLife": "Setzt den aktuellen Wert der Leben", - "game.setScore": "Setzt den aktuellen Wert des Spielstands", - "game.showScore": "Zeigt den Spielstand auf dem Display.", - "game.startCountdown": "Startet einen Spiel-Countdown", - "game.startCountdown|param|ms": "Countdown-Dauer in Millisekunden, z.B.: 10000", - "game.startStopwatch": "Startet eine Stoppuhr.`aktuelle Zeit`gibt die vergangene Zeit an.", - "images": "Erstellung, Bearbeitung und Anzeige von LED-Bildern.", - "images.createBigImage": "Erstellt ein Bild mit zwei Einzelbildern.", - "images.createImage": "Erstellt ein Bild, das auf den LED-Bildschirm passt.", - "input": "Ereignisse und Daten der Sensoren", - "input.acceleration": "Holt den Beschleunigungswert in Milli-Erdanziehung (wenn das Board flach mit dem Display nach oben liegt, X = 0, y = 0 und Z =-1024)", - "input.buttonIsPressed": "Erhalte den Sie den Tastenstatus (gepresst oder nicht) für ``A`` und ``B``.", - "input.calibrate": "Veraltet, Kompasskalibrierung erfolgt automatisch.", - "input.compassHeading": "Holt die aktuelle Kompassrichtung in Grad.", - "input.lightLevel": "Liest die Lichtintensität auf dem LED-Bildschirm im Bereich von ``0`` (dunkel) und `` 255`` (hell).", + "AcceleratorRange.EightG": "Der Bewegungssensor misst Kräfte bis 8g", + "AcceleratorRange.FourG": "Der Bewegungssensor misst Kräfte bis 4g", + "AcceleratorRange.OneG": "Der Bewegungssensor misst Kräfte bis 1g", + "AcceleratorRange.TwoG": "Der Bewegungssensor misst Kräfte bis 2g", + "Array": "Hinzufügen, Entfernen und Ersetzen von Elementen in Listen.", + "Array._pickRandom": "Gibt einen zufälligen Wert aus dem Array zurück", + "Array._popStatement": "Entferne das letzte Element eines Arrays und gib es aus.", + "Array._removeAtStatement": "Entferne das Element an einer bestimmten Position.", + "Array._shiftStatement": "Entferne das erste Element aus einem Array und gib es aus. Durch diese Methode wird die Array-Länge verändert.", + "Array._unshiftStatement": "Füge ein Element am Anfang eines Arrays hinzu und gib die neue Länge des Arrays aus.", + "Array.concat": "Verknüpft die Werte mit einem anderen Array.", + "Array.concat|param|arr": "Das andere Array, mit dem es verbunden ist", + "Array.every": "Testet, ob alle Elemente in dem Array den von der bereitgestellten Funktion implementierten Test bestehen.", + "Array.every|param|callbackfn": "Eine Funktion, die bis zu zwei Argumente akzeptiert. Die every-Methode ruft für jedes Element in dem Array die callbackfn-Funktion einmal auf.", + "Array.fill": "Füllt alle Elemente eines Arrays von einem Start-index bis zu einem End-Index mit einem festen Wert. Der End-Index ist nicht enthalten.", + "Array.filter": "Gib die Elemente eines Arrays aus, die die in einer Rückruffunktion angegebene Bedingung erfüllen.", + "Array.filter|param|callbackfn": "Eine Funktion, die bis zu zwei Argumente akzeptiert. Die Filtermethode ruft für jedes Element im Array die callbackfn-Funktion einmal auf.", + "Array.find": "Gibt den Wert des ersten Elements im Array zurück, das die angegebene Testfunktion erfüllt. Andernfalls wird nicht definiert zurückgegeben.", + "Array.forEach": "Rufe für jedes Element eines Arrays eine definierte Rückruffunktion auf.", + "Array.forEach|param|callbackfn": "Eine Funktion, die bis zu zwei Argumente akzeptiert. Die forEach-Methode ruft für jedes Element in dem Array die callbackfn-Funktion einmal auf.", + "Array.get": "Rufe den Wert an einer bestimmten Position ab", + "Array.get|param|index": "die Position in der Liste des Elementes, beginnend bei Null, z.B.: 0", + "Array.indexOf": "Gib die Position des ersten Vorkommens eines Wertes in einem Array aus.", + "Array.indexOf|param|fromIndex": "Die Array-Position, bei der mit der Suche begonnen werden soll. Wenn fromIndex ausgelassen wird, beginnt die Suche bei Position 0.", + "Array.indexOf|param|item": "Der in einem Array zu lokalisierende Wert.", + "Array.insertAt": "Füge den Wert an einer bestimmten Position ein, erhöht die Länge um 1", + "Array.insertAt|param|index": "die Position in der Liste, beginnend bei Null, bei der der Wert eingefügt werden soll, z.B.: 0", + "Array.isArray": "Überprüfe ob ein bestimmtes Objekt ein Array ist.", + "Array.join": "verknüpft alle Elemente eines Arrays zu einer Zeichenfolge und gibt diese zurück.", + "Array.join|param|sep": "Das Zeichenfolgentrennzeichen", + "Array.length": "Rufe die Array-Länge ab oder lege sie fest. Diese Zahl ist um eins höher als die Position des letzten Elementes des Arrays.", + "Array.map": "Ruft eine definierte Rückruffunktion bei jedem Element eines Arrays ab und gibt ein Array mit den Ergebnissen aus.", + "Array.map|param|callbackfn": "Eine Funktion, die bis zu zwei Argumente akzeptiert. Die map-Methode ruft für jedes Element im Array die callbackfn-Funktion einmal auf.", + "Array.pop": "Entferne das letzte Element eines Arrays und gib es aus.", + "Array.push": "Füge ein neues Element an ein Array an.", + "Array.reduce": "Rufe die angegebene Rückruffunktion für alle Elemente in einem Array auf. Der Rückgabewert der Rückruffunktion ist das kumulierte Ergebnis, es wird als Argument im nächsten Aufruf der Rückruffunktion bereitgestellt.", + "Array.reduce|param|callbackfn": "Eine Funktion, die bis zu drei Argumente akzeptiert. Die Reduziermethode ruft für jedes Element im Array die callbackfn-Funktion einmal auf.", + "Array.reduce|param|initialValue": "Anfangswert für Kumulierungsbeginn. Der erste Aufruf der callbackfn-Funktion hat diesen Wert als Argument statt eines Array-Wertes.", + "Array.removeAt": "Entferne das Element an einer bestimmten Position.", + "Array.removeElement": "Entferne das erste Vorkommen eines Elementes. Gibt wahr aus, wenn es entfernt wurde.", + "Array.reverse": "Kehrt die Elemente in einem Array um. Das erste Array-Element wird zum letzten, das letzte Array-Element wird zum ersten.", + "Array.set": "Speichere einen Wert an einer bestimmten Position", + "Array.set|param|index": "die Position in der Liste, beginnend bei Null, bei der der Wert gespeichert werden soll, z.B.: 0", + "Array.set|param|value": "der einzufügende Wert, z.B.: 0", + "Array.shift": "Entferne das erste Element aus einem Array und gib es aus. Durch diese Methode wird die Array-Länge verändert.", + "Array.slice": "Gib einen Abschnitt eines Arrays aus.", + "Array.slice|param|end": "Das Ende des angegebenen Abschnitts des Arrays, z.B.: 0", + "Array.slice|param|start": "Der Anfang des angegebenen Abschnitts des Arrays, z.B.: 0", + "Array.some": "Testet, ob wenigstens ein Element in dem Array den von der bereitgestellten Funktion implementierten Test besteht.", + "Array.some|param|callbackfn": "Eine Funktion, die bis zu zwei Argumente akzeptiert. Die some-Methode ruft für jedes Element in dem Array die callbackfn-Funktion einmal auf.", + "Array.sort": "Sortiere die Elemente eines Arrays und gib das Array aus. Die Sortierung ist nicht zwangsläufig unveränderlich.", + "Array.splice": "Entferne Elemente aus einem Array.", + "Array.splice|param|deleteCount": "Die Anzahl der zu entfernenden Elemente, z.B.: 0", + "Array.splice|param|start": "Die Position im Array, beginnend bei Null, bei der mit dem Entfernen von Elementen begonnen werden soll z.B.: 0", + "Array.unshift": "Füge ein Element am Anfang eines Arrays hinzu und gib die neue Länge des Arrays aus.", + "Array@type": "Hinzufügen, Entfernen und Ersetzen von Elementen in Listen.", + "Boolean.toString": "Gibt eine Zeichenfolgendarstellung eines Elementes aus.", + "Buffer.chunked": "Zwischenspeicher in Teile aufteilen, die nicht größer als angegeben sind", + "Buffer.concat": "Gibt die Verkettung des aktuellen Puffers und des angegebenen Puffers zurückn\nVerkettet alle Puffer in der Liste", + "Buffer.create": "Reserviert einen neuen Puffer.", + "Buffer.create|param|size": "Anzahl der Bytes im Zwischenspeicher", + "Buffer.equals": "Gibt true zurück, wenn dieser und der andere Zwischenspeiche dieselben Daten enthalten", + "Buffer.fill": "Fülle (ein Fragment) des Zwischenspeichers mit vorgegebenem Wert.", + "Buffer.fromArray": "Erstelle einen neuen Puffer der mit Bytes aus dem angegebenen Array initialisiert wird.", + "Buffer.fromArray|param|bytes": "Daten mit denen initialisiert werden soll", + "Buffer.fromHex": "Erstelle einen neuen Puffer indem ein Hex-String decodiert wird", + "Buffer.fromUTF8": "Erstelle einen neuen Puffers mit UTF8-codierter Zeichenfolge", + "Buffer.fromUTF8|param|str": "die Zeichenfolge, die in den Puffer eingefügt werden soll", + "Buffer.getNumber": "Lies eine Zahl im angegebenen Format vom Zwischenspeicher.", + "Buffer.getUint8": "Liest ein vorzeichenloses Byte von einem bestimmten Speicherort", + "Buffer.hash": "Berechne k-Bit FNV-1 nicht-kryptographischen Hash des Puffers.", + "Buffer.indexOf": "Gibt die Position eines Puffers im aktuellen Puffer zurück", + "Buffer.isReadOnly": "Gibt false zurück, wenn der Puffer geschrieben werden kann.", + "Buffer.length": "Gibt false zurück, wenn der Puffer geschrieben werden kann.", + "Buffer.packAt": "Schreibt Zahlen entsprechend dem Format in den Zwischenspeicher", + "Buffer.rotate": "Drehe den Zwischenspeicher auf der Stelle nach links.n\n\n\nstart. z.B.: -1", + "Buffer.rotate|param|length": "Anzahl der Elemente im Zwischenspeicher. Falls negativ wird die Länge als Zwischenspeicherlänge minus Start festgelegt.", + "Buffer.rotate|param|offset": "Anzahl der zu verschiebenden Bytes; nutze negativen Wert zum Verschieben nach rechts", + "Buffer.rotate|param|start": "starte Offset im Zwischenspeicher. Standardeinstellung ist 0.", + "Buffer.setNumber": "Schreibe eine Zahl im angegebenen Format in den Zwischenspeicher.", + "Buffer.setUint8": "Schreibt ein vorzeichenloses Byte an einen bestimmten Ort", + "Buffer.shift": "Zwischenspeicher nach links verschieben, ohne Füllzeichen.\n\n\n\nstart. z.B.: -1", + "Buffer.shift|param|length": "Anzahl der Elemente im Zwischenspeicher. Falls negativ wird die Länge als Zwischenspeicherlänge minus Start festgelegt.", + "Buffer.shift|param|offset": "Anzahl der zu verschiebenden Bytes; nutze negativen Wert zum Verschieben nach rechts", + "Buffer.shift|param|start": "starte Offset im Zwischenspeicher. Standardeinstellung ist 0.", + "Buffer.sizeOfNumberFormat": "Ruft die Bytegröße im spezifierten Nummernformat ab.", + "Buffer.slice": "Gib eine Kopie eines Fragmentes eines Zwischenspeichers aus.", + "Buffer.toArray": "Inhalt des Zwischenspichers als Array im angegebenen Format lesen", + "Buffer.toHex": "Konvertiert einen Puffer in seine hexadezimale Darstellung.", + "Buffer.toString": "Konvertiert einen Puffer in einen String mit UTF8-Codierung", + "Buffer.unpack": "Liest Zahlen aus dem Puffer entsprechend dem Format", + "Buffer.write": "Schreib die Inhalte von `src` bei`dstOffset` in den aktuellen Zwischenspeicher.", + "Colors": "Bekannte Farben", + "EventCreationMode": "So wird ein Ereignis erstellt.", + "EventCreationMode.CreateAndFire": "Calliope mini-Event wurde initialisiert, seine Event-Handler werden unverzüglich ausgeführt (nicht geeignet für die Nutzung bei Unterbrechungen!).", + "EventCreationMode.CreateOnly": "Calliope mini-Event wurde initialisiert, es wird keine weitere Verarbeitung vorgenommen.", + "Gesture.EightG": "Wird ausgeführt, wenn ein Stoß mit 8g erkannt wird", + "Gesture.FreeFall": "Wird ausgeführt, wenn das Board fällt!", + "Gesture.LogoUp": "Wird ausgeführt, wenn das Logo nach oben zeigt und das Display vertikal ist.", + "Gesture.ScreenDown": "Wird ausgeführt, wenn das Display nach unten zeigt und das Board horizontal ist", + "Gesture.ScreenUp": "Wird ausgeführt, wenn das Display nach oben zeigt und das Board horizontal ist", + "Gesture.Shake": "Wird ausgeführt, wenn das Board geschüttelt wird", + "Gesture.SixG": "Wird ausgeführt, wenn 6G Beschleuningung gemessen wird", + "Gesture.ThreeG": "Wird ausgeführt, wenn 3G Beschleuningung gemessen wird", + "Gesture.TiltLeft": "Wird ausgeführt, wenn LED-Matrix nach links zeigt", + "Gesture.TiltRight": "Wird ausgeführt, wenn LED-Matrix nach rechts zeigt", + "Image.clear": "Schaltet alle Pixel aus.", + "Image.height": "Ruft die Höhe in Reihen ab (immer 5)", + "Image.pixel": "Rufe den Pixelzustand bei Position ``(x,y)``ab", + "Image.pixelBrightness": "Ruft die Pixelhelligkeit ([0..255]) an einer bestimmten Position ab", + "Image.pixel|param|x": "Pixelspalte", + "Image.pixel|param|y": "Pixelzeile", + "Image.plotFrame": "Zeichnet den Frame der ``Position`` des Bildes auf dem Bildschirm.", + "Image.plotFrame|param|xOffset": "Spaltenposition für den Anzeigenbeginn des Bildes", + "Image.plotImage": "Zeichnet das Bild in einer angegebenen Spalte auf dem Bildschirm", + "Image.scrollImage": "Scrollt ein Bild.", + "Image.scrollImage|param|frameOffset": "x Offset für die Bewegung bei jedem Animationsschritt, z. B. 1, 2, 5", + "Image.scrollImage|param|interval": "Zeit zwischen jedem Animationsschritt in Millisekunden, z.B. 200", + "Image.setPixel": "Lege den Pixelzustand bei Position ``(x,y)`` fest", + "Image.setPixelBrightness": "Legt eine bestimmte Pixelhelligkeit an einer bestimmten Position fest", + "Image.setPixel|param|value": "Pixelstatus", + "Image.setPixel|param|x": "Pixelspalte", + "Image.setPixel|param|y": "Pixelzeile", + "Image.showFrame": "Zeigt einen bestimmten Frame eines Bildstreifens..", + "Image.showFrame|param|frame": "Bildrahmen zum Anzeigen", + "Image.showImage": "Zeigt einen Frame des Bildes bei Offset ``x offset``.", + "Image.showImage|param|interval": "Zeit in Millisekunden, die nach der Zeichnung gewartet wird", + "Image.showImage|param|xOffset": "Spaltenposition für den Anzeigenbeginn des Bildes", + "Image.width": "Ruft die Breite in Spalten ab", + "Infinity": "Konstante für die positive Unendlichkeit.", + "JSON.parse": "Konvertiert eine JavaScript Object Notation (JSON) Zeichenkette in ein Objekt.", + "JSON.stringify": "Konvertiert einen JavaScript-Wert in einen JavaScript-Objekt-Notation (JSON) String.", + "JSON.stringify|param|indent": "Fügt dem JSON-Text Einrückung, Leerzeichen und Zeilenumbrüche hinzu, um ihn einfacher lesen zu können.", + "JSON.stringify|param|replacer": "Nicht unterstützt; Null verwenden.", + "JSON.stringify|param|value": "Ein JavaScript-Wert, in der Regel ein Objekt oder Array, das konvertiert werden soll.", + "Math": "Komplexere Operationen mit Zahlen.", + "Math.abs": "Gibt den absoluten Wert einer Zahl aus (den Wert unabhängig davon, ob er positiv oder negativ ist).\nDer absolute Wert von -5 ist zum Beispiel der gleiche wie der von 5.", + "Math.abs|param|x": "Ein numerischer Ausdruck, für den der absolute Wert benötigt wird.", + "Math.acos": "Gibt den Arkuskosinus (im Bogenmaß) einer Zahl aus", + "Math.acos|param|x": "Eine Zahl", + "Math.asin": "Gibt den Arkussinus (im Bogenmaß) einer Zahl aus", + "Math.asin|param|x": "Eine Zahl", + "Math.atan": "Gibt den Arkustangens (im Bogenmaß) einer Zahl aus", + "Math.atan2": "Gibt den Arkustangens des Quotienten eines der Argumente aus.", + "Math.atan2|param|x": "Eine Zahl", + "Math.atan2|param|y": "Eine Zahl", + "Math.atan|param|x": "Eine Zahl", + "Math.ceil": "Gibt die kleinste Zahl größer als oder gleich des numerischen Argumentes aus.", + "Math.ceil|param|x": "Ein numerischer Ausdruck.", + "Math.constrain": "Beschränkt eine Zahl auf einen Bereich", + "Math.cos": "Gibt den Kosinus einer Zahl aus.", + "Math.cos|param|x": "Ein Winkel im Bogenmaß", + "Math.exp": "Gibt ``e^x`` aus.", + "Math.exp|param|x": "Eine Zahl", + "Math.floor": "Gibt die größte Zahl kleiner als oder gleich des numerischen Argumentes aus.", + "Math.floor|param|x": "Ein numerischer Ausdruck.", + "Math.icos": "Gibt den Kosinus des Eingabewinkels zurück. Das ist eine 8-Bit Annäherung.", + "Math.icos|param|theta": "Eingangswinkel von 0-255", + "Math.idiv": "Gibt den Wert einer 32-Bit-Ganzzahl (mit Vorzeichen) bei der Division zweier Zahlen aus.", + "Math.idiv|param|x": "Die erste Zahl", + "Math.idiv|param|y": "Die zweite Zahl, + "Math.imul": "Gibt den Wert einer 32-Bit-Ganzzahl (mit Vorzeichen) bei der Multiplikation zweier Zahlen aus.", + "Math.imul|param|x": "Die erste Zahl", + "Math.imul|param|y": "Die zweite Zahl", + "Math.isin": "Gibt den Sinus des Eingabewinkels zurück. Das ist eine 8-Bit Annäherung.", + "Math.isin|param|theta": "Eingangswinkel von 0-255", + "Math.log": "Gibt den natürlichen Logarithmus (Basis e) einer Zahl aus.", + "Math.log|param|x": "Eine Zahl", + "Math.map": "Re-maps a number from one range to another. That is, a value of ``from low`` would get mapped to ``to low``, a value of ``from high`` to ``to high``, values in-between to values in-between, etc.", + "Math.map|param|fromHigh": "the upper bound of the value's current range, eg: 1023", + "Math.map|param|fromLow": "the lower bound of the value's current range", + "Math.map|param|toHigh": "the upper bound of the value's target range, eg: 4", + "Math.map|param|toLow": "the lower bound of the value's target range", + "Math.map|param|value": "value to map in ranges", + "Math.max": "Gibt den größeren von zwei vorhandenen numerischen Ausdrücken aus.", + "Math.min": "Gibt den niedrigeren von zwei vorhandenen numerischen Ausdrücken aus.", + "Math.pow": "Gibt den Wert eines grundlegenden Ausdrucks bis zu einer bestimmten Stärke aus.", + "Math.pow|param|x": "Der Basiswert des Ausdrucks.", + "Math.pow|param|y": "Der exponentielle Wert des Ausdrucks.", + "Math.random": "Gibt eine pseudozufüllige Zahl zwischen 0 und `max`aus.", + "Math.randomBoolean": "Erzeugt zufällig einen \"wahr\" oder \"falsch\"-Wert, wie bei einem Münzwurf.", + "Math.randomRange": "Gibt eine pseudozufällige Zahl zwischen einschl. Minimum und Maximum aus.\nWenn beide Zahlen Ganzzahlen sind, ist auch das Ergebnis eine Ganzzahl.", + "Math.randomRange|param|max": "die obere Grenze, einschließlich dieser Zahl, z.B.: 10", + "Math.randomRange|param|min": "die untere Grenze, einschließlich dieser Zahl, z. B.: 10", + "Math.round": "Gibt einen gegebenen numerischen Ausdruck auf die nächste Zahl gerundet aus.", + "Math.roundWithPrecision": "Rundet ``x`` auf eine Zahl mit der angegebenen Anzahl von ``Stellen``", + "Math.roundWithPrecision|param|digits": "die Anzahl der resultierenden Ziffern", + "Math.roundWithPrecision|param|x": "die zu rundende Zahl", + "Math.round|param|x": "Der Wert, der auf die nächste Zahl gerundet werden soll.", + "Math.sign": "Gibt das Vorzeichen von x aus und zeigt an, ob dieses positiv, negativ oder null ist.", + "Math.sign|param|x": "Der numerische Ausdruck, der getestet werden soll", + "Math.sin": "Gibt den Sinus einer Zahl aus.", + "Math.sin|param|x": "Ein Winkel im Bogenmaß", + "Math.sqrt": "Gibt die Quadratwurzel einer Zahl aus.", + "Math.sqrt|param|x": "Ein numerischer Ausdruck.", + "Math.tan": "Gibt den Tangens einer Zahl aus.", + "Math.tan|param|x": "Ein Winkel im Bogenmaß", + "Math.trunc": "Gibt die Zahl mit abgeschnittenem Dezimalteil aus.", + "Math.trunc|param|x": "Ein numerischer Ausdruck.", + "NaN": "Konstante, die eine Nicht-Zahl darstellt.", + "Number.isNaN": "Überprüft, ob ein Wert vom Typ Zahl ist oder nicht.", + "Number.toString": "Gib eine Zeichenfolgendarstellung einer Zahl aus.", + "Object.keys": "Gibt die Feldnamen in einem Objekt zurück.", + "String": "Kombinieren, trennen und suchen von Text-Zeichenfolgen.", + "String.charAt": "Gibt den Buchstaben beim angegebenen Index aus.", + "String.charAt|param|index": "Der null-basierte index des gewünschten Zeichens.", + "String.charCodeAt": "Gibt den Unicode-Wert des Zeichens am vorgegebenen Ort aus.", + "String.charCodeAt|param|index": "Der null-basierte Index des gewünschten Zeichens. Wenn kein Zeichen am angegeben Index vorhanden ist, wird NaN ausgegeben.", + "String.compare": "Bestimmt die relative Reihenfolge zweier Strings (in ASCII).", + "String.compare|param|that": "Zeichenfolge, die mit der Zielzeichenfolge verglichen werden soll", + "String.concat": "Gibt eine Zeichenfolge aus, die die Verkettung von zwei oder mehr Zeichenfolgen ist.", + "String.concat|param|other": "Die Zeichenfolge, die an das Ende einer Zeichenfolge angehängt werden soll.", + "String.fromCharCode": "Erstelle Sie eine Zeichenfolge aus dem angegebenen ASCII-Zeichencode.", + "String.includes": "Bestimmt, ob eine Zeichenkette die Zeichen einer bestimmten Zeichenkette enthält.", + "String.includes|param|searchValue": "der zu findende Text", + "String.includes|param|start": "optionaler Startindex für die Suche", + "String.indexOf": "Gibt die Position des ersten Vorkommens eines Werts in einer Zeichenkette zurück.", + "String.indexOf|param|searchValue": "der zu findende Text", + "String.indexOf|param|start": "optionaler Startindex für die Suche", + "String.isEmpty": "Gibt einen Wert aus, der anzeigt, ob die Zeichenfolge leer ist", + "String.length": "Gibt die Länge einer Zeichenfolge aus.", + "String.replace": "Gib die aktuelle Zeichenkette mit dem ersten Auftreten von toReplace zurück,\nmit dem zu ersetzenden Inhalt gefüllt\n\n\oder eine Funktion die eine Teil-Zeichenfolge akzeptiert und den zu ersetzenden Inhalt zurückgibt.", + "String.replaceAll": "Gibt die aktuelle Zeichenkette zurück, bei der jedes Auftreten von toReplace\ndurch den Ersetzer oder einer Funktion ersetzt wird, \n\n\ndie die Zeichenkette akzeptiert und den Ersetzungsstring zurückgibt.", + "String.replaceAll|param|replacer": "entweder die Zeichenfolge, die toReplace in der aktuellen Zeichenfolge ersetzt,", + "String.replaceAll|param|toReplace": "der Teilstring der in der aktuellen Zeichenkette ersetzt werden soll", + "String.replace|param|replacer": "either the string that replaces toReplace in the current string,", + "String.replace|param|toReplace": "the substring to replace in the current string", + "String.slice": "Return a substring of the current string.", + "String.slice|param|end": "one-past-last character index", + "String.slice|param|start": "first character index; can be negative from counting from the end, eg:0", + "String.split": "Splits the string according to the separators", + "String.split|param|separator": "@param limit", + "String.substr": "Gibt eine Teilzeichenfolge der aktuellen Zeichenfolge aus.", + "String.substr|param|length": "Anzahl der zu extrahierenden Zeichen", + "String.substr|param|start": "Erster Zeichenindex, kann beim zählen vom Ende negativ sein, zum Beispiel: 0", + "String.toLowerCase": "Converts the string to lower case characters.", + "String.trim": "Return a substring of the current string with whitespace removed from both ends", + "String@type": "Combine, split, and search text strings.", + "StringMap": "A dictionary from string key to string values", + "_py.range": "Returns a sequence of numbers up to but not including the limit\n\nIf more than one argument is passed, this argument is instead used for the first value in the range", + "_py.range|param|first": "The value to end the sequence before. This value will not show up in the result.", + "_py.range|param|step": "The value to increase or decrease by for each step in the range. Must be a nonzero integer", + "_py.range|param|stop": "The value to end the sequence before. This value will not show up in the result", + "_py.slice": "Returns a section of an array according to python's extended slice syntax", + "_py.stringSlice": "Returns a section of a string according to python's extended slice syntax", + "basic": "Bietet Zugriff auf grundlegende mini-Funktionalität.", + "basic.clearScreen": "Schalte alle LEDs aus", + "basic.color": "Konvertiert den Farbnamen in eine Nummer", + "basic.forever": "Wiederholt immer wieder den Code im Hintergrund. Bei jeder Iteration ist es möglich, anderen Code auszuführen.", + "basic.pause": "Pausiere für die angegebene Zeit in Millisekunden", + "basic.pause|param|ms": "wie lange pausieren, z.B.: 100, 200, 500, 1000, 2000", + "basic.plotLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", + "basic.plotLeds|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", + "basic.rgb": "Konvertiert Rot-, Grün- und Blau-Kanäle in eine RGB-Farbe", + "basic.rgb|param|blue": "Blauwert zwischen 0 und 255, z.B. 255", + "basic.rgb|param|green": "Grünwert zwischen 0 und 255, z.B. 255", + "basic.rgb|param|red": "Rotwert zwischen 0 und 255, z.B. 255", + "basic.setLedColor": "Legt die Farbe der eingebauten LED fest. Setze auf 0, um diese abzuschalten.", + "basic.showAnimation": "Zeigt eine Abfolge von LED-Anzeigen als Animation.", + "basic.showAnimation|param|interval": "Zeit in Millisekunden zwischen jedem Neuzeichnen", + "basic.showAnimation|param|leds": "Muster der LEDs, die ein-/ und ausgeschaltet werden", + "basic.showArrow": "Draws an arrow on the LED screen", + "basic.showArrow|param|direction": "the direction of the arrow", + "basic.showArrow|param|interval": "the amount of time (milliseconds) to show the icon. Default is 600.", + "basic.showCompass": "Draws needle on the screen which always points to north", + "basic.showCompass|param|interval": "the amount of time (milliseconds) to show the needle. Default is 600.", + "basic.showIcon": "Draws the selected icon on the LED screen", + "basic.showIcon|param|icon": "the predefined icon id", + "basic.showIcon|param|interval": "the amount of time (milliseconds) to block the LED Matrix for showing the icon. Default is 600.", + "basic.showLeds": "Zeichnet ein Bild auf dem LED-Bildschirm.", + "basic.showLeds|param|interval": "Zeit in Millisekunden, die nach der Zeichnung gewartet wird", + "basic.showLeds|param|leds": "Muster der LEDs, die ein- und ausgeschaltet werden", + "basic.showNumber": "Zeige eine Nummer auf dem Display. Wenn die Nummer auf das Display passt (es sich also um eine einstellige Zahl handelt), scrolle nicht weiter.", + "basic.showNumber|param|interval": "Scroll-Geschwindigkeit; z.B. 150, 100, 200,-100", + "basic.showString": "Zeige Text auf dem Display an, Buchstabe für Buchstabe. Wenn die Zeichenfolge in das Display passt (also wenn es sich um einen einzelnen Buchstaben handelt), scrolle nicht weiter.", + "basic.showString|param|interval": "Wie schnell die Zeichen geändert werden; z.B. 150, 100, 200,-100", + "basic.showString|param|text": "Text auf dem Bildschirm dargestellt werden soll, z.B.: \"Hi!\"", + "basic.turnRgbLedOff": "Sets the color on the build-in LED. Set to 0 to turn off.", + "console": "Reading and writing data to the console output.", + "console.addListener": "Adds a listener for the log messages", + "console.inspect": "Convert any object or value to a string representation", + "console.inspect|param|maxElements": "[optional] max number values in an object to include in output", + "console.inspect|param|obj": "value to be converted to a string", + "console.log": "Write a line of text to the console output.", + "console.logValue": "Write a name:value pair as a line of text to the console output.", + "console.logValue|param|name": "name of the value stream, eg: \"x\"", + "console.logValue|param|value": "to write", + "console.log|param|value": "to send", + "console.minPriority": "Minimum priority to send messages to listeners", + "console.removeListener": "Removes a listener", + "control": "Laufzeit- und Event-Dienstprogramme.", + "control.allocateNotifyEvent": "Allocates the next user notification event", + "control.assert": "Wenn die Bedingung falsch ist, zeige eine Nachricht auf der seriellen Konsole und gebe Panic-Code 098 aus", + "control.benchmark": "Runs the function and returns run time in microseconds.", + "control.createBuffer": "Create a new zero-initialized buffer.", + "control.createBufferFromUTF8": "Create a new buffer with UTF8-encoded string", + "control.createBufferFromUTF8|param|str": "the string to put in the buffer", + "control.createBuffer|param|size": "number of bytes in the buffer", + "control.deviceLongSerialNumber": "Derive a unique, consistent 64-bit serial number of this device from internal data.", + "control.deviceName": "Erzeugt einen Namen für das Gerät, basierend auf der Seriennummer", + "control.deviceSerialNumber": "Derive a unique, consistent serial number of this device from internal data.", + "control.dmesg": "Write a message to DMESG debugging buffer.", + "control.dmesgPerfCounters": "Dump values of profiling performance counters.", + "control.dmesgPtr": "Write a message and value (pointer) to DMESG debugging buffer.", + "control.enablePerfCounter": "Enable profiling for current function.", + "control.eventSourceId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", + "control.eventTimestamp": "Holt den Zeitstempel des letzten Events auf dem Bus", + "control.eventValue": "Holt den Wert des letzten ausgeführten Events auf dem Bus", + "control.eventValueId": "Gibt den Wert einer C++-Laufzeitkonstanten aus", + "control.gc": "Force GC and dump basic information about heap.", + "control.gcStats": "Get various statistics about the garbage collector (GC)", + "control.heapDump": "Force GC and halt waiting for debugger to do a full heap dump.", + "control.heapSnapshot": "Record a heap snapshot to debug memory leaks.", + "control.inBackground": "Plant Code, der im Hintergrund wiedergegeben wird.", + "control.micros": "Gets current time in microseconds. Overflows every ~18 minutes.", + "control.millis": "Gets the number of milliseconds elapsed since power on.", + "control.onEvent": "Startet ein Event auf dem Event-Bus.", + "control.panic": "Zeigt einen spezifizierten Fehlercode und hält das Programm an.", + "control.profilingEnabled": "Return true if profiling is enabled in the current build.", + "control.raiseEvent": "Startet ein Event auf dem Event-Bus.", + "control.raiseEvent|param|mode": "optionale Definition davon, wie ein Event nach dem Erstellen ausgeführt wird (Standard ist \"CREATE_AND_FIRE).", + "control.raiseEvent|param|src": "ID der Calliope mini-Komponente, die das Event generiert hat, zum Beispiel CALLIOPE_ID_BUTTON_A.", + "control.raiseEvent|param|value": "Komponentenspezifischer Code, der den Grund des Events angibt.", + "control.ramSize": "Returns estimated size of memory in bytes.", + "control.reset": "Setzt den Calliope mini zurück.", + "control.runInParallel": "Run other code in the parallel.", + "control.runtimeWarning": "Zeige Warnmeldung im Simulator.", + "control.setDebugFlags": "Set flags used when connecting an external debugger.", + "control.simmessages.onReceived": "Registers the handler for a message on a given channel", + "control.waitForEvent": "Blocks the calling thread until the specified event is raised.", + "control.waitMicros": "Sperrt die aktuelle Leitung für die Dauer der angegebenen Mikrosekunden", + "control.waitMicros|param|micros": "Anzahl der Mikrosekunden, die gewartet werden soll, z.B.: 4", + "convertToText": "Convert any value to text", + "convertToText|param|value": "value to be converted to text", + "forever": "Repeats the code forever in the background. On each iteration, allows other codes to run.", + "game": "Eine Einzel-LED-Sprite-Spielumgebung", + "game.LedSprite": "A game sprite rendered as a single LED", + "game.LedSprite.blink": "Reports the ``blink`` duration of a sprite", + "game.LedSprite.brightness": "Reports the ``brightness` of a sprite on the LED screen", + "game.LedSprite.change": "Changes a property of the sprite", + "game.LedSprite.changeBlinkBy": "Changes the ``blink`` duration by the given amount of millisecons", + "game.LedSprite.changeBlinkBy|param|ms": "TODO", + "game.LedSprite.changeBrightnessBy": "Changes the ``y`` position by the given amount", + "game.LedSprite.changeBrightnessBy|param|value": "the value to change brightness", + "game.LedSprite.changeDirectionBy": "Changes the ``direction`` position by the given amount by turning right", + "game.LedSprite.changeDirectionBy|param|angle": "TODO", + "game.LedSprite.changeXBy": "Changes the ``x`` position by the given amount", + "game.LedSprite.changeXBy|param|x": "TODO", + "game.LedSprite.changeYBy": "Changes the ``y`` position by the given amount", + "game.LedSprite.changeYBy|param|y": "TODO", + "game.LedSprite.change|param|property": "the name of the property to change", + "game.LedSprite.change|param|value": "amount of change, eg: 1", + "game.LedSprite.delete": "Deletes the sprite from the game engine. The sprite will no longer appear on the screen or interact with other sprites.", + "game.LedSprite.direction": "Reports the current direction of a sprite", + "game.LedSprite.get": "Gets a property of the sprite", + "game.LedSprite.get|param|property": "the name of the property to change", + "game.LedSprite.goTo": "Go to this position on the screen", + "game.LedSprite.goTo|param|x": "TODO", + "game.LedSprite.goTo|param|y": "TODO", + "game.LedSprite.ifOnEdgeBounce": "If touching the edge of the stage and facing towards it, then turn away.", + "game.LedSprite.isDeleted": "Reports whether the sprite has been deleted from the game engine.", + "game.LedSprite.isTouching": "Reports true if sprite has the same position as specified sprite", + "game.LedSprite.isTouchingEdge": "Reports true if sprite is touching an edge", + "game.LedSprite.isTouching|param|other": "the other sprite to check overlap or touch", + "game.LedSprite.move": "Move a certain number of LEDs in the current direction", + "game.LedSprite.move|param|leds": "number of leds to move, eg: 1, -1", + "game.LedSprite.off": "Turns off the sprite (on by default)", + "game.LedSprite.on": "Turns on the sprite (on by default)", + "game.LedSprite.set": "Sets a property of the sprite", + "game.LedSprite.setBlink": "Sets the blink duration interval in millisecond.", + "game.LedSprite.setBlink|param|ms": "TODO", + "game.LedSprite.setBrightness": "Set the ``brightness`` of a sprite", + "game.LedSprite.setBrightness|param|brightness": "the brightness from 0 (off) to 255 (on), eg: 255.", + "game.LedSprite.setDirection": "Set the direction of the current sprite, rounded to the nearest multiple of 45", + "game.LedSprite.setDirection|param|degrees": "new direction in degrees", + "game.LedSprite.setX": "Set the ``x`` position of a sprite", + "game.LedSprite.setX|param|x": "TODO", + "game.LedSprite.setY": "Set the ``y`` position of a sprite", + "game.LedSprite.setY|param|y": "TODO", + "game.LedSprite.set|param|property": "the name of the property to change", + "game.LedSprite.turn": "Turn the sprite", + "game.LedSprite.turnLeft": "Turn to the left (counter-clockwise)", + "game.LedSprite.turnLeft|param|degrees": "TODO", + "game.LedSprite.turnRight": "Turn to the right (clockwise)", + "game.LedSprite.turnRight|param|degrees": "TODO", + "game.LedSprite.turn|param|degrees": "angle in degrees to turn, eg: 45, 90, 180, 135", + "game.LedSprite.turn|param|direction": "left or right", + "game.LedSprite.x": "Reports the ``x`` position of a sprite on the LED screen", + "game.LedSprite.y": "Reports the ``y`` position of a sprite on the LED screen", + "game.addLife": "Fügt Leben zum aktuellen Spielstand hinzu", + "game.addLife|param|lives": "amount of lives to add", + "game.addScore": "Fügt zum aktuellen Spielstand Punkte hinzu", + "game.addScore|param|points": "Anzahl von zu verändernden Punkten, z.B.: 1", + "game.createSprite": "Erzeugt einen neuen LED-Sprite, der nach rechts zeigt.", + "game.createSprite|param|x": "horizontale Koordinate des Sprites, z.B. 2", + "game.createSprite|param|y": "vertikale Koordinate des Sprites, z.B. 2", + "game.currentTime": "Ruft die verbliebene Zeit (seit `starte Countdown`) oder die aktuelle Zeit (seit das Gerät gestartet wurde oder eine Stoppuhr aktiviert wurde) an.", + "game.gameOver": "Gibt über eine Animation ein Spiel wieder.", + "game.invalidSprite": "Ruft einen invaliden Sprite ab; wird genutzt, um Locale zu initialisieren.", + "game.isGameOver": "Zeigt an, ob das Spil die \"Game Over\"-Sequenz angezeigt hat.", + "game.isPaused": "Indicates if the game rendering is paused to allow other animations", + "game.isRunning": "Holt einen Wert, der anzeigt, ob das Spiel noch läuft. Gibt `falsch`aus, wenn das Spiel zu Ende ist.", + "game.level": "Ruft das aktuelle Level ab", + "game.levelUp": "Erhöht das Level und zeigt eine Nachricht an.", + "game.life": "Ruft das aktuelle Leben ab", + "game.pause": "Pauses the game rendering engine to allow other animations", + "game.removeLife": "Entfernt ein Leben", + "game.removeLife|param|life": "amount of life to remove", + "game.resume": "Resumes the game rendering engine", + "game.score": "Ruft den aktuellen Punktestand ab", + "game.setLife": "Setzt den aktuellen Wert der Leben", + "game.setLife|param|value": "current life value", + "game.setScore": "Setzt den aktuellen Wert des Spielstands", + "game.setScore|param|value": "new score value.", + "game.showScore": "Zeigt den Spielstand auf dem Display.", + "game.startCountdown": "Startet einen Spiel-Countdown", + "game.startCountdown|param|ms": "Countdown-Dauer in Millisekunden, z.B.: 10000", + "game.startStopwatch": "Startet eine Stoppuhr.`aktuelle Zeit`gibt die vergangene Zeit an.", + "hex": "Tagged hex literal converter", + "images": "Erstellung, Bearbeitung und Anzeige von LED-Bildern.", + "images.createBigImage": "Erstellt ein Bild mit zwei Einzelbildern.", + "images.createImage": "Erstellt ein Bild, das auf den LED-Bildschirm passt.", + "input": "Ereignisse und Daten der Sensoren", + "input.acceleration": "Holt den Beschleunigungswert in Milli-Erdanziehung (wenn das Board flach mit dem Display nach oben liegt, X = 0, y = 0 und Z =-1024)", + "input.acceleration|param|dimension": "x, y, or z dimension, eg: Dimension.X", + "input.assumeCalibrationCompass": "Veraltet, Kompasskalibrierung erfolgt automatisch.", + "input.buttonEventClick": "Returns the ID of an Click Event", + "input.buttonEventDown": "Returns the ID of an Down Event", + "input.buttonEventValue": "Returns the ID of an Button Event", + "input.buttonIsPressed": "Get the button state (pressed or not) for ``A`` and ``B``.", + "input.buttonIsPressed|param|button": "the button to query the request, eg: Button.A", + "input.calibrateCompass": "Veraltet, Kompasskalibrierung erfolgt automatisch.", + "input.clearCalibrationCompass": "Veraltet, Kompasskalibrierung erfolgt automatisch.", + "input.compassHeading": "Holt die aktuelle Kompassrichtung in Grad.", + "input.isCalibratedCompass": "Returns 'true' when the compass is calibrated. Otherwise returns 'false'.", + "input.isGesture": "Tests if a gesture is currently detected.", + "input.isGesture|param|gesture": "the type of gesture to detect, eg: Gesture.Shake", + "input.lightLevel": "Liest die Lichtintensität auf dem LED-Bildschirm im Bereich von ``0`` (dunkel) und `` 255`` (hell).", "input.magneticForce": "Ruft den Wert der Magnetkraft in ``Mikro-Tesla`` (``µT``) ab. Diese Funktion wird im Simulator nicht unterstützt.", - "input.onButtonPressed": "Tue etwas, wenn eine Taste (``A``, ``B`` oder ``A + B``) gedrückt wird", - "input.onGesture": "Mache etwas, wenn eine Geste gemacht wird (wie den mini zu schütteln).", - "input.onLogoDown": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach unten zeigt und das Board vertikal ausgerichtet ist.", - "input.onLogoUp": "Fügt Code hinzu, der ausgeführt wird, wenn das Logo nach oben zeigt und das Board vertikal ausgerichtet ist.", - "input.onPinPressed": "Mache etwas, wenn eine Pin gehalten wird.", - "input.onPinPressed|param|body": "Code, der ausführt wird, wenn ein Pin gehalten wird", - "input.onPinReleased": "Mache etwas, wenn der Pin losgelassen wird.", - "input.onPinReleased|param|body": "Code, der ausgeführt werden soll, wenn der Pin losgelassen wird", - "input.onScreenDown": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach unten zeigt.", - "input.onScreenUp": "Hängt Code an, der ausgeführt wird, wenn der Bildschirm nach oben zeigt.", - "input.onShake": "Hängt Code an, der ausgeführt wird, wenn der mini geschüttelt wird.", - "input.pinIsPressed": "Ruft den Pin-Zustand (gehalten oder nicht) ab. Die Erdung muss gehalten werden, um den Stromkreis zu schließen.", - "input.rotation": "Die Neigung und Drehung des mini Drehung auf ``X-Achse``oder ``Y-Achse``, in Grad.", - "input.runningTime": "Ruft die Anzahl der Millisekunden auf, die seit dem Einschalten vergangen sind.", - "input.setAccelerometerRange": "Legt die Stichprobenbereich des Beschleunigungssensors in Schwerkraft fest.", - "input.setAccelerometerRange|param|range": "Ein Wert, der die maximale Stärke der gemessenen Beschleunigung beschreibt", - "input.temperature": "Ruft die aktuelle Temperatur in Grad Celsius (°C) ab.", - "led": "Steuerung des LED-Bildschirms.", - "led.brightness": "Ruft die Helligkeit des Bildschirms ab, von 0 (aus) bis 255 (volle Helligkeit).", - "led.enable": "Schaltet das Display an und aus", - "led.fadeIn": "Blendet die Bildschirmanzeige ein.", - "led.fadeOut": "Blendet die Bildschirmhelligkeit aus.", - "led.plot": "Schalte die angegebene LED mit Hilfe von X- und Y-Koordinaten ein (X ist horizontal, Y ist vertikal). (0,0) ist die obere linke Ecke.", - "led.plotAll": "Schaltet alle LEDs an", - "led.plotBarGraph": "Zeigt ein vertikales Balkendiagramm an, basierend auf dem `Wert`und dem `Hoch`-Wert. Wenn `Hoch`0 ist, wird das Diagramm automatisch angepasst.", - "led.plotBarGraph|param|high": "maximalen Wert. Wenn dieser 0 ist, wird der Maximalwert automatisch angepasst, z.B.: 0", - "led.plotBarGraph|param|value": "aktueller Wert zum Darstellen", - "led.point": "Ruft den An/Aus-Status einer vorgegebenen LED mittels X-/Y-Koordinaten ab. (0,0) ist oben links.", - "led.screenshot": "Macht einen Screenshot vom LED-Bildschirm und gibt ein Bild aus.", - "led.setBrightness": "Lege die Helligkeit des Bildschirms fest, von 0 (aus) bis 255 (volle Helligkeit).", - "led.setBrightness|param|value": "Helligkeitswert, z.B.: 255, 127, 0", - "led.setDisplayMode": "Legt den Anzeigemodus von Wiedergabe-LEDs zwischen Schwarz und Weiß und Graustufen fest.", - "led.setDisplayMode|param|mode": "TODO", - "led.stopAnimation": "Bricht die aktuelle Animation ab und löscht andere ausstehende Animationen.", - "led.toggle": "Schaltet ein bestimmtes Pixel ein", - "led.toggleAll": "Invertiert die aktuelle LED-Anzeige", - "led.unplot": "Schalte die angegebene LED mit x-und y-Koordinaten ab (X ist horizontal, y ist vertikal). (0,0) ist oben links.", - "motors": "Blöcke, die genutzt werden, um Onboard-Motoren zu steuern", - "motors.dualMotorPower": "Steuert zwei an das Board angeschlossene Motoren. Schaltet auf Dual-Motor-Modus um!", - "motors.motorCommand": "Schicke Anhalten, Ausrollen oder Anhalten-Befehle an den Motor. Hat im Dual-Motor-Modus keinen Effekt.", - "motors.motorPower": "Schaltet den Motor bei einer bestimmten Prozentzahl der Kraft an. Schaltet um auf den Single-Motor-Modus!", - "motors.motorPower|param|power": "%percent der Kraft, die an den Motor geschickt wird. Negative Werte laufen rückwärts, z.B. 50", - "music": "Generierung von von Musik durch Pin ``P0``.", - "music.beat": "Gibt die Dauer eines Taktes in Milli-Sekunden aus", - "music.changeTempoBy": "Ändere die Geschwindigkeit um den angegebenen Betrag", - "music.changeTempoBy|param|bpm": "Die Änderung in Schlägen pro Minute auf das Tempo, z.B.: 20", - "music.noteFrequency": "Ruft die Frequenz einer Note ab.", - "music.playTone": "Spielt einen Ton für den angegebenen Zeitraum auf dem Lautsprecher ab.", - "music.playTone|param|ms": "Tondauer in Millisekunden (ms)", - "music.rest": "Ruht (spielt nichts) für eine bestimmte Zeit auf Pin ``P0``.", - "music.rest|param|ms": "Restdauer in Millisekunden (ms)", - "music.ringTone": "Spielt einen Ton durch den Lautsprecher ab.", - "music.ringTone|param|frequency": "Tonhöhe des abzuspielenden Tones in Hertz (Hz)", - "music.setTempo": "Legt die Geschwindigkeit auf den angegebenen Wert fest.", - "music.setTempo|param|bpm": "Die neue Geschwindigkeit in Schlägen pro Minute, z.B.: 120", - "music.tempo": "Gibt die Geschwindigkeit in Schlägen pro Minute aus. Die Geschwindigkeit ist Schnelligkeit (Bpm = Beats pro Minute), in der Töne abgespielt werden. Je größer der Wert, desto schneller werden die Töne abgespielt.", - "pins": "Steuere die Stromstärke über die Pins für analoge/digitale Signale, Servos, I2C,...", - "pins.analogPitch": "Gibt ein Pulsweiten Modulation (PWM)-Signal über den aktuellen Pitch-Pin. Benutze `analog set pitch pin`, um den Pitch-Pin festzulegen.", - "pins.analogReadPin": "Lese den Anschlusswert als Analog aus, d. h. als einen Wert zwischen 0 und 1023.", - "pins.analogSetPeriod": "Stellt die Pulsweite Modulation (PWM) des Analogausganges auf den angegebenen Wert in ** Mikrosekunden ** oder `1/1000` Millisekunden ein.\nWenn dieser Pin nicht als einen Analogausgang (mit `analog write pin`) konfiguriert ist, hat der Vorgang keine Auswirkungen.", - "pins.analogSetPeriod|param|micros": "Zeit in Mikrosekunden. z.B.: 20000", - "pins.analogWritePin": "Legt den Wert des Verbinders auf analog fest. Der Wert muss zwischen 0 und 1023 liegen.", - "pins.analogWritePin|param|value": "Wert, der auf den Pin geschrieben werden soll, zwischen ``0`` und ``1023`` z.B.: 1023,0", - "pins.createBuffer": "Erstellt einen Null-initialisierten Zwischenspeicher.", - "pins.createBuffer|param|size": "Anzahl der Bytes im Zwischenspeicher", - "pins.digitalReadPin": "Lese den angegebene Pin oder Verbinder als 0 oder 1", - "pins.digitalWritePin": "Setzt einen Pin- oder Verbinder-Wert auf 0 oder 1.", - "pins.digitalWritePin|param|value": "Wert, der auf dem Pin 1 gesetzt werden soll, z.B. 0", - "pins.i2cReadBuffer": "Lese `Größe`bytes aus einer 7-bit I2C-Adresse.", - "pins.i2cReadNumber": "Lese eine Nummer aus einer 7-bit I2C-Adresse.", - "pins.i2cWriteBuffer": "Schreibt Bytes in eine 7-bit I2C-Adresse.", - "pins.i2cWriteNumber": "Schreibe eine Nummer in eine 7-bit I2C-Adresse.", - "pins.map": "Definiert eine Nummer von einer Auswahl zu einer anderen um. Ein Wert ``von niedrig``wird so auf ``zu niedrig``umgeändert, ein Wert ``von hoch`` zu ``zu hoch`` etc.", - "pins.map|param|fromHigh": "die obere Grenze des aktuellen Wertebereichs, z.B.: 1023", - "pins.map|param|fromLow": "die untere Grenze des aktuellen Wertebereichs", - "pins.map|param|toHigh": "die Obergrenze des Wertezielbereichs, z.B.: 4", - "pins.map|param|toLow": "die Untergrenze des Wertezielbereichs", - "pins.map|param|value": "Wert in Bereichen zuordnen", - "pins.onPulsed": "Stellt diesen Pin als einen Digitaleingang ein und generiert Ereignisse, deren Zeitstempel die Dauer darstellt, in der der Pin entweder ``hoch``oder ``niedrig``war.", - "pins.pulseDuration": "Ruft die Dauer des letzten Impulses in Mikrosendungen ab. Diese Funktion soll von einem `onPulsed`-Handler aufgerufen werden.", - "pins.pulseIn": "Gibt die Dauer eines Pulses in Mikrosekunden an", - "pins.pulseIn|param|name": "der Pin, der den Puls misst", - "pins.pulseIn|param|value": "der Wert des Pulses (Standard hoch)", - "pins.servoSetPulse": "Konfiguriert diesen IO-Pin als einen analogen/PWM-Ausgang, stellt den Zeitraum auf 20 ms ein und setzt die Pulsweite fest, basieren auf dem angegeben Wert **Mikrosekunden** oder `1/1000`Millisekunden.", - "pins.servoSetPulse|param|micros": "Impulsdauer in Mikrosekunden, z.B.: 1500", - "pins.servoSetPulse|param|name": "PIN-Name", - "pins.servoWritePin": "Schreibt einen Wert in den Servo, der die Welle entsprechend kontroliert. Auf einem Standard-Servo wird so der Winkel der Welle (in Grad) eingestellt, sodass sich die Welle entsprechend anpasst. Auf einem kontinuierlich drehenden Servo wird dadurch die Geschwindigkeit des Servos festgelegt, wobei ``0``die volle Geschwindigkeit in eine Richtung darstellt, ``180``die volle Geschwindigkeit in die andere, und ein Wert von ``90`` einen Stillstand erzeugt.", - "pins.servoWritePin|param|value": "Winkel oder Rotationsbeschleunigung, z.B.: 180,90,0", - "pins.setPull": "Stellt die Anziehungskraft des Pins ein.", - "pins.sizeOf": "Ruft die Bytegröße im spezifierten Nummernformat ab.", - "pins.spiWrite": "Schreibe in den SPI-Slave und gebe die Antwort aus", - "pins.spiWrite|param|value": "Daten, die an den SPI-Slave geschickt werden sollen", - "serial": "Lesen und Schreiben von Daten über eine serielle Verbindung.", - "serial.delimiters": "Gibt die mit dem Begrenzer korrespondierende Zeichenfolge aus.", - "serial.onLineReceived": "Registriert ein Event, das ausgeführt wird, wenn eine Zeile empfangen wurde", - "serial.readLine": "Liest eine Textzeile aus der seriellen Schnittstelle.", - "serial.readUntil": "Liest aus eine Textzeile aus dem seriellen Anschluss und gibt den Puffer aus, wenn die Begrenzung erreicht wurde.", - "serial.readUntil|param|delimiter": "Text-Begrenzung, die die Textblöcke voneinander trennt", - "serial.redirect": "Konfiguriert dynamisch die serielle Instanz, damit sie andere Pins als USBTX und USBRX benutzt.", - "serial.writeLine": "Gibt eine Zeile des Textes an die serielle", - "serial.writeNumber": "Gibt einen numerischen Wert an die serielle", - "serial.writeString": "Sendet ein Stück Text über serielle Verbindung.", - "serial.writeValue": "Schreibt ein ``Namen: Wert`` Wertepaar auf die serielle Schnittstelle.", - "serial.writeValue|param|name": "Name des Wertestreams, z.B.: x", - "serial.writeValue|param|value": "Schreiben" -} \ No newline at end of file + "input.magneticForce|param|dimension": "the x, y, or z dimension, eg: Dimension.X", + "input.onButtonEvent": "Do something when a button (A, B or both A+B) receives an event.", + "input.onButtonEvent|param|body": "code to run when event is raised", + "input.onButtonEvent|param|button": "the button", + "input.onButtonEvent|param|eventType": "event Type", + "input.onButtonPressed": "Tue etwas, wenn eine Taste (``A``, ``B`` oder ``A + B``) gedrückt wird", + "input.onButtonPressed|param|body": "code to run when event is raised", + "input.onButtonPressed|param|button": "the button that needs to be pressed", + "input.onGesture": "Mache etwas, wenn eine Geste gemacht wird (wie den mini zu schütteln).", + "input.onGesture|param|body": "code to run when gesture is raised", + "input.onGesture|param|gesture": "the type of gesture to track, eg: Gesture.Shake", + "input.onPinPressed": "Mache etwas, wenn eine Pin gehalten wird.", + "input.onPinPressed|param|body": "Code, der ausführt wird, wenn ein Pin gehalten wird", + "input.onPinPressed|param|name": "the pin that needs to be pressed, eg: TouchPin.P0", + "input.onPinReleased": "Mache etwas, wenn der Pin losgelassen wird.", + "input.onPinReleased|param|body": "Code, der ausgeführt werden soll, wenn der Pin losgelassen wird", + "input.onPinReleased|param|name": "the pin that needs to be released, eg: TouchPin.P0", + "input.onPinTouchEvent": "Do something when a pin receives an touch event (while also touching the GND pin).", + "input.onPinTouchEvent|param|body": "the code to run when event is fired on pin", + "input.onPinTouchEvent|param|name": "the pin, eg: TouchPin.P0", + "input.pinIsPressed": "Ruft den Pin-Zustand (gehalten oder nicht) ab. Die Erdung muss gehalten werden, um den Stromkreis zu schließen.", + "input.pinIsPressed|param|name": "pin used to detect the touch, eg: TouchPin.P0", + "input.rotation": "Die Neigung und Drehung des mini Drehung auf ``X-Achse``oder ``Y-Achse``, in Grad.", + "input.rotation|param|kind": "pitch or roll", + "input.runningTime": "Ruft die Anzahl der Millisekunden auf, die seit dem Einschalten vergangen sind.", + "input.runningTimeMicros": "Gets the number of microseconds elapsed since power on.", + "input.setAccelerometerRange": "Legt die Stichprobenbereich des Beschleunigungssensors in Schwerkraft fest.", + "input.setAccelerometerRange|param|range": "Ein Wert, der die maximale Stärke der gemessenen Beschleunigung beschreibt", + "input.soundLevel": "gets the level of loudness from 0 (silent) to 255 (loud)", + "input.temperature": "Ruft die aktuelle Temperatur in Grad Celsius (°C) ab.", + "led": "Steuerung des LED-Bildschirms.", + "led.brightness": "Ruft die Helligkeit des Bildschirms ab, von 0 (aus) bis 255 (volle Helligkeit).", + "led.displayMode": "Gets the current display mode", + "led.enable": "Schaltet das Display an und aus", + "led.fadeIn": "Blendet die Bildschirmanzeige ein.", + "led.fadeIn|param|ms": "fade time in milleseconds", + "led.fadeOut": "Blendet die Bildschirmhelligkeit aus.", + "led.fadeOut|param|ms": "fade time in milliseconds", + "led.plot": "Schalte die angegebene LED mit Hilfe von X- und Y-Koordinaten ein (X ist horizontal, Y ist vertikal). (0,0) ist die obere linke Ecke.", + "led.plotAll": "Schaltet alle LEDs an", + "led.plotBarGraph": "Zeigt ein vertikales Balkendiagramm an, basierend auf dem `Wert`und dem `Hoch`-Wert. Wenn `Hoch`0 ist, wird das Diagramm automatisch angepasst.", + "led.plotBarGraph|param|high": "maximalen Wert. Wenn dieser 0 ist, wird der Maximalwert automatisch angepasst, z.B.: 0", + "led.plotBarGraph|param|value": "aktueller Wert zum Darstellen", + "led.plotBrightness": "Turn on the specified LED with specific brightness using x, y coordinates (x is horizontal, y is vertical). (0,0) is upper left.", + "led.plotBrightness|param|brightness": "the brightness from 0 (off) to 255 (bright), eg:255", + "led.plotBrightness|param|x": "the horizontal coordinate of the LED starting at 0", + "led.plotBrightness|param|y": "the vertical coordinate of the LED starting at 0", + "led.plot|param|x": "the horizontal coordinate of the LED starting at 0", + "led.plot|param|y": "the vertical coordinate of the LED starting at 0", + "led.point": "Ruft den An/Aus-Status einer vorgegebenen LED mittels X-/Y-Koordinaten ab. (0,0) ist oben links.", + "led.pointBrightness": "Get the brightness state of the specified LED using x, y coordinates. (0,0) is upper left.", + "led.pointBrightness|param|x": "the horizontal coordinate of the LED", + "led.pointBrightness|param|y": "the vertical coordinate of the LED", + "led.point|param|x": "the horizontal coordinate of the LED", + "led.point|param|y": "the vertical coordinate of the LED", + "led.screenshot": "Macht einen Screenshot vom LED-Bildschirm und gibt ein Bild aus.", + "led.setBrightness": "Lege die Helligkeit des Bildschirms fest, von 0 (aus) bis 255 (volle Helligkeit).", + "led.setBrightness|param|value": "Helligkeitswert, z.B.: 255, 127, 0", + "led.setDisplayMode": "Legt den Anzeigemodus von Wiedergabe-LEDs zwischen Schwarz und Weiß und Graustufen fest.", + "led.setDisplayMode|param|mode": "TODO", + "led.stopAnimation": "Bricht die aktuelle Animation ab und löscht andere ausstehende Animationen.", + "led.toggle": "Schaltet ein bestimmtes Pixel ein", + "led.toggleAll": "Invertiert die aktuelle LED-Anzeige", + "led.toggle|param|x": "pixel column", + "led.toggle|param|y": "pixel row", + "led.unplot": "Schalte die angegebene LED mit x-und y-Koordinaten ab (X ist horizontal, y ist vertikal). (0,0) ist oben links.", + "led.unplot|param|x": "the horizontal coordinate of the LED", + "led.unplot|param|y": "the vertical coordinate of the LED", + "light.sendWS2812Buffer": "Sends a color buffer to a light strip", + "light.sendWS2812BufferWithBrightness": "Sends a color buffer to a light strip", + "light.setMode": "Sets the light mode of a pin", + "loops.everyInterval": "Repeats the code forever in the background.\nAfter each iteration, allows other codes to run for a set duration\nso that it runs on a timer", + "loops.everyInterval|param|interval": "time (in ms) to wait between each iteration of the action.", + "motors": "Blöcke, die genutzt werden, um Onboard-Motoren zu steuern", + "motors.dualMotorPower": "Steuert zwei an das Board angeschlossene Motoren. Schaltet auf Dual-Motor-Modus um!", + "motors.motorCommand": "Schicke Anhalten, Ausrollen oder Anhalten-Befehle an den Motor. Hat im Dual-Motor-Modus keinen Effekt.", + "motors.motorPower": "Schaltet den Motor bei einer bestimmten Prozentzahl der Kraft an. Schaltet um auf den Single-Motor-Modus!", + "motors.motorPower|param|power": "%percent der Kraft, die an den Motor geschickt wird. Negative Werte laufen rückwärts, z.B. 50", + "msgpack.packNumberArray": "Pack a number array into a buffer.", + "msgpack.packNumberArray|param|nums": "the numbers to be packed", + "msgpack.unpackNumberArray": "Unpacks a buffer into a number array.", + "music": "Generierung von Musik", + "music.beat": "Gibt die Dauer eines Taktes in Milli-Sekunden aus", + "music.beginMelody": "Use startMelody instead", + "music.builtInMelody": "Gets the melody array of a built-in melody.", + "music.changeTempoBy": "Ändere die Geschwindigkeit um den angegebenen Betrag", + "music.changeTempoBy|param|bpm": "Die Änderung in Schlägen pro Minute auf das Tempo, z.B.: 20", + "music.melodyEditor": "Create a melody with the melody editor.", + "music.noteFrequency": "Ruft die Frequenz einer Note ab.", + "music.noteFrequency|param|name": "the note name", + "music.onEvent": "Registers code to run on various melody events", + "music.playMelody": "Play a melody from the melody editor.", + "music.playMelody|param|melody": "- string of up to eight notes [C D E F G A B C5] or rests [-] separated by spaces, which will be played one at a time, ex: \"E D G F B A C5 B \"", + "music.playMelody|param|tempo": "- number in beats per minute (bpm), dictating how long each note will play for", + "music.playTone": "Spielt einen Ton für den angegebenen Zeitraum auf dem Lautsprecher ab.", + "music.playTone|param|frequency": "pitch of the tone to play in Hertz (Hz), eg: Note.C", + "music.playTone|param|ms": "Tondauer in Millisekunden (ms)", + "music.rest": "Ruht (spielt nichts) für eine bestimmte Zeit auf Pin ``P0``.", + "music.rest|param|ms": "Restdauer in Millisekunden (ms)", + "music.ringTone": "Spielt einen Ton durch den Lautsprecher ab.", + "music.ringTone|param|frequency": "Tonhöhe des abzuspielenden Tones in Hertz (Hz)", + "music.setPlayTone": "Sets a custom playTone function for playing melodies", + "music.setTempo": "Legt die Geschwindigkeit auf den angegebenen Wert fest.", + "music.setTempo|param|bpm": "Die neue Geschwindigkeit in Schlägen pro Minute, z.B.: 120", + "music.setVolume": "Set the default output volume of the sound synthesizer.", + "music.setVolume|param|volume": "the volume 0...255", + "music.speakerPlayTone": "Plays a tone through ``speaker`` for the given duration.", + "music.speakerPlayTone|param|frequency": "pitch of the tone to play in Hertz (Hz)", + "music.speakerPlayTone|param|ms": "tone duration in milliseconds (ms)", + "music.startMelody": "Starts playing a melody.\nNotes are expressed as a string of characters with this format: NOTE[octave][:duration]", + "music.startMelody|param|melodyArray": "the melody array to play", + "music.startMelody|param|options": "melody options, once / forever, in the foreground / background", + "music.stopAllSounds": "Stop all sounds and melodies currently playing.", + "music.stopMelody": "Stops the melodies", + "music.stopMelody|param|options": "which melody to stop", + "music.tempo": "Gibt die Geschwindigkeit in Schlägen pro Minute aus. Die Geschwindigkeit ist Schnelligkeit (Bpm = Beats pro Minute), in der Töne abgespielt werden. Je größer der Wert, desto schneller werden die Töne abgespielt.", + "music.volume": "Returns the current output volume of the sound synthesizer.", + "parseFloat": "Convert a string to a number.", + "parseInt": "Convert a string to an integer.\n\n\nIf this argument is not supplied, strings with a prefix of '0x' are considered hexadecimal.\nAll other strings are considered decimal.", + "parseInt|param|radix": "optional A value between 2 and 36 that specifies the base of the number in text.", + "parseInt|param|text": "A string to convert into an integral number. eg: \"123\"", + "pause": "Pause for the specified time in milliseconds", + "pauseUntil": "Busy wait for a condition to be true", + "pauseUntil|param|condition": "condition to test for", + "pauseUntil|param|timeOut": "if positive, maximum duration to wait for in milliseconds", + "pause|param|ms": "how long to pause for, eg: 100, 200, 500, 1000, 2000", + "pins": "Steuere die Stromstärke über die Pins für analoge/digitale Signale, Servos, I2C,...", + "pins.C10": "Pin C10", + "pins.C11": "Pin C11", + "pins.C12": "Pin C12", + "pins.C16": "Pin C16", + "pins.C17": "Pin C17", + "pins.C18": "Pin C18", + "pins.C4": "Pin C4", + "pins.C5": "Pin C5", + "pins.C6": "Pin C6", + "pins.C7": "Pin C7", + "pins.C8": "Pin C8", + "pins.C9": "Pin C9", + "pins.P0": "Pin P0", + "pins.P1": "Pin P1", + "pins.P2": "Pin P2", + "pins.P3": "Pin P3", + "pins.analogPitch": "Gibt ein Pulsweiten Modulation (PWM)-Signal über den aktuellen Pitch-Pin. Benutze `analog set pitch pin`, um den Pitch-Pin festzulegen.", + "pins.analogPitchVolume": "Gets the volume the pitch pin from 0..255", + "pins.analogPitch|param|frequency": "frequency to modulate in Hz.", + "pins.analogPitch|param|ms": "duration of the pitch in milli seconds.", + "pins.analogReadPin": "Lese den Anschlusswert als Analog aus, d. h. als einen Wert zwischen 0 und 1023.", + "pins.analogReadPin|param|name": "pin to write to, eg: AnalogPin.P1", + "pins.analogSetPeriod": "Stellt die Pulsweite Modulation (PWM) des Analogausganges auf den angegebenen Wert in ** Mikrosekunden ** oder `1/1000` Millisekunden ein.\nWenn dieser Pin nicht als einen Analogausgang (mit `analog write pin`) konfiguriert ist, hat der Vorgang keine Auswirkungen.", + "pins.analogSetPeriod|param|micros": "Zeit in Mikrosekunden. z.B.: 20000", + "pins.analogSetPeriod|param|name": "analog pin to set period to, eg: AnalogPin.P1", + "pins.analogSetPitchPin": "Set the pin used when using analog pitch or music.", + "pins.analogSetPitchPin|param|name": "pin to modulate pitch from", + "pins.analogSetPitchVolume": "Sets the volume on the pitch pin", + "pins.analogSetPitchVolume|param|volume": "the intensity of the sound from 0..255", + "pins.analogWritePin": "Legt den Wert des Verbinders auf analog fest. Der Wert muss zwischen 0 und 1023 liegen.", + "pins.analogWritePin|param|name": "pin name to write to, eg: AnalogPin.P1", + "pins.analogWritePin|param|value": "Wert, der auf den Pin geschrieben werden soll, zwischen ``0`` und ``1023`` z.B.: 1023,0", + "pins.createBuffer": "Erstellt einen Null-initialisierten Zwischenspeicher.", + "pins.createBuffer|param|size": "Anzahl der Bytes im Zwischenspeicher", + "pins.digitalReadPin": "Lese den angegebene Pin oder Verbinder als 0 oder 1", + "pins.digitalReadPin|param|name": "pin to read from, eg: DigitalPin.P0", + "pins.digitalWritePin": "Setzt einen Pin- oder Verbinder-Wert auf 0 oder 1.", + "pins.digitalWritePin|param|name": "pin to write to, eg: DigitalPin.P0", + "pins.digitalWritePin|param|value": "Wert, der auf dem Pin 1 gesetzt werden soll, z.B. 0", + "pins.i2cReadBuffer": "Lese `Größe`bytes aus einer 7-bit I2C-Adresse.", + "pins.i2cReadNumber": "Lese eine Nummer aus einer 7-bit I2C-Adresse.", + "pins.i2cWriteBuffer": "Schreibt Bytes in eine 7-bit I2C-Adresse.", + "pins.i2cWriteNumber": "Schreibe eine Nummer in eine 7-bit I2C-Adresse.", + "pins.map": "Definiert eine Nummer von einer Auswahl zu einer anderen um. Ein Wert ``von niedrig``wird so auf ``zu niedrig``umgeändert, ein Wert ``von hoch`` zu ``zu hoch`` etc.", + "pins.map|param|fromHigh": "die obere Grenze des aktuellen Wertebereichs, z.B.: 1023", + "pins.map|param|fromLow": "die untere Grenze des aktuellen Wertebereichs", + "pins.map|param|toHigh": "die Obergrenze des Wertezielbereichs, z.B.: 4", + "pins.map|param|toLow": "die Untergrenze des Wertezielbereichs", + "pins.map|param|value": "Wert in Bereichen zuordnen", + "pins.onPulsed": "Stellt diesen Pin als einen Digitaleingang ein und generiert Ereignisse, deren Zeitstempel die Dauer darstellt, in der der Pin entweder ``hoch``oder ``niedrig``war.", + "pins.onPulsed|param|name": "digital pin to register to, eg: DigitalPin.P0", + "pins.onPulsed|param|pulse": "the value of the pulse, eg: PulseValue.High", + "pins.pulseDuration": "Ruft die Dauer des letzten Impulses in Mikrosendungen ab. Diese Funktion soll von einem `onPulsed`-Handler aufgerufen werden.", + "pins.pulseIn": "Gibt die Dauer eines Pulses in Mikrosekunden an", + "pins.pulseIn|param|name": "der Pin, der den Puls misst", + "pins.pulseIn|param|value": "der Wert des Pulses (Standard hoch)", + "pins.pushButton": "Mounts a push button on the given pin", + "pins.servoSetContinuous": "Specifies that a continuous servo is connected.", + "pins.servoSetPulse": "Konfiguriert diesen IO-Pin als einen analogen/PWM-Ausgang, stellt den Zeitraum auf 20 ms ein und setzt die Pulsweite fest, basieren auf dem angegeben Wert **Mikrosekunden** oder `1/1000`Millisekunden.", + "pins.servoSetPulse|param|micros": "Impulsdauer in Mikrosekunden, z.B.: 1500", + "pins.servoSetPulse|param|name": "PIN-Name", + "pins.servoWritePin": "Schreibt einen Wert in den Servo, der die Welle entsprechend kontroliert. Auf einem Standard-Servo wird so der Winkel der Welle (in Grad) eingestellt, sodass sich die Welle entsprechend anpasst. Auf einem kontinuierlich drehenden Servo wird dadurch die Geschwindigkeit des Servos festgelegt, wobei ``0``die volle Geschwindigkeit in eine Richtung darstellt, ``180``die volle Geschwindigkeit in die andere, und ein Wert von ``90`` einen Stillstand erzeugt.", + "pins.servoWritePin|param|name": "pin to write to, eg: AnalogPin.P1", + "pins.servoWritePin|param|value": "Winkel oder Rotationsbeschleunigung, z.B.: 180,90,0", + "pins.setAudioPin": "Set the pin used when producing sounds and melodies. Default is P0.", + "pins.setAudioPin|param|name": "pin to modulate pitch from", + "pins.setEvents": "Configure the events emitted by this pin. Events can be subscribed to\nusing ``control.onEvent()``.", + "pins.setEvents|param|name": "pin to set the event mode on, eg: DigitalPin.P0", + "pins.setEvents|param|type": "the type of events for this pin to emit, eg: PinEventType.Edge", + "pins.setMatrixWidth": "Set the matrix width for Neopixel strip (already assigned to a pin).\nShould be used in conjunction with `set matrix width` from Neopixel package.", + "pins.setPull": "Stellt die Anziehungskraft des Pins ein.", + "pins.setPull|param|name": "pin to set the pull mode on, eg: DigitalPin.P0", + "pins.setPull|param|pull": "one of the mbed pull configurations, eg: PinPullMode.PullUp", + "pins.spiFormat": "Set the SPI bits and mode", + "pins.spiFormat|param|bits": "the number of bits, eg: 8", + "pins.spiFormat|param|mode": "the mode, eg: 3", + "pins.spiFrequency": "Set the SPI frequency", + "pins.spiFrequency|param|frequency": "the clock frequency, eg: 1000000", + "pins.spiPins": "Set the MOSI, MISO, SCK pins used by the SPI connection", + "pins.spiTransfer": "Write to and read from the SPI slave at the same time", + "pins.spiTransfer|param|command": "Data to be sent to the SPI slave (can be null)", + "pins.spiTransfer|param|response": "Data received from the SPI slave (can be null)", + "pins.spiWrite": "Schreibe in den SPI-Slave und gebe die Antwort aus", + "pins.spiWrite|param|value": "Daten, die an den SPI-Slave geschickt werden sollen", + "randint": "Returns a pseudorandom number between min and max included.\nIf both numbers are integral, the result is integral.", + "randint|param|max": "the upper inclusive bound, eg: 10", + "randint|param|min": "the lower inclusive bound, eg: 0", + "serial": "Lesen und Schreiben von Daten über eine serielle Verbindung.", + "serial.NEW_LINE": "The string used to mark a new line, default is \\r\\n", + "serial.delimiters": "Gibt die mit dem Begrenzer korrespondierende Zeichenfolge aus.", + "serial.onDataReceived": "Register an event to be fired when one of the delimiter is matched.", + "serial.onDataReceived|param|delimiters": "the characters to match received characters against.", + "serial.readBuffer": "Read multiple characters from the receive buffer. \nIf length is positive, pauses until enough characters are present.", + "serial.readBuffer|param|length": "default buffer length", + "serial.readLine": "Liest eine Textzeile aus der seriellen Schnittstelle.", + "serial.readString": "Read the buffered received data as a string", + "serial.readUntil": "Liest aus eine Textzeile aus dem seriellen Anschluss und gibt den Puffer aus, wenn die Begrenzung erreicht wurde.", + "serial.readUntil|param|delimiter": "Text-Begrenzung, die die Textblöcke voneinander trennt", + "serial.redirect": "Konfiguriert dynamisch die serielle Instanz, damit sie andere Pins als USBTX und USBRX benutzt.", + "serial.redirectToUSB": "Direct the serial input and output to use the USB connection.", + "serial.redirect|param|rate": "the new baud rate. eg: 115200", + "serial.redirect|param|rx": "the new reception pin, eg: SerialPin.P1", + "serial.redirect|param|tx": "the new transmission pin, eg: SerialPin.P0", + "serial.setBaudRate": "Set the baud rate of the serial port", + "serial.setRxBufferSize": "Sets the size of the RX buffer in bytes", + "serial.setRxBufferSize|param|size": "length of the rx buffer in bytes, eg: 32", + "serial.setTxBufferSize": "Sets the size of the TX buffer in bytes", + "serial.setTxBufferSize|param|size": "length of the tx buffer in bytes, eg: 32", + "serial.setWriteLinePadding": "Sets the padding length for lines sent with \"write line\".", + "serial.setWriteLinePadding|param|length": "the number of bytes alignment, eg: 0", + "serial.writeBuffer": "Send a buffer through serial connection", + "serial.writeLine": "Gibt eine Zeile des Textes an die serielle", + "serial.writeNumber": "Gibt einen numerischen Wert an die serielle", + "serial.writeNumbers": "Print an array of numeric values as CSV to the serial port", + "serial.writeString": "Sendet ein Stück Text über serielle Verbindung.", + "serial.writeValue": "Schreibt ein ``Namen: Wert`` Wertepaar auf die serielle Schnittstelle.", + "serial.writeValue|param|name": "Name des Wertestreams, z.B.: x", + "serial.writeValue|param|value": "Schreiben", + "storage": "Provides access to persistent storage functionality.\n\nProvides access to persistent storage functionality.", + "storage.getNumber": "Reads a key value pair from the non volatile storage as a number", + "storage.getNumber|param|key": "the key for accesing the value", + "storage.getValueInt": "Reads a key value pair from the non volatile storage", + "storage.getValueInt|param|key": "the key for accesing the value", + "storage.putNumber": "Saves a key value pair in the non volatile storage", + "storage.putNumber|param|key": "the key for accesing the value", + "storage.putNumber|param|value": "value to store", + "storage.putValueInt": "Saves a key value pair in the non volatile storage", + "storage.putValueInt|param|key": "the key for accesing the value", + "storage.putValueInt|param|value": "value to store", + "storage.remove": "Removes a key value pair from the non volatile storage", + "storage.removeNumber": "Deletes the key from the non volatile storage", + "storage.removeNumber|param|key": "the key for accesing the value", + "storage.remove|param|key": "the key for accesing the value" +} diff --git a/libs/core/_locales/de/core-strings.json b/libs/core/_locales/de/core-strings.json index 5fdd3d9b..4072077b 100644 --- a/libs/core/_locales/de/core-strings.json +++ b/libs/core/_locales/de/core-strings.json @@ -1,202 +1,520 @@ { - "AcceleratorRange.EightG": "Der Bewegungssensor misst Kräfte bis 8g", - "AcceleratorRange.EightG|block": "8g", - "AcceleratorRange.FourG": "Der Bewegungssensor misst Kräfte bis 4g", - "AcceleratorRange.FourG|block": "4g", - "AcceleratorRange.OneG": "Der Bewegungssensor misst Kräfte bis 1g", - "AcceleratorRange.OneG|block": "1g", - "AcceleratorRange.TwoG": "Der Bewegungssensor misst Kräfte bis 2g", - "AcceleratorRange.TwoG|block": "2g", - "BaudRate.BaudRate115200|block": "115200", - "BaudRate.BaudRate9600|block": "9600", - "BeatFraction.Eighth|block": "1/8", - "BeatFraction.Half|block": "1/2", - "BeatFraction.Quarter|block": "1/4", - "BeatFraction.Sixteenth|block": "1/16", - "BeatFraction.Whole|block": "1", - "Button.AB|block": "A+B", - "Colors.Blue|block": "Blau", - "Colors.Green|block": "Grün", - "Colors.Indigo|block": "Indigo", - "Colors.Orange|block": "Orange", - "Colors.Purple|block": "Violett", - "Colors.Red|block": "Rot", - "Colors.Violet|block": "Veilchenblau", - "Colors.White|block": "Weiß", - "Colors.Yellow|block": "Gelb", - "Delimiters.Dollar|block": "$", - "Delimiters.Hash|block": "#", - "Delimiters.NewLine|block": "Neue Zeile", - "Dimension.Strength|block": "Stärke", - "Dimension.X|block": "x", - "Dimension.Y|block": "y", - "Dimension.Z|block": "z", - "Direction.Left|block": "links", - "Direction.Right|block": "rechts", - "DisplayMode.BackAndWhite|block": "Schwarz-Weiß", - "DisplayMode.Greyscale|block": "Graustufen", - "EventCreationMode.CreateAndFire": "Calliope mini-Event wurde initialisiert, seine Event-Handler werden unverzüglich ausgeführt (nicht geeignet für die Nutzung bei Unterbrechungen!).", - "EventCreationMode.CreateOnly": "Calliope mini-Event wurde initialisiert, es wird keine weitere Verarbeitung vorgenommen.", - "Gesture.FreeFall": "Wird ausgeführt, wenn das Board fällt!", - "Gesture.FreeFall|block": "freier Fall", - "Gesture.LogoDown": "Wird ausgeführt, wenn das Logo nach unten zeigt und das Display vertikal ist.", - "Gesture.LogoDown|block": "Logo nach unten", - "Gesture.LogoUp": "Wird ausgeführt, wenn das Logo nach oben zeigt und das Display vertikal ist.", - "Gesture.LogoUp|block": "Logo oben", - "Gesture.ScreenDown": "Wird ausgeführt, wenn das Display nach oben zeigt und das Board horizontal ist.", - "Gesture.ScreenDown|block": "Display nach unten", - "Gesture.ScreenUp": "Wird ausgeführt, wenn das Display nach unten zeigt und das Board horizontal ist.", - "Gesture.ScreenUp|block": "Display nach oben", - "Gesture.Shake": "Wird erhöht, wenn geschüttelt", - "Gesture.Shake|block": "geschüttelt", - "Gesture.SixG": "Wird ausgeführt, ein 6g starker Stoß erkannt wird", - "Gesture.SixG|block": "6g", - "Gesture.ThreeG": "Wird ausgeführt, ein 3g starker Stoß erkannt wird", - "Gesture.ThreeG|block": "3g", - "Gesture.TiltLeft": "Wird ausgeführt, wenn das Display nach links zeigt", - "Gesture.TiltLeft|block": "nach links neigen", - "Gesture.TiltRight": "Wird ausgeführt, wenn das Display nach rechts zeigt", - "Gesture.TiltRight|block": "nach rechts neigen", - "LedSpriteProperty.Blink|block": "blinken", - "LedSpriteProperty.Brightness|block": "Helligkeit", - "LedSpriteProperty.Direction|block": "Richtung", - "LedSpriteProperty.X|block": "x", - "LedSpriteProperty.Y|block": "y", - "Math.randomBoolean|block": "wähle zufälligen Wahr- oder Falsch-Wert", - "Math|block": "Mathematik", - "Motor.AB|block": "A und B", - "MotorCommand.Break|block": "Pause", - "MotorCommand.Coast|block": "auslaufen", - "MotorCommand.Sleep|block": "schlafen", - "Note.CSharp3|block": "C#3", - "Note.CSharp4|block": "C#4", - "Note.CSharp5|block": "C#5", - "Note.CSharp|block": "C#", - "Note.FSharp3|block": "F#3", - "Note.FSharp4|block": "F#4", - "Note.FSharp5|block": "F#5", - "Note.FSharp|block": "F#", - "Note.GSharp3|block": "G#3", - "Note.GSharp4|block": "G#4", - "Note.GSharp5|block": "G#5", - "Note.GSharp|block": "G#", - "PinPullMode.PullDown|block": "nach unten", - "PinPullMode.PullUp|block": "nach oben", - "Rotation.Pitch|block": "Winkel", - "Rotation.Roll|block": "rollen", - "String.charAt|block": "Zeichen an Position %pos aus|%this", - "String.compare|block": "vergleiche %this| mit %that", - "String.concat|block": "hänge %this| mit %other aneinander", - "String.fromCharCode|block": "Text aus ASCII-Code %code", - "String.isEmpty|block": "%this| ist leer", - "String.length|block": "Länge von %VALUE", - "String.substr|block": "extrahiere aus %this|beginnend mit %start|%length Zeichen", - "String|block": "Zeichenfolge", - "basic.clearScreen|block": "Bildschirminhalt löschen", - "basic.color|block": "%c", - "basic.forever|block": "dauerhaft", - "basic.pause|block": "pausiere (ms) %pause", - "basic.rgbw|block": "Rot %red|Grün %green|Blau %blue|Weiß %white", - "basic.rgb|block": "Rot %red|Grün %green|Blau %blue", - "basic.setLedColor|block": "setze LED-Farbe auf %color=color_id", - "basic.showLeds|block": "zeige LEDs", - "basic.showNumber|block": "zeige|Nummer %number", - "basic.showString|block": "zeige|Zeichenfolge %text", - "basic|block": "Grundlagen", - "control.deviceName|block": "Gerätename", - "control.deviceSerialNumber|block": "Seriennnummer", - "control.eventSourceId|block": "%id", - "control.eventTimestamp|block": "Ereigniszeitstempel", - "control.eventValueId|block": "%id", - "control.eventValue|block": "Ereigniswert", - "control.inBackground|block": "im Hintergrund ausführen", - "control.onEvent|block": "wenn Ereignis|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", - "control.raiseEvent|block": "Ereignis auslösen|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", - "control.reset|block": "zurücksetzen", - "control.waitMicros|block": "Warte (µs)%micros", - "control|block": "Steuerung", - "game.addScore|block": "Ändere Spielstand um|%points", - "game.createSprite|block": "erzeuge Sprite an Position|x: %x|y:%y", - "game.gameOver|block": "Spiel beendet", - "game.score|block": "Spielstand", - "game.startCountdown|block": "Countdown| starten (ms) %duration", - "game|block": "Spiel", - "images.createBigImage|block": "erstelle großes Bild", - "images.createImage|block": "erstelle Bild", - "images|block": "Bilder", - "input.acceleration|block": "Beschleunigung (mg) |%NAME", - "input.buttonIsPressed|block": "Button|%NAME|ist gedrückt", - "input.compassHeading|block": "Kompassausrichtung (°)", - "input.lightLevel|block": "Lichtstärke", - "input.magneticForce|block": "Magnetkraft (µT) |%NAME", - "input.onButtonPressed|block": "wenn Knopf|%NAME|gedrückt", - "input.onGesture|block": "wenn |%NAME", - "input.onPinPressed|block": "wenn Pin %NAME|gedrückt", - "input.onPinReleased|block": "wenn Pin %NAME|losgelassen", - "input.pinIsPressed|block": "Pin %NAME|ist gedrückt", - "input.rotation|block": "Rotation (°)|%NAME", - "input.runningTime|block": "Laufzeit (ms)", - "input.setAccelerometerRange|block": "setze Bewegungsmesser auf|%range", - "input.temperature|block": "Temperatur (°C)", - "input|block": "Eingabe", - "led.brightness|block": "Helligkeit", - "led.plotBarGraph|block": "zeichne Balkendiagramm von %value|bis %high", - "led.plot|block": "Zeichne|x %x|y %y", - "led.point|block": "Punkt|x %x|y %y", - "led.setBrightness|block": "setze Helligkeit auf %value", - "led.stopAnimation|block": "halte Animation an", - "led.toggle|block": "Schalte zwischen|x %x|y %y", - "led.unplot|block": "schalte Pixel|x %x|y %y aus", - "led|block": "LED", - "motors.dualMotorPower|block": "Motor %motor an|mit %percent", + "AcceleratorRange.EightG": "Der Bewegungssensor misst Kräfte bis 8g", + "AcceleratorRange.EightG|block": "8g", + "AcceleratorRange.FourG": "Der Bewegungssensor misst Kräfte bis 4g", + "AcceleratorRange.FourG|block": "4g", + "AcceleratorRange.OneG": "Der Bewegungssensor misst Kräfte bis 1g", + "AcceleratorRange.OneG|block": "1g", + "AcceleratorRange.TwoG": "Der Bewegungssensor misst Kräfte bis 2g", + "AcceleratorRange.TwoG|block": "2g", + "Array._pickRandom|block": "erhalte zufälligen Wert von %list", + "Array._popStatement|block": "entferne letzten Wert von %list", + "Array._removeAtStatement|block": "%list| entferne Werte bei %index", + "Array._shiftStatement|block": "entferne letzten Werten von %list", + "Array._unshiftStatement|block": "%list| füge %value| am Anfang hinzu", + "Array.indexOf|block": "%list| finde Position von %value", + "Array.insertAt|block": "%list| füge ein bei %index| Wert %value", + "Array.length|block": "Array-Länge %VALUE", + "Array.pop|block": "rufe den letzten Wert ab und lösche ihn von %list", + "Array.push|block": "%list| füge Wert %value| am Ende hinzu", + "Array.removeAt|block": "%list| entferne Wert bei %index", + "Array.reverse|block": "kehre %list um", + "Array.shift|block": "rufe den ersten Wert ab und lösche ihn von %list", + "Array.unshift|block": "%list| füge %value| am Anfang hinzu", + "Array|block": "Array", + "ArrowNames.East|block": "Osten", + "ArrowNames.NorthEast|block": "Nordost", + "ArrowNames.NorthWest|block": "Nordwest", + "ArrowNames.North|block": "Norden", + "ArrowNames.SouthEast|block": "Südosten", + "ArrowNames.SouthWest|block": "Südwesten", + "ArrowNames.South|block": "Süden", + "ArrowNames.West|block": "Westen", + "BaudRate.BaudRate115200|block": "115200", + "BaudRate.BaudRate1200|block": "1200", + "BaudRate.BaudRate14400|block": "14400", + "BaudRate.BaudRate19200|block": "19200", + "BaudRate.BaudRate2400|block": "2400", + "BaudRate.BaudRate28800|block": "28800", + "BaudRate.BaudRate31250|block": "31250", + "BaudRate.BaudRate38400|block": "38400", + "BaudRate.BaudRate4800|block": "4800", + "BaudRate.BaudRate57600|block": "57600", + "BaudRate.BaudRate9600|block": "9600", + "BeatFraction.Breve|block": "4", + "BeatFraction.Double|block": "2", + "BeatFraction.Eighth|block": "1/8", + "BeatFraction.Half|block": "1/2", + "BeatFraction.Quarter|block": "1/4", + "BeatFraction.Sixteenth|block": "1/16", + "BeatFraction.Whole|block": "1", + "Buffer|block": "Buffer", + "Button.AB|block": "A+B", + "ButtonEvent.Click|block": "geklickt", + "ButtonEvent.Down|block": "gedrückt", + "ButtonEvent.Hold|block": "gehalten", + "ButtonEvent.LongClick|block": "lange geklickt", + "ButtonEvent.Up|block": "losgelassen", + "Colors.Blue|block": "Blau", + "Colors.Green|block": "Grün", + "Colors.Indigo|block": "Indigo", + "Colors.Off|block": "aus", + "Colors.Orange|block": "Orange", + "Colors.Purple|block": "Violett", + "Colors.Red|block": "Rot", + "Colors.Violet|block": "Veilchenblau", + "Colors.White|block": "Weiß", + "Colors.Yellow|block": "Gelb", + "Delimiters.CarriageReturn|block": "Zeilenumschaltung (\r)", + "Delimiters.Colon|block": ":", + "Delimiters.Comma|block": ",", + "Delimiters.Dollar|block": "$", + "Delimiters.Fullstop|block": ".", + "Delimiters.Hash|block": "#", + "Delimiters.NewLine|block": "Neue Zeile (\n)", + "Delimiters.Pipe|block": "|", + "Delimiters.SemiColon|block": ";", + "Delimiters.Space|block": "Leertaste", + "Delimiters.Tab|block": "Tabulator (\t)", + "Dimension.Strength|block": "Stärke", + "Dimension.X|block": "x", + "Dimension.Y|block": "y", + "Dimension.Z|block": "z", + "Direction.Left|block": "links", + "Direction.Right|block": "rechts", + "DisplayMode.BackAndWhite|block": "Schwarz-Weiß", + "DisplayMode.Greyscale|block": "Graustufen", + "EventCreationMode.CreateAndFire": "Calliope mini Event wurde initialisiert, die Event-Handler werden unverzüglich ausgeführt (nicht geeignet für die Nutzung bei Unterbrechungen!).", + "EventCreationMode.CreateOnly": "Calliope mini Event wurde initialisiert, es wird keine weitere Verarbeitung vorgenommen.", + "Gesture.EightG": "Wird ausgelöst, wenn eine 8G-Bewegung erkannt wird", + "Gesture.EightG|block": "8g", + "Gesture.FreeFall": "Wird ausgeführt, wenn der Calliope mini fällt!", + "Gesture.FreeFall|block": "freier Fall", + "Gesture.LogoDown": "Wird ausgeführt, wenn das Logo nach unten zeigt und das Display vertikal ist.", + "Gesture.LogoDown|block": "Logo nach unten", + "Gesture.LogoUp": "Wird ausgeführt, wenn das Logo nach oben zeigt und das Display vertikal ist.", + "Gesture.LogoUp|block": "Logo oben", + "Gesture.ScreenDown": "Wird ausgeführt, wenn das LED-Matrix nach oben zeigt und das Board horizontal ist.", + "Gesture.ScreenDown|block": "LED-Matrix nach unten", + "Gesture.ScreenUp": "Wird ausgeführt, wenn das LED-Matrix nach unten zeigt und das Board horizontal ist.", + "Gesture.ScreenUp|block": "LED-Matrix nach oben", + "Gesture.Shake": "Wird erhöht, wenn geschüttelt", + "Gesture.Shake|block": "geschüttelt", + "Gesture.SixG": "Wird ausgeführt, ein 6g starker Stoß erkannt wird", + "Gesture.SixG|block": "6g", + "Gesture.ThreeG": "Wird ausgeführt, ein 3g starker Stoß erkannt wird", + "Gesture.ThreeG|block": "3g", + "Gesture.TiltLeft": "Wird ausgeführt, wenn das LED-Matrix nach links zeigt", + "Gesture.TiltLeft|block": "nach links neigen", + "Gesture.TiltRight": "Wird ausgeführt, wenn das LED-Matrix nach rechts zeigt", + "Gesture.TiltRight|block": "nach rechts neigen", + "IconNames.Angry|block": "böse", + "IconNames.ArrowEast|block": "Pfeil Osten", + "IconNames.ArrowNorthEast|block": "Pfeil Nordost", + "IconNames.ArrowNorthWest|block": "Pfeil Nordwest", + "IconNames.ArrowNorth|block": "Pfeil Norden", + "IconNames.ArrowSouthEast|block": "Pfeil Südost", + "IconNames.ArrowSouthWest|block": "Pfeil Südwest", + "IconNames.ArrowSouth|block": "Pfeil Süden", + "IconNames.ArrowWest|block": "Pfeil Westen", + "IconNames.Asleep|block": "Schlafen", + "IconNames.Butterfly|block": "Schmetterling", + "IconNames.Chessboard|block": "Schachbrett", + "IconNames.Confused|block": "durcheinander", + "IconNames.Cow|block": "Kuh", + "IconNames.Diamond|block": "Diament", + "IconNames.Duck|block": "Ente", + "IconNames.EigthNote|block": "Achtelnote", + "IconNames.Fabulous|block": "großartig", + "IconNames.Ghost|block": "Geist", + "IconNames.Giraffe|block": "Giraffe", + "IconNames.Happy|block": "glücklich", + "IconNames.Heart|block": "Herz", + "IconNames.House|block": "Haus", + "IconNames.LeftTriangle|block": "Dreieck links", + "IconNames.Meh|block": "meh", + "IconNames.No|block": "nein", + "IconNames.Pitchfork|block": "Heugabel", + "IconNames.QuarterNote|block": "Viertelnote", + "IconNames.Rabbit|block": "Hase", + "IconNames.Rollerskate|block": "Rollschuh", + "IconNames.Sad|block": "traurig", + "IconNames.Scissors|block": "Schere", + "IconNames.Silly|block": "albern", + "IconNames.Skull|block": "Schädel", + "IconNames.SmallDiamond|block": "kleiner Diamand", + "IconNames.SmallHeart|block": "kleines Herz", + "IconNames.SmallSquare|block": "kleiens Quadrat", + "IconNames.Snake|block": "Schlange", + "IconNames.Square|block": "Quadrat", + "IconNames.StickFigure|block": "Strichmännchen", + "IconNames.Surprised|block": "überrascht", + "IconNames.Sword|block": "Schwert", + "IconNames.TShirt|block": "T-Shirt", + "IconNames.Target|block": "Ziel", + "IconNames.Tortoise|block": "Schildkröte", + "IconNames.Triangle|block": "triangle", + "IconNames.Umbrella|block": "Dreieck", + "IconNames.Yes|block": "Ja", + "Image.scrollImage|block": "scrolle Bild %sprite(myImage)|mit Versatz %frameoffset|und Intervall (ms) %delay", + "Image.showImage|block": "zeige Bild %sprite(myImage)|mit Versatz %offset ||und Intervall (ms) %interval", + "JSON|block": "JSON", + "LedSpriteProperty.Blink|block": "blinken", + "LedSpriteProperty.Brightness|block": "Helligkeit", + "LedSpriteProperty.Direction|block": "Richtung", + "LedSpriteProperty.X|block": "x", + "LedSpriteProperty.Y|block": "y", + "Math.constrain|block": "begrenze %value|zwischen %low|und %high", + "Math.map|block": "verteile %value|von niedrig %fromLow|high %fromHigh|zu hoch %toLow|high %toHigh", + "Math.randomBoolean|block": "wähle zufälligen Wahr- oder Falsch-Wert", + "Math.randomRange|block": "wähle eine zufällige Zahl zwischen %min|und %limit", + "Math|block": "Mathematik", + "Melodies.BaDing|block": "ba ding", + "Melodies.Baddy|block": "baddy", + "Melodies.Birthday|block": "Geburtstag", + "Melodies.Blues|block": "Blues", + "Melodies.Chase|block": "chase", + "Melodies.Dadadadum|block": "dadadum", + "Melodies.Entertainer|block": "Unterhalter", + "Melodies.Funeral|block": "Beerdigung", + "Melodies.Funk|block": "funk", + "Melodies.JumpDown|block": "jump down", + "Melodies.JumpUp|block": "jump up", + "Melodies.Nyan|block": "nyan", + "Melodies.Ode|block": "ode", + "Melodies.PowerDown|block": "power down", + "Melodies.PowerUp|block": "power up", + "Melodies.Prelude|block": "prelude", + "Melodies.Punchline|block": "punchline", + "Melodies.Ringtone|block": "Klingelton", + "Melodies.Wawawawaa|block": "wawawawaa", + "Melodies.Wedding|block": "Hochzeit", + "MelodyOptions.ForeverInBackground|block": "dauerhaft im Hintergrund", + "MelodyOptions.Forever|block": "dauerhaft", + "MelodyOptions.OnceInBackground|block": "einmal im Hintergrund", + "MelodyOptions.Once|block": "einmal", + "MelodyStopOptions.All|block": "alle", + "MelodyStopOptions.Background|block": "Hintergrund", + "MelodyStopOptions.Foreground|block": "Vordergrund", + "MesDpadButtonInfo.ADown|block": "A runter", + "MesDpadButtonInfo.AUp|block": "A hoch", + "MesDpadButtonInfo.BDown|block": "B runter", + "MesDpadButtonInfo.BUp|block": "B hoch", + "MesDpadButtonInfo.CDown|block": "C runter", + "MesDpadButtonInfo.CUp|block": "C hoch", + "MesDpadButtonInfo.DDown|block": "D runter", + "MesDpadButtonInfo.DUp|block": "D hoch", + "MesDpadButtonInfo._1Down|block": "1 runter", + "MesDpadButtonInfo._1Up|block": "1 hoch", + "MesDpadButtonInfo._2Down|block": "2 runter", + "MesDpadButtonInfo._2Up|block": "2 hoch", + "MesDpadButtonInfo._3Down|block": "3 runter", + "MesDpadButtonInfo._3Up|block": "3 hoch", + "MesDpadButtonInfo._4Down|block": "4 runter", + "MesDpadButtonInfo._4Up|block": "4 hoch", + "Motor.AB|block": "A und B", + "MotorCommand.Break|block": "Pause", + "MotorCommand.Coast|block": "auslaufen", + "MotorCommand.Sleep|block": "schlafen", + "MusicEvent.BackgroundMelodyEnded|block": "Hintergrundmelodie beendet", + "MusicEvent.BackgroundMelodyNotePlayed|block": "Hintergrundmelodie Note gespielt", + "MusicEvent.BackgroundMelodyPaused|block": "Hintergrundmelodie angehalten", + "MusicEvent.BackgroundMelodyRepeated|block": "Hintergrundmelodie wiederholt", + "MusicEvent.BackgroundMelodyResumed|block": "Hintergrundmelodie fortgesetzt", + "MusicEvent.BackgroundMelodyStarted|block": "Hintergrundmelodie gestartet", + "MusicEvent.MelodyEnded|block": "Melodie beendet", + "MusicEvent.MelodyNotePlayed|block": "Melodie Note gespielt", + "MusicEvent.MelodyRepeated|block": "Melodie wiederholt", + "MusicEvent.MelodyStarted|block": "Melodie gestartet", + "Note.CSharp3|block": "C#3", + "Note.CSharp4|block": "C#4", + "Note.CSharp5|block": "C#5", + "Note.CSharp|block": "C#", + "Note.FSharp3|block": "F#3", + "Note.FSharp4|block": "F#4", + "Note.FSharp5|block": "F#5", + "Note.FSharp|block": "F#", + "Note.GSharp3|block": "G#3", + "Note.GSharp4|block": "G#4", + "Note.GSharp5|block": "G#5", + "Note.GSharp|block": "G#", + "Number|block": "Nummer", + "Object|block": "Objekt", + "PinEvent.Fall|block": "Fall", + "PinEvent.PulseHigh|block": "Puls hoch", + "PinEvent.PulseLow|block": "Puls runter", + "PinEvent.Rise|block": "aufsteigend", + "PinEventType.Edge|block": "Kante", + "PinEventType.None|block": "keine", + "PinEventType.Pulse|block": "Puls", + "PinEventType.Touch|block": "berührung", + "PinPullMode.PullDown|block": "nach unten", + "PinPullMode.PullNone|block": "keine", + "PinPullMode.PullUp|block": "nach oben", + "PulseValue.High|block": "hoch", + "PulseValue.Low|block": "runter", + "Rotation.Pitch|block": "Winkel", + "Rotation.Roll|block": "rollen", + "StorageSlots.s1|block": "Slot 1", + "StorageSlots.s2|block": "Slot 2", + "StorageSlots.s3|block": "Slot 3", + "StorageSlots.s4|block": "Slot 4", + "StorageSlots.s5|block": "Slot 5", + "StorageSlots.s6|block": "Slot 6", + "StorageSlots.s7|block": "Slot 7", + "String.charAt|block": "Zeichen an Position %pos aus|%this", + "String.compare|block": "vergleiche %this| mit %that", + "String.fromCharCode|block": "Text aus ASCII-Code %code", + "String.includes|block": "%this=text|beinhaltet %searchValue", + "String.indexOf|block": "%this=text|finde index von %searchValue", + "String.isEmpty|block": "%this| ist leer", + "String.length|block": "Länge von %VALUE", + "String.split|block": "split %this=text|at %separator", + "String.substr|block": "extrahiere aus %this|beginnend mit %start|%length Zeichen", + "String|block": "Zeichenfolge", + "_py|block": "_py", + "basic.clearScreen|block": "Bildschirminhalt löschen", + "basic.color|block": "%c", + "basic.forever|block": "dauerhaft", + "basic.pause|block": "pausiere (ms) %pause", + "basic.rgb|block": "Rot %red|Grün %green|Blau %blue", + "basic.setLedColor|block": "setze LED-Farbe auf %color=color_id", + "basic.showArrow|block": "zeige Pfeil %i=device_arrow", + "basic.showCompass|block": "zeige Kompassnadel $interval|ms", + "basic.showIcon|block": "zeige Symbol %i || für %interval ms", + "basic.showLeds|block": "zeige LEDs", + "basic.showNumber|block": "zeige|Nummer %number || in einem intervall von %intervall ms", + "basic.showString|block": "zeige|Zeichenfolge %text || in einem intervall von %intervall ms", + "basic.turnRgbLedOff|block": "schalte RGB-LED aus", + "basic|block": "Grundlagen", + "console|block": "Konsole", + "control.deviceName|block": "Gerätename", + "control.deviceSerialNumber|block": "Seriennnummer", + "control.eventSourceId|block": "%id", + "control.eventTimestamp|block": "Ereigniszeitstempel", + "control.eventValueId|block": "%id", + "control.eventValue|block": "Ereigniswert", + "control.inBackground|block": "im Hintergrund ausführen", + "control.millis|block": "millis (ms)", + "control.onEvent|block": "wenn Ereignis|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", + "control.raiseEvent|block": "Ereignis auslösen|von Quelle %src=control_event_source_id|mit Wert %value=control_event_value_id", + "control.reset|block": "zurücksetzen", + "control.waitForEvent|block": "warte auf Ereignis|von %src|mit Wert %value", + "control.waitMicros|block": "Warte (µs)%micros", + "control|block": "Steuerung", + "convertToText|block": "wandle $value=math_number um in Text", + "game.LedSprite.change|block": "%sprite|ändere %property|um %value", + "game.LedSprite.delete|block": "lösche %this(sprite)", + "game.LedSprite.get|block": "%sprite|%property", + "game.LedSprite.ifOnEdgeBounce|block": "%sprite|pralle vom Rand ab", + "game.LedSprite.isDeleted|block": "lösche %sprite", + "game.LedSprite.isTouchingEdge|block": "%sprite|berührt den Rand", + "game.LedSprite.isTouching|block": "%sprite|berührt %other", + "game.LedSprite.move|block": "%sprite|bewegen um %leds", + "game.LedSprite.set|block": "%sprite|setze %property|auf %value", + "game.LedSprite.turn|block": "%sprite|drehe %direction|um (°) %degrees", + "game.addLife|block": "%lives|Leben hinzufügen", + "game.addScore|block": "Ändere Spielstand um|%points", + "game.createSprite|block": "erzeuge Sprite an Position|x: %x|y:%y", + "game.gameOver|block": "Spiel beendet", + "game.isGameOver|block": "Spiel ist beendet", + "game.isPaused|block": "ist pausiert", + "game.isRunning|block": "läuft", + "game.pause|block": "Pause", + "game.removeLife|block": "%life|leben abziehen", + "game.resume|block": "weiter", + "game.score|block": "Spielstand", + "game.setLife|block": "setze Anzahl Leben auf %value", + "game.setScore|block": "setze Punktzahl auf %points", + "game.startCountdown|block": "Countdown| starten (ms) %duration", + "game|block": "Spiel", + "images.arrowImage|block": "Pfeil Bild %i", + "images.arrowNumber|block": "%arrow", + "images.createBigImage|block": "erstelle großes Bild", + "images.createImage|block": "erstelle Bild", + "images.iconImage|block": "Symbol %i", + "images|block": "Bilder", + "input.acceleration|block": "Beschleunigung (mg) |%NAME", + "input.assumeCalibrationCompass|block": "Kompass ohne weitere Kalibration nutzen", + "input.buttonEventClick|block": "geklickt", + "input.buttonEventDown|block": "gedrückt", + "input.buttonEventValue|block": "%id", + "input.buttonIsPressed|block": "Button|%NAME|ist gedrückt", + "input.calibrateCompass|block": "Kompass kalibrieren", + "input.clearCalibrationCompass|block": "lösche die Kompass Kalibrierung", + "input.compassHeading|block": "Kompassausrichtung (°)", + "input.isCalibratedCompass|block": "wurde der Kompass kalibriert", + "input.isGesture|block": "Bewegung %gesture", + "input.lightLevel|block": "Lichtstärke", + "input.magneticForce|block": "Magnetkraft (µT) |%NAME", + "input.onButtonEvent|block": "wenn Knopf|%NAME|%eventType", + "input.onButtonPressed|block": "wenn Knopf|%NAME|gedrückt", + "input.onGesture|block": "wenn |%NAME", + "input.onPinPressed|block": "wenn Pin %NAME|gedrückt", + "input.onPinReleased|block": "wenn Pin %NAME|losgelassen", + "input.onPinTouchEvent|block": "wenn Pin %name| %eventType", + "input.pinIsPressed|block": "Pin %NAME|ist gedrückt", + "input.rotation|block": "Rotation (°)|%NAME", + "input.runningTimeMicros|block": "Laufzeit (micros)", + "input.runningTime|block": "Laufzeit (ms)", + "input.setAccelerometerRange|block": "setze Bewegungsmesser auf|%range", + "input.soundLevel|block": "Lautstärke", + "input.temperature|block": "Temperatur (°C)", + "input|block": "Eingabe", + "led.brightness|block": "Helligkeit", + "led.enable|block": "LED-Matrix aktivieren %on", + "led.plotBarGraph|block": "zeichne Balkendiagramm von %value|bis %high", + "led.plotBrightness|block": "Zeichne|x %x|y %y|Helligkeit %brightness", + "led.plot|block": "Zeichne|x %x|y %y", + "led.pointBrightness|block": "Punkt|x %x|y %y Helligkeit", + "led.point|block": "Punkt|x %x|y %y", + "led.setBrightness|block": "setze Helligkeit auf %value", + "led.setDisplayMode|block": "LED-Matrix aktivieren $mode", + "led.stopAnimation|block": "halte Animation an", + "led.toggle|block": "schalte zwischen|x %x|y %y", + "led.unplot|block": "schalte Pixel|x %x|y %y aus", + "led|block": "LED", + "light|block": "Lichtstärke", + "loops.everyInterval|block": "alle $interval ms", + "loops|block": "loops", + "motors.dualMotorPower|block": "Motor %motor an|mit %percent \\%", "motors.motorCommand|block": "Motor %command", - "motors.motorPower|block": "Motor an mit %percent", + "motors.motorPower|block": "Motor an mit %percent \\%", "motors|block": "Motoren", - "music.beat|block": "%fraction|Takt", - "music.changeTempoBy|block": "ändere die Geschwindigkeit (bpm)|%value", - "music.noteFrequency|block": "%note", - "music.playTone|block": "spiele|Note %note=device_note|für %duration=device_beat", - "music.rest|block": "pausiere (ms)|%duration=device_beat", - "music.ringTone|block": "Klingelton (Hz) |%note = Device_note", - "music.setTempo|block": "ändere Geschwindigkeit auf (bpm)|%value", - "music.tempo|block": "Geschwindkeit (bpm)", - "music|block": "Musik", - "pins.analogReadPin|block": "lese analoge Werte von|Pin %name", - "pins.analogSetPeriod|block": "setze Zeitraum für analogen|Pin %pin|auf (µs)%micros", - "pins.analogWritePin|block": "schreibe analogen|Pin %name|auf %value", - "pins.digitalReadPin|block": "lese digitale Werte von|Pin %name", - "pins.digitalWritePin|block": "schreibe digitalen Wert von|pin %name|auf %value", - "pins.i2cReadNumber|block": "lese Nummer aus I2C|auf Adresse %address|im Format %format=i2c_sizeof", - "pins.i2cWriteNumber|block": "schreibe Nummer aus I2C|auf Adresse %address|mit Wert %value|im Format %format=i2c_sizeof", - "pins.map|block": "verteile %value|von niedrig %fromLow|von hoch %fromHigh| bis niedrig %toLow|bis hoch %toHigh", - "pins.onPulsed|block": "wenn|Pin %pin|gepulst %pulse", - "pins.pulseDuration|block": "Impulsdauer (µs)", - "pins.pulseIn|block": "Impuls in (µs)|Pin %name|mit %value", - "pins.servoSetPulse|block": "setze den Puls von Servo an|Pin %value|auf (µs) %micros", - "pins.servoWritePin|block": "schreibe Servo an|Pin %name|auf %value", - "pins.setPull|block": "setze Anziehungskraft von|Pin %pin|auf %pull", - "pins.spiWrite|block": "schreibe %value in SPI", - "pins|block": "Pins", - "serial.delimiters|block": "%del", - "serial.readLine|block": "serial|read line", - "serial.readUntil|block": "serial|read until %delimiter=serial_delimiter_conv", - "serial.redirect|block": "serial|redirect to|TX %tx|RX %rx|at baud rate %rate", - "serial.writeLine|block": "serial|write line %text", - "serial.writeNumber|block": "serial|write number %value", - "serial.writeString|block": "serial|write string %text", - "serial.writeValue|block": "serial|write value %name|= %value", - "serial|block": "Konsole", - "{id:category}Basic": "Grundlagen", - "{id:category}Control": "Steuerung", - "{id:category}Game": "Spiel", - "{id:category}Images": "Bilder", - "{id:category}Input": "Eingabe", - "{id:category}Led": "LED", - "{id:category}Math": "Mathematik", - "{id:category}Motors": "Motoren", - "{id:category}Music": "Musik", - "{id:category}Pins": "Pins", - "{id:category}Serial": "Konsole", - "{id:category}String": "Zeichenfolge", - "{id:category}Text": "Text" -} \ No newline at end of file + "msgpack|block": "msgpack", + "music.beat|block": "%fraction|Takt", + "music.builtInMelody|block": "%melody", + "music.changeTempoBy|block": "ändere die Geschwindigkeit (bpm)|%value", + "music.melodyEditor|block": "$melody", + "music.noteFrequency|block": "%note", + "music.onEvent|block": "Musik wenn %value", + "music.playMelody|block": "spiele Melodie $melody im Tempo $tempo|(bpm)", + "music.playTone|block": "spiele|Note %note=device_note|für %duration=device_beat", + "music.rest|block": "pausiere (ms)|%duration=device_beat", + "music.ringTone|block": "Klingelton (Hz) |%note = Device_note", + "music.setTempo|block": "ändere Geschwindigkeit auf (bpm)|%value", + "music.setVolume|block": "setze Lautstärke auf %volume", + "music.startMelody|block": "starte Melodie %melody=device_builtin_melody| wiederhole %options", + "music.stopAllSounds|block": "alle Töne ausschalten", + "music.stopMelody|block": "halte Melodie $options|an", + "music.tempo|block": "Geschwindkeit (bpm)", + "music.volume|block": "Lautstärke", + "music|block": "Musik", + "parseFloat|block": "wandle %text|in eine Zahl", + "parseInt|block": "wandle %text|in eine Zahl", + "pins.analogPitchVolume|block": "analoge Tonlautstärke einstellen", + "pins.analogPitch|block": "analoge Tonhöhe %frequency|für (ms) %ms", + "pins.analogReadPin|block": "lese analoge Werte von|Pin %name", + "pins.analogSetPeriod|block": "setze Zeitraum für analogen|Pin %pin|auf (µs)%micros", + "pins.analogSetPitchPin|block": "analogen Tonausgabepin setzen auf Pin %name", + "pins.analogSetPitchVolume|block": "analoge Tonlautstärke einstellen $volume", + "pins.analogWritePin|block": "schreibe analogen|Pin %name|auf %value", + "pins.digitalReadPin|block": "lese digitale Werte von|Pin %name", + "pins.digitalWritePin|block": "schreibe digitalen Wert von|pin %name|auf %value", + "pins.i2cReadNumber|block": "lese Nummer aus I2C|auf Adresse %address|im Format %format=i2c_sizeof", + "pins.i2cWriteNumber|block": "schreibe Nummer aus I2C|auf Adresse %address|mit Wert %value|im Format %format=i2c_sizeof", + "pins.map|block": "verteile %value|von niedrig %fromLow|von hoch %fromHigh| bis niedrig %toLow|bis hoch %toHigh", + "pins.onPulsed|block": "wenn|Pin %pin|gepulst %pulse", + "pins.pulseDuration|block": "Impulsdauer (µs)", + "pins.pulseIn|block": "Impuls in (µs)|Pin %name|mit %value", + "pins.servoSetPulse|block": "setze den Puls von Servo an|Pin %value|auf (µs) %micros", + "pins.servoWritePin|block": "schreibe Servo an|Pin %name|auf %value", + "pins.setAudioPin|block": "setze Audiopin $name", + "pins.setEvents|block": "Stelle Pin %pin ein|zum Ausgeben von %type|-Ereignissen", + "pins.setMatrixWidth|block": "Neopixel Matrixbreite |Pin %pin %width", + "pins.setPull|block": "setze Anziehungskraft von|Pin %pin|auf %pull", + "pins.spiFormat|block": "SPI-Format|Bits %bits|Modus %mode", + "pins.spiFrequency|block": "SPI-Frequenz %frequency", + "pins.spiPins|block": "SPI Pins einstellen|MOSI %mosi|MISO %miso|SCK %sck", + "pins.spiWrite|block": "schreibe %value in SPI", + "pins|block": "Pins", + "randint|block": "wähle eine zufällige Zahl von %min|bis %limit", + "serial.delimiters|block": "%del", + "serial.onDataReceived|block": "seriell|wenn Daten empfangen %delimiters=serial_delimiter_conv", + "serial.readBuffer|block": "seriell|lesen bis %length", + "serial.readLine|block": "seriell|Zeile lesen", + "serial.readString|block": "seriell|Zeichenfolge lesen", + "serial.readUntil|block": "seriell|lese bis %delimiter=serial_delimiter_conv", + "serial.redirectToUSB|block": "seriell|auf USB umleiten", + "serial.redirect|block": "seriell|umleiten auf|TX %tx|RX %rx|mit Baudrate %rate", + "serial.setBaudRate|block": "seriell|setze Baudrate auf %rate", + "serial.setRxBufferSize|block": "setze serielle Puffergröße für RX auf $size", + "serial.setTxBufferSize|block": "setze serielle Puffergröße für TX auf $size", + "serial.setWriteLinePadding|block": "setze serielle Zeilenauffüllung auf $length", + "serial.writeBuffer|block": "seriell|setze Puffergröße auf %buffer=serial_readbuffer", + "serial.writeLine|block": "seriell|%text|als Zeile ausgeben", + "serial.writeNumbers|block": "seriell|%values|als Zahlen ausgeben", + "serial.writeNumber|block": "seriell|Zahl ausgeben %value", + "serial.writeString|block": "seriell|Text ausgeben %text", + "serial.writeValue|block": "seriell|Wertepaar ausgeben %name| und %value", + "serial|block": "Konsole", + "storage.getNumber|block": "lies aus %key", + "storage.getValueInt|block": "erhalte Zahl aus %key", + "storage.putNumber|block": "in %key die Zahl %value speichern", + "storage.putValueInt|block": "in %key den Wert %value als Int speichern", + "storage.removeNumber|block": "Zahl in %key löschen", + "storage.remove|block": "lösche %key", + "storage|block": "Speicher", + "{id:category}AnalogInPin": "AnalogInPin", + "{id:category}AnalogOutPin": "AnalogOutPin", + "{id:category}Array": "Array", + "{id:category}Arrays": "Arrays", + "{id:category}Basic": "Grundlagen", + "{id:category}Boolean": "Boolean", + "{id:category}Buffer": "Buffer", + "{id:category}Console": "Konsole", + "{id:category}Control": "Steuerung", + "{id:category}DigitalInOutPin": "DigitalInOutPin", + "{id:category}Fx": "Fx", + "{id:category}Fx8": "Fx8", + "{id:category}Game": "Spiel", + "{id:category}Helpers": "Helfer", + "{id:category}Image": "Image", + "{id:category}Images": "Bilder", + "{id:category}Input": "Eingabe", + "{id:category}JSON": "JSON", + "{id:category}Led": "LED", + "{id:category}Light": "Light", + "{id:category}Loops": "Schleifen", + "{id:category}Math": "Mathematik", + "{id:category}MicrobitPin": "MicrobitPin", + "{id:category}Motors": "Motoren", + "{id:category}Msgpack": "Msgpack", + "{id:category}Music": "Musik", + "{id:category}Number": "Number", + "{id:category}Object": "Object", + "{id:category}Pins": "Pins", + "{id:category}PwmOnlyPin": "PwmOnlyPin", + "{id:category}Serial": "Konsole", + "{id:category}Storage": "Speicher", + "{id:category}String": "Zeichenfolge", + "{id:category}Text": "Text", + "{id:category}_py": "_py", + "{id:group}Analog": "Analog", + "{id:group}Configuration": "Konfiguration", + "{id:group}Control": "Control", + "{id:group}Digital": "Digital", + "{id:group}Events": "Ereignis", + "{id:group}Get": "Get", + "{id:group}LED matrix": "LED-Matrix", + "{id:group}Melody": "Melodie", + "{id:group}Melody Advanced": "Fortgeschrittene Melodien", + "{id:group}Modify": "Modify", + "{id:group}Operations": "Operationen", + "{id:group}Pitch": "Pitch", + "{id:group}Pulse": "Pulse", + "{id:group}Put": "Put", + "{id:group}RGB LED": "RGB LED", + "{id:group}Read": "Lesen", + "{id:group}Remove": "Löschen", + "{id:group}Sensors": "Sensoren", + "{id:group}Servo": "Servo", + "{id:group}Silence": "Stille", + "{id:group}States": "Status", + "{id:group}System": "System", + "{id:group}Tempo": "Geschwindigkeit", + "{id:group}Tone": "Tone", + "{id:group}Volume": "Lautstärke", + "{id:group}i2c": "i2c", + "{id:group}spi": "spi" +} diff --git a/libs/core/pxt.json b/libs/core/pxt.json index 9628af19..59e8bfc7 100644 --- a/libs/core/pxt.json +++ b/libs/core/pxt.json @@ -114,14 +114,16 @@ "bluetooth": { "enabled": 1, "pairing_mode": 1, + "partial_flashing": 0, + "dfu_service": 1, + "event_service": 0, + "device_info_service": 1, "private_addressing": 0, "open": 1, - "partial_flashing": 0, "security_level": null, "whitelist": 0, "advertising_timeout": 0, - "tx_power": 6, - "event_service": 0 + "tx_power": 6 }, "stack_size": 1280, "gatt_table_size": "0x300", @@ -134,7 +136,7 @@ }, "userConfigs": [ { - "description": "32K RAM (mini v2 and some v1.3)", + "description": "32 KB RAM (from Calliope mini 2.0 on)", "config": { "microbit-dal": { "bluetooth": { @@ -152,13 +154,15 @@ } }, { - "description": "16K RAM (mini v1.3 and below)", + "description": "16 KB RAM (up to Calliope mini 1.3)", "config": { "microbit-dal": { "bluetooth": { "pairing_mode": 1, "partial_flashing": 0, - "event_service": 0 + "dfu_service": 1, + "event_service": 0, + "device_info_service": 1 }, "stack_size": 1280, "gatt_table_size": "0x300", diff --git a/sim/visuals/microbit.ts b/sim/visuals/microbit.ts index eb229f71..7b718a58 100644 --- a/sim/visuals/microbit.ts +++ b/sim/visuals/microbit.ts @@ -1188,21 +1188,21 @@ namespace pxsim.visuals { let shake = this.mkBtn(240, MB_HEIGHT - 75, 'Schütteln'); this.shakeButton = shake.inner; let board = this.element.getElementById("calliope_mini") - console.log(board) + // console.log(board) // svg.fill(this.shakeButton, this.props.theme.virtualButtonUp) svg.buttonEvents(shake.outer, ev => { }, (ev) => { - svg.fill(this.shakeButton, this.props.theme.virtualButtonDown); + // svg.fill(this.shakeButton, this.props.theme.virtualButtonDown); board.classList.remove("shake_animation"); setTimeout(()=>{ board.classList.add("shake_animation"); }, 1) - + this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE }, (ev) => { - svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); - this.board.bus.queue(DAL.MICROBIT_ID_GESTURE, 11); // GESTURE_SHAKE + // svg.fill(this.shakeButton, this.props.theme.virtualButtonUp); + } ) // let shakeText = svg.child(shake.outer, "text", { x: 280, y: MB_HEIGHT - 5, class: "sim-text big inverted centered" }) as SVGTextElement; @@ -1384,7 +1384,7 @@ namespace pxsim.visuals { }) as SVGTextElement; this.soundLevelIcon = svg.child(this.g, "svg", { x: 495, - y: 400, + y: 425, viewbox: "0 0 20 29", role: "img", }) as SVGTextElement; @@ -1650,7 +1650,7 @@ namespace pxsim.visuals { // filters let ledglow = svg.child(this.defs, "filter", { id: "ledglow", x: "-75%", y: "-75%", width: "300%", height: "300%" }); - svg.child(ledglow, "feMorphology", { operator: "dilate", radius: "4", in: "SourceAlpha", result: "thicken" }); + svg.child(ledglow, "feMorphology", { operator: "dilate", radius: "1", in: "SourceAlpha", result: "thicken" }); svg.child(ledglow, "feGaussianBlur", { stdDeviation: "5", in: "thicken", result: "blurred" }); svg.child(ledglow, "feFlood", { "flood-color": "rgb(255, 17, 77)", result: "glowColor" }); svg.child(ledglow, "feComposite", { in: "glowColor", in2: "blurred", operator: "in", result: "ledglow_colored" }); diff --git a/targetconfig.json b/targetconfig.json index 7821d4b4..9f2394ad 100644 --- a/targetconfig.json +++ b/targetconfig.json @@ -125,6 +125,16 @@ "vengit/pxt-sbrick" ], "preferredRepos": [ + "calliope-edu/CO2-Sensor-SCD40", + "calliope-edu/pxt-HM3301_Dust_Sensor", + "calliope-edu/pxt-TCS34725FN", + "calliope-edu/pxt-display", + "calliope-edu/pxt-grove", + "calliope-edu/pxt-rgblcd", + "calliope-edu/pxt-sunlightsensor-si1145", + "calliope-mini/pxt-SCD30", + "tinysuperlab/motionkit", + "tinysuperlab/touchkit", "MKleinSB/pxt-KY-040", "MKleinSB/pxt-MAX7219_8x8", "MKleinSB/pxt-OLED-SSD1306", @@ -134,6 +144,7 @@ "MKleinSB/pxt-callicross", "MKleinSB/pxt-callimotor", "MKleinSB/pxt-calliope-buttons", + "MKleinSB/pxt-CO2OLED", "MKleinSB/pxt-dht11", "MKleinSB/pxt-esp-thingspeak", "MKleinSB/pxt-gatorlog-calliope", @@ -145,28 +156,12 @@ "MKleinSB/pxt-serialmp3", "Microsoft/pxt-microturtle", "Microsoft/pxt-neopixel", - "calliope-edu/CO2-Sensor-SCD40", - "calliope-edu/makecode-extension-scd41", - "calliope-edu/pxt-HM3301_Dust_Sensor", - "calliope-edu/pxt-TCS34725FN", - "calliope-edu/pxt-display", - "calliope-edu/pxt-grove", - "calliope-edu/pxt-rgblcd", - "calliope-edu/pxt-sunlightsensor-si1145", - "calliope-mini/pxt-SCD30", "dl1ekm/pxt-calliope-ADS1x15", - "dl1ekm/pxt-calliope-PCF85063-RTC", - "tinysuperlab/motionkit", - "tinysuperlab/touchkit" + "dl1ekm/pxt-calliope-PCF85063-RTC" ] }, - "skillMap": { - "defaultPath": "docs:/skillmap/mini", - "pathAliases": { - "space": "docs:/skillmap/space" - } - }, "galleries": { + "New Project (iPad)": "calliope/templates", "First Steps": "calliope/firststeps", "Tutorials": "calliope/tutorials", "Calliope Links": "calliope/links" @@ -174,4 +169,4 @@ "electronManifest": { "latest": "v2.0.3" } -} \ No newline at end of file +} diff --git a/theme/style.less b/theme/style.less index fca946a0..80ac291e 100644 --- a/theme/style.less +++ b/theme/style.less @@ -74,6 +74,15 @@ padding: 25% 0; } +// Safari Only for iPad and iPhone +@media not all and (min-resolution:.001dpcm) { + @supports (-webkit-appearance:none) { + #mainmenu .right.menu { + margin-right: 4rem; + } + } +} + /* Mobile */ @media only screen and (max-width: @largestMobileScreen) { #filelist {