Refactor data exported for GUI

Create editor folder for all the editor components:
* blocks - from scratch-blocks
* extensions - from scratch-vm
* interface - from scratch-gui
* paint-editor - from scratch-paint.

Update the transifex config, initilaize with the english sources.

Export a combined editor-msgs.js in addition to individual files.

Renamed paint to paint-editor to match the name in transifex.
This commit is contained in:
chrisgarrity 2018-05-21 09:42:53 -04:00
parent 1e976a53fd
commit 73f9b8619e
23 changed files with 1449 additions and 1333 deletions

View file

@ -1,20 +1,25 @@
[main]
host = https://www.transifex.com
lang_map = zh_CN:zh-cn, zh_TW:zh-tw, pt_BR:pt-br
lang_map = zh_CN:zh-cn, zh_TW:zh-tw, pt_BR:pt-br, es_419:es-419
[experimental-scratch.scratch-gui]
file_filter = gui/<lang>.json
source_file = gui/en.json
[scratch-editor.blocks]
file_filter = editor/blocks/<lang>.json
source_file = editor/blocks/en.json
source_lang = en
type = CHROME
[experimental-scratch.scratch-paint]
file_filter = paint/<lang>.json
source_file = paint/en.json
[scratch-editor.extensions]
file_filter = editor/extensions/<lang>.json
source_file = editor/extensions/en.json
source_lang = en
type = CHROME
[experimental-scratch.pen]
file_filter = pen/<lang>.json
source_file = pen/en.json
[scratch-editor.interface]
file_filter = editor/interface/<lang>.json
source_file = editor/interface/en.json
source_lang = en
type = CHROME
[scratch-editor.paint-editor]
file_filter = editor/paint-editor/<lang>.json
source_file = editor/paint-editor/en.json
source_lang = en
type = CHROME

214
editor/blocks/en.json Normal file
View file

@ -0,0 +1,214 @@
{
"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_INSERTATLIST": "insert %1 at %2 of %3",
"DATA_REPLACEITEMOFLIST": "replace item %1 of %2 with %3",
"DATA_ITEMOFLIST": "item %1 of %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_WHENBROADCASTRECEIVED": "when I receive %1",
"EVENT_WHENBACKDROPSWITCHESTO": "when backdrop switches to %1",
"EVENT_WHENGREATERTHAN": "when %1 > %2",
"EVENT_WHENGREATERTHAN_TIMER": "timer",
"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_THINKFORSECS": "think %1 for %2 seconds",
"LOOKS_THINK": "think %1",
"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": "next backdrop",
"LOOKS_PREVIOUSBACKDROP": "previous 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_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",
"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_LETTEROF": "letter %1 of %2",
"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_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_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"
}

298
editor/extensions/en.json Normal file
View file

@ -0,0 +1,298 @@
{
"music.drumHandClap": {
"message": "(8) Hand Clap",
"description": "Sound of two hands clapping together"
},
"videoSensing.setVideoTransparency": {
"message": "set video transparency to [TRANSPARENCY]",
"description": "Controls transparency of the video preview layer"
},
"pen.setColor": {
"message": "set pen color to [COLOR]",
"description": "set the pen color to a particular (RGB) value"
},
"pen.setColorParam": {
"message": "set pen [COLOR_PARAM] to [VALUE]",
"description": "set the state for a pen color parameter e.g. saturation"
},
"music.drumCabasa": {
"message": "(15) Cabasa",
"description": "Sound of a cabasa being shaken"
},
"music.getTempo": {
"message": "tempo",
"description": "get the current tempo (speed) for notes, drums, and rests played"
},
"music.drumOpenHiHat": {
"message": "(5) Open Hi-Hat",
"description": "Sound of a drum stick hitting a hi-hat while open"
},
"music.drumBongo": {
"message": "(13) Bongo",
"description": "Sound of a bongo being struck"
},
"videoSensing.stage": {
"message": "stage",
"description": "Subject for the \"video [ATTRIBUTE] on [SUBJECT]\" block"
},
"pen.colorMenu.brightness": {
"message": "brightness",
"description": "label for brightness element in color picker for pen extension"
},
"videoSensing.videoToggle": {
"message": "turn video [VIDEO_STATE]",
"description": "Controls display of the video preview layer"
},
"pen.setSize": {
"message": "set pen size to [SIZE]",
"description": "set the diameter of a trail left by a sprite"
},
"music.drumBass": {
"message": "(2) Bass Drum",
"description": "Sound of bass drum as used in a standard drum kit"
},
"music.instrumentCello": {
"message": "(8) Cello",
"description": "Sound of a cello being played with a bow"
},
"pen.changeHue": {
"message": "change pen color by [HUE]",
"description": "legacy pen blocks - change pen color"
},
"music.instrumentChoir": {
"message": "(15) Choir",
"description": "Sound of a choir singing"
},
"music.drumVibraslap": {
"message": "(17) Vibraslap",
"description": "Sound of a Vibraslap being played"
},
"pen.stamp": {
"message": "stamp",
"description": "render current costume on the background"
},
"music.instrumentPizzicato": {
"message": "(7) Pizzicato",
"description": "Sound of a string instrument (e.g. violin) being plucked"
},
"music.instrumentWoodenFlute": {
"message": "(13) Wooden Flute",
"description": "Sound of a wooden flute being played"
},
"music.drumSnare": {
"message": "(1) Snare Drum",
"description": "Sound of snare drum as used in a standard drum kit"
},
"music.drumCowbell": {
"message": "(11) Cowbell",
"description": "Sound of a cowbell being struck"
},
"videoSensing.onFlipped": {
"message": "on flipped",
"description": "Option for the \"turn video [STATE]\" block that causes the video to be flipped horizontally (reversed as in a mirror)"
},
"videoSensing.sprite": {
"message": "sprite",
"description": "Subject for the \"video [ATTRIBUTE] on [SUBJECT]\" block"
},
"music.restForBeats": {
"message": "rest for [BEATS] beats",
"description": "rest (play no sound) for a number of beats"
},
"music.drumTriangle": {
"message": "(12) Triangle",
"description": "Sound of a triangle (instrument) being struck"
},
"music.instrumentTrombone": {
"message": "(9) Trombone",
"description": "Sound of a trombone being played"
},
"music.instrumentVibraphone": {
"message": "(16) Vibraphone",
"description": "Sound of a vibraphone being struck"
},
"music.instrumentSaxophone": {
"message": "(11) Saxophone",
"description": "Sound of a saxophone being played"
},
"music.instrumentBass": {
"message": "(6) Bass",
"description": "Sound of an accoustic upright bass"
},
"pen.clear": {
"message": "erase all",
"description": "erase all pen trails and stamps"
},
"music.instrumentClarinet": {
"message": "(10) Clarinet",
"description": "Sound of a clarinet being played"
},
"music.instrumentSteelDrum": {
"message": "(18) Steel Drum",
"description": "Sound of a steel drum being struck"
},
"pen.setHue": {
"message": "set pen color to [HUE]",
"description": "legacy pen blocks - set pen color to number"
},
"music.drumGuiro": {
"message": "(16) Guiro",
"description": "Sound of a guiro being played"
},
"music.instrumentBassoon": {
"message": "(14) Bassoon",
"description": "Sound of a bassoon being played"
},
"pen.setShade": {
"message": "set pen shade to [SHADE]",
"description": "legacy pen blocks - set pen shade"
},
"music.instrumentFlute": {
"message": "(12) Flute",
"description": "Sound of a flute being played"
},
"pen.colorMenu.color": {
"message": "color",
"description": "label for color element in color picker for pen extension"
},
"music.drumConga": {
"message": "(14) Conga",
"description": "Sound of a conga being struck"
},
"pen.changeSize": {
"message": "change pen size by [SIZE]",
"description": "change the diameter of the trail left by a sprite"
},
"videoSensing.on": {
"message": "on",
"description": "Option for the \"turn video [STATE]\" block"
},
"music.instrumentSynthPad": {
"message": "(21) Synth Pad",
"description": "Sound of a \"pad\" synthesizer being played"
},
"pen.colorMenu.transparency": {
"message": "transparency",
"description": "label for transparency element in color picker for pen extension"
},
"music.instrumentGuitar": {
"message": "(4) Guitar",
"description": "Sound of an accoustic guitar"
},
"music.drumClosedHiHat": {
"message": "(6) Closed Hi-Hat",
"description": "Sound of a drum stick hitting a hi-hat while closed"
},
"pen.changeColorParam": {
"message": "change pen [COLOR_PARAM] by [VALUE]",
"description": "change the state of a pen color parameter"
},
"videoSensing.whenMotionGreaterThan": {
"message": "when video motion > [REFERENCE]",
"description": "Event that triggers when the amount of motion is greater than [REFERENCE]"
},
"music.drumTambourine": {
"message": "(7) Tambourine",
"description": "Sound of a tambourine being struck"
},
"music.playDrumForBeats": {
"message": "play drum [DRUM] for [BEATS] beats",
"description": "play drum sample for a number of beats"
},
"music.instrumentMarimba": {
"message": "(19) Marimba",
"description": "Sound of a marimba being struck"
},
"music.instrumentMusicBox": {
"message": "(17) Music Box",
"description": "Sound of a music box playing"
},
"music.instrumentOrgan": {
"message": "(3) Organ",
"description": "Sound of an organ"
},
"videoSensing.videoOn": {
"message": "video [ATTRIBUTE] on [SUBJECT]",
"description": "Reporter that returns the amount of [ATTRIBUTE] for the selected [SUBJECT]"
},
"music.drumCuica": {
"message": "(18) Cuica",
"description": "Sound of a cuica being played"
},
"pen.penDown": {
"message": "pen down",
"description": "start leaving a trail when the sprite moves"
},
"videoSensing.motion": {
"message": "motion",
"description": "Attribute for the \"video [ATTRIBUTE] on [SUBJECT]\" block"
},
"pen.penUp": {
"message": "pen up",
"description": "stop leaving a trail behind the sprite"
},
"music.changeTempo": {
"message": "change tempo by [TEMPO]",
"description": "change tempo (speed) for notes, drums, and rests played"
},
"pen.colorMenu.saturation": {
"message": "saturation",
"description": "label for saturation element in color picker for pen extension"
},
"music.setInstrument": {
"message": "set instrument to [INSTRUMENT]",
"description": "set the instrument (e.g. piano, guitar, trombone) for notes played"
},
"music.instrumentPiano": {
"message": "(1) Piano",
"description": "Sound of a piano"
},
"music.drumWoodBlock": {
"message": "(10) Wood Block",
"description": "Sound of a wood block being struck"
},
"videoSensing.direction": {
"message": "direction",
"description": "Attribute for the \"video [ATTRIBUTE] on [SUBJECT]\" block"
},
"music.instrumentSynthLead": {
"message": "(20) Synth Lead",
"description": "Sound of a \"lead\" synthesizer being played"
},
"music.drumSideStick": {
"message": "(3) Side Stick",
"description": "Sound of a drum stick hitting the side of a drum (usually the snare)"
},
"pen.changeShade": {
"message": "change pen shade by [SHADE]",
"description": "legacy pen blocks - change pen shade"
},
"music.setTempo": {
"message": "set tempo to [TEMPO]",
"description": "set tempo (speed) for notes, drums, and rests played"
},
"music.instrumentElectricPiano": {
"message": "(2) Electric Piano",
"description": "Sound of an electric piano"
},
"music.instrumentElectricGuitar": {
"message": "(5) Electric Guitar",
"description": "Sound of an electric guitar"
},
"music.drumCrashCymbal": {
"message": "(4) Crash Cymbal",
"description": "Sound of a drum stick hitting a crash cymbal"
},
"videoSensing.off": {
"message": "off",
"description": "Option for the \"turn video [STATE]\" block"
},
"music.playNoteForBeats": {
"message": "play note [NOTE] for [BEATS] beats",
"description": "play a note for a number of beats"
},
"music.drumClaves": {
"message": "(9) Claves",
"description": "Sound of claves being struck together"
}
}

