Initial commit of 001code-html Scratch frontend project.

Includes scratch-gui, scratch-vm, scratch-blocks, scratch-render, scratch-l10n, and deployment config.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-16 15:37:45 +08:00
commit 6e0a1fbcbb
11350 changed files with 965674 additions and 0 deletions

290
scratch-blocks/msg/js/en.js Normal file
View File

@@ -0,0 +1,290 @@
// This file was automatically generated. Do not modify.
'use strict';
goog.provide('Blockly.Msg.en');
goog.require('Blockly.Msg');
Blockly.Msg["CONTROL_FOREVER"] = "forever";
Blockly.Msg["CONTROL_REPEAT"] = "repeat %1";
Blockly.Msg["CONTROL_IF"] = "if %1 then";
Blockly.Msg["CONTROL_ELSE"] = "else";
Blockly.Msg["CONTROL_STOP"] = "stop";
Blockly.Msg["CONTROL_STOP_ALL"] = "all";
Blockly.Msg["CONTROL_STOP_THIS"] = "this script";
Blockly.Msg["CONTROL_STOP_OTHER"] = "other scripts in sprite";
Blockly.Msg["CONTROL_WAIT"] = "wait %1 seconds";
Blockly.Msg["CONTROL_WAITUNTIL"] = "wait until %1";
Blockly.Msg["CONTROL_REPEATUNTIL"] = "repeat until %1";
Blockly.Msg["CONTROL_WHILE"] = "while %1";
Blockly.Msg["CONTROL_FOREACH"] = "for each %1 in %2";
Blockly.Msg["CONTROL_STARTASCLONE"] = "when I start as a clone";
Blockly.Msg["CONTROL_CREATECLONEOF"] = "create clone of %1";
Blockly.Msg["CONTROL_CREATECLONEOF_MYSELF"] = "myself";
Blockly.Msg["CONTROL_DELETETHISCLONE"] = "delete this clone";
Blockly.Msg["CONTROL_COUNTER"] = "counter";
Blockly.Msg["CONTROL_INCRCOUNTER"] = "increment counter";
Blockly.Msg["CONTROL_CLEARCOUNTER"] = "clear counter";
Blockly.Msg["CONTROL_ALLATONCE"] = "all at once";
Blockly.Msg["DATA_SETVARIABLETO"] = "set %1 to %2";
Blockly.Msg["DATA_CHANGEVARIABLEBY"] = "change %1 by %2";
Blockly.Msg["DATA_SHOWVARIABLE"] = "show variable %1";
Blockly.Msg["DATA_HIDEVARIABLE"] = "hide variable %1";
Blockly.Msg["DATA_ADDTOLIST"] = "add %1 to %2";
Blockly.Msg["DATA_DELETEOFLIST"] = "delete %1 of %2";
Blockly.Msg["DATA_DELETEALLOFLIST"] = "delete all of %1";
Blockly.Msg["DATA_INSERTATLIST"] = "insert %1 at %2 of %3";
Blockly.Msg["DATA_REPLACEITEMOFLIST"] = "replace item %1 of %2 with %3";
Blockly.Msg["DATA_ITEMOFLIST"] = "item %1 of %2";
Blockly.Msg["DATA_ITEMNUMOFLIST"] = "item # of %1 in %2";
Blockly.Msg["DATA_LENGTHOFLIST"] = "length of %1";
Blockly.Msg["DATA_LISTCONTAINSITEM"] = "%1 contains %2?";
Blockly.Msg["DATA_SHOWLIST"] = "show list %1";
Blockly.Msg["DATA_HIDELIST"] = "hide list %1";
Blockly.Msg["DATA_INDEX_ALL"] = "all";
Blockly.Msg["DATA_INDEX_LAST"] = "last";
Blockly.Msg["DATA_INDEX_RANDOM"] = "random";
Blockly.Msg["EVENT_WHENFLAGCLICKED"] = "when %1 clicked";
Blockly.Msg["EVENT_WHENTHISSPRITECLICKED"] = "when this sprite clicked";
Blockly.Msg["EVENT_WHENSTAGECLICKED"] = "when stage clicked";
Blockly.Msg["EVENT_WHENTOUCHINGOBJECT"] = "when this sprite touches %1";
Blockly.Msg["EVENT_WHENBROADCASTRECEIVED"] = "when I receive %1";
Blockly.Msg["EVENT_WHENBACKDROPSWITCHESTO"] = "when backdrop switches to %1";
Blockly.Msg["EVENT_WHENGREATERTHAN"] = "when %1 > %2";
Blockly.Msg["EVENT_WHENGREATERTHAN_TIMER"] = "timer";
Blockly.Msg["EVENT_WHENGREATERTHAN_LOUDNESS"] = "loudness";
Blockly.Msg["EVENT_BROADCAST"] = "broadcast %1";
Blockly.Msg["EVENT_BROADCASTANDWAIT"] = "broadcast %1 and wait";
Blockly.Msg["EVENT_WHENKEYPRESSED"] = "when %1 key pressed";
Blockly.Msg["EVENT_WHENKEYPRESSED_SPACE"] = "space";
Blockly.Msg["EVENT_WHENKEYPRESSED_LEFT"] = "left arrow";
Blockly.Msg["EVENT_WHENKEYPRESSED_RIGHT"] = "right arrow";
Blockly.Msg["EVENT_WHENKEYPRESSED_DOWN"] = "down arrow";
Blockly.Msg["EVENT_WHENKEYPRESSED_UP"] = "up arrow";
Blockly.Msg["EVENT_WHENKEYPRESSED_ANY"] = "any";
Blockly.Msg["LOOKS_SAYFORSECS"] = "say %1 for %2 seconds";
Blockly.Msg["LOOKS_SAY"] = "say %1";
Blockly.Msg["LOOKS_HELLO"] = "Hello!";
Blockly.Msg["LOOKS_THINKFORSECS"] = "think %1 for %2 seconds";
Blockly.Msg["LOOKS_THINK"] = "think %1";
Blockly.Msg["LOOKS_HMM"] = "Hmm...";
Blockly.Msg["LOOKS_SHOW"] = "show";
Blockly.Msg["LOOKS_HIDE"] = "hide";
Blockly.Msg["LOOKS_HIDEALLSPRITES"] = "hide all sprites";
Blockly.Msg["LOOKS_EFFECT_COLOR"] = "color";
Blockly.Msg["LOOKS_EFFECT_FISHEYE"] = "fisheye";
Blockly.Msg["LOOKS_EFFECT_WHIRL"] = "whirl";
Blockly.Msg["LOOKS_EFFECT_PIXELATE"] = "pixelate";
Blockly.Msg["LOOKS_EFFECT_MOSAIC"] = "mosaic";
Blockly.Msg["LOOKS_EFFECT_BRIGHTNESS"] = "brightness";
Blockly.Msg["LOOKS_EFFECT_GHOST"] = "ghost";
Blockly.Msg["LOOKS_CHANGEEFFECTBY"] = "change %1 effect by %2";
Blockly.Msg["LOOKS_SETEFFECTTO"] = "set %1 effect to %2";
Blockly.Msg["LOOKS_CLEARGRAPHICEFFECTS"] = "clear graphic effects";
Blockly.Msg["LOOKS_CHANGESIZEBY"] = "change size by %1";
Blockly.Msg["LOOKS_SETSIZETO"] = "set size to %1 %";
Blockly.Msg["LOOKS_SIZE"] = "size";
Blockly.Msg["LOOKS_CHANGESTRETCHBY"] = "change stretch by %1";
Blockly.Msg["LOOKS_SETSTRETCHTO"] = "set stretch to %1 %";
Blockly.Msg["LOOKS_SWITCHCOSTUMETO"] = "switch costume to %1";
Blockly.Msg["LOOKS_NEXTCOSTUME"] = "next costume";
Blockly.Msg["LOOKS_SWITCHBACKDROPTO"] = "switch backdrop to %1";
Blockly.Msg["LOOKS_GOTOFRONTBACK"] = "go to %1 layer";
Blockly.Msg["LOOKS_GOTOFRONTBACK_FRONT"] = "front";
Blockly.Msg["LOOKS_GOTOFRONTBACK_BACK"] = "back";
Blockly.Msg["LOOKS_GOFORWARDBACKWARDLAYERS"] = "go %1 %2 layers";
Blockly.Msg["LOOKS_GOFORWARDBACKWARDLAYERS_FORWARD"] = "forward";
Blockly.Msg["LOOKS_GOFORWARDBACKWARDLAYERS_BACKWARD"] = "backward";
Blockly.Msg["LOOKS_BACKDROPNUMBERNAME"] = "backdrop %1";
Blockly.Msg["LOOKS_COSTUMENUMBERNAME"] = "costume %1";
Blockly.Msg["LOOKS_NUMBERNAME_NUMBER"] = "number";
Blockly.Msg["LOOKS_NUMBERNAME_NAME"] = "name";
Blockly.Msg["LOOKS_SWITCHBACKDROPTOANDWAIT"] = "switch backdrop to %1 and wait";
Blockly.Msg["LOOKS_NEXTBACKDROP_BLOCK"] = "next backdrop";
Blockly.Msg["LOOKS_NEXTBACKDROP"] = "next backdrop";
Blockly.Msg["LOOKS_PREVIOUSBACKDROP"] = "previous backdrop";
Blockly.Msg["LOOKS_RANDOMBACKDROP"] = "random backdrop";
Blockly.Msg["MOTION_MOVESTEPS"] = "move %1 steps";
Blockly.Msg["MOTION_TURNLEFT"] = "turn %1 %2 degrees";
Blockly.Msg["MOTION_TURNRIGHT"] = "turn %1 %2 degrees";
Blockly.Msg["MOTION_POINTINDIRECTION"] = "point in direction %1";
Blockly.Msg["MOTION_POINTTOWARDS"] = "point towards %1";
Blockly.Msg["MOTION_POINTTOWARDS_POINTER"] = "mouse-pointer";
Blockly.Msg["MOTION_POINTTOWARDS_RANDOM"] = "random direction";
Blockly.Msg["MOTION_GOTO"] = "go to %1";
Blockly.Msg["MOTION_GOTO_POINTER"] = "mouse-pointer";
Blockly.Msg["MOTION_GOTO_RANDOM"] = "random position";
Blockly.Msg["MOTION_GOTOXY"] = "go to x: %1 y: %2";
Blockly.Msg["MOTION_GLIDESECSTOXY"] = "glide %1 secs to x: %2 y: %3";
Blockly.Msg["MOTION_GLIDETO"] = "glide %1 secs to %2";
Blockly.Msg["MOTION_GLIDETO_POINTER"] = "mouse-pointer";
Blockly.Msg["MOTION_GLIDETO_RANDOM"] = "random position";
Blockly.Msg["MOTION_CHANGEXBY"] = "change x by %1";
Blockly.Msg["MOTION_SETX"] = "set x to %1";
Blockly.Msg["MOTION_CHANGEYBY"] = "change y by %1";
Blockly.Msg["MOTION_SETY"] = "set y to %1";
Blockly.Msg["MOTION_IFONEDGEBOUNCE"] = "if on edge, bounce";
Blockly.Msg["MOTION_SETROTATIONSTYLE"] = "set rotation style %1";
Blockly.Msg["MOTION_SETROTATIONSTYLE_LEFTRIGHT"] = "left-right";
Blockly.Msg["MOTION_SETROTATIONSTYLE_DONTROTATE"] = "don't rotate";
Blockly.Msg["MOTION_SETROTATIONSTYLE_ALLAROUND"] = "all around";
Blockly.Msg["MOTION_XPOSITION"] = "x position";
Blockly.Msg["MOTION_YPOSITION"] = "y position";
Blockly.Msg["MOTION_DIRECTION"] = "direction";
Blockly.Msg["MOTION_SCROLLRIGHT"] = "scroll right %1";
Blockly.Msg["MOTION_SCROLLUP"] = "scroll up %1";
Blockly.Msg["MOTION_ALIGNSCENE"] = "align scene %1";
Blockly.Msg["MOTION_ALIGNSCENE_BOTTOMLEFT"] = "bottom-left";
Blockly.Msg["MOTION_ALIGNSCENE_BOTTOMRIGHT"] = "bottom-right";
Blockly.Msg["MOTION_ALIGNSCENE_MIDDLE"] = "middle";
Blockly.Msg["MOTION_ALIGNSCENE_TOPLEFT"] = "top-left";
Blockly.Msg["MOTION_ALIGNSCENE_TOPRIGHT"] = "top-right";
Blockly.Msg["MOTION_XSCROLL"] = "x scroll";
Blockly.Msg["MOTION_YSCROLL"] = "y scroll";
Blockly.Msg["MOTION_STAGE_SELECTED"] = "Stage selected: no motion blocks";
Blockly.Msg["OPERATORS_ADD"] = "%1 + %2";
Blockly.Msg["OPERATORS_SUBTRACT"] = "%1 - %2";
Blockly.Msg["OPERATORS_MULTIPLY"] = "%1 * %2";
Blockly.Msg["OPERATORS_DIVIDE"] = "%1 / %2";
Blockly.Msg["OPERATORS_RANDOM"] = "pick random %1 to %2";
Blockly.Msg["OPERATORS_GT"] = "%1 > %2";
Blockly.Msg["OPERATORS_LT"] = "%1 < %2";
Blockly.Msg["OPERATORS_EQUALS"] = "%1 = %2";
Blockly.Msg["OPERATORS_AND"] = "%1 and %2";
Blockly.Msg["OPERATORS_OR"] = "%1 or %2";
Blockly.Msg["OPERATORS_NOT"] = "not %1";
Blockly.Msg["OPERATORS_JOIN"] = "join %1 %2";
Blockly.Msg["OPERATORS_JOIN_APPLE"] = "apple";
Blockly.Msg["OPERATORS_JOIN_BANANA"] = "banana";
Blockly.Msg["OPERATORS_LETTEROF"] = "letter %1 of %2";
Blockly.Msg["OPERATORS_LETTEROF_APPLE"] = "a";
Blockly.Msg["OPERATORS_LENGTH"] = "length of %1";
Blockly.Msg["OPERATORS_CONTAINS"] = "%1 contains %2?";
Blockly.Msg["OPERATORS_MOD"] = "%1 mod %2";
Blockly.Msg["OPERATORS_ROUND"] = "round %1";
Blockly.Msg["OPERATORS_MATHOP"] = "%1 of %2";
Blockly.Msg["OPERATORS_MATHOP_ABS"] = "abs";
Blockly.Msg["OPERATORS_MATHOP_FLOOR"] = "floor";
Blockly.Msg["OPERATORS_MATHOP_CEILING"] = "ceiling";
Blockly.Msg["OPERATORS_MATHOP_SQRT"] = "sqrt";
Blockly.Msg["OPERATORS_MATHOP_SIN"] = "sin";
Blockly.Msg["OPERATORS_MATHOP_COS"] = "cos";
Blockly.Msg["OPERATORS_MATHOP_TAN"] = "tan";
Blockly.Msg["OPERATORS_MATHOP_ASIN"] = "asin";
Blockly.Msg["OPERATORS_MATHOP_ACOS"] = "acos";
Blockly.Msg["OPERATORS_MATHOP_ATAN"] = "atan";
Blockly.Msg["OPERATORS_MATHOP_LN"] = "ln";
Blockly.Msg["OPERATORS_MATHOP_LOG"] = "log";
Blockly.Msg["OPERATORS_MATHOP_EEXP"] = "e ^";
Blockly.Msg["OPERATORS_MATHOP_10EXP"] = "10 ^";
Blockly.Msg["PROCEDURES_DEFINITION"] = "define %1";
Blockly.Msg["SENSING_TOUCHINGOBJECT"] = "touching %1?";
Blockly.Msg["SENSING_TOUCHINGOBJECT_POINTER"] = "mouse-pointer";
Blockly.Msg["SENSING_TOUCHINGOBJECT_EDGE"] = "edge";
Blockly.Msg["SENSING_TOUCHINGCOLOR"] = "touching color %1?";
Blockly.Msg["SENSING_COLORISTOUCHINGCOLOR"] = "color %1 is touching %2?";
Blockly.Msg["SENSING_DISTANCETO"] = "distance to %1";
Blockly.Msg["SENSING_DISTANCETO_POINTER"] = "mouse-pointer";
Blockly.Msg["SENSING_ASKANDWAIT"] = "ask %1 and wait";
Blockly.Msg["SENSING_ASK_TEXT"] = "What's your name?";
Blockly.Msg["SENSING_ANSWER"] = "answer";
Blockly.Msg["SENSING_KEYPRESSED"] = "key %1 pressed?";
Blockly.Msg["SENSING_MOUSEDOWN"] = "mouse down?";
Blockly.Msg["SENSING_MOUSEX"] = "mouse x";
Blockly.Msg["SENSING_MOUSEY"] = "mouse y";
Blockly.Msg["SENSING_SETDRAGMODE"] = "set drag mode %1";
Blockly.Msg["SENSING_SETDRAGMODE_DRAGGABLE"] = "draggable";
Blockly.Msg["SENSING_SETDRAGMODE_NOTDRAGGABLE"] = "not draggable";
Blockly.Msg["SENSING_LOUDNESS"] = "loudness";
Blockly.Msg["SENSING_LOUD"] = "loud?";
Blockly.Msg["SENSING_TIMER"] = "timer";
Blockly.Msg["SENSING_RESETTIMER"] = "reset timer";
Blockly.Msg["SENSING_OF"] = "%1 of %2";
Blockly.Msg["SENSING_OF_XPOSITION"] = "x position";
Blockly.Msg["SENSING_OF_YPOSITION"] = "y position";
Blockly.Msg["SENSING_OF_DIRECTION"] = "direction";
Blockly.Msg["SENSING_OF_COSTUMENUMBER"] = "costume #";
Blockly.Msg["SENSING_OF_COSTUMENAME"] = "costume name";
Blockly.Msg["SENSING_OF_SIZE"] = "size";
Blockly.Msg["SENSING_OF_VOLUME"] = "volume";
Blockly.Msg["SENSING_OF_BACKDROPNUMBER"] = "backdrop #";
Blockly.Msg["SENSING_OF_BACKDROPNAME"] = "backdrop name";
Blockly.Msg["SENSING_OF_STAGE"] = "Stage";
Blockly.Msg["SENSING_CURRENT"] = "current %1";
Blockly.Msg["SENSING_CURRENT_YEAR"] = "year";
Blockly.Msg["SENSING_CURRENT_MONTH"] = "month";
Blockly.Msg["SENSING_CURRENT_DATE"] = "date";
Blockly.Msg["SENSING_CURRENT_DAYOFWEEK"] = "day of week";
Blockly.Msg["SENSING_CURRENT_HOUR"] = "hour";
Blockly.Msg["SENSING_CURRENT_MINUTE"] = "minute";
Blockly.Msg["SENSING_CURRENT_SECOND"] = "second";
Blockly.Msg["SENSING_DAYSSINCE2000"] = "days since 2000";
Blockly.Msg["SENSING_USERNAME"] = "username";
Blockly.Msg["SENSING_USERID"] = "user id";
Blockly.Msg["SOUND_PLAY"] = "start sound %1";
Blockly.Msg["SOUND_PLAYUNTILDONE"] = "play sound %1 until done";
Blockly.Msg["SOUND_STOPALLSOUNDS"] = "stop all sounds";
Blockly.Msg["SOUND_SETEFFECTO"] = "set %1 effect to %2";
Blockly.Msg["SOUND_CHANGEEFFECTBY"] = "change %1 effect by %2";
Blockly.Msg["SOUND_CLEAREFFECTS"] = "clear sound effects";
Blockly.Msg["SOUND_EFFECTS_PITCH"] = "pitch";
Blockly.Msg["SOUND_EFFECTS_PAN"] = "pan left/right";
Blockly.Msg["SOUND_CHANGEVOLUMEBY"] = "change volume by %1";
Blockly.Msg["SOUND_SETVOLUMETO"] = "set volume to %1%";
Blockly.Msg["SOUND_VOLUME"] = "volume";
Blockly.Msg["SOUND_RECORD"] = "record...";
Blockly.Msg["CATEGORY_MOTION"] = "Motion";
Blockly.Msg["CATEGORY_LOOKS"] = "Looks";
Blockly.Msg["CATEGORY_SOUND"] = "Sound";
Blockly.Msg["CATEGORY_EVENTS"] = "Events";
Blockly.Msg["CATEGORY_CONTROL"] = "Control";
Blockly.Msg["CATEGORY_SENSING"] = "Sensing";
Blockly.Msg["CATEGORY_OPERATORS"] = "Operators";
Blockly.Msg["CATEGORY_VARIABLES"] = "Variables";
Blockly.Msg["CATEGORY_MYBLOCKS"] = "My Blocks";
Blockly.Msg["DUPLICATE"] = "Duplicate";
Blockly.Msg["DELETE"] = "Delete";
Blockly.Msg["ADD_COMMENT"] = "Add Comment";
Blockly.Msg["REMOVE_COMMENT"] = "Remove Comment";
Blockly.Msg["DELETE_BLOCK"] = "Delete Block";
Blockly.Msg["DELETE_X_BLOCKS"] = "Delete %1 Blocks";
Blockly.Msg["DELETE_ALL_BLOCKS"] = "Delete all %1 blocks?";
Blockly.Msg["CLEAN_UP"] = "Clean up Blocks";
Blockly.Msg["HELP"] = "Help";
Blockly.Msg["UNDO"] = "Undo";
Blockly.Msg["REDO"] = "Redo";
Blockly.Msg["EDIT_PROCEDURE"] = "Edit";
Blockly.Msg["SHOW_PROCEDURE_DEFINITION"] = "Go to definition";
Blockly.Msg["WORKSPACE_COMMENT_DEFAULT_TEXT"] = "Say something...";
Blockly.Msg["COLOUR_HUE_LABEL"] = "Color";
Blockly.Msg["COLOUR_SATURATION_LABEL"] = "Saturation";
Blockly.Msg["COLOUR_BRIGHTNESS_LABEL"] = "Brightness";
Blockly.Msg["CHANGE_VALUE_TITLE"] = "Change value:";
Blockly.Msg["RENAME_VARIABLE"] = "Rename variable";
Blockly.Msg["RENAME_VARIABLE_TITLE"] = "Rename all \"%1\" variables to:";
Blockly.Msg["RENAME_VARIABLE_MODAL_TITLE"] = "Rename Variable";
Blockly.Msg["NEW_VARIABLE"] = "Make a Variable";
Blockly.Msg["NEW_VARIABLE_TITLE"] = "New variable name:";
Blockly.Msg["VARIABLE_MODAL_TITLE"] = "New Variable";
Blockly.Msg["VARIABLE_ALREADY_EXISTS"] = "A variable named \"%1\" already exists.";
Blockly.Msg["VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE"] = "A variable named \"%1\" already exists for another variable of type \"%2\".";
Blockly.Msg["DELETE_VARIABLE_CONFIRMATION"] = "Delete %1 uses of the \"%2\" variable?";
Blockly.Msg["CANNOT_DELETE_VARIABLE_PROCEDURE"] = "Can't delete the variable \"%1\" because it's part of the definition of the function \"%2\"";
Blockly.Msg["DELETE_VARIABLE"] = "Delete the \"%1\" variable";
Blockly.Msg["NEW_PROCEDURE"] = "Make a Block";
Blockly.Msg["PROCEDURE_ALREADY_EXISTS"] = "A procedure named \"%1\" already exists.";
Blockly.Msg["PROCEDURE_DEFAULT_NAME"] = "block name";
Blockly.Msg["PROCEDURE_USED"] = "To delete a block definition, first remove all uses of the block";
Blockly.Msg["NEW_LIST"] = "Make a List";
Blockly.Msg["NEW_LIST_TITLE"] = "New list name:";
Blockly.Msg["LIST_MODAL_TITLE"] = "New List";
Blockly.Msg["LIST_ALREADY_EXISTS"] = "A list named \"%1\" already exists.";
Blockly.Msg["RENAME_LIST_TITLE"] = "Rename all \"%1\" lists to:";
Blockly.Msg["RENAME_LIST_MODAL_TITLE"] = "Rename List";
Blockly.Msg["DEFAULT_LIST_ITEM"] = "thing";
Blockly.Msg["DELETE_LIST"] = "Delete the \"%1\" list";
Blockly.Msg["RENAME_LIST"] = "Rename list";
Blockly.Msg["NEW_BROADCAST_MESSAGE"] = "New message";
Blockly.Msg["NEW_BROADCAST_MESSAGE_TITLE"] = "New message name:";
Blockly.Msg["BROADCAST_MODAL_TITLE"] = "New Message";
Blockly.Msg["DEFAULT_BROADCAST_MESSAGE_NAME"] = "message1";

