diff --git a/.tx/config b/.tx/config index d0884291..e7471f55 100644 --- a/.tx/config +++ b/.tx/config @@ -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/.json -source_file = gui/en.json +[scratch-editor.blocks] +file_filter = editor/blocks/.json +source_file = editor/blocks/en.json source_lang = en type = CHROME -[experimental-scratch.scratch-paint] -file_filter = paint/.json -source_file = paint/en.json +[scratch-editor.extensions] +file_filter = editor/extensions/.json +source_file = editor/extensions/en.json source_lang = en type = CHROME -[experimental-scratch.pen] -file_filter = pen/.json -source_file = pen/en.json +[scratch-editor.interface] +file_filter = editor/interface/.json +source_file = editor/interface/en.json +source_lang = en +type = CHROME +[scratch-editor.paint-editor] +file_filter = editor/paint-editor/.json +source_file = editor/paint-editor/en.json source_lang = en type = CHROME diff --git a/editor/blocks/en.json b/editor/blocks/en.json new file mode 100644 index 00000000..6bcdfa97 --- /dev/null +++ b/editor/blocks/en.json @@ -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" +} \ No newline at end of file diff --git a/editor/extensions/en.json b/editor/extensions/en.json new file mode 100644 index 00000000..1ad19da1 --- /dev/null +++ b/editor/extensions/en.json @@ -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" + } +} \ No newline at end of file diff --git a/editor/interface/en.json b/editor/interface/en.json new file mode 100644 index 00000000..6adaa494 --- /dev/null +++ b/editor/interface/en.json @@ -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" + } +} \ No newline at end of file diff --git a/paint/en.json b/editor/paint-editor/en.json similarity index 62% rename from paint/en.json rename to editor/paint-editor/en.json index fbbfc3d6..823b6028 100644 --- a/paint/en.json +++ b/editor/paint-editor/en.json @@ -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" } } \ No newline at end of file diff --git a/gui/ar.json b/gui/ar.json deleted file mode 100644 index b93a26a5..00000000 --- a/gui/ar.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/gui/de.json b/gui/de.json deleted file mode 100644 index b8dcdbc4..00000000 --- a/gui/de.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/gui/en.json b/gui/en.json deleted file mode 100644 index f79213b9..00000000 --- a/gui/en.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/gui/es.json b/gui/es.json deleted file mode 100644 index d3a2194a..00000000 --- a/gui/es.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/gui/he.json b/gui/he.json deleted file mode 100644 index c3f2b670..00000000 --- a/gui/he.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/package.json b/package.json index d0a4ca19..c5ed2146 100644 --- a/package.json +++ b/package.json @@ -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" }, diff --git a/paint/ar.json b/paint/ar.json deleted file mode 100644 index 51b084b7..00000000 --- a/paint/ar.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/paint/de.json b/paint/de.json deleted file mode 100644 index e68b9e0d..00000000 --- a/paint/de.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/paint/es.json b/paint/es.json deleted file mode 100644 index e94248a6..00000000 --- a/paint/es.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/paint/he.json b/paint/he.json deleted file mode 100644 index 87b8178e..00000000 --- a/paint/he.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/pen/ar.json b/pen/ar.json deleted file mode 100644 index 69235229..00000000 --- a/pen/ar.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/pen/de.json b/pen/de.json deleted file mode 100644 index aa7d59c3..00000000 --- a/pen/de.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/pen/en.json b/pen/en.json deleted file mode 100644 index a33d8ddf..00000000 --- a/pen/en.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/pen/es.json b/pen/es.json deleted file mode 100644 index ba30a175..00000000 --- a/pen/es.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/pen/he.json b/pen/he.json deleted file mode 100644 index e9ad0b6f..00000000 --- a/pen/he.json +++ /dev/null @@ -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" - } -} \ No newline at end of file diff --git a/scripts/build-data.js b/scripts/build-data.js index cf7ca692..cbf273d2 100755 --- a/scripts/build-data.js +++ b/scripts/build-data.js @@ -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); diff --git a/src/index.js b/src/index.js index dc2b0f96..c11425ba 100644 --- a/src/index.js +++ b/src/index.js @@ -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 }; diff --git a/src/supported-locales.js b/src/supported-locales.js index 5d3426dc..9e1c0f7f 100644 --- a/src/supported-locales.js +++ b/src/supported-locales.js @@ -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};