714
editor/interface/en.json Normal file
View file

@ -0,0 +1,714 @@
{
"gui.soundEditor.echo": {
"message": "Echo",
"description": "Title of the button to apply the echo effect"
},
"gui.howtos.run-away.step_addWhenClicked": {
"message": "Add a “when this sprite clicked” block",
"description": "Step name for 'Add a “when this sprite clicked” block' step"
},
"gui.previewInfo.notnow": {
"message": "Not Now",
"description": "Label for button to back out of trying Scratch 3.0 preview"
},
"gui.costumeLibrary.chooseACostume": {
"message": "Choose a Costume",
"description": "Heading for the costume library"
},
"gui.library.filterPlaceholder": {
"message": "Search",
"description": "Placeholder text for library search field"
},
"gui.unsupportedBrowser.back": {
"message": "Back",
"description": "Button to go back in unsupported browser modal"
},
"gui.stageSelector.addBackdropFromSurprise": {
"message": "Surprise",
"description": "Button to add a random stage in the target pane"
},
"gui.comingSoon.message3": {
"message": "We're working on it {emoji}",
"description": "One of the \"coming soon\" random messages for yet-to-be-done features"
},
"gui.unsupportedBrowser.previewfaqlink": {
"message": "Preview FAQ",
"description": "link to Scratch 3.0 preview FAQ page"
},
"gui.monitor.contextMenu.slider": {
"message": "slider",
"description": "Menu item to switch to the slider monitor"
},
"gui.cards.remove": {
"message": "Remove",
"description": "Title for button to close how-to card"
},
"gui.unsupportedBrowser.description": {
"message": "We're very sorry, but Scratch 3.0 does not support Internet Explorer, Opera or Silk. We recommend trying a newer browser such as Google Chrome, Mozilla Firefox, or Microsoft Edge.",
"description": "Unsupported browser description"
},
"gui.costumeTab.addSurpriseCostume": {
"message": "Surprise",
"description": "Button to add a surprise costume in the editor tab"
},
"gui.soundEditor.save": {
"message": "Save",
"description": "Title of the button to save trimmed sound"
},
"gui.howtos.say-hello.name": {
"message": "Say hello",
"description": "Name for the 'Say hello' how-to"
},
"gui.stageHeader.stageSizeUnFull": {
"message": "Exit full screen mode",
"description": "Button to get out of full screen mode"
},
"gui.menuBar.file": {
"message": "File",
"description": "Text for file dropdown menu"
},
"gui.stageHeader.stageSizeLarge": {
"message": "Switch to large stage",
"description": "Button to change stage size to large"
},
"gui.howtos.switch-costume.name": {
"message": "Switch costume",
"description": "Name for the 'Switch costume' how-to"
},
"gui.howtos.say-hello.step_addSprite": {
"message": "Add a new sprite",
"description": "Step name for 'Add a new sprite' step"
},
"gui.costumeTab.addFileBackdrop": {
"message": "Upload Backdrop",
"description": "Button to add a backdrop by uploading a file in the editor tab"
},
"gui.soundTab.fileUploadSound": {
"message": "Upload Sound",
"description": "Button to upload sound from file in the editor tab"
},
"gui.soundEditor.stop": {
"message": "Stop",
"description": "Title of the button to stop the sound"
},
"gui.loader.message2": {
"message": "Loading sprites …",
"description": "One of the loading messages"
},
"gui.stageHeader.fullscreenControl": {
"message": "Full Screen Control",
"description": "Button to enter/exit full screen mode"
},
"gui.soundEditor.redo": {
"message": "Redo",
"description": "Title of the button to redo"
},
"gui.importInfo.title": {
"message": "View a Scratch 2.0 Project",
"description": "Scratch 2.0 import modal label - for accessibility"
},
"gui.extensionLibrary.chooseAnExtension": {
"message": "Choose an Extension",
"description": "Heading for the extension library"
},
"gui.webglModal.description": {
"message": "Unfortunately it looks like your browser or computer {webGlLink}. This technology is needed for Scratch 3.0 to run.",
"description": "WebGL missing message"
},
"gui.previewModal.viewproject": {
"message": "View 2.0 Project",
"description": "Label for button to import a 2.0 project"
},
"gui.previewInfo.previewfaqlink": {
"message": "Preview FAQ",
"description": "link to Scratch 3.0 preview FAQ page"
},
"gui.soundEditor.softer": {
"message": "Softer",
"description": "Title of the button to apply thr.softer effect"
},
"gui.soundEditor.robot": {
"message": "Robot",
"description": "Title of the button to apply the robot effect"
},
"gui.menuBar.undo": {
"message": "Undo",
"description": "Menu bar item for undoing"
},
"gui.stageSelector.stage": {
"message": "Stage",
"description": "Label for the stage in the stage selector"
},
"gui.webglModal.back": {
"message": "Back",
"description": "Label for button go back when browser is unsupported"
},
"gui.comingSoon.message1": {
"message": "Don't worry, we're on it {emoji}",
"description": "One of the \"coming soon\" random messages for yet-to-be-done features"
},
"gui.cards.all-how-tos": {
"message": "All How-Tos",
"description": "Title for button to return to how-to library"
},
"gui.soundLibrary.chooseASound": {
"message": "Choose a Sound",
"description": "Heading for the sound library"
},
"gui.importInfo.invalidFormatError": {
"message": "Uh oh, that project link or id doesn't look quite right.",
"description": "Invalid project link or id message"
},
"gui.customProcedures.addAnInputNumberText": {
"message": "Add an input",
"description": "Label for button to add a number/text input"
},
"gui.menuBar.saveAsCopy": {
"message": "Save as a copy",
"description": "Menu bar item for saving as a copy"
},
"gui.importModal.viewproject": {
"message": "View",
"description": "Label for button to load a scratch 2.0 project"
},
"gui.menuBar.new": {
"message": "New",
"description": "Menu bar item for creating a new project"
},
"gui.customProcedures.addALabel": {
"message": "Add a label",
"description": "Label for button to add a label"
},
"gui.soundEditor.trim": {
"message": "Trim",
"description": "Title of the button to start trimminging the sound"
},
"gui.cards.see-more": {
"message": "See more",
"description": "Title for button to see more in how-to library"
},
"gui.customProcedures.addAnInputBoolean": {
"message": "Add an input",
"description": "Label for button to add a boolean input"
},
"gui.stageHeader.stageSizeSmall": {
"message": "Switch to small stage",
"description": "Button to change stage size to small"
},
"gui.menuBar.saveNow": {
"message": "Save now",
"description": "Menu bar item for saving now"
},
"gui.SpriteInfo.sprite": {
"message": "Sprite",
"description": "Sprite info label"
},
"gui.menuBar.downloadToComputer": {
"message": "Download to your computer",
"description": "Menu bar item for downloading a project"
},
"gui.costumeTab.addCostumeFromLibrary": {
"message": "Choose a Costume",
"description": "Button to add a costume in the editor tab"
},
"gui.soundTab.addSoundFromLibrary": {
"message": "Choose a Sound",
"description": "Button to add a sound in the editor tab"
},
"gui.cameraModal.enableCameraCaption": {
"message": "Enable Camera",
"description": "A caption for a disabled button prompting the user to enable camera access"
},
"gui.loader.message5": {
"message": "Herding cats …",
"description": "One of the loading messages"
},
"gui.loader.message7": {
"message": "Inflating gobos …",
"description": "One of the loading messages"
},
"gui.howtos.glide-around.name": {
"message": "Glide around",
"description": "Name for the 'Glide around' how-to"
},
"gui.menuBar.uploadFromComputer": {
"message": "Upload from your computer",
"description": "Menu bar item for uploading a project from your computer"
},
"gui.customProcedures.ok": {
"message": "OK",
"description": "Label for button to save new custom procedure"
},
"gui.spriteSelector.addBackdropFromLibrary": {
"message": "Choose a Backdrop",
"description": "Button to add a stage in the target pane from library"
},
"gui.soundEditor.slower": {
"message": "Slower",
"description": "Title of the button to apply the slower effect"
},
"gui.howtos.spin-around.name": {
"message": "Spin around",
"description": "Name for the 'Spin around' how-to"
},
"gui.turboMode.active": {
"message": "Turbo Mode",
"description": "Label indicating turbo mode is active"
},
"gui.howtos.run-away.step3": {
"message": "Click the “Events” category",
"description": "Step 3 title"
},
"gui.loader.message4": {
"message": "Loading extensions …",
"description": "One of the loading messages"
},
"gui.recordingStep.alertMsg": {
"message": "Could not start recording",
"description": "Alert for recording error"
},
"gui.extensionLibrary.extensionUrl": {
"message": "Enter the URL of the extension",
"description": "Prompt for unoffical extension url"
},
"gui.customProcedures.cancel": {
"message": "Cancel",
"description": "Label for button to cancel custom procedure edits"
},
"gui.modal.back": {
"message": "Back",
"description": "Back button in modal"
},
"gui.howtos.spin.step_dragForever": {
"message": "Drag out a “forever” block",
"description": "Step name for 'Drag out a “forever” block' step"
},
"gui.recordModal.title": {
"message": "Record Sound",
"description": "Recording modal title"
},
"gui.gui.backdropsTab": {
"message": "Backdrops",
"description": "Button to get to the backdrops panel"
},
"gui.prompt.ok": {
"message": "OK",
"description": "Button in prompt for confirming the dialog"
},
"gui.cameraModal.permissionRequest": {
"message": "We need your permission to use your camera",
"description": "Notification to the user that the app needs camera access"
},
"gui.customProcedures.numberTextType": {
"message": "number or text",
"description": "Description of the number/text input type"
},
"gui.unsupportedBrowser.previewfaq": {
"message": "To learn more, go to the {previewFaqLink}.",
"description": "Invitation to try 3.0 preview"
},
"gui.howtos.run-away.step_clickGoTo": {
"message": "Click the block to run it",
"description": "Step name for 'Click the block to run it' step"
},
"gui.soundEditor.play": {
"message": "Play",
"description": "Title of the button to start playing the sound"
},
"gui.cameraModal.retakePhoto": {
"message": "Retake Photo",
"description": "A button that allows the user to take the picture again, replacing the old one"
},
"gui.menuBar.share": {
"message": "Share",
"description": "Label for project share button"
},
"gui.crashMessage.description": {
"message": "We are so sorry, but it looks like Scratch has crashed. This bug has been automatically reported to the Scratch Team. Please refresh your page to try again.",
"description": "Unhandled error description"
},
"gui.webglModal.label": {
"message": "Your Browser Does Not Support WebGL",
"description": "WebGL missing title"
},
"gui.importInfo.goback": {
"message": "Go Back",
"description": "Label for button to back out of importing a project"
},
"gui.monitor.contextMenu.large": {
"message": "large readout",
"description": "Menu item to switch to the large monitor"
},
"gui.cards.more-things-to-try": {
"message": "More things to try!",
"description": "Title card with more things to try"
},
"gui.costumeTab.addCameraCostume": {
"message": "Camera",
"description": "Button to use the camera to create a costume costume in the editor tab"
},
"gui.howtos.spin.step_clickTurn": {
"message": "Click the block to run it",
"description": "Step name for 'Click the block to run it' step"
},
"gui.spriteLibrary.chooseASprite": {
"message": "Choose a Sprite",
"description": "Heading for the sprite library"
},
"gui.loader.headline": {
"message": "Loading Project",
"description": "Main loading message"
},
"gui.playbackStep.playMsg": {
"message": "Play",
"description": "Stop/Play button in recording playback"
},
"gui.customProcedures.booleanType": {
"message": "boolean",
"description": "Description of the boolean input type"
},
"gui.importInfo.previewfaqlink": {
"message": "Preview FAQ",
"description": "link to Scratch 3.0 preview FAQ page"
},
"gui.howtos.spin.step_dragTurn": {
"message": "Drag out a “turn” block",
"description": "Step name for 'Drag out a “turn” block' step"
},
"gui.costumeTab.addBackdropFromLibrary": {
"message": "Choose a Backdrop",
"description": "Button to add a backdrop in the editor tab"
},
"gui.menuBar.redo": {
"message": "Redo",
"description": "Menu bar item for redoing"
},
"gui.spriteSelector.addSpriteFromPaint": {
"message": "Paint",
"description": "Button to add a sprite in the target pane from paint"
},
"gui.previewInfo.invitation": {
"message": "We're working on the next generation of Scratch. We're excited for you to try it!",
"description": "Invitation to try 3.0 preview"
},
"gui.crashMessage.title": {
"message": "Oops! Something went wrong.",
"description": "Unhandled error title"
},
"gui.spriteSelectorItem.contextMenuDuplicate": {
"message": "duplicate",
"description": "Menu item to duplicate in the right click menu"
},
"gui.importInfo.previewfaq": {
"message": "To learn more, go to the {previewFaqLink}.",
"description": "Invitation to try 3.0 preview"
},
"gui.howtos.spin.step_changeColor": {
"message": "Add a “change color effect” block",
"description": "Step name for 'Add a “change color effect” block' step"
},
"gui.previewInfo.previewfaq": {
"message": "To learn more, go to the {previewFaqLink}.",
"description": "Invitation to try 3.0 preview"
},
"gui.howtos.run-away.step_clickSprite": {
"message": "Click the sprite to run it",
"description": "Step name for 'Click the sprite to run it' step"
},
"gui.controls.go": {
"message": "Go",
"description": "Green flag button title"
},
"gui.spriteSelectorItem.contextMenuDelete": {
"message": "delete",
"description": "Menu item to delete in the right click menu"
},
"gui.soundTab.surpriseSound": {
"message": "Surprise",
"description": "Button to get a random sound in the editor tab"
},
"gui.howtos.say-hello.step_clickStack": {
"message": "Click the stack to run it",
"description": "Step name for 'Click the stack to run it' step"
},
"gui.stageHeader.stageSizeFull": {
"message": "Enter full screen mode",
"description": "Button to change stage size to full screen"
},
"gui.stageSelector.backdrops": {
"message": "Backdrops",
"description": "Label for the backdrops in the stage selector"
},
"gui.howtos.hide-and-show.name": {
"message": "Hide & Show",
"description": "Name for the 'Hide & Show' how-to"
},
"gui.SpriteInfo.size": {
"message": "Size",
"description": "Sprite info size label"
},
"gui.webglModal.previewfaqlink": {
"message": "preview FAQ",
"description": "link to Scratch 3.0 FAQ page"
},
"gui.soundEditor.louder": {
"message": "Louder",
"description": "Title of the button to apply the louder effect"
},
"gui.previewInfo.welcome": {
"message": "Welcome to the Scratch 3.0 Preview",
"description": "Header for Preview Info Modal"
},
"gui.spriteSelector.addSpriteFromSurprise": {
"message": "Surprise",
"description": "Button to add a random sprite in the target pane"
},
"gui.howtos.run-away.step_addSound": {
"message": "Add a “start sound” block",
"description": "Step name for 'Add a “start sound” block' step"
},
"gui.howtos.change-size.name": {
"message": "Change size",
"description": "Name for the 'Change size' how-to"
},
"gui.extensionLibrary.comingSoon": {
"message": "Coming Soon",
"description": "Label for extensions that are not yet implemented"
},
"gui.SpriteInfo.show": {
"message": "Show",
"description": "Sprite info show label"
},
"gui.loader.message8": {
"message": "Preparing emojis …",
"description": "One of the loading messages"
},
"gui.soundEditor.faster": {
"message": "Faster",
"description": "Title of the button to apply the faster effect"
},
"gui.gui.soundsTab": {
"message": "Sounds",
"description": "Button to get to the sounds panel"
},
"gui.soundTab.recordSound": {
"message": "Record",
"description": "Button to record a sound in the editor tab"
},
"gui.SpriteInfo.direction": {
"message": "Direction",
"description": "Sprite info direction label"
},
"gui.costumeLibrary.chooseABackdrop": {
"message": "Choose a Backdrop",
"description": "Heading for the backdrop library"
},
"gui.cameraModal.loadingCaption": {
"message": "Loading...",
"description": "A caption for a disabled button while the video from the camera is still loading"
},
"gui.gui.variablePrompt": {
"message": "More Options",
"description": "Dropdown message for variable/list options"
},
"gui.gui.costumesTab": {
"message": "Costumes",
"description": "Button to get to the costumes panel"
},
"gui.gui.addExtension": {
"message": "Add Extension",
"description": "Button to add an extension in the target pane"
},
"gui.howtos.add-effects.name": {
"message": "Add effects",
"description": "Name for the 'Add effects' how-to"
},
"gui.menuBar.giveFeedback": {
"message": "Give Feedback",
"description": "Label for feedback form modal button"
},
"gui.cameraModal.cameraModalTitle": {
"message": "Take a Photo",
"description": "Title for prompt to take a picture (to add as a new costume)."
},
"gui.howtos.run-away.name": {
"message": "Run away",
"description": "Name for the 'Run away' how-to"
},
"gui.soundEditor.reverse": {
"message": "Reverse",
"description": "Title of the button to apply the reverse effect"
},
"gui.howtos.spin.step_clickForever": {
"message": "Click the stack to run it",
"description": "Step name for 'Click the stack to run it' step"
},
"gui.webglModal.webgllink": {
"message": "does not support WebGL",
"description": "link part of your browser does not support WebGL message"
},
"gui.menuBar.seeCommunity": {
"message": "See Community",
"description": "Label for see community button"
},
"gui.cameraModal.loadingCameraMessage": {
"message": "Loading Camera...",
"description": "Notification to the user that the camera is loading"
},
"gui.costumeTab.addFileCostume": {
"message": "Upload Costume",
"description": "Button to add a costume by uploading a file in the editor tab"
},
"gui.playbackStep.stopMsg": {
"message": "Stop",
"description": "Stop/Play button in recording playback"
},
"gui.howtos.spin.step_clickControl": {
"message": "Click the “Control” category",
"description": "Step name for 'Click the “Control” category' step"
},
"gui.soundEditor.undo": {
"message": "Undo",
"description": "Title of the button to undo"
},
"gui.gui.codeTab": {
"message": "Code",
"description": "Button to get to the code panel"
},
"gui.spriteSelector.addSpriteFromFile": {
"message": "Upload",
"description": "Button to add a sprite in the target pane from file"
},
"gui.loader.message1": {
"message": "Creating blocks …",
"description": "One of the loading messages"
},
"gui.loader.message6": {
"message": "Transmitting nanos …",
"description": "One of the loading messages"
},
"gui.loader.message3": {
"message": "Loading sounds …",
"description": "One of the loading messages"
},
"gui.SpriteInfo.spritePlaceholder": {
"message": "Name",
"description": "Placeholder text for sprite name"
},
"gui.howtos.say-hello.step_editSay": {
"message": "Say something else",
"description": "Step name for 'Say something else' step"
},
"gui.previewModal.tryit": {
"message": "Try It! {caticon}",
"description": "Label for button to try Scratch 3.0 preview"
},
"gui.howtos.run-away.step_dragGoTo": {
"message": "Drag out a “go to random position” block",
"description": "Step name for 'Drag out a “go to random position” block' step"
},
"gui.monitor.contextMenu.default": {
"message": "normal readout",
"description": "Menu item to switch to the default monitor"
},
"gui.controls.stop": {
"message": "Stop",
"description": "Stop button title"
},
"gui.costumeTab.addBlankCostume": {
"message": "Paint",
"description": "Button to add a blank costume in the editor tab"
},
"gui.howtos.say-hello.step_dragSay": {
"message": "Drag out a “say” block",
"description": "Step name for 'Drag out a “say” block' step"
},
"gui.customProcedures.runWithoutScreenRefresh": {
"message": "Run without screen refresh",
"description": "Label for checkbox to run without screen refresh"
},
"gui.stageSelector.addBackdropFromFile": {
"message": "Upload Backdrop",
"description": "Button to add a stage in the target pane from file"
},
"gui.spriteSelector.addSpriteFromLibrary": {
"message": "Choose a Sprite",
"description": "Button to add a sprite in the target pane from library"
},
"gui.soundEditor.sound": {
"message": "Sound",
"description": "Label for the name of the sound"
},
"gui.unsupportedBrowser.label": {
"message": "Browser is not supported",
"description": ""
},
"gui.howtos.say-hello.step_anotherSay": {
"message": "Drag out another “say” block",
"description": "Step name for 'Drag out another “say” block' step"
},
"gui.playbackStep.loadingMsg": {
"message": "Loading...",
"description": "Loading/Save button in recording playback"
},
"gui.howtos.add-a-backdrop.name": {
"message": "Add a backdrop",
"description": "Name for the 'Add a backdrop' how-to"
},
"gui.comingSoon.message2": {
"message": "Coming Soon...",
"description": "One of the \"coming soon\" random messages for yet-to-be-done features"
},
"gui.howtos.say-hello.step_clickSay": {
"message": "Click the block to run it",
"description": "Step name for 'Click the block to run it' step"
},
"gui.stageSelector.addBackdropFromPaint": {
"message": "Paint",
"description": "Button to add a stage in the target pane from paint"
},
"gui.cameraModal.takePhoto": {
"message": "Take Photo",
"description": "A button to take a photo"
},
"gui.playbackStep.saveMsg": {
"message": "Save",
"description": "Loading/Save button in recording playback"
},
"gui.howtos.say-hello.step_clickLooks": {
"message": "Click the “Looks” category",
"description": "Step name for 'Click the “Looks” category' step"
},
"gui.playbackStep.reRecordMsg": {
"message": "Re-record",
"description": "Button to re-record sound in recording playback"
},
"gui.importInfo.message": {
"message": "Enter a link to one of your shared Scratch projects. Changes made in this 3.0 Preview will not be saved.",
"description": "Import project message"
},
"gui.menuBar.edit": {
"message": "Edit",
"description": "Text for edit dropdown menu"
},
"gui.cameraModal.save": {
"message": "Save",
"description": "A button that allows the user to save the photo they took as a costume"
},
"gui.previewInfo.label": {
"message": "Try Scratch 3.0",
"description": "Scratch 3.0 modal label - for accessibility"
},
"gui.webglModal.previewfaq": {
"message": "To learn more, go to the {previewFaqLink}.",
"description": "Scratch 3.0 FAQ description"
},
"gui.menuBar.turboMode": {
"message": "Turbo mode",
"description": "Menu bar item for toggling turbo mode"
},
"gui.prompt.cancel": {
"message": "Cancel",
"description": "Button in prompt for cancelling the dialog"
}
}