View File

@@ -0,0 +1,285 @@
{
"CONTROL_FOREVER": "forever",
"CONTROL_REPEAT": "repeat %1",
"CONTROL_IF": "if %1 then",
"CONTROL_ELSE": "else",
"CONTROL_STOP": "stop",
"CONTROL_STOP_ALL": "all",
"CONTROL_STOP_THIS": "this script",
"CONTROL_STOP_OTHER": "other scripts in sprite",
"CONTROL_WAIT": "wait %1 seconds",
"CONTROL_WAITUNTIL": "wait until %1",
"CONTROL_REPEATUNTIL": "repeat until %1",
"CONTROL_WHILE": "while %1",
"CONTROL_FOREACH": "for each %1 in %2",
"CONTROL_STARTASCLONE": "when I start as a clone",
"CONTROL_CREATECLONEOF": "create clone of %1",
"CONTROL_CREATECLONEOF_MYSELF": "myself",
"CONTROL_DELETETHISCLONE": "delete this clone",
"CONTROL_COUNTER": "counter",
"CONTROL_INCRCOUNTER": "increment counter",
"CONTROL_CLEARCOUNTER": "clear counter",
"CONTROL_ALLATONCE": "all at once",
"DATA_SETVARIABLETO": "set %1 to %2",
"DATA_CHANGEVARIABLEBY": "change %1 by %2",
"DATA_SHOWVARIABLE": "show variable %1",
"DATA_HIDEVARIABLE": "hide variable %1",
"DATA_ADDTOLIST": "add %1 to %2",
"DATA_DELETEOFLIST": "delete %1 of %2",
"DATA_DELETEALLOFLIST": "delete all of %1",
"DATA_INSERTATLIST": "insert %1 at %2 of %3",
"DATA_REPLACEITEMOFLIST": "replace item %1 of %2 with %3",
"DATA_ITEMOFLIST": "item %1 of %2",
"DATA_ITEMNUMOFLIST": "item # of %1 in %2",
"DATA_LENGTHOFLIST": "length of %1",
"DATA_LISTCONTAINSITEM": "%1 contains %2?",
"DATA_SHOWLIST": "show list %1",
"DATA_HIDELIST": "hide list %1",
"DATA_INDEX_ALL": "all",
"DATA_INDEX_LAST": "last",
"DATA_INDEX_RANDOM": "random",
"EVENT_WHENFLAGCLICKED": "when %1 clicked",
"EVENT_WHENTHISSPRITECLICKED": "when this sprite clicked",
"EVENT_WHENSTAGECLICKED": "when stage clicked",
"EVENT_WHENTOUCHINGOBJECT": "when this sprite touches %1",
"EVENT_WHENBROADCASTRECEIVED": "when I receive %1",
"EVENT_WHENBACKDROPSWITCHESTO": "when backdrop switches to %1",
"EVENT_WHENGREATERTHAN": "when %1 > %2",
"EVENT_WHENGREATERTHAN_TIMER": "timer",
"EVENT_WHENGREATERTHAN_LOUDNESS": "loudness",
"EVENT_BROADCAST": "broadcast %1",
"EVENT_BROADCASTANDWAIT": "broadcast %1 and wait",
"EVENT_WHENKEYPRESSED": "when %1 key pressed",
"EVENT_WHENKEYPRESSED_SPACE": "space",
"EVENT_WHENKEYPRESSED_LEFT": "left arrow",
"EVENT_WHENKEYPRESSED_RIGHT": "right arrow",
"EVENT_WHENKEYPRESSED_DOWN": "down arrow",
"EVENT_WHENKEYPRESSED_UP": "up arrow",
"EVENT_WHENKEYPRESSED_ANY": "any",
"LOOKS_SAYFORSECS": "say %1 for %2 seconds",
"LOOKS_SAY": "say %1",
"LOOKS_HELLO": "Hello!",
"LOOKS_THINKFORSECS": "think %1 for %2 seconds",
"LOOKS_THINK": "think %1",
"LOOKS_HMM": "Hmm...",
"LOOKS_SHOW": "show",
"LOOKS_HIDE": "hide",
"LOOKS_HIDEALLSPRITES": "hide all sprites",
"LOOKS_EFFECT_COLOR": "color",
"LOOKS_EFFECT_FISHEYE": "fisheye",
"LOOKS_EFFECT_WHIRL": "whirl",
"LOOKS_EFFECT_PIXELATE": "pixelate",
"LOOKS_EFFECT_MOSAIC": "mosaic",
"LOOKS_EFFECT_BRIGHTNESS": "brightness",
"LOOKS_EFFECT_GHOST": "ghost",
"LOOKS_CHANGEEFFECTBY": "change %1 effect by %2",
"LOOKS_SETEFFECTTO": "set %1 effect to %2",
"LOOKS_CLEARGRAPHICEFFECTS": "clear graphic effects",
"LOOKS_CHANGESIZEBY": "change size by %1",
"LOOKS_SETSIZETO": "set size to %1 %",
"LOOKS_SIZE": "size",
"LOOKS_CHANGESTRETCHBY": "change stretch by %1",
"LOOKS_SETSTRETCHTO": "set stretch to %1 %",
"LOOKS_SWITCHCOSTUMETO": "switch costume to %1",
"LOOKS_NEXTCOSTUME": "next costume",
"LOOKS_SWITCHBACKDROPTO": "switch backdrop to %1",
"LOOKS_GOTOFRONTBACK": "go to %1 layer",
"LOOKS_GOTOFRONTBACK_FRONT": "front",
"LOOKS_GOTOFRONTBACK_BACK": "back",
"LOOKS_GOFORWARDBACKWARDLAYERS": "go %1 %2 layers",
"LOOKS_GOFORWARDBACKWARDLAYERS_FORWARD": "forward",
"LOOKS_GOFORWARDBACKWARDLAYERS_BACKWARD": "backward",
"LOOKS_BACKDROPNUMBERNAME": "backdrop %1",
"LOOKS_COSTUMENUMBERNAME": "costume %1",
"LOOKS_NUMBERNAME_NUMBER": "number",
"LOOKS_NUMBERNAME_NAME": "name",
"LOOKS_SWITCHBACKDROPTOANDWAIT": "switch backdrop to %1 and wait",
"LOOKS_NEXTBACKDROP_BLOCK": "next backdrop",
"LOOKS_NEXTBACKDROP": "next backdrop",
"LOOKS_PREVIOUSBACKDROP": "previous backdrop",
"LOOKS_RANDOMBACKDROP": "random backdrop",
"MOTION_MOVESTEPS": "move %1 steps",
"MOTION_TURNLEFT": "turn %1 %2 degrees",
"MOTION_TURNRIGHT": "turn %1 %2 degrees",
"MOTION_POINTINDIRECTION": "point in direction %1",
"MOTION_POINTTOWARDS": "point towards %1",
"MOTION_POINTTOWARDS_POINTER": "mouse-pointer",
"MOTION_POINTTOWARDS_RANDOM": "random direction",
"MOTION_GOTO": "go to %1",
"MOTION_GOTO_POINTER": "mouse-pointer",
"MOTION_GOTO_RANDOM": "random position",
"MOTION_GOTOXY": "go to x: %1 y: %2",
"MOTION_GLIDESECSTOXY": "glide %1 secs to x: %2 y: %3",
"MOTION_GLIDETO": "glide %1 secs to %2",
"MOTION_GLIDETO_POINTER": "mouse-pointer",
"MOTION_GLIDETO_RANDOM": "random position",
"MOTION_CHANGEXBY": "change x by %1",
"MOTION_SETX": "set x to %1",
"MOTION_CHANGEYBY": "change y by %1",
"MOTION_SETY": "set y to %1",
"MOTION_IFONEDGEBOUNCE": "if on edge, bounce",
"MOTION_SETROTATIONSTYLE": "set rotation style %1",
"MOTION_SETROTATIONSTYLE_LEFTRIGHT": "left-right",
"MOTION_SETROTATIONSTYLE_DONTROTATE": "don't rotate",
"MOTION_SETROTATIONSTYLE_ALLAROUND": "all around",
"MOTION_XPOSITION": "x position",
"MOTION_YPOSITION": "y position",
"MOTION_DIRECTION": "direction",
"MOTION_SCROLLRIGHT": "scroll right %1",
"MOTION_SCROLLUP": "scroll up %1",
"MOTION_ALIGNSCENE": "align scene %1",
"MOTION_ALIGNSCENE_BOTTOMLEFT": "bottom-left",
"MOTION_ALIGNSCENE_BOTTOMRIGHT": "bottom-right",
"MOTION_ALIGNSCENE_MIDDLE": "middle",
"MOTION_ALIGNSCENE_TOPLEFT": "top-left",
"MOTION_ALIGNSCENE_TOPRIGHT": "top-right",
"MOTION_XSCROLL": "x scroll",
"MOTION_YSCROLL": "y scroll",
"MOTION_STAGE_SELECTED": "Stage selected: no motion blocks",
"OPERATORS_ADD": "%1 + %2",
"OPERATORS_SUBTRACT": "%1 - %2",
"OPERATORS_MULTIPLY": "%1 * %2",
"OPERATORS_DIVIDE": "%1 / %2",
"OPERATORS_RANDOM": "pick random %1 to %2",
"OPERATORS_GT": "%1 > %2",
"OPERATORS_LT": "%1 < %2",
"OPERATORS_EQUALS": "%1 = %2",
"OPERATORS_AND": "%1 and %2",
"OPERATORS_OR": "%1 or %2",
"OPERATORS_NOT": "not %1",
"OPERATORS_JOIN": "join %1 %2",
"OPERATORS_JOIN_APPLE": "apple",
"OPERATORS_JOIN_BANANA": "banana",
"OPERATORS_LETTEROF": "letter %1 of %2",
"OPERATORS_LETTEROF_APPLE": "a",
"OPERATORS_LENGTH": "length of %1",
"OPERATORS_CONTAINS": "%1 contains %2?",
"OPERATORS_MOD": "%1 mod %2",
"OPERATORS_ROUND": "round %1",
"OPERATORS_MATHOP": "%1 of %2",
"OPERATORS_MATHOP_ABS": "abs",
"OPERATORS_MATHOP_FLOOR": "floor",
"OPERATORS_MATHOP_CEILING": "ceiling",
"OPERATORS_MATHOP_SQRT": "sqrt",
"OPERATORS_MATHOP_SIN": "sin",
"OPERATORS_MATHOP_COS": "cos",
"OPERATORS_MATHOP_TAN": "tan",
"OPERATORS_MATHOP_ASIN": "asin",
"OPERATORS_MATHOP_ACOS": "acos",
"OPERATORS_MATHOP_ATAN": "atan",
"OPERATORS_MATHOP_LN": "ln",
"OPERATORS_MATHOP_LOG": "log",
"OPERATORS_MATHOP_EEXP": "e ^",
"OPERATORS_MATHOP_10EXP": "10 ^",
"PROCEDURES_DEFINITION": "define %1",
"SENSING_TOUCHINGOBJECT": "touching %1?",
"SENSING_TOUCHINGOBJECT_POINTER": "mouse-pointer",
"SENSING_TOUCHINGOBJECT_EDGE": "edge",
"SENSING_TOUCHINGCOLOR": "touching color %1?",
"SENSING_COLORISTOUCHINGCOLOR": "color %1 is touching %2?",
"SENSING_DISTANCETO": "distance to %1",
"SENSING_DISTANCETO_POINTER": "mouse-pointer",
"SENSING_ASKANDWAIT": "ask %1 and wait",
"SENSING_ASK_TEXT": "What's your name?",
"SENSING_ANSWER": "answer",
"SENSING_KEYPRESSED": "key %1 pressed?",
"SENSING_MOUSEDOWN": "mouse down?",
"SENSING_MOUSEX": "mouse x",
"SENSING_MOUSEY": "mouse y",
"SENSING_SETDRAGMODE": "set drag mode %1",
"SENSING_SETDRAGMODE_DRAGGABLE": "draggable",
"SENSING_SETDRAGMODE_NOTDRAGGABLE": "not draggable",
"SENSING_LOUDNESS": "loudness",
"SENSING_LOUD": "loud?",
"SENSING_TIMER": "timer",
"SENSING_RESETTIMER": "reset timer",
"SENSING_OF": "%1 of %2",
"SENSING_OF_XPOSITION": "x position",
"SENSING_OF_YPOSITION": "y position",
"SENSING_OF_DIRECTION": "direction",
"SENSING_OF_COSTUMENUMBER": "costume #",
"SENSING_OF_COSTUMENAME": "costume name",
"SENSING_OF_SIZE": "size",
"SENSING_OF_VOLUME": "volume",
"SENSING_OF_BACKDROPNUMBER": "backdrop #",
"SENSING_OF_BACKDROPNAME": "backdrop name",
"SENSING_OF_STAGE": "Stage",
"SENSING_CURRENT": "current %1",
"SENSING_CURRENT_YEAR": "year",
"SENSING_CURRENT_MONTH": "month",
"SENSING_CURRENT_DATE": "date",
"SENSING_CURRENT_DAYOFWEEK": "day of week",
"SENSING_CURRENT_HOUR": "hour",
"SENSING_CURRENT_MINUTE": "minute",
"SENSING_CURRENT_SECOND": "second",
"SENSING_DAYSSINCE2000": "days since 2000",
"SENSING_USERNAME": "username",
"SENSING_USERID": "user id",
"SOUND_PLAY": "start sound %1",
"SOUND_PLAYUNTILDONE": "play sound %1 until done",
"SOUND_STOPALLSOUNDS": "stop all sounds",
"SOUND_SETEFFECTO": "set %1 effect to %2",
"SOUND_CHANGEEFFECTBY": "change %1 effect by %2",
"SOUND_CLEAREFFECTS": "clear sound effects",
"SOUND_EFFECTS_PITCH": "pitch",
"SOUND_EFFECTS_PAN": "pan left/right",
"SOUND_CHANGEVOLUMEBY": "change volume by %1",
"SOUND_SETVOLUMETO": "set volume to %1%",
"SOUND_VOLUME": "volume",
"SOUND_RECORD": "record...",
"CATEGORY_MOTION": "Motion",
"CATEGORY_LOOKS": "Looks",
"CATEGORY_SOUND": "Sound",
"CATEGORY_EVENTS": "Events",
"CATEGORY_CONTROL": "Control",
"CATEGORY_SENSING": "Sensing",
"CATEGORY_OPERATORS": "Operators",
"CATEGORY_VARIABLES": "Variables",
"CATEGORY_MYBLOCKS": "My Blocks",
"DUPLICATE": "Duplicate",
"DELETE": "Delete",
"ADD_COMMENT": "Add Comment",
"REMOVE_COMMENT": "Remove Comment",
"DELETE_BLOCK": "Delete Block",
"DELETE_X_BLOCKS": "Delete %1 Blocks",
"DELETE_ALL_BLOCKS": "Delete all %1 blocks?",
"CLEAN_UP": "Clean up Blocks",
"HELP": "Help",
"UNDO": "Undo",
"REDO": "Redo",
"EDIT_PROCEDURE": "Edit",
"SHOW_PROCEDURE_DEFINITION": "Go to definition",
"WORKSPACE_COMMENT_DEFAULT_TEXT": "Say something...",
"COLOUR_HUE_LABEL": "Color",
"COLOUR_SATURATION_LABEL": "Saturation",
"COLOUR_BRIGHTNESS_LABEL": "Brightness",
"CHANGE_VALUE_TITLE": "Change value:",
"RENAME_VARIABLE": "Rename variable",
"RENAME_VARIABLE_TITLE": "Rename all \"%1\" variables to:",
"RENAME_VARIABLE_MODAL_TITLE": "Rename Variable",
"NEW_VARIABLE": "Make a Variable",
"NEW_VARIABLE_TITLE": "New variable name:",
"VARIABLE_MODAL_TITLE": "New Variable",
"VARIABLE_ALREADY_EXISTS": "A variable named \"%1\" already exists.",
"VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE": "A variable named \"%1\" already exists for another variable of type \"%2\".",
"DELETE_VARIABLE_CONFIRMATION": "Delete %1 uses of the \"%2\" variable?",
"CANNOT_DELETE_VARIABLE_PROCEDURE": "Can't delete the variable \"%1\" because it's part of the definition of the function \"%2\"",
"DELETE_VARIABLE": "Delete the \"%1\" variable",
"NEW_PROCEDURE": "Make a Block",
"PROCEDURE_ALREADY_EXISTS": "A procedure named \"%1\" already exists.",
"PROCEDURE_DEFAULT_NAME": "block name",
"PROCEDURE_USED": "To delete a block definition, first remove all uses of the block",
"NEW_LIST": "Make a List",
"NEW_LIST_TITLE": "New list name:",
"LIST_MODAL_TITLE": "New List",
"LIST_ALREADY_EXISTS": "A list named \"%1\" already exists.",
"RENAME_LIST_TITLE": "Rename all \"%1\" lists to:",
"RENAME_LIST_MODAL_TITLE": "Rename List",
"DEFAULT_LIST_ITEM": "thing",
"DELETE_LIST": "Delete the \"%1\" list",
"RENAME_LIST": "Rename list",
"NEW_BROADCAST_MESSAGE": "New message",
"NEW_BROADCAST_MESSAGE_TITLE": "New message name:",
"BROADCAST_MODAL_TITLE": "New Message",
"DEFAULT_BROADCAST_MESSAGE_NAME": "message1"
}

