diff --git a/ardublockly/ardublockly_lang.js b/ardublockly/ardublockly_lang.js index ccc2cf295c..caea0b9312 100644 --- a/ardublockly/ardublockly_lang.js +++ b/ardublockly/ardublockly_lang.js @@ -1,183 +1,184 @@ -/** - * @license Licensed under the Apache License, Version 2.0 (the "License"): - * http://www.apache.org/licenses/LICENSE-2.0 - * - * @fileoverview Functions related to language and localisation. - */ -'use strict'; - -/** Create a namespace for the application. */ -var Ardublockly = Ardublockly || {}; - -/** Lookup for names of supported languages. Keys in ISO 639 format. */ -Ardublockly.LANGUAGE_NAME = { - 'fr': 'Français', - 'en': 'English', - 'es': 'Español', - 'nl': 'Nederlands', - 'pt': 'Português', - 'it': 'Italiano', - 'ru': 'Русский' -}; - -/** - * Selected language, default English. - * @type {string} - */ -Ardublockly.LANG = 'en'; - -/** - * We keep a local copy of the default language in case translations cannot - * be found in the injected language file. - * @type {Object} - */ -Ardublockly.DEFAULT_LANG_TEXT = {}; - - -/** Initialize the page language. */ -Ardublockly.initLanguage = function() { - // Save the current default language ID to check if it has been changed - var defaultLang = Ardublockly.LANG; - - // Check server settings and url language, url gets priority - Ardublockly.LANG = Ardublockly.getUrlLanguage() || - Ardublockly.getLanguageSetting() || Ardublockly.LANG; - - Ardublockly.populateLanguageMenu(Ardublockly.LANG); - - if (defaultLang !== Ardublockly.LANG) { - Ardublockly.duplicateDefaultLang(); - Ardublockly.injectLanguageJsSources(Ardublockly.LANG); - Ardublockly.updateLanguageText(); - } -}; - -/** - * Get the language previously set by the user from the server settings. - * @return {string} Language saved in the server settings. - */ -Ardublockly.getLanguageSetting = function() { - //TODO: Server feature still to be implemented, for now return default - return null; -}; - -/** - * Get the language selected from the URL, format '?lang=en'. - * @return {string} Selected language. - */ -Ardublockly.getUrlLanguage = function() { - var langKey = 'lang'; - var val = location.search.match(new RegExp('[?&]' + langKey + '=([^&]+)')); - var language = val ? decodeURIComponent(val[1].replace(/\+/g, '%20')) : ''; - if (Ardublockly.LANGUAGE_NAME[language] === undefined) { - language = null; - } - return language; -}; - -/** - * Populates the settings language selection menu. - * @param {!string} selectedLang Language to be marked as selected. - */ -Ardublockly.populateLanguageMenu = function(selectedLang) { - var languageMenu = document.getElementById('language'); - languageMenu.options.length = 0; - - for (var lang in Ardublockly.LANGUAGE_NAME) { - var option = new Option(Ardublockly.LANGUAGE_NAME[lang], lang); - if (lang == selectedLang) { - option.selected = true; - } - languageMenu.options.add(option); - } - languageMenu.onchange = Ardublockly.changeLanguage; -}; - -/** - * Because new languages are injected by overwriting Ardublockly.LOCALISED_TEXT - * we keep a local copy of the default language (included in the html header) so - * that we can still retrieve these strings if the translation cannot be found. - */ -Ardublockly.duplicateDefaultLang = function() { - for (var textId in Ardublockly.LOCALISED_TEXT) { - Ardublockly.DEFAULT_LANG_TEXT[textId] = Ardublockly.LOCALISED_TEXT[textId]; - } -}; - -/** Updates the page text strings with the new language. */ -Ardublockly.updateLanguageText = function() { - for (var textId in Ardublockly.LOCALISED_TEXT) { - var textStrings = document.getElementsByClassName('translatable_' + textId); - for (var i = 0; i < textStrings.length; i++) { - textStrings[i].innerHTML = Ardublockly.getLocalStr(textId); - } - } -}; - -/** - * Injects the language JavaScript files into the html head element. - * @param {string} langKey Dictionary key for the language to inject, must also - * be JS file name. - */ -Ardublockly.injectLanguageJsSources = function(langKey) { - var head = document.getElementsByTagName('head')[0]; - - // Retrieve and inject Ardublockly translations synchronously - var appLangJsLoad = document.createElement('script'); - var request = ArdublocklyServer.createRequest(); - var appLangJdPath = 'msg/' + langKey + '.js'; - try { - request.open('GET', appLangJdPath, false); - request.send(''); - appLangJsLoad.text = request.responseText; - } catch (e) { - // Display an alert to indicate we cannot load languages - Ardublockly.alertMessage( - Ardublockly.getLocalStr('noServerTitle'), - Ardublockly.getLocalStr('noServerNoLangBody'), - false); - // But still asynchronous lazy load so at least some text gets translated - appLangJsLoad.src = appLangJdPath; - } - head.appendChild(appLangJsLoad); - - // Retrieve and inject Blockly translations asynchronously - var blocklyLangJsLoad = document.createElement('script'); - blocklyLangJsLoad.src = '../blockly/msg/js/' + langKey + '.js'; - head.appendChild(blocklyLangJsLoad); -}; - -/** Saves the blocks and reloads with a different language. */ -Ardublockly.changeLanguage = function() { - // Store the blocks for the duration of the reload only - Ardublockly.saveSessionStorageBlocks(); - - var languageMenu = document.getElementById('language'); - var newLang = encodeURIComponent( - languageMenu.options[languageMenu.selectedIndex].value); - var search = window.location.search; - if (search.length <= 1) { - search = '?lang=' + newLang; - } else if (search.match(/[?&]lang=[^&]*/)) { - search = search.replace(/([?&]lang=)[^&]*/, '$1' + newLang); - } else { - search = search.replace(/\?/, '?lang=' + newLang + '&'); - } - - window.location = window.location.protocol + '//' + - window.location.host + window.location.pathname + search; -}; - -/** - * Finds and returns the requests string in the localised language. - * If the translation is not returned, it fetches the original language string. - * @param {string} stringId - * @return {!string} The localised, original, or an empty string. - */ -Ardublockly.getLocalStr = function(stringId) { - var text = Ardublockly.LOCALISED_TEXT[stringId]; - if (!text) { - console.log('Localised text string ID "' + stringId + '" does not exists!'); - } - return text || Ardublockly.DEFAULT_LANG_TEXT[stringId] || ''; -}; +/** + * @license Licensed under the Apache License, Version 2.0 (the "License"): + * http://www.apache.org/licenses/LICENSE-2.0 + * + * @fileoverview Functions related to language and localisation. + */ +'use strict'; + +/** Create a namespace for the application. */ +var Ardublockly = Ardublockly || {}; + +/** Lookup for names of supported languages. Keys in ISO 639 format. */ +Ardublockly.LANGUAGE_NAME = { + 'de': 'Deutsch', + 'fr': 'Français', + 'en': 'English', + 'es': 'Español', + 'nl': 'Nederlands', + 'pt': 'Português', + 'it': 'Italiano', + 'ru': 'Русский' +}; + +/** + * Selected language, default English. + * @type {string} + */ +Ardublockly.LANG = 'en'; + +/** + * We keep a local copy of the default language in case translations cannot + * be found in the injected language file. + * @type {Object} + */ +Ardublockly.DEFAULT_LANG_TEXT = {}; + + +/** Initialize the page language. */ +Ardublockly.initLanguage = function() { + // Save the current default language ID to check if it has been changed + var defaultLang = Ardublockly.LANG; + + // Check server settings and url language, url gets priority + Ardublockly.LANG = Ardublockly.getUrlLanguage() || + Ardublockly.getLanguageSetting() || Ardublockly.LANG; + + Ardublockly.populateLanguageMenu(Ardublockly.LANG); + + if (defaultLang !== Ardublockly.LANG) { + Ardublockly.duplicateDefaultLang(); + Ardublockly.injectLanguageJsSources(Ardublockly.LANG); + Ardublockly.updateLanguageText(); + } +}; + +/** + * Get the language previously set by the user from the server settings. + * @return {string} Language saved in the server settings. + */ +Ardublockly.getLanguageSetting = function() { + //TODO: Server feature still to be implemented, for now return default + return null; +}; + +/** + * Get the language selected from the URL, format '?lang=en'. + * @return {string} Selected language. + */ +Ardublockly.getUrlLanguage = function() { + var langKey = 'lang'; + var val = location.search.match(new RegExp('[?&]' + langKey + '=([^&]+)')); + var language = val ? decodeURIComponent(val[1].replace(/\+/g, '%20')) : ''; + if (Ardublockly.LANGUAGE_NAME[language] === undefined) { + language = null; + } + return language; +}; + +/** + * Populates the settings language selection menu. + * @param {!string} selectedLang Language to be marked as selected. + */ +Ardublockly.populateLanguageMenu = function(selectedLang) { + var languageMenu = document.getElementById('language'); + languageMenu.options.length = 0; + + for (var lang in Ardublockly.LANGUAGE_NAME) { + var option = new Option(Ardublockly.LANGUAGE_NAME[lang], lang); + if (lang == selectedLang) { + option.selected = true; + } + languageMenu.options.add(option); + } + languageMenu.onchange = Ardublockly.changeLanguage; +}; + +/** + * Because new languages are injected by overwriting Ardublockly.LOCALISED_TEXT + * we keep a local copy of the default language (included in the html header) so + * that we can still retrieve these strings if the translation cannot be found. + */ +Ardublockly.duplicateDefaultLang = function() { + for (var textId in Ardublockly.LOCALISED_TEXT) { + Ardublockly.DEFAULT_LANG_TEXT[textId] = Ardublockly.LOCALISED_TEXT[textId]; + } +}; + +/** Updates the page text strings with the new language. */ +Ardublockly.updateLanguageText = function() { + for (var textId in Ardublockly.LOCALISED_TEXT) { + var textStrings = document.getElementsByClassName('translatable_' + textId); + for (var i = 0; i < textStrings.length; i++) { + textStrings[i].innerHTML = Ardublockly.getLocalStr(textId); + } + } +}; + +/** + * Injects the language JavaScript files into the html head element. + * @param {string} langKey Dictionary key for the language to inject, must also + * be JS file name. + */ +Ardublockly.injectLanguageJsSources = function(langKey) { + var head = document.getElementsByTagName('head')[0]; + + // Retrieve and inject Ardublockly translations synchronously + var appLangJsLoad = document.createElement('script'); + var request = ArdublocklyServer.createRequest(); + var appLangJdPath = 'msg/' + langKey + '.js'; + try { + request.open('GET', appLangJdPath, false); + request.send(''); + appLangJsLoad.text = request.responseText; + } catch (e) { + // Display an alert to indicate we cannot load languages + Ardublockly.alertMessage( + Ardublockly.getLocalStr('noServerTitle'), + Ardublockly.getLocalStr('noServerNoLangBody'), + false); + // But still asynchronous lazy load so at least some text gets translated + appLangJsLoad.src = appLangJdPath; + } + head.appendChild(appLangJsLoad); + + // Retrieve and inject Blockly translations asynchronously + var blocklyLangJsLoad = document.createElement('script'); + blocklyLangJsLoad.src = '../blockly/msg/js/' + langKey + '.js'; + head.appendChild(blocklyLangJsLoad); +}; + +/** Saves the blocks and reloads with a different language. */ +Ardublockly.changeLanguage = function() { + // Store the blocks for the duration of the reload only + Ardublockly.saveSessionStorageBlocks(); + + var languageMenu = document.getElementById('language'); + var newLang = encodeURIComponent( + languageMenu.options[languageMenu.selectedIndex].value); + var search = window.location.search; + if (search.length <= 1) { + search = '?lang=' + newLang; + } else if (search.match(/[?&]lang=[^&]*/)) { + search = search.replace(/([?&]lang=)[^&]*/, '$1' + newLang); + } else { + search = search.replace(/\?/, '?lang=' + newLang + '&'); + } + + window.location = window.location.protocol + '//' + + window.location.host + window.location.pathname + search; +}; + +/** + * Finds and returns the requests string in the localised language. + * If the translation is not returned, it fetches the original language string. + * @param {string} stringId + * @return {!string} The localised, original, or an empty string. + */ +Ardublockly.getLocalStr = function(stringId) { + var text = Ardublockly.LOCALISED_TEXT[stringId]; + if (!text) { + console.log('Localised text string ID "' + stringId + '" does not exists!'); + } + return text || Ardublockly.DEFAULT_LANG_TEXT[stringId] || ''; +}; diff --git a/ardublockly/msg/de.js b/ardublockly/msg/de.js new file mode 100644 index 0000000000..7e8da9ba08 --- /dev/null +++ b/ardublockly/msg/de.js @@ -0,0 +1,105 @@ +var Ardublockly = Ardublockly || {}; +Ardublockly.LOCALISED_TEXT = { + translationLanguage: "Deutsch", + title: "Ardublockly", + blocks: "Blöcke", + /* Menu */ + open: "Öffnen", + save: "Speichern", + deleteAll: "Alles löschen", + settings: "Einstellungen", + documentation: "Dokumentation", + reportBug: "Fehler melden", + examples: "Beispiele", + /* Settings */ + compilerLocation: "Pfad zum Compiler", + compilerLocationDefault: "Pfad zum Compiler unbekannt", + sketchFolder: "Sketch Ordner", + sketchFolderDefault: "Sketch Ordner unbekannt", + arduinoBoard: "Arduino Board", + arduinoBoardDefault: "Arduino Board unbekannt", + comPort: "COM Port", + comPortDefault: "COM Port unbekannt", + defaultIdeButton: "Standard IDE Schaltfläche", + defaultIdeButtonDefault: "Standardaktion für IDE Schaltfläche unbekannt", + language: "Sprache", + languageDefault: "Sprache unbekannt", + sketchName: "Sketch Name", + /* Arduino console output */ + arduinoOpMainTitle: "Arduino IDE Ausgabe", + arduinoOpWaiting: "Wartet auf IDE Ausgabe...", + arduinoOpUploadedTitle: "Sketch erfolgreich hochgeladen", + arduinoOpVerifiedTitle: "Sketch erfolgreich geprüft", + arduinoOpOpenedTitle: "Sketch in IDE geöffnet", + arduinoOpOpenedBody: "Der Sketch sollte in der Arduino IDE geöffnet worden sein.", + arduinoOpErrorTitle: "Ein Fehler ist aufgetreten", + arduinoOpErrorIdContext_0: "Kein Fehler.", + arduinoOpErrorIdContext_1: "Compilieren oder Hochladen fehlgeschlagen.", + arduinoOpErrorIdContext_2: "Sketch wurde nicht gefunden.", + arduinoOpErrorIdContext_3: "Ungültiges Befehlszeilen Argument.", + arduinoOpErrorIdContext_4: "Preference-Flag welcher an 'get-pref' übergeben wurde existiert nicht.", + arduinoOpErrorIdContext_5: "Unklarer Fehler, aber Arduino IDE wirft diesen Fehler manchmal.", + arduinoOpErrorIdContext_50: "Unerwarteter Fehlercode der Arduino IDE", + arduinoOpErrorIdContext_51: "Sketch Datei konnte nicht erstellt werden", + arduinoOpErrorIdContext_52: "Ungültiger Pfad zur intern erstellen Sketch-Datei", + arduinoOpErrorIdContext_53: "Arduino IDE kann nicht gefunden werden
" + + "Der Pfad zum Compiler wurde nicht korrekt festgelegt.
" + + "Bitte vergewissern sie sich, dass der Pfad in den Einstellungen korrekt festgelegt wurde.", + arduinoOpErrorIdContext_54: "Was sollen wir mit dem Sketch machen?
" + + "Die Standardaktion zum Öffnen der IDE wurde nicht gesetzt.
" + + "Bitte wähle eine Standardaktion für die IDE in den Einstellungen.", + arduinoOpErrorIdContext_55: "Serieller Port nicht verfügbar
" + + "Der serielle Port ist nicht verfügbar.
" + + "Bitte prüfe ob der Arduino korrekt an den PC angeschlossen ist und der Pfad in den Einstellungen korrekt gewählt wurde.", + arduinoOpErrorIdContext_56: "Unbekanntes Arduino Board
" + + "Das Arduino Board wurde nicht ausgewählt.
" + + "Bitte wähle das passende Arduino Board in den Einstellungen.", + arduinoOpErrorIdContext_52: "Unerwarteter Serverfehler.", + arduinoOpErrorIdContext_64: "JSON konnte nicht geparsed werden.", + arduinoOpErrorUnknown: "Unerwarteter Fehler", + /* Modals */ + noServerTitle: "Ardublockly App läuft nicht", + noServerTitleBody: "

Damit alle Ardublockly Features funktionieren, muss die Ardublockly Desktop App lokal auf ihrem Computer laufen.

" + + "

Falls sie eine Onlineversion nutzen, können sie weder die Einstellungen verändern, noch den Code der Blöcke auf den Arduino laden.

" + + "

Installations-Anweisungen können in der Ardublockly Repository nachgelesen werden.

" + + "

Sollte Ardublockly bereits installiert worden sein, vergewissern sie sich, dass die Anwendung korrekt läuft.

", + noServerNoLangBody: "Wenn die Ardublockly Desktopp App nicht läuft, kann die Sprache nicht vollständig gewechselt werden.", + addBlocksTitle: "Zusätzliche Blöcke", + /* Alerts */ + loadNewBlocksTitle: "Neue Blöcke laden?", + loadNewBlocksBody: "Das Laden einer neuen XML Datei überschreibt die aktuellen Blöcke im Arbeitsbereich.
" + + "Sind sie sicher, dass sie fortfahren möchten?", + discardBlocksTitle: "Blöcke löschen?", + discardBlocksBody: "Es befinden sich %1 Blöcke im Arbeitsbereich.
" + + "Sind sie sicher, dass sie diese löschen möchten?", + invalidXmlTitle: "Ungültiges XML", + invalidXmlBody: "Die XML Datei konnte nicht in Blöcke umgeschrieben werden. Bitte prüfen sie den XML Code und versuchen sie es erneut.", + /* Tooltips */ + uploadingSketch: "Sketch wird zum Arduino hochgeladen...", + uploadSketch: "Sketch zum Arduino hochladen", + verifyingSketch: "Prüfe Sketch...", + verifySketch: "Sketch prüfen", + openingSketch: "Sketch wird in Arduino IDE geöffnet...", + openSketch: "Sketch in Arduino IDE öffnen", + notImplemented: "Funktion wurde noch nicht umgesetzt.", + /* Prompts */ + ok: "OK", + okay: "Okay", + cancel: "Abbrechen", + return: "Zurück", + /* Cards */ + arduinoSourceCode: "Arduino Source Code", + blocksXml: "Blöcke XML", + /* Toolbox Categories*/ + catLogic: "Logik", + catLoops: "Schleifen", + catMath: "Mathematik", + catText: "Text", + catVariables: "Variabeln", + catFunctions: "Funktionen", + catInputOutput: "Ein-/Ausgänge", + catTime: "Zeit", + catAudio: "Audio", + catMotors: "Motoren", + catComms: "Kommunikation", +}; diff --git a/blockly/msg/json/de_ardublockly.json b/blockly/msg/json/de_ardublockly.json new file mode 100644 index 0000000000..b37c9b1dae --- /dev/null +++ b/blockly/msg/json/de_ardublockly.json @@ -0,0 +1,124 @@ +{ + "@metadata": { + "author": "royassas", + "lastupdated": "2018-10-08 13:13:00.120000", + "locale": "de", + "messagedocumentation" : "qqq_ardublockly" + }, + "ARD_TYPE_CHAR": "Charakter", + "ARD_TYPE_TEXT": "Text", + "ARD_TYPE_BOOL": "Boolean", + "ARD_TYPE_SHORT": "Short Integer", + "ARD_TYPE_NUMBER": "Integer", + "ARD_TYPE_LONG": "Long Integer", + "ARD_TYPE_DECIMAL": "Dezimalzahl", + "ARD_TYPE_ARRAY": "Array", + "ARD_TYPE_NULL": "Null", + "ARD_TYPE_UNDEF": "Undefiniert", + "ARD_TYPE_CHILDBLOCKMISSING": "ChildBlockFehlt", + "ARD_HIGH": "HIGH", + "ARD_LOW": "LOW", + "ARD_ANALOGREAD": "Lies den analogen Pin#", + "ARD_ANALOGREAD_TIP": "Gibt einen Wert zwischen 0 und 1024 zurück", + "ARD_ANALOGWRITE": "Setze den analogen Pin#", + "ARD_ANALOGWRITE_TIP": "Gib einen Wert zwischen 0 und 255 auf den gewählten Pin aus.", + "ARD_HIGHLOW_TIP": "Setze einen Pin auf logisch High oder Low.", + "ARD_DIGITALREAD": "Lies den digitalen Pin#", + "ARD_DIGITALREAD_TIP": "Lies eine digitalen Wert auf einem Pin: Ergibt HIGH oder LOW als Resultat.", + "ARD_DIGITALWRITE": "Setze den digitialen Pin#", + "ARD_WRITE_TO": "auf", + "ARD_DIGITALWRITE_TIP": "Schreibe den digitalen Wert HIGH oder LOW auf einen definierten Port", + "ARD_BUILTIN_LED": "Setze Zustand der eingebauten LED", + "ARD_BUILTIN_LED_TIP": "LED der eingebauten LED des Arduino ein (HIGH) oder ausschalten (LOW)", + "ARD_DEFINE": "Definiere", + "ARD_TONE_PIN": "Ton Pin#", + "ARD_TONE_FREQ": "Frequenz", + "ARD_TONE_PIN_TIP": "Generiere Töne auf einem Pin", + "ARD_NOTONE_PIN": "Kein Ton Pin#", + "ARD_NOTONE_PIN_TIP": "Ton-Generierung auf einem Pin stoppen", + "ARD_MAP": "Map", + "ARD_MAP_VAL": "Wert zu [0-", + "ARD_MAP_TIP": "Mappt eine Zahl von [0-1024] auf einen anderen Zahlenbereich.", + "ARD_FUN_RUN_SETUP": "Arduino - Mach zuerst:", + "ARD_FUN_RUN_LOOP": "danach wiederhole unendlich:", + "ARD_FUN_RUN_TIP": "Definiert die Arduino setup() and loop() Funktionen.", + "ARD_PIN_WARN1": "Pin %1 wird benötigt für %2 als Pin %3. Bereits benutzt als %4.", + "ARD_SERIAL_SETUP": "Einstellungen", + "ARD_SERIAL_SPEED": ": Geschwindigkeit auf", + "ARD_SERIAL_BPS": "bps", + "ARD_SERIAL_SETUP_TIP": "Wählt die Geschwindigkeit für ein bestimmtes serielles Gerät", + "ARD_SERIAL_PRINT": "Print (Gib aus)", + "ARD_SERIAL_PRINT_NEWLINE": "Zeilenumbruch hinzufügen", + "ARD_SERIAL_PRINT_TIP": "Gibt Daten an die Konsole oder den Serial-Port in lesbarem ASCII Text aus.", + "ARD_SERIAL_PRINT_WARN": "Ein Konfigurationsblock für %1 muss dem Arbeitsbereich hinzugefügt werden um diesen Block nutzen zu können!", + "ARD_SERVO_WRITE": "Setze den Servomotor auf Pin#", + "ARD_SERVO_WRITE_TO": "auf", + "ARD_SERVO_WRITE_DEG_180": "Grad (0~180)", + "ARD_SERVO_WRITE_TIP": "Setzt einen Servomotor auf einen bestimmten Winkel", + "ARD_SERVO_READ": "Lies den Servomotor auf Pin#", + "ARD_SERVO_READ_TIP": "Lies den aktuellen Winkel des Servomotors", + "ARD_SPI_SETUP": "Einstellungen", + "ARD_SPI_SETUP_CONF": "Konfiguration:", + "ARD_SPI_SETUP_SHIFT": "Data Shift", + "ARD_SPI_SETUP_MSBFIRST": "MSBFIRST", + "ARD_SPI_SETUP_LSBFIRST": "LSBFIRST", + "ARD_SPI_SETUP_DIVIDE": "Clock Divide", + "ARD_SPI_SETUP_MODE": "SPI Modus (Ruhezustand (Idle) - Änderung (Edge))", + "ARD_SPI_SETUP_MODE0": "0 (Low - Falling)", + "ARD_SPI_SETUP_MODE1": "1 (Low - Rising)", + "ARD_SPI_SETUP_MODE2": "2 (High - Falling)", + "ARD_SPI_SETUP_MODE3": "3 (High - Rising)", + "ARD_SPI_SETUP_TIP": "Richtet ein SPI Gerät ein.", + "ARD_SPI_TRANS_NONE": "None", + "ARD_SPI_TRANS_VAL": "Transfer", + "ARD_SPI_TRANS_SLAVE": "an Slave Pin", + "ARD_SPI_TRANS_TIP": "Sende eine SPI Nachricht an ein bestimmtes Slave-Gerät.", + "ARD_SPI_TRANS_WARN1": "Ein Konfigurationsblock für %1 muss dem Arbeitsbereich hinzugefügt werden um diesen Block nutzen zu können!", + "ARD_SPI_TRANS_WARN2": "Vorheriger Pin-Wert %1 ist nicht mehr verfügbar.", + "ARD_SPI_TRANSRETURN_TIP": "Sende eine SPI Nachricht an ein Slave-Gerät und erhalte Daten zurück.", + "ARD_STEPPER_SETUP": "Schrittmotor einrichten", + "ARD_STEPPER_MOTOR": "Schrittmotor:", + "ARD_STEPPER_DEFAULT_NAME": "MeinSchrittmotor", + "ARD_STEPPER_NUMBER_OF_PINS": "Anzahl Anschlüsse des Schrittmotors", + "ARD_STEPPER_TWO_PINS": "2", + "ARD_STEPPER_FOUR_PINS": "4", + "ARD_STEPPER_PIN1": "Pin1#", + "ARD_STEPPER_PIN2": "Pin2#", + "ARD_STEPPER_PIN3": "Pin3#", + "ARD_STEPPER_PIN4": "Pin4#", + "ARD_STEPPER_REVOLVS": "Anzahl Schritte pro Umdrehung", + "ARD_STEPPER_SPEED": "Setze Geschwindigkeit (RPM) auf", + "ARD_STEPPER_SETUP_TIP": "Richtet einen Schrittmotor mit Pinout und anderen Einstellungen ein.", + "ARD_STEPPER_STEP": "Bewege Schrittmotor", + "ARD_STEPPER_STEPS": "Schritte", + "ARD_STEPPER_STEP_TIP": "Dreht den Motor um eine bestimmte Anzahl Schritte weiter.", + "ARD_STEPPER_COMPONENT": "Schrittmotor", + "ARD_COMPONENT_WARN1": "Ein %1 Konfigurations-Block mit dem gleichen %2 Namen muss hinzugefügt werden um diesen Block nutzen zu können!", + "ARD_TIME_DELAY": "Warte", + "ARD_TIME_MS": "Millisekunden", + "ARD_TIME_DELAY_TIP": "Verzögere die Weiterführung des Programms um eine bestimmte Anzahl Millisekunden.", + "ARD_TIME_DELAY_MICROS": "Mikrosekunden", + "ARD_TIME_DELAY_MICRO_TIP": "Verzögere die Weiterführung des Programms um eine bestimmte Anzahl Millisekunden.", + "ARD_TIME_MILLIS": "Verstrichene Zeit in Millisekunden", + "ARD_TIME_MILLIS_TIP": "Gibt die Anzahl Millisekunden seit Start des Arduino Programms zurück. Muss in einem positiven long integer gespeichert werden.", + "ARD_TIME_MICROS": "Verstrichene Zeit in Mikrosekunden", + "ARD_TIME_MICROS_TIP": "Gibt die Anzahl Mikrosekunden seit Start des Arduino Programms zurück. Muss in einem positiven long integer gespeichert werden.", + "ARD_TIME_INF": "Warte unendlich lange (Beendet Programm)", + "ARD_TIME_INF_TIP": "Warte unendlich lange, dies stoppt das Programm.", + "ARD_VAR_AS": "als", + "ARD_VAR_AS_TIP": "Setzt einen Wert in einem spezifischen Datentypen um", + "ARD_PULSE_READ": "Miss %1 Puls auf Pin#%2", + "ARD_PULSE_READ_TIMEOUT": "Misse %1 Puls auf Pin#%2 (Timeout nach %3 μs)", + "ARD_PULSE_TIP": "Misst die Länge eines Pulses auf dem gewählten Pin.", + "ARD_PULSETIMEOUT_TIP": "Miss die Länge eines Pulses auf dem gewählten Pin falls er kürzer als das Timeout ist (in Mikrosekunden).", + "ARD_SETTONE": "Setze Ton auf Pin#", + "ARD_TONEFREQ": "auf Frequenz", + "ARD_TONE_TIP": "Setzt die Tonfrequenz auf dem gewählten Pin auf eine Frequenz im Bereich von 31 bis 65535Hz", + "ARD_TONE_WARNING": "Frequenz muss zwischen 31 und 65535Hz liegen", + "ARD_NOTONE": "Ton ausschalten auf Pin#", + "ARD_NOTONE_TIP": "Ton auf dem ausgewählten Pin ausschalten", + "NEW_INSTANCE": "Neue Instanz...", + "RENAME_INSTANCE": "Instanz umbenennen...", + "NEW_INSTANCE_TITLE": "Name der neuen Instanz:", + "RENAME_INSTANCE_TITLE": "Alle '%1' Instanzen umbenennen auf:" +}