View file

@ -7,14 +7,34 @@
"message": "Fill",
"description": "Label for the color picker for the fill color"
},
"gui.comingSoon.message3": {
"message": "We're working on it {emoji}",
"description": "One of the \"coming soon\" random messages for yet-to-be-done features"
},
"paint.modeTools.eraserSize": {
"message": "Eraser size",
"description": "Label for the eraser size input"
},
"paint.paintEditor.more": {
"message": "More",
"description": "Label for dropdown to access more action buttons"
},
"gui.comingSoon.message1": {
"message": "Don't worry, we're on it {emoji}",
"description": "One of the \"coming soon\" random messages for yet-to-be-done features"
},
"paint.modeTools.pointed": {
"message": "Pointed",
"description": "Label for the button that converts selected points to sharp points"
},
"paint.paintEditor.backward": {
"message": "Backward",
"description": "Label for the `Send backward on canvas` button"
},
"paint.paintEditor.bitmap": {
"message": "Convert to Bitmap",
"description": "Label for button that converts the paint editor to bitmap mode"
},
"paint.paintEditor.group": {
"message": "Group",
"description": "Label for the button to group shapes"
@ -27,6 +47,10 @@
"message": "Saturation",
"description": "Label for the saturation component in the color picker"
},
"paint.modeTools.curved": {
"message": "Curved",
"description": "Label for the button that converts selected points to curves"
},
"paint.modeTools.brushSize": {
"message": "Brush size",
"description": "Label for the brush size input"
@ -39,6 +63,10 @@
"message": "Forward",
"description": "Label for the `Send forward on canvas` button"
},
"paint.modeTools.flipVertical": {
"message": "Flip Vertical",
"description": "Label for the button to flip the image vertically"
},
"paint.paintEditor.brightness": {
"message": "Brightness",
"description": "Label for the brightness component in the color picker"
@ -55,6 +83,10 @@
"message": "Ungroup",
"description": "Label for the button to ungroup shapes"
},
"paint.modeTools.flipHorizontal": {
"message": "Flip Horizontal",
"description": "Label for the button to flip the image horizontally"
},
"paint.paintEditor.hue": {
"message": "Color",
"description": "Label for the hue component in the color picker"
@ -70,5 +102,9 @@
"paint.paintEditor.stroke": {
"message": "Outline",
"description": "Label for the color picker for the outline color"
},
"gui.comingSoon.message2": {
"message": "Coming Soon...",
"description": "One of the \"coming soon\" random messages for yet-to-be-done features"
}
}