View File

@@ -0,0 +1,359 @@
/**
* @license
* Visual Blocks Language
*
* Copyright 2012 Google Inc.
* https://developers.google.com/blockly/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @fileoverview English strings.
* @author ascii@media.mit.edu (Andrew Sliwinski)
*
* After modifying this file, run `npm run translate` from the root directory
* to regenerate `./msg/json/en.json`.
* IMPORTANT:
* All message strings must use single quotes for the scripts to work properly
*/
'use strict';
goog.provide('Blockly.Msg.en');
goog.require('Blockly.Msg');
// Control blocks
Blockly.Msg.CONTROL_FOREVER = 'forever';
Blockly.Msg.CONTROL_REPEAT = 'repeat %1';
Blockly.Msg.CONTROL_IF = 'if %1 then';
Blockly.Msg.CONTROL_ELSE = 'else';
Blockly.Msg.CONTROL_STOP = 'stop';
Blockly.Msg.CONTROL_STOP_ALL = 'all';
Blockly.Msg.CONTROL_STOP_THIS = 'this script';
Blockly.Msg.CONTROL_STOP_OTHER = 'other scripts in sprite';
Blockly.Msg.CONTROL_WAIT = 'wait %1 seconds';
Blockly.Msg.CONTROL_WAITUNTIL = 'wait until %1';
Blockly.Msg.CONTROL_REPEATUNTIL = 'repeat until %1';
Blockly.Msg.CONTROL_WHILE = 'while %1';
Blockly.Msg.CONTROL_FOREACH = 'for each %1 in %2';
Blockly.Msg.CONTROL_STARTASCLONE = 'when I start as a clone';
Blockly.Msg.CONTROL_CREATECLONEOF = 'create clone of %1';
Blockly.Msg.CONTROL_CREATECLONEOF_MYSELF = 'myself';
Blockly.Msg.CONTROL_DELETETHISCLONE = 'delete this clone';
Blockly.Msg.CONTROL_COUNTER = 'counter';
Blockly.Msg.CONTROL_INCRCOUNTER = 'increment counter';
Blockly.Msg.CONTROL_CLEARCOUNTER = 'clear counter';
Blockly.Msg.CONTROL_ALLATONCE = 'all at once';
// Data blocks
Blockly.Msg.DATA_SETVARIABLETO = 'set %1 to %2';
Blockly.Msg.DATA_CHANGEVARIABLEBY = 'change %1 by %2';
Blockly.Msg.DATA_SHOWVARIABLE = 'show variable %1';
Blockly.Msg.DATA_HIDEVARIABLE = 'hide variable %1';
Blockly.Msg.DATA_ADDTOLIST = 'add %1 to %2';
Blockly.Msg.DATA_DELETEOFLIST = 'delete %1 of %2';
Blockly.Msg.DATA_DELETEALLOFLIST = 'delete all of %1';
Blockly.Msg.DATA_INSERTATLIST = 'insert %1 at %2 of %3';
Blockly.Msg.DATA_REPLACEITEMOFLIST = 'replace item %1 of %2 with %3';
Blockly.Msg.DATA_ITEMOFLIST = 'item %1 of %2';
Blockly.Msg.DATA_ITEMNUMOFLIST = 'item # of %1 in %2';
Blockly.Msg.DATA_LENGTHOFLIST = 'length of %1';
Blockly.Msg.DATA_LISTCONTAINSITEM = '%1 contains %2?';
Blockly.Msg.DATA_SHOWLIST = 'show list %1';
Blockly.Msg.DATA_HIDELIST = 'hide list %1';
Blockly.Msg.DATA_INDEX_ALL = 'all';
Blockly.Msg.DATA_INDEX_LAST = 'last';
Blockly.Msg.DATA_INDEX_RANDOM = 'random';
// Event blocks
Blockly.Msg.EVENT_WHENFLAGCLICKED = 'when %1 clicked';
Blockly.Msg.EVENT_WHENTHISSPRITECLICKED = 'when this sprite clicked';
Blockly.Msg.EVENT_WHENSTAGECLICKED = 'when stage clicked';
Blockly.Msg.EVENT_WHENTOUCHINGOBJECT = 'when this sprite touches %1';
Blockly.Msg.EVENT_WHENBROADCASTRECEIVED = 'when I receive %1';
Blockly.Msg.EVENT_WHENBACKDROPSWITCHESTO = 'when backdrop switches to %1';
Blockly.Msg.EVENT_WHENGREATERTHAN = 'when %1 > %2';
Blockly.Msg.EVENT_WHENGREATERTHAN_TIMER = 'timer';
Blockly.Msg.EVENT_WHENGREATERTHAN_LOUDNESS = 'loudness';
Blockly.Msg.EVENT_BROADCAST = 'broadcast %1';
Blockly.Msg.EVENT_BROADCASTANDWAIT = 'broadcast %1 and wait';
Blockly.Msg.EVENT_WHENKEYPRESSED = 'when %1 key pressed';
Blockly.Msg.EVENT_WHENKEYPRESSED_SPACE = 'space';
Blockly.Msg.EVENT_WHENKEYPRESSED_LEFT = 'left arrow';
Blockly.Msg.EVENT_WHENKEYPRESSED_RIGHT = 'right arrow';
Blockly.Msg.EVENT_WHENKEYPRESSED_DOWN = 'down arrow';
Blockly.Msg.EVENT_WHENKEYPRESSED_UP = 'up arrow';
Blockly.Msg.EVENT_WHENKEYPRESSED_ANY = 'any';
// Looks blocks
Blockly.Msg.LOOKS_SAYFORSECS = 'say %1 for %2 seconds';
Blockly.Msg.LOOKS_SAY = 'say %1';
Blockly.Msg.LOOKS_HELLO = 'Hello!';
Blockly.Msg.LOOKS_THINKFORSECS = 'think %1 for %2 seconds';
Blockly.Msg.LOOKS_THINK = 'think %1';
Blockly.Msg.LOOKS_HMM = 'Hmm...';
Blockly.Msg.LOOKS_SHOW = 'show';
Blockly.Msg.LOOKS_HIDE = 'hide';
Blockly.Msg.LOOKS_HIDEALLSPRITES = 'hide all sprites';
Blockly.Msg.LOOKS_EFFECT_COLOR = 'color';
Blockly.Msg.LOOKS_EFFECT_FISHEYE = 'fisheye';
Blockly.Msg.LOOKS_EFFECT_WHIRL = 'whirl';
Blockly.Msg.LOOKS_EFFECT_PIXELATE = 'pixelate';
Blockly.Msg.LOOKS_EFFECT_MOSAIC = 'mosaic';
Blockly.Msg.LOOKS_EFFECT_BRIGHTNESS = 'brightness';
Blockly.Msg.LOOKS_EFFECT_GHOST = 'ghost';
Blockly.Msg.LOOKS_CHANGEEFFECTBY = 'change %1 effect by %2';
Blockly.Msg.LOOKS_SETEFFECTTO = 'set %1 effect to %2';
Blockly.Msg.LOOKS_CLEARGRAPHICEFFECTS = 'clear graphic effects';
Blockly.Msg.LOOKS_CHANGESIZEBY = 'change size by %1';
Blockly.Msg.LOOKS_SETSIZETO = 'set size to %1 %';
Blockly.Msg.LOOKS_SIZE = 'size';
Blockly.Msg.LOOKS_CHANGESTRETCHBY = 'change stretch by %1';
Blockly.Msg.LOOKS_SETSTRETCHTO = 'set stretch to %1 %';
Blockly.Msg.LOOKS_SWITCHCOSTUMETO = 'switch costume to %1';
Blockly.Msg.LOOKS_NEXTCOSTUME = 'next costume';
Blockly.Msg.LOOKS_SWITCHBACKDROPTO = 'switch backdrop to %1';
Blockly.Msg.LOOKS_GOTOFRONTBACK = 'go to %1 layer';
Blockly.Msg.LOOKS_GOTOFRONTBACK_FRONT = 'front';
Blockly.Msg.LOOKS_GOTOFRONTBACK_BACK = 'back';
Blockly.Msg.LOOKS_GOFORWARDBACKWARDLAYERS = 'go %1 %2 layers';
Blockly.Msg.LOOKS_GOFORWARDBACKWARDLAYERS_FORWARD = 'forward';
Blockly.Msg.LOOKS_GOFORWARDBACKWARDLAYERS_BACKWARD = 'backward';
Blockly.Msg.LOOKS_BACKDROPNUMBERNAME = 'backdrop %1';
Blockly.Msg.LOOKS_COSTUMENUMBERNAME = 'costume %1';
Blockly.Msg.LOOKS_NUMBERNAME_NUMBER = 'number';
Blockly.Msg.LOOKS_NUMBERNAME_NAME = 'name';
Blockly.Msg.LOOKS_SWITCHBACKDROPTOANDWAIT = 'switch backdrop to %1 and wait';
Blockly.Msg.LOOKS_NEXTBACKDROP_BLOCK = 'next backdrop';
Blockly.Msg.LOOKS_NEXTBACKDROP = 'next backdrop';
Blockly.Msg.LOOKS_PREVIOUSBACKDROP = 'previous backdrop';
Blockly.Msg.LOOKS_RANDOMBACKDROP = 'random backdrop';
// Motion blocks
Blockly.Msg.MOTION_MOVESTEPS = 'move %1 steps';
Blockly.Msg.MOTION_TURNLEFT = 'turn %1 %2 degrees';
Blockly.Msg.MOTION_TURNRIGHT = 'turn %1 %2 degrees';
Blockly.Msg.MOTION_POINTINDIRECTION = 'point in direction %1';
Blockly.Msg.MOTION_POINTTOWARDS = 'point towards %1';
Blockly.Msg.MOTION_POINTTOWARDS_POINTER = 'mouse-pointer';
Blockly.Msg.MOTION_POINTTOWARDS_RANDOM = 'random direction';
Blockly.Msg.MOTION_GOTO = 'go to %1';
Blockly.Msg.MOTION_GOTO_POINTER = 'mouse-pointer';
Blockly.Msg.MOTION_GOTO_RANDOM = 'random position';
Blockly.Msg.MOTION_GOTOXY = 'go to x: %1 y: %2';
Blockly.Msg.MOTION_GLIDESECSTOXY = 'glide %1 secs to x: %2 y: %3';
Blockly.Msg.MOTION_GLIDETO = 'glide %1 secs to %2';
Blockly.Msg.MOTION_GLIDETO_POINTER = 'mouse-pointer';
Blockly.Msg.MOTION_GLIDETO_RANDOM = 'random position';
Blockly.Msg.MOTION_CHANGEXBY = 'change x by %1';
Blockly.Msg.MOTION_SETX = 'set x to %1';
Blockly.Msg.MOTION_CHANGEYBY = 'change y by %1';
Blockly.Msg.MOTION_SETY = 'set y to %1';
Blockly.Msg.MOTION_IFONEDGEBOUNCE = 'if on edge, bounce';
Blockly.Msg.MOTION_SETROTATIONSTYLE = 'set rotation style %1';
Blockly.Msg.MOTION_SETROTATIONSTYLE_LEFTRIGHT = 'left-right';
Blockly.Msg.MOTION_SETROTATIONSTYLE_DONTROTATE = 'don\'t rotate';
Blockly.Msg.MOTION_SETROTATIONSTYLE_ALLAROUND = 'all around';
Blockly.Msg.MOTION_XPOSITION = 'x position';
Blockly.Msg.MOTION_YPOSITION = 'y position';
Blockly.Msg.MOTION_DIRECTION = 'direction';
Blockly.Msg.MOTION_SCROLLRIGHT = 'scroll right %1';
Blockly.Msg.MOTION_SCROLLUP = 'scroll up %1';
Blockly.Msg.MOTION_ALIGNSCENE = 'align scene %1';
Blockly.Msg.MOTION_ALIGNSCENE_BOTTOMLEFT = 'bottom-left';
Blockly.Msg.MOTION_ALIGNSCENE_BOTTOMRIGHT = 'bottom-right';
Blockly.Msg.MOTION_ALIGNSCENE_MIDDLE = 'middle';
Blockly.Msg.MOTION_ALIGNSCENE_TOPLEFT = 'top-left';
Blockly.Msg.MOTION_ALIGNSCENE_TOPRIGHT = 'top-right';
Blockly.Msg.MOTION_XSCROLL = 'x scroll';
Blockly.Msg.MOTION_YSCROLL = 'y scroll';
Blockly.Msg.MOTION_STAGE_SELECTED = 'Stage selected: no motion blocks';
// Operators blocks
Blockly.Msg.OPERATORS_ADD = '%1 + %2';
Blockly.Msg.OPERATORS_SUBTRACT = '%1 - %2';
Blockly.Msg.OPERATORS_MULTIPLY = '%1 * %2';
Blockly.Msg.OPERATORS_DIVIDE = '%1 / %2';
Blockly.Msg.OPERATORS_RANDOM = 'pick random %1 to %2';
Blockly.Msg.OPERATORS_GT = '%1 > %2';
Blockly.Msg.OPERATORS_LT = '%1 < %2';
Blockly.Msg.OPERATORS_EQUALS = '%1 = %2';
Blockly.Msg.OPERATORS_AND = '%1 and %2';
Blockly.Msg.OPERATORS_OR = '%1 or %2';
Blockly.Msg.OPERATORS_NOT = 'not %1';
Blockly.Msg.OPERATORS_JOIN = 'join %1 %2';
Blockly.Msg.OPERATORS_JOIN_APPLE = 'apple';
Blockly.Msg.OPERATORS_JOIN_BANANA = 'banana';
Blockly.Msg.OPERATORS_LETTEROF = 'letter %1 of %2';
Blockly.Msg.OPERATORS_LETTEROF_APPLE = 'a';
Blockly.Msg.OPERATORS_LENGTH = 'length of %1';
Blockly.Msg.OPERATORS_CONTAINS = '%1 contains %2?';
Blockly.Msg.OPERATORS_MOD = '%1 mod %2';
Blockly.Msg.OPERATORS_ROUND = 'round %1';
Blockly.Msg.OPERATORS_MATHOP = '%1 of %2';
Blockly.Msg.OPERATORS_MATHOP_ABS = 'abs';
Blockly.Msg.OPERATORS_MATHOP_FLOOR = 'floor';
Blockly.Msg.OPERATORS_MATHOP_CEILING = 'ceiling';
Blockly.Msg.OPERATORS_MATHOP_SQRT = 'sqrt';
Blockly.Msg.OPERATORS_MATHOP_SIN = 'sin';
Blockly.Msg.OPERATORS_MATHOP_COS = 'cos';
Blockly.Msg.OPERATORS_MATHOP_TAN = 'tan';
Blockly.Msg.OPERATORS_MATHOP_ASIN = 'asin';
Blockly.Msg.OPERATORS_MATHOP_ACOS = 'acos';
Blockly.Msg.OPERATORS_MATHOP_ATAN = 'atan';
Blockly.Msg.OPERATORS_MATHOP_LN = 'ln';
Blockly.Msg.OPERATORS_MATHOP_LOG = 'log';
Blockly.Msg.OPERATORS_MATHOP_EEXP = 'e ^';
Blockly.Msg.OPERATORS_MATHOP_10EXP = '10 ^';
// Procedures blocks
Blockly.Msg.PROCEDURES_DEFINITION = 'define %1';
// TW Procedures blocks
Blockly.Msg.PROCEDURES_RETURN = 'return %1';
Blockly.Msg.PROCEDURES_TO_REPORTER = 'Change To Reporter';
Blockly.Msg.PROCEDURES_TO_STATEMENT = 'Change To Stacked Block';
Blockly.Msg.PROCEDURES_DOCS = 'How to use return';
// Sensing blocks
Blockly.Msg.SENSING_TOUCHINGOBJECT = 'touching %1?';
Blockly.Msg.SENSING_TOUCHINGOBJECT_POINTER = 'mouse-pointer';
Blockly.Msg.SENSING_TOUCHINGOBJECT_EDGE = 'edge';
Blockly.Msg.SENSING_TOUCHINGCOLOR = 'touching color %1?';
Blockly.Msg.SENSING_COLORISTOUCHINGCOLOR = 'color %1 is touching %2?';
Blockly.Msg.SENSING_DISTANCETO = 'distance to %1';
Blockly.Msg.SENSING_DISTANCETO_POINTER = 'mouse-pointer';
Blockly.Msg.SENSING_ASKANDWAIT = 'ask %1 and wait';
Blockly.Msg.SENSING_ASK_TEXT = 'What\'s your name?';
Blockly.Msg.SENSING_ANSWER = 'answer';
Blockly.Msg.SENSING_KEYPRESSED = 'key %1 pressed?';
Blockly.Msg.SENSING_MOUSEDOWN = 'mouse down?';
Blockly.Msg.SENSING_MOUSEX = 'mouse x';
Blockly.Msg.SENSING_MOUSEY = 'mouse y';
Blockly.Msg.SENSING_SETDRAGMODE = 'set drag mode %1';
Blockly.Msg.SENSING_SETDRAGMODE_DRAGGABLE = 'draggable';
Blockly.Msg.SENSING_SETDRAGMODE_NOTDRAGGABLE = 'not draggable';
Blockly.Msg.SENSING_LOUDNESS = 'loudness';
Blockly.Msg.SENSING_LOUD = 'loud?';
Blockly.Msg.SENSING_TIMER = 'timer';
Blockly.Msg.SENSING_RESETTIMER = 'reset timer';
Blockly.Msg.SENSING_OF = '%1 of %2';
Blockly.Msg.SENSING_OF_XPOSITION = 'x position';
Blockly.Msg.SENSING_OF_YPOSITION = 'y position';
Blockly.Msg.SENSING_OF_DIRECTION = 'direction';
Blockly.Msg.SENSING_OF_COSTUMENUMBER = 'costume #';
Blockly.Msg.SENSING_OF_COSTUMENAME = 'costume name';
Blockly.Msg.SENSING_OF_SIZE = 'size';
Blockly.Msg.SENSING_OF_VOLUME = 'volume';
Blockly.Msg.SENSING_OF_BACKDROPNUMBER = 'backdrop #';
Blockly.Msg.SENSING_OF_BACKDROPNAME = 'backdrop name';
Blockly.Msg.SENSING_OF_STAGE = 'Stage';
Blockly.Msg.SENSING_CURRENT = 'current %1';
Blockly.Msg.SENSING_CURRENT_YEAR = 'year';
Blockly.Msg.SENSING_CURRENT_MONTH = 'month';
Blockly.Msg.SENSING_CURRENT_DATE = 'date';
Blockly.Msg.SENSING_CURRENT_DAYOFWEEK = 'day of week';
Blockly.Msg.SENSING_CURRENT_HOUR = 'hour';
Blockly.Msg.SENSING_CURRENT_MINUTE = 'minute';
Blockly.Msg.SENSING_CURRENT_SECOND = 'second';
Blockly.Msg.SENSING_DAYSSINCE2000 = 'days since 2000';
Blockly.Msg.SENSING_USERNAME = 'username';
Blockly.Msg.SENSING_USERID = 'user id';
// Sound blocks
Blockly.Msg.SOUND_PLAY = 'start sound %1';
Blockly.Msg.SOUND_PLAYUNTILDONE = 'play sound %1 until done';
Blockly.Msg.SOUND_STOPALLSOUNDS = 'stop all sounds';
Blockly.Msg.SOUND_SETEFFECTO = 'set %1 effect to %2';
Blockly.Msg.SOUND_CHANGEEFFECTBY = 'change %1 effect by %2';
Blockly.Msg.SOUND_CLEAREFFECTS = 'clear sound effects';
Blockly.Msg.SOUND_EFFECTS_PITCH = 'pitch';
Blockly.Msg.SOUND_EFFECTS_PAN = 'pan left/right';
Blockly.Msg.SOUND_CHANGEVOLUMEBY = 'change volume by %1';
Blockly.Msg.SOUND_SETVOLUMETO = 'set volume to %1%';
Blockly.Msg.SOUND_VOLUME = 'volume';
Blockly.Msg.SOUND_RECORD = 'record...';
// Category labels
Blockly.Msg.CATEGORY_MOTION = 'Motion';
Blockly.Msg.CATEGORY_LOOKS = 'Looks';
Blockly.Msg.CATEGORY_SOUND = 'Sound';
Blockly.Msg.CATEGORY_EVENTS = 'Events';
Blockly.Msg.CATEGORY_CONTROL = 'Control';
Blockly.Msg.CATEGORY_SENSING = 'Sensing';
Blockly.Msg.CATEGORY_OPERATORS = 'Operators';
Blockly.Msg.CATEGORY_VARIABLES = 'Variables';
Blockly.Msg.CATEGORY_MYBLOCKS = 'My Blocks';
// Context menus
Blockly.Msg.DUPLICATE = 'Duplicate';
Blockly.Msg.DELETE = 'Delete';
Blockly.Msg.ADD_COMMENT = 'Add Comment';
Blockly.Msg.REMOVE_COMMENT = 'Remove Comment';
Blockly.Msg.DELETE_BLOCK = 'Delete Block';
Blockly.Msg.DELETE_X_BLOCKS = 'Delete %1 Blocks';
Blockly.Msg.DELETE_ALL_BLOCKS = 'Delete all %1 blocks?';
Blockly.Msg.CLEAN_UP = 'Clean up Blocks';
Blockly.Msg.HELP = 'Help';
Blockly.Msg.UNDO = 'Undo';
Blockly.Msg.REDO = 'Redo';
Blockly.Msg.EDIT_PROCEDURE = 'Edit';
Blockly.Msg.SHOW_PROCEDURE_DEFINITION = 'Go to definition';
Blockly.Msg.WORKSPACE_COMMENT_DEFAULT_TEXT = 'Say something...';
// Color
Blockly.Msg.COLOUR_HUE_LABEL = 'Color';
Blockly.Msg.COLOUR_SATURATION_LABEL = 'Saturation';
Blockly.Msg.COLOUR_BRIGHTNESS_LABEL = 'Brightness';
// Variables
// @todo Remove these once fully managed by Scratch VM / Scratch GUI
Blockly.Msg.CHANGE_VALUE_TITLE = 'Change value:';
Blockly.Msg.RENAME_VARIABLE = 'Rename variable';
Blockly.Msg.RENAME_VARIABLE_TITLE = 'Rename all "%1" variables to:';
Blockly.Msg.RENAME_VARIABLE_MODAL_TITLE = 'Rename Variable';
Blockly.Msg.NEW_VARIABLE = 'Make a Variable';
Blockly.Msg.NEW_VARIABLE_TITLE = 'New variable name:';
Blockly.Msg.VARIABLE_MODAL_TITLE = 'New Variable';
Blockly.Msg.VARIABLE_ALREADY_EXISTS = 'A variable named "%1" already exists.';
Blockly.Msg.VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE = 'A variable named "%1" already exists for another variable of type "%2".';
Blockly.Msg.DELETE_VARIABLE_CONFIRMATION = 'Delete %1 uses of the "%2" variable?';
Blockly.Msg.CANNOT_DELETE_VARIABLE_PROCEDURE = 'Can\'t delete the variable "%1" because it\'s part of the definition of the function "%2"';
Blockly.Msg.DELETE_VARIABLE = 'Delete the "%1" variable';
// Custom Procedures
// @todo Remove these once fully managed by Scratch VM / Scratch GUI
Blockly.Msg.NEW_PROCEDURE = 'Make a Block';
Blockly.Msg.PROCEDURE_ALREADY_EXISTS = 'A procedure named "%1" already exists.';
Blockly.Msg.PROCEDURE_DEFAULT_NAME = 'block name';
Blockly.Msg.PROCEDURE_USED = 'To delete a block definition, first remove all uses of the block';
// Lists
// @todo Remove these once fully managed by Scratch VM / Scratch GUI
Blockly.Msg.NEW_LIST = 'Make a List';
Blockly.Msg.NEW_LIST_TITLE = 'New list name:';
Blockly.Msg.LIST_MODAL_TITLE = 'New List';
Blockly.Msg.LIST_ALREADY_EXISTS = 'A list named "%1" already exists.';
Blockly.Msg.RENAME_LIST_TITLE = 'Rename all "%1" lists to:';
Blockly.Msg.RENAME_LIST_MODAL_TITLE = 'Rename List';
Blockly.Msg.DEFAULT_LIST_ITEM = 'thing';
Blockly.Msg.DELETE_LIST = 'Delete the "%1" list';
Blockly.Msg.RENAME_LIST = 'Rename list';
// Broadcast Messages
// @todo Remove these once fully managed by Scratch VM / Scratch GUI
Blockly.Msg.NEW_BROADCAST_MESSAGE = 'New message';
Blockly.Msg.NEW_BROADCAST_MESSAGE_TITLE = 'New message name:';
Blockly.Msg.BROADCAST_MODAL_TITLE = 'New Message';
Blockly.Msg.DEFAULT_BROADCAST_MESSAGE_NAME = 'message1';

File diff suppressed because it is too large Load Diff