View file

@ -1,130 +0,0 @@
{
"gui.soundEditor.echo": {
"message": "صَدى",
"description": "Title of the button to apply the echo effect"
},
"gui.soundEditor.save": {
"message": "حِفظ",
"description": "Title of the button to save trimmed sound"
},
"gui.soundEditor.stop": {
"message": "وَقفْ",
"description": "Title of the button to stop the sound"
},
"gui.soundEditor.redo": {
"message": "إعادة",
"description": "Title of the button to redo"
},
"gui.soundEditor.softer": {
"message": "أخفض",
"description": "Title of the button to apply thr.softer effect"
},
"gui.soundEditor.robot": {
"message": "روبوت",
"description": "Title of the button to apply the robot effect"
},
"gui.customProcedures.addAnInputNumberText": {
"message": "أضف مُدخل للبيانات",
"description": "Label for button to add a number/text input"
},
"gui.stageSelector.targetPaneAddBackdrop": {
"message": "أَضِف خَلْفِيَّة",
"description": "Button to add a backdrop in the target pane"
},
"gui.customProcedures.addALabel": {
"message": "أضف مُلصَق",
"description": "Label for button to add a label"
},
"gui.soundEditor.trim": {
"message": "قَصْ",
"description": "Title of the button to start trimminging the sound"
},
"gui.costumeTab.addBackdrop": {
"message": "أَضِف خَلْفِيَّة",
"description": "Button to add a backdrop in the editor tab"
},
"gui.customProcedures.addAnInputBoolean": {
"message": "أضف مُدخل للبيانات",
"description": "Label for button to add a boolean input"
},
"gui.spriteSelector.addSprite": {
"message": "أَضِف كائن",
"description": "Button to add a sprite in the target pane"
},
"gui.customProcedures.ok": {
"message": "موافق",
"description": "Label for button to save new custom procedure"
},
"gui.soundEditor.slower": {
"message": "أَبطأ",
"description": "Title of the button to apply the slower effect"
},
"gui.turboMode.active": {
"message": "وَضْعِيَةْ التَرْبُو",
"description": "Label indicating turbo mode is active"
},
"gui.customProcedures.cancel": {
"message": "إلغاء",
"description": "Label for button to cancel custom procedure edits"
},
"gui.customProcedures.numberTextType": {
"message": "رقم أو نص",
"description": "Description of the number/text input type"
},
"gui.soundEditor.play": {
"message": "تَشغيل",
"description": "Title of the button to start playing the sound"
},
"gui.customProcedures.booleanType": {
"message": "متغير منطقي",
"description": "Description of the boolean input type"
},
"gui.soundTab.addSound": {
"message": "أَضِف صَوْت",
"description": "Button to add a sound in the editor tab"
},
"gui.spriteSelectorItem.contextMenuDuplicate": {
"message": "مُكرَر",
"description": "Menu item to duplicate in the right click menu"
},
"gui.spriteSelectorItem.contextMenuDelete": {
"message": "حَذف",
"description": "Menu item to delete in the right click menu"
},
"gui.stageSelector.backdrops": {
"message": "خَلْفِيَّة",
"description": "Label for the backdrops in the stage selector"
},
"gui.soundEditor.louder": {
"message": "أعلى",
"description": "Title of the button to apply the louder effect"
},
"gui.soundEditor.faster": {
"message": "أَسرع",
"description": "Title of the button to apply the faster effect"
},
"gui.soundTab.recordSound": {
"message": "سَجِّل صَوْت",
"description": "Button to record a sound in the editor tab"
},
"gui.gui.addExtension": {
"message": "مُلحقات",
"description": "Button to add an extension in the target pane"
},
"gui.soundEditor.reverse": {
"message": "مُتعاكس",
"description": "Title of the button to apply the reverse effect"
},
"gui.soundEditor.undo": {
"message": "تَراجع",
"description": "Title of the button to undo"
},
"gui.costumeTab.addCostume": {
"message": "أَضِف تَخْصِيص",
"description": "Button to add a costume in the editor tab"
},
"gui.soundEditor.sound": {
"message": "صَوْت",
"description": "Label for the name of the sound"
}
}

View file

@ -1,130 +0,0 @@
{
"gui.soundEditor.echo": {
"message": "Echo",
"description": "Title of the button to apply the echo effect"
},
"gui.soundEditor.save": {
"message": "Speichern",
"description": "Title of the button to save trimmed sound"
},
"gui.soundEditor.stop": {
"message": "Stopp",
"description": "Title of the button to stop the sound"
},
"gui.soundEditor.redo": {
"message": "Wiederherstellen",
"description": "Title of the button to redo"
},
"gui.soundEditor.softer": {
"message": "Weicher",
"description": "Title of the button to apply thr.softer effect"
},
"gui.soundEditor.robot": {
"message": "Roboter",
"description": "Title of the button to apply the robot effect"
},
"gui.customProcedures.addAnInputNumberText": {
"message": "Füge ein Feld hinzu",
"description": "Label for button to add a number/text input"
},
"gui.stageSelector.targetPaneAddBackdrop": {
"message": "Bühnenbild hinzufügen",
"description": "Button to add a backdrop in the target pane"
},
"gui.customProcedures.addALabel": {
"message": "Füge eine Beschreibung hinzu",
"description": "Label for button to add a label"
},
"gui.soundEditor.trim": {
"message": "Abschneiden",
"description": "Title of the button to start trimminging the sound"
},
"gui.costumeTab.addBackdrop": {
"message": "Bühnenbild hinzufügen",
"description": "Button to add a backdrop in the editor tab"
},
"gui.customProcedures.addAnInputBoolean": {
"message": "Füge ein Feld hinzu",
"description": "Label for button to add a boolean input"
},
"gui.spriteSelector.addSprite": {
"message": "Figur hinzufügen",
"description": "Button to add a sprite in the target pane"
},
"gui.customProcedures.ok": {
"message": "OK",
"description": "Label for button to save new custom procedure"
},
"gui.soundEditor.slower": {
"message": "Langsamer",
"description": "Title of the button to apply the slower effect"
},
"gui.turboMode.active": {
"message": "Turbo-Modus",
"description": "Label indicating turbo mode is active"
},
"gui.customProcedures.cancel": {
"message": "Abbrechen",
"description": "Label for button to cancel custom procedure edits"
},
"gui.customProcedures.numberTextType": {
"message": "Zahl oder Text",
"description": "Description of the number/text input type"
},
"gui.soundEditor.play": {
"message": "Abspielen",
"description": "Title of the button to start playing the sound"
},
"gui.customProcedures.booleanType": {
"message": "Wahrheitswert",
"description": "Description of the boolean input type"
},
"gui.soundTab.addSound": {
"message": "Klang hinzufügen",
"description": "Button to add a sound in the editor tab"
},
"gui.spriteSelectorItem.contextMenuDuplicate": {
"message": "Duplizieren",
"description": "Menu item to duplicate in the right click menu"
},
"gui.spriteSelectorItem.contextMenuDelete": {
"message": "Entfernen",
"description": "Menu item to delete in the right click menu"
},
"gui.stageSelector.backdrops": {
"message": "Bühnenbilder",
"description": "Label for the backdrops in the stage selector"
},
"gui.soundEditor.louder": {
"message": "Lauter",
"description": "Title of the button to apply the louder effect"
},
"gui.soundEditor.faster": {
"message": "Schneller",
"description": "Title of the button to apply the faster effect"
},
"gui.soundTab.recordSound": {
"message": "Klang aufnehmen",
"description": "Button to record a sound in the editor tab"
},
"gui.gui.addExtension": {
"message": "Erweiterungen",
"description": "Button to add an extension in the target pane"
},
"gui.soundEditor.reverse": {
"message": "Umkehren",
"description": "Title of the button to apply the reverse effect"
},
"gui.soundEditor.undo": {
"message": "Rückgängig machen",
"description": "Title of the button to undo"
},
"gui.costumeTab.addCostume": {
"message": "Kostüm hinzufügen",
"description": "Button to add a costume in the editor tab"
},
"gui.soundEditor.sound": {
"message": "Klang",
"description": "Label for the name of the sound"
}
}

View file

@ -1,130 +0,0 @@
{
"gui.soundEditor.echo": {
"message": "Echo",
"description": "Title of the button to apply the echo effect"
},
"gui.soundEditor.save": {
"message": "Save",
"description": "Title of the button to save trimmed sound"
},
"gui.soundEditor.stop": {
"message": "Stop",
"description": "Title of the button to stop the sound"
},
"gui.soundEditor.redo": {
"message": "Redo",
"description": "Title of the button to redo"
},
"gui.soundEditor.softer": {
"message": "Softer",
"description": "Title of the button to apply thr.softer effect"
},
"gui.soundEditor.robot": {
"message": "Robot",
"description": "Title of the button to apply the robot effect"
},
"gui.customProcedures.addAnInputNumberText": {
"message": "Add an input",
"description": "Label for button to add a number/text input"
},
"gui.stageSelector.targetPaneAddBackdrop": {
"message": "Add Backdrop",
"description": "Button to add a backdrop in the target pane"
},
"gui.customProcedures.addALabel": {
"message": "Add a label",
"description": "Label for button to add a label"
},
"gui.soundEditor.trim": {
"message": "Trim",
"description": "Title of the button to start trimminging the sound"
},
"gui.costumeTab.addBackdrop": {
"message": "Add Backdrop",
"description": "Button to add a backdrop in the editor tab"
},
"gui.customProcedures.addAnInputBoolean": {
"message": "Add an input",
"description": "Label for button to add a boolean input"
},
"gui.spriteSelector.addSprite": {
"message": "Add Sprite",
"description": "Button to add a sprite in the target pane"
},
"gui.customProcedures.ok": {
"message": "OK",
"description": "Label for button to save new custom procedure"
},
"gui.soundEditor.slower": {
"message": "Slower",
"description": "Title of the button to apply the slower effect"
},
"gui.turboMode.active": {
"message": "Turbo Mode",
"description": "Label indicating turbo mode is active"
},
"gui.customProcedures.cancel": {
"message": "Cancel",
"description": "Label for button to cancel custom procedure edits"
},
"gui.customProcedures.numberTextType": {
"message": "number or text",
"description": "Description of the number/text input type"
},
"gui.soundEditor.play": {
"message": "Play",
"description": "Title of the button to start playing the sound"
},
"gui.customProcedures.booleanType": {
"message": "boolean",
"description": "Description of the boolean input type"
},
"gui.soundTab.addSound": {
"message": "Add Sound",
"description": "Button to add a sound in the editor tab"
},
"gui.spriteSelectorItem.contextMenuDuplicate": {
"message": "duplicate",
"description": "Menu item to duplicate in the right click menu"
},
"gui.spriteSelectorItem.contextMenuDelete": {
"message": "delete",
"description": "Menu item to delete in the right click menu"
},
"gui.stageSelector.backdrops": {
"message": "Backdrops",
"description": "Label for the backdrops in the stage selector"
},
"gui.soundEditor.louder": {
"message": "Louder",
"description": "Title of the button to apply the louder effect"
},
"gui.soundEditor.faster": {
"message": "Faster",
"description": "Title of the button to apply the faster effect"
},
"gui.soundTab.recordSound": {
"message": "Record Sound",
"description": "Button to record a sound in the editor tab"
},
"gui.gui.addExtension": {
"message": "Extensions",
"description": "Button to add an extension in the target pane"
},
"gui.soundEditor.reverse": {
"message": "Reverse",
"description": "Title of the button to apply the reverse effect"
},
"gui.soundEditor.undo": {
"message": "Undo",
"description": "Title of the button to undo"
},
"gui.costumeTab.addCostume": {
"message": "Add Costume",
"description": "Button to add a costume in the editor tab"
},
"gui.soundEditor.sound": {
"message": "Sound",
"description": "Label for the name of the sound"
}
}

View file

@ -1,130 +0,0 @@
{
"gui.soundEditor.echo": {
"message": "Eco",
"description": "Title of the button to apply the echo effect"
},
"gui.soundEditor.save": {
"message": "Guardar",
"description": "Title of the button to save trimmed sound"
},
"gui.soundEditor.stop": {
"message": "Parar",
"description": "Title of the button to stop the sound"
},
"gui.soundEditor.redo": {
"message": "Rehacer",
"description": "Title of the button to redo"
},
"gui.soundEditor.softer": {
"message": "Más suave",
"description": "Title of the button to apply thr.softer effect"
},
"gui.soundEditor.robot": {
"message": "Robot",
"description": "Title of the button to apply the robot effect"
},
"gui.customProcedures.addAnInputNumberText": {
"message": "Añadir entrada",
"description": "Label for button to add a number/text input"
},
"gui.stageSelector.targetPaneAddBackdrop": {
"message": "Añadir fondo",
"description": "Button to add a backdrop in the target pane"
},
"gui.customProcedures.addALabel": {
"message": "Añadir etiqueta",
"description": "Label for button to add a label"
},
"gui.soundEditor.trim": {
"message": "Recortar",
"description": "Title of the button to start trimminging the sound"
},
"gui.costumeTab.addBackdrop": {
"message": "Añadir fondo",
"description": "Button to add a backdrop in the editor tab"
},
"gui.customProcedures.addAnInputBoolean": {
"message": "Añadir entrada",
"description": "Label for button to add a boolean input"
},
"gui.spriteSelector.addSprite": {
"message": "Añadir sprite",
"description": "Button to add a sprite in the target pane"
},
"gui.customProcedures.ok": {
"message": "OK",
"description": "Label for button to save new custom procedure"
},
"gui.soundEditor.slower": {
"message": "Más despacio",
"description": "Title of the button to apply the slower effect"
},
"gui.turboMode.active": {
"message": "Modo Turbo",
"description": "Label indicating turbo mode is active"
},
"gui.customProcedures.cancel": {
"message": "Cancelar",
"description": "Label for button to cancel custom procedure edits"
},
"gui.customProcedures.numberTextType": {
"message": "número o texto",
"description": "Description of the number/text input type"
},
"gui.soundEditor.play": {
"message": "Reproducir",
"description": "Title of the button to start playing the sound"
},
"gui.customProcedures.booleanType": {
"message": "lógica",
"description": "Description of the boolean input type"
},
"gui.soundTab.addSound": {
"message": "Añadir sonido",
"description": "Button to add a sound in the editor tab"
},
"gui.spriteSelectorItem.contextMenuDuplicate": {
"message": "duplicar",
"description": "Menu item to duplicate in the right click menu"
},
"gui.spriteSelectorItem.contextMenuDelete": {
"message": "borrar",
"description": "Menu item to delete in the right click menu"
},
"gui.stageSelector.backdrops": {
"message": "Fondos",
"description": "Label for the backdrops in the stage selector"
},
"gui.soundEditor.louder": {
"message": "Más fuerte",
"description": "Title of the button to apply the louder effect"
},
"gui.soundEditor.faster": {
"message": "Más rápido",
"description": "Title of the button to apply the faster effect"
},
"gui.soundTab.recordSound": {
"message": "Grabar sonido",
"description": "Button to record a sound in the editor tab"
},
"gui.gui.addExtension": {
"message": "Extensiones",
"description": "Button to add an extension in the target pane"
},
"gui.soundEditor.reverse": {
"message": "Revertir",
"description": "Title of the button to apply the reverse effect"
},
"gui.soundEditor.undo": {
"message": "Deshacer",
"description": "Title of the button to undo"
},
"gui.costumeTab.addCostume": {
"message": "Añadir disfraz",
"description": "Button to add a costume in the editor tab"
},
"gui.soundEditor.sound": {
"message": "Sonido",
"description": "Label for the name of the sound"
}
}

View file

@ -1,130 +0,0 @@
{
"gui.soundEditor.echo": {
"message": "אקו",
"description": "Title of the button to apply the echo effect"
},
"gui.soundEditor.save": {
"message": "שמור",
"description": "Title of the button to save trimmed sound"
},
"gui.soundEditor.stop": {
"message": "עצור",
"description": "Title of the button to stop the sound"
},
"gui.soundEditor.redo": {
"message": "עשה שוב",
"description": "Title of the button to redo"
},
"gui.soundEditor.softer": {
"message": "רך יותר",
"description": "Title of the button to apply thr.softer effect"
},
"gui.soundEditor.robot": {
"message": "רובוט",
"description": "Title of the button to apply the robot effect"
},
"gui.customProcedures.addAnInputNumberText": {
"message": "Add an input",
"description": "Label for button to add a number/text input"
},
"gui.stageSelector.targetPaneAddBackdrop": {
"message": "הוסף רקע",
"description": "Button to add a backdrop in the target pane"
},
"gui.customProcedures.addALabel": {
"message": "Add a label",
"description": "Label for button to add a label"
},
"gui.soundEditor.trim": {
"message": "קצץ",
"description": "Title of the button to start trimminging the sound"
},
"gui.costumeTab.addBackdrop": {
"message": "הוסף רקע",
"description": "Button to add a backdrop in the editor tab"
},
"gui.customProcedures.addAnInputBoolean": {
"message": "Add an input",
"description": "Label for button to add a boolean input"
},
"gui.spriteSelector.addSprite": {
"message": "הוסף דמות",
"description": "Button to add a sprite in the target pane"
},
"gui.customProcedures.ok": {
"message": "OK",
"description": "Label for button to save new custom procedure"
},
"gui.soundEditor.slower": {
"message": "איטי יותר",
"description": "Title of the button to apply the slower effect"
},
"gui.turboMode.active": {
"message": "מצב טורבו",
"description": "Label indicating turbo mode is active"
},
"gui.customProcedures.cancel": {
"message": "Cancel",
"description": "Label for button to cancel custom procedure edits"
},
"gui.customProcedures.numberTextType": {
"message": "number or text",
"description": "Description of the number/text input type"
},
"gui.soundEditor.play": {
"message": "נגן",
"description": "Title of the button to start playing the sound"
},
"gui.customProcedures.booleanType": {
"message": "boolean",
"description": "Description of the boolean input type"
},
"gui.soundTab.addSound": {
"message": "הוסף צליל",
"description": "Button to add a sound in the editor tab"
},
"gui.spriteSelectorItem.contextMenuDuplicate": {
"message": "שכפל",
"description": "Menu item to duplicate in the right click menu"
},
"gui.spriteSelectorItem.contextMenuDelete": {
"message": "מחק",
"description": "Menu item to delete in the right click menu"
},
"gui.stageSelector.backdrops": {
"message": "רקעים",
"description": "Label for the backdrops in the stage selector"
},
"gui.soundEditor.louder": {
"message": "חזק יותר",
"description": "Title of the button to apply the louder effect"
},
"gui.soundEditor.faster": {
"message": "מהר יותר",
"description": "Title of the button to apply the faster effect"
},
"gui.soundTab.recordSound": {
"message": "הקלט צליל",
"description": "Button to record a sound in the editor tab"
},
"gui.gui.addExtension": {
"message": "תוספים",
"description": "Button to add an extension in the target pane"
},
"gui.soundEditor.reverse": {
"message": "הפוך",
"description": "Title of the button to apply the reverse effect"
},
"gui.soundEditor.undo": {
"message": " ביטול",
"description": "Title of the button to undo"
},
"gui.costumeTab.addCostume": {
"message": "הוסף תלבושת",
"description": "Button to add a costume in the editor tab"
},
"gui.soundEditor.sound": {
"message": "צליל",
"description": "Label for the name of the sound"
}
}

View file

@ -1,6 +1,6 @@
{
"name": "scratch-l10n",
"version": "2.0.0",
"version": "3.0.0",
"description": "Localization for the Scratch 3.0 components",
"main": "./dist/l10n.js",
"bin": {
@ -11,7 +11,7 @@
"build": "npm run clean && npm run build:data && webpack --progress --colors --bail",
"clean": "rimraf ./dist ./locales && mkdirp dist locales",
"lint:js": "eslint . --ext .js",
"lint:json": "jshint -e .json www gui paint pen",
"lint:json": "jshint -e .json www editor/blocks editor/extensions editor/interface editor/paint-editor",
"lint": "npm run lint:js && npm run lint:json",
"test": "npm run lint && npm run build"
},

View file

@ -1,74 +0,0 @@
{
"paint.paintEditor.redo": {
"message": "إعادة",
"description": "Alt to image for the button to redo an action"
},
"paint.paintEditor.fill": {
"message": "مُعَبأ",
"description": "Label for the color picker for the fill color"
},
"paint.modeTools.eraserSize": {
"message": "حجم الممحاة",
"description": "Label for the eraser size input"
},
"paint.paintEditor.backward": {
"message": "إلى الخلف",
"description": "Label for the `Send backward on canvas` button"
},
"paint.paintEditor.group": {
"message": "تجميع",
"description": "Label for the button to group shapes"
},
"paint.modeTools.paste": {
"message": "لصق",
"description": "Label for the paste button"
},
"paint.paintEditor.saturation": {
"message": "تَشَبُع",
"description": "Label for the saturation component in the color picker"
},
"paint.modeTools.brushSize": {
"message": "حجم الفرشاة",
"description": "Label for the brush size input"
},
"paint.paintEditor.undo": {
"message": "تَراجع",
"description": "Alt to image for the button to undo an action"
},
"paint.paintEditor.forward": {
"message": "إلى الأمام",
"description": "Label for the `Send forward on canvas` button"
},
"paint.paintEditor.brightness": {
"message": "شدة الإضاءة",
"description": "Label for the brightness component in the color picker"
},
"paint.paintEditor.costume": {
"message": "المظهر",
"description": "Label for the name of a sound"
},
"paint.paintEditor.back": {
"message": "الرُجُوع",
"description": "Label for the `Send to back of canvas` button"
},
"paint.paintEditor.ungroup": {
"message": "فك تجميع",
"description": "Label for the button to ungroup shapes"
},
"paint.paintEditor.hue": {
"message": "اللون",
"description": "Label for the hue component in the color picker"
},
"paint.modeTools.copy": {
"message": "نسخ",
"description": "Label for the copy button"
},
"paint.paintEditor.front": {
"message": "الأمام",
"description": "Label for the `Send to front of canvas` button"
},
"paint.paintEditor.stroke": {
"message": "الخطوط العريضة",
"description": "Label for the color picker for the outline color"
}
}

View file

@ -1,74 +0,0 @@
{
"paint.paintEditor.redo": {
"message": "Wiederherstellen",
"description": "Alt to image for the button to redo an action"
},
"paint.paintEditor.fill": {
"message": "Füllen",
"description": "Label for the color picker for the fill color"
},
"paint.modeTools.eraserSize": {
"message": "Radierergröße",
"description": "Label for the eraser size input"
},
"paint.paintEditor.backward": {
"message": "Zurück",
"description": "Label for the `Send backward on canvas` button"
},
"paint.paintEditor.group": {
"message": "Gruppieren",
"description": "Label for the button to group shapes"
},
"paint.modeTools.paste": {
"message": "Einfügen",
"description": "Label for the paste button"
},
"paint.paintEditor.saturation": {
"message": "Sättigung",
"description": "Label for the saturation component in the color picker"
},
"paint.modeTools.brushSize": {
"message": "Pinselgröße",
"description": "Label for the brush size input"
},
"paint.paintEditor.undo": {
"message": "Rückgängig machen",
"description": "Alt to image for the button to undo an action"
},
"paint.paintEditor.forward": {
"message": "Nach vorne",
"description": "Label for the `Send forward on canvas` button"
},
"paint.paintEditor.brightness": {
"message": "Helligkeit",
"description": "Label for the brightness component in the color picker"
},
"paint.paintEditor.costume": {
"message": "Kostüm",
"description": "Label for the name of a sound"
},
"paint.paintEditor.back": {
"message": "Zurück",
"description": "Label for the `Send to back of canvas` button"
},
"paint.paintEditor.ungroup": {
"message": "Gruppierung aufheben",
"description": "Label for the button to ungroup shapes"
},
"paint.paintEditor.hue": {
"message": "Farbe",
"description": "Label for the hue component in the color picker"
},
"paint.modeTools.copy": {
"message": "Kopieren",
"description": "Label for the copy button"
},
"paint.paintEditor.front": {
"message": "Schriftart",
"description": "Label for the `Send to front of canvas` button"
},
"paint.paintEditor.stroke": {
"message": "Umriss",
"description": "Label for the color picker for the outline color"
}
}

View file

@ -1,74 +0,0 @@
{
"paint.paintEditor.redo": {
"message": "Rehacer",
"description": "Alt to image for the button to redo an action"
},
"paint.paintEditor.fill": {
"message": "Rellenar",
"description": "Label for the color picker for the fill color"
},
"paint.modeTools.eraserSize": {
"message": "Tamaño de la goma",
"description": "Label for the eraser size input"
},
"paint.paintEditor.backward": {
"message": "Atrás",
"description": "Label for the `Send backward on canvas` button"
},
"paint.paintEditor.group": {
"message": "Agrupar",
"description": "Label for the button to group shapes"
},
"paint.modeTools.paste": {
"message": "Pegar",
"description": "Label for the paste button"
},
"paint.paintEditor.saturation": {
"message": "Saturación",
"description": "Label for the saturation component in the color picker"
},
"paint.modeTools.brushSize": {
"message": "Tamaño del pincel",
"description": "Label for the brush size input"
},
"paint.paintEditor.undo": {
"message": "Deshacer",
"description": "Alt to image for the button to undo an action"
},
"paint.paintEditor.forward": {
"message": "Adelante",
"description": "Label for the `Send forward on canvas` button"
},
"paint.paintEditor.brightness": {
"message": "Brillo",
"description": "Label for the brightness component in the color picker"
},
"paint.paintEditor.costume": {
"message": "Disfraz",
"description": "Label for the name of a sound"
},
"paint.paintEditor.back": {
"message": "Detrás del todo",
"description": "Label for the `Send to back of canvas` button"
},
"paint.paintEditor.ungroup": {
"message": "Desagrupar",
"description": "Label for the button to ungroup shapes"
},
"paint.paintEditor.hue": {
"message": "Color",
"description": "Label for the hue component in the color picker"
},
"paint.modeTools.copy": {
"message": "Copiar",
"description": "Label for the copy button"
},
"paint.paintEditor.front": {
"message": "Al frente",
"description": "Label for the `Send to front of canvas` button"
},
"paint.paintEditor.stroke": {
"message": "Contorno",
"description": "Label for the color picker for the outline color"
}
}

View file

@ -1,74 +0,0 @@
{
"paint.paintEditor.redo": {
"message": "עשה שוב",
"description": "Alt to image for the button to redo an action"
},
"paint.paintEditor.fill": {
"message": "מילוי",
"description": "Label for the color picker for the fill color"
},
"paint.modeTools.eraserSize": {
"message": "גודל מחק",
"description": "Label for the eraser size input"
},
"paint.paintEditor.backward": {
"message": "לאחור",
"description": "Label for the `Send backward on canvas` button"
},
"paint.paintEditor.group": {
"message": "קבץ",
"description": "Label for the button to group shapes"
},
"paint.modeTools.paste": {
"message": "הדבק",
"description": "Label for the paste button"
},
"paint.paintEditor.saturation": {
"message": "סטורציה",
"description": "Label for the saturation component in the color picker"
},
"paint.modeTools.brushSize": {
"message": "גודל מברשת",
"description": "Label for the brush size input"
},
"paint.paintEditor.undo": {
"message": " ביטול",
"description": "Alt to image for the button to undo an action"
},
"paint.paintEditor.forward": {
"message": "קדימה",
"description": "Label for the `Send forward on canvas` button"
},
"paint.paintEditor.brightness": {
"message": "בהירות",
"description": "Label for the brightness component in the color picker"
},
"paint.paintEditor.costume": {
"message": "תלבושת",
"description": "Label for the name of a sound"
},
"paint.paintEditor.back": {
"message": "אחורה",
"description": "Label for the `Send to back of canvas` button"
},
"paint.paintEditor.ungroup": {
"message": "פרק",
"description": "Label for the button to ungroup shapes"
},
"paint.paintEditor.hue": {
"message": "צבע",
"description": "Label for the hue component in the color picker"
},
"paint.modeTools.copy": {
"message": "עותק",
"description": "Label for the copy button"
},
"paint.paintEditor.front": {
"message": "קידמה",
"description": "Label for the `Send to front of canvas` button"
},
"paint.paintEditor.stroke": {
"message": "קו מתאר",
"description": "Label for the color picker for the outline color"
}
}

View file

@ -1,70 +0,0 @@
{
"pen.setColor": {
"message": "اجعل لون القلم مساويًا [COLOR] ",
"description": "set the pen color to a particular (RGB) value"
},
"pen.setColorParam": {
"message": "تَعِيينْ القَلَم [COLOR_PARAM]إلى [VALUE]",
"description": "set the state for a pen color parameter e.g. saturation"
},
"pen.colorMenu.brightness": {
"message": "شدة الإضاءة",
"description": "label for brightness element in color picker for pen extension"
},
"pen.setSize": {
"message": "اجعل حجم القلم مساويًا [SIZE]",
"description": "set the diameter of a trail left by a sprite"
},
"pen.changeHue": {
"message": "غيِّر ظل القلم بمقدار [HUE]",
"description": "legacy pen blocks - change pen color"
},
"pen.stamp": {
"message": "اِطْبَع",
"description": "render current costume on the background"
},
"pen.clear": {
"message": "امسح",
"description": "erase all pen trails and stamps"
},
"pen.setHue": {
"message": "اجعل مساحة القلم مساويًا [HUE]",
"description": "legacy pen blocks - set pen color to number"
},
"pen.setShade": {
"message": "اجعل ظل القلم مساويًا [SHADE]",
"description": "legacy pen blocks - set pen shade"
},
"pen.colorMenu.color": {
"message": "اللون",
"description": "label for color element in color picker for pen extension"
},
"pen.changeSize": {
"message": "غيِّر حجم القلم بمقدار [SIZE]",
"description": "change the diameter of the trail left by a sprite"
},
"pen.colorMenu.transparency": {
"message": "شَفَافْ",
"description": "label for transparency element in color picker for pen extension"
},
"pen.changeColorParam": {
"message": "غيِّر القَلَم [COLOR_PARAM] عن طريق [VALUE]",
"description": "change the state of a pen color parameter"
},
"pen.penDown": {
"message": "أنزل القلم",
"description": "start leaving a trail when the sprite moves"
},
"pen.penUp": {
"message": "ارْفَع القَلَم",
"description": "stop leaving a trail behind the sprite"
},
"pen.colorMenu.saturation": {
"message": "تشبع",
"description": "label for saturation element in color picker for pen extension"
},
"pen.changeShade": {
"message": "غيِّر ظل القلم بمقدار [SHADE]",
"description": "legacy pen blocks - change pen shade"
}
}

View file

@ -1,70 +0,0 @@
{
"pen.setColor": {
"message": "setze Stiftfarbe auf [COLOR]",
"description": "set the pen color to a particular (RGB) value"
},
"pen.setColorParam": {
"message": "setze [COLOR_PARAM] von Stift auf [VALUE]",
"description": "set the state for a pen color parameter e.g. saturation"
},
"pen.colorMenu.brightness": {
"message": "Helligkeit",
"description": "label for brightness element in color picker for pen extension"
},
"pen.setSize": {
"message": "Setze Stiftdicke auf [SIZE]",
"description": "set the diameter of a trail left by a sprite"
},
"pen.changeHue": {
"message": "Ändere Stiftsättigung um [HUE]",
"description": "legacy pen blocks - change pen color"
},
"pen.stamp": {
"message": "hinterlasse Abdruck",
"description": "render current costume on the background"
},
"pen.clear": {
"message": "wische Malspuren weg",
"description": "erase all pen trails and stamps"
},
"pen.setHue": {
"message": "Setze Stiftsättigung auf [HUE]",
"description": "legacy pen blocks - set pen color to number"
},
"pen.setShade": {
"message": "setze Farbstärke auf [SHADE]",
"description": "legacy pen blocks - set pen shade"
},
"pen.colorMenu.color": {
"message": "Farbe",
"description": "label for color element in color picker for pen extension"
},
"pen.changeSize": {
"message": "Ändere Stiftdicke um [SIZE]",
"description": "change the diameter of the trail left by a sprite"
},
"pen.colorMenu.transparency": {
"message": "Transparenz",
"description": "label for transparency element in color picker for pen extension"
},
"pen.changeColorParam": {
"message": "setze [COLOR_PARAM] von Stift auf [VALUE]",
"description": "change the state of a pen color parameter"
},
"pen.penDown": {
"message": "schalte Stift ein",
"description": "start leaving a trail when the sprite moves"
},
"pen.penUp": {
"message": "schalte Stift aus",
"description": "stop leaving a trail behind the sprite"
},
"pen.colorMenu.saturation": {
"message": "Sättigung",
"description": "label for saturation element in color picker for pen extension"
},
"pen.changeShade": {
"message": "Ändere Farbstärke um [SHADE]",
"description": "legacy pen blocks - change pen shade"
}
}

View file

@ -1,70 +0,0 @@
{
"pen.setColor": {
"message": "set pen color to [COLOR]",
"description": "set the pen color to a particular (RGB) value"
},
"pen.setColorParam": {
"message": "set pen [COLOR_PARAM] to [VALUE]",
"description": "set the state for a pen color parameter e.g. saturation"
},
"pen.colorMenu.brightness": {
"message": "brightness",
"description": "label for brightness element in color picker for pen extension"
},
"pen.setSize": {
"message": "set pen size to [SIZE]",
"description": "set the diameter of a trail left by a sprite"
},
"pen.changeHue": {
"message": "change pen hue by [HUE]",
"description": "legacy pen blocks - change pen color"
},
"pen.stamp": {
"message": "stamp",
"description": "render current costume on the background"
},
"pen.clear": {
"message": "clear",
"description": "erase all pen trails and stamps"
},
"pen.setHue": {
"message": "set pen hue to [HUE]",
"description": "legacy pen blocks - set pen color to number"
},
"pen.setShade": {
"message": "set pen shade to [SHADE]",
"description": "legacy pen blocks - set pen shade"
},
"pen.colorMenu.color": {
"message": "color",
"description": "label for color element in color picker for pen extension"
},
"pen.changeSize": {
"message": "change pen size by [SIZE]",
"description": "change the diameter of the trail left by a sprite"
},
"pen.colorMenu.transparency": {
"message": "transparency",
"description": "label for transparency element in color picker for pen extension"
},
"pen.changeColorParam": {
"message": "change pen [COLOR_PARAM] by [VALUE]",
"description": "change the state of a pen color parameter"
},
"pen.penDown": {
"message": "pen down",
"description": "start leaving a trail when the sprite moves"
},
"pen.penUp": {
"message": "pen up",
"description": "stop leaving a trail behind the sprite"
},
"pen.colorMenu.saturation": {
"message": "saturation",
"description": "label for saturation element in color picker for pen extension"
},
"pen.changeShade": {
"message": "change pen shade by [SHADE]",
"description": "legacy pen blocks - change pen shade"
}
}

View file

@ -1,70 +0,0 @@
{
"pen.setColor": {
"message": "fijar color del lápiz a [COLOR]",
"description": "set the pen color to a particular (RGB) value"
},
"pen.setColorParam": {
"message": "fijar [COLOR_PARAM] del lápiz a [VALUE]",
"description": "set the state for a pen color parameter e.g. saturation"
},
"pen.colorMenu.brightness": {
"message": "brillo",
"description": "label for brightness element in color picker for pen extension"
},
"pen.setSize": {
"message": "fijar tamaño del lápiz a [SIZE]",
"description": "set the diameter of a trail left by a sprite"
},
"pen.changeHue": {
"message": "cambiar tono del lápiz por [HUE]",
"description": "legacy pen blocks - change pen color"
},
"pen.stamp": {
"message": "sellar",
"description": "render current costume on the background"
},
"pen.clear": {
"message": "borrar",
"description": "erase all pen trails and stamps"
},
"pen.setHue": {
"message": "fijar tono del lápiz a [HUE]",
"description": "legacy pen blocks - set pen color to number"
},
"pen.setShade": {
"message": "fijar sombra del lápiz a [SHADE]",
"description": "legacy pen blocks - set pen shade"
},
"pen.colorMenu.color": {
"message": "color",
"description": "label for color element in color picker for pen extension"
},
"pen.changeSize": {
"message": "cambiar tamaño del lápiz a [SIZE]",
"description": "change the diameter of the trail left by a sprite"
},
"pen.colorMenu.transparency": {
"message": "transparencia",
"description": "label for transparency element in color picker for pen extension"
},
"pen.changeColorParam": {
"message": "cambiar [COLOR_PARAM] del lápiz a [VALUE]",
"description": "change the state of a pen color parameter"
},
"pen.penDown": {
"message": "bajar lápiz",
"description": "start leaving a trail when the sprite moves"
},
"pen.penUp": {
"message": "subir lápiz",
"description": "stop leaving a trail behind the sprite"
},
"pen.colorMenu.saturation": {
"message": "saturación",
"description": "label for saturation element in color picker for pen extension"
},
"pen.changeShade": {
"message": "cambiar sombra del lápiz por [SHADE]",
"description": "legacy pen blocks - change pen shade"
}
}

View file

@ -1,70 +0,0 @@
{
"pen.setColor": {
"message": "קבע צבע עט ל[COLOR]",
"description": "set the pen color to a particular (RGB) value"
},
"pen.setColorParam": {
"message": "קבע [COLOR_PARAM] עט ל[VALUE]",
"description": "set the state for a pen color parameter e.g. saturation"
},
"pen.colorMenu.brightness": {
"message": "בהירות",
"description": "label for brightness element in color picker for pen extension"
},
"pen.setSize": {
"message": "קבע גודל עט ל[SIZE]",
"description": "set the diameter of a trail left by a sprite"
},
"pen.changeHue": {
"message": "שנה גוון עט ב[HUE]",
"description": "legacy pen blocks - change pen color"
},
"pen.stamp": {
"message": "החתם",
"description": "render current costume on the background"
},
"pen.clear": {
"message": "נקה",
"description": "erase all pen trails and stamps"
},
"pen.setHue": {
"message": "קבע גוון עט ל[HUE]",
"description": "legacy pen blocks - set pen color to number"
},
"pen.setShade": {
"message": "קבע הצללת עט ל[SHADE]",
"description": "legacy pen blocks - set pen shade"
},
"pen.colorMenu.color": {
"message": "צבע",
"description": "label for color element in color picker for pen extension"
},
"pen.changeSize": {
"message": "שנה גודל עט ב[SIZE]",
"description": "change the diameter of the trail left by a sprite"
},
"pen.colorMenu.transparency": {
"message": "שקיפות",
"description": "label for transparency element in color picker for pen extension"
},
"pen.changeColorParam": {
"message": "שנה [COLOR_PARAM] עט ל[VALUE]",
"description": "change the state of a pen color parameter"
},
"pen.penDown": {
"message": "עט מטה",
"description": "start leaving a trail when the sprite moves"
},
"pen.penUp": {
"message": "עט מעלה",
"description": "stop leaving a trail behind the sprite"
},
"pen.colorMenu.saturation": {
"message": "סטורציה",
"description": "label for saturation element in color picker for pen extension"
},
"pen.changeShade": {
"message": "שנה הצללת עט ב[SHADE]",
"description": "legacy pen blocks - change pen shade"
}
}

View file

@ -34,48 +34,79 @@ Example output:
}
}
'''
NOTE: blocks messages are plain key-value JSON files
Missing locales are ignored, react-intl will use the default messages for them.
*/
import * as fs from 'fs';
import * as path from 'path';
import {sync as mkdirpSync} from 'mkdirp';
import defaultsDeep from 'lodash.defaultsdeep';
import locales from '../src/supported-locales.js';
const MSGS_DIR = './locales/';
mkdirpSync(MSGS_DIR);
let missingLocales = [];
// generate messages:
let components = ['gui', 'paint', 'pen'];
// generate messages for gui components - files are Chrome i18n format json
let components = ['interface', 'extensions', 'paint-editor'];
let editorMsgs = {};
components.forEach((component) => {
let messages = Object.keys(locales).reduce((collection, lang) => {
let langMessages = {};
try {
let langData = JSON.parse(
fs.readFileSync(path.resolve(component, lang + '.json'), 'utf8')
fs.readFileSync(path.resolve('editor', component, lang + '.json'), 'utf8')
);
Object.keys(langData).forEach((id) => {
langMessages[id] = langData[id].message;
});
collection[lang] = {
messages: langMessages
};
collection[lang] = langMessages;
} catch (e) {
missingLocales.push(lang);
}
return collection;
}, {});
mkdirpSync(MSGS_DIR);
let data =
'// GENERATED FILE:\n' +
'const ' + component + 'Msgs = ' +
'export default ' +
JSON.stringify(messages, null, 2) +
'\nexports.messages = ' + component + 'Msgs;\n';
';\n';
fs.writeFileSync(MSGS_DIR + component + '-msgs.js', data);
defaultsDeep(editorMsgs, messages);
if (missingLocales.length > 0) {
process.stdout.write('missing locales: ' + missingLocales.toString());
process.exit(1);
}
});
// generate the blocks messages: files are plain key-value JSON
let blocksMessages = Object.keys(locales).reduce((collection, lang) => {
try {
let langData = JSON.parse(
fs.readFileSync(path.resolve('editor', 'blocks', lang + '.json'), 'utf8')
);
collection[lang] = langData;
} catch (e) {
missingLocales.push(lang);
}
return collection;
}, {});
let blockData =
'// GENERATED FILE:\n' +
'export default ' +
JSON.stringify(blocksMessages, null, 2) +
';\n';
fs.writeFileSync(MSGS_DIR + 'blocks-msgs.js', blockData);
defaultsDeep(editorMsgs, blocksMessages);
// generate combined editor-msgs file
let editorData =
'// GENERATED FILE:\n' +
'export default ' +
JSON.stringify(editorMsgs, null, 2) +
';\n';
fs.writeFileSync(MSGS_DIR + 'editor-msgs.js', editorData);

View file

@ -1,17 +1,87 @@
import en from 'react-intl/locale-data/en';
import ar from 'react-intl/locale-data/ar';
import az from 'react-intl/locale-data/az'; // parent for Abkahz
import ca from 'react-intl/locale-data/ca';
import cs from 'react-intl/locale-data/cs';
import cy from 'react-intl/locale-data/cy';
import de from 'react-intl/locale-data/de';
import el from 'react-intl/locale-data/el';
import es from 'react-intl/locale-data/es';
import fr from 'react-intl/locale-data/fr';
import ga from 'react-intl/locale-data/ga';
import gd from 'react-intl/locale-data/gd';
import he from 'react-intl/locale-data/he';
import locales from './supported-locales.js';
import it from 'react-intl/locale-data/it';
import ja from 'react-intl/locale-data/ja';
import nl from 'react-intl/locale-data/nl';
import nb from 'react-intl/locale-data/nb';
import pt from 'react-intl/locale-data/pt';
import sl from 'react-intl/locale-data/sl';
import sr from 'react-intl/locale-data/sr';
import tr from 'react-intl/locale-data/tr';
import uk from 'react-intl/locale-data/uk';
import zh from 'react-intl/locale-data/zh';
let localeData = locales;
localeData.en.localeData = en;
localeData.ar.localeData = ar;
localeData.de.localeData = de;
localeData.es.localeData = es;
localeData.he.localeData = he;
import locales, {customLocales} from './supported-locales.js';
/*
locales = {
'ab': {name: 'Аҧсшәа'},
'ca': {name: 'Català'},
'cs': {name: 'Česky'},
'cy': {name: 'Cymraeg'},
'de': {name: 'Deutsch'},
'el': {name: 'Ελληνικά'},
'en': {name: 'English'},
'es': {name: 'Español'},
'es-419': {name: 'Español Latinoamericano'},
'fr': {name: 'Français'},
'ga': {name: 'Gaeilge'},
'gd': {name: 'Gàidhlig'},
'he': {name: 'עִבְרִית'},
'it': {name: 'Italiano'},
'ja': {name: '日本語'},
'mi': {name: 'Maori'},
'nl': {name: 'Nederlands'},
'nb': {name: 'Norsk Bokmål'},
'pt': {name: 'Português'},
'pt-br': {name: 'Português Brasileiro'},
'sr': {name: 'Српски'},
'sl': {name: 'Slovenščina'},
'tr': {name: 'Türkçe'},
'uk': {name: 'Українська'},
'zh-cn': {name: '简体中文'},
'zh-tw': {name: '繁體中文'}
*/
let localeData = [].concat(
en,
az, // parent for Abkahz
ca,
cs,
cy,
de,
el,
es,
fr,
ga,
gd,
he,
it,
ja,
nl,
nb,
pt,
sl,
sr,
tr,
uk,
zh
);
for (const lang in customLocales) {
localeData.push(customLocales[lang]);
}
export {
localeData as default
locales as default,
localeData // data expected for initializing ReactIntl.addLocaleData
};

View file

@ -4,11 +4,55 @@
*/
const locales = {
en: {name: 'English'},
ar: {name: 'الْعَرَبِيَّة'},
de: {name: 'Deutsch'},
es: {name: 'Español'},
he: {name: 'עִבְרִית'}
'ab': {name: 'Аҧсшәа'},
'ca': {name: 'Català'},
'cs': {name: 'Česky'},
'cy': {name: 'Cymraeg'},
'de': {name: 'Deutsch'},
'el': {name: 'Ελληνικά'},
'en': {name: 'English'},
'es': {name: 'Español'},
'es-419': {name: 'Español Latinoamericano'},
'fr': {name: 'Français'},
'ga': {name: 'Gaeilge'},
'gd': {name: 'Gàidhlig'},
'he': {name: 'עִבְרִית'},
'it': {name: 'Italiano'},
'ja': {name: '日本語'},
'mi': {name: 'Maori'},
'nl': {name: 'Nederlands'},
'nb': {name: 'Norsk Bokmål'},
'pt': {name: 'Português'},
'pt-br': {name: 'Português Brasileiro'},
'sr': {name: 'Српски'},
'sl': {name: 'Slovenščina'},
'tr': {name: 'Türkçe'},
'uk': {name: 'Українська'},
'zh-cn': {name: '简体中文'},
'zh-tw': {name: '繁體中文'}
};
const customLocales = {
'ab': {
locale: 'ab',
parentLocale: 'az'
},
'es-419': {
locale: 'es-419',
parentLocale: 'es'
},
'mi': {
locale: 'mi',
parentLocale: 'en'
},
'zh-cn': {
locale: 'zh-cn',
parentLocale: 'zh'
},
'zh-tw': {
locale: 'zh-tw',
parentLocale: 'zh'
}
};
const wwwLocales = {
@ -87,4 +131,4 @@ const wwwLocales = {
'zh-tw': {name: '繁體中文'}
};
export {locales as default, wwwLocales};
export {locales as default, customLocales, wwwLocales};