smalruby-editor 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of smalruby-editor might be problematic. Click here for more details.

Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/LEGAL +4 -3
  3. data/app/assets/javascripts/blocks/character.js.coffee.erb +7 -3
  4. data/app/assets/javascripts/blocks/events.js.coffee.erb +7 -10
  5. data/app/assets/javascripts/blocks/hardware.js.coffee.erb +119 -31
  6. data/app/assets/javascripts/blocks/motion.js.coffee.erb +16 -20
  7. data/app/assets/javascripts/blocks/operators.js.coffee.erb +1 -1
  8. data/app/assets/javascripts/blocks/pen.js.coffee.erb +2 -1
  9. data/app/assets/javascripts/blocks/ruby.js.coffee.erb +3 -3
  10. data/app/assets/javascripts/blocks/sensing.js.coffee.erb +8 -8
  11. data/app/assets/javascripts/blocks/sound.js.coffee.erb +3 -1
  12. data/app/assets/javascripts/fix_blockly.js.erb +105 -0
  13. data/app/assets/javascripts/generators/ruby.js.coffee.erb +3 -0
  14. data/app/assets/javascripts/msg/en_us.js +67 -17
  15. data/app/assets/javascripts/msg/ja.js +151 -95
  16. data/app/assets/javascripts/{smalruby.js.coffee → smalruby.js.coffee.erb} +35 -16
  17. data/app/assets/javascripts/views/character_selector_view.js.coffee +2 -2
  18. data/app/assets/javascripts/views/{load_modal_view.js.coffee → load_modal_view.js.coffee.erb} +8 -2
  19. data/app/assets/javascripts/views/main_menu_view.js.coffee.erb +33 -48
  20. data/app/assets/javascripts/views/signin_modal_view.js.coffee.erb +43 -0
  21. data/app/assets/stylesheets/application.css +3 -1
  22. data/app/assets/stylesheets/toolbox.css.scss.erb +2 -56
  23. data/app/assets/stylesheets/toolbox_default.css.scss.erb +34 -0
  24. data/app/assets/stylesheets/toolbox_smalrubot_s1.css.scss.erb +31 -0
  25. data/app/assets/stylesheets/toolbox_smalrubot_v3.css.scss.erb +32 -0
  26. data/app/controllers/application_controller.rb +5 -0
  27. data/app/controllers/source_codes_controller.rb +6 -3
  28. data/app/helpers/application_helper.rb +12 -0
  29. data/app/helpers/editor_helper.rb +25 -0
  30. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_s1_action.rb +13 -0
  31. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_s1_action_with_sec.rb +14 -0
  32. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_s1_ir_photoreflector_value.rb +29 -0
  33. data/app/models/concerns/ruby_to_block/block/hardware_smalrubot_s1_led_turn_on_or_off.rb +22 -0
  34. data/app/views/editor/_block_tab.html.haml +7 -6
  35. data/app/views/editor/_reset_modal.html.haml +4 -4
  36. data/app/views/editor/_signin_modal.html.haml +8 -9
  37. data/app/views/editor/_toolbox_default.html.haml +504 -0
  38. data/app/views/editor/_toolbox_smalrubot_s1.html.haml +171 -0
  39. data/app/views/editor/_toolbox_smalrubot_v3.html.haml +177 -0
  40. data/app/views/editor/index.html.haml +12 -2
  41. data/app/views/layouts/application.html.erb +1 -0
  42. data/config/environments/production.rb +1 -0
  43. data/config/locales/en.yml +19 -16
  44. data/config/locales/ja.yml +28 -25
  45. data/demos/hardware_led.rb.xml +79 -79
  46. data/lib/smalruby_editor.rb +58 -0
  47. data/lib/smalruby_editor/config.rb +22 -0
  48. data/lib/smalruby_editor/version.rb +1 -1
  49. data/public/blockly/media/anon.jpeg +0 -0
  50. data/public/blockly/media/handclosed.cur +0 -0
  51. data/public/blockly/media/handdelete.cur +0 -0
  52. data/public/blockly/media/progress.gif +0 -0
  53. data/public/blockly/media/sprites.png +0 -0
  54. data/smalruby-editor.gemspec +2 -1
  55. data/spec/acceptance/base.feature +3 -3
  56. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_action.feature +107 -0
  57. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_action_with_sec.feature +151 -0
  58. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_ir_photoreflector_value.feature +100 -0
  59. data/spec/acceptance/block_mode/blocks/hardware/smalrubot_s1_led_turn_on_or_off.feature +73 -0
  60. data/spec/acceptance/ruby_mode/translate.feature +6 -6
  61. data/spec/acceptance/standalone/save.feature +3 -3
  62. data/spec/acceptance/standalone/signin.feature +1 -2
  63. data/spec/lib/smalruby_editor_spec.rb +21 -11
  64. data/spec/models/concerns/ruby_to_block/block/hardware__smalrubot_s1_spec.rb +279 -0
  65. data/vendor/assets/javascripts/blockly/blockly_compressed.js +995 -668
  66. data/vendor/assets/javascripts/blockly/blocks_compressed.js +138 -114
  67. data/vendor/assets/javascripts/blockly/msg/js/en_us.js +6 -6
  68. data/vendor/assets/javascripts/blockly/msg/js/ja.js +42 -28
  69. metadata +66 -25
  70. data/app/assets/javascripts/fix_blockly.js +0 -128
  71. data/app/assets/javascripts/views/signin_modal_view.js.coffee +0 -33
  72. data/app/views/editor/_toolbox.html.haml +0 -496
  73. data/public/blockly/media/trashbody.png +0 -0
  74. data/public/blockly/media/trashlid.png +0 -0
  75. data/public/blockly/media/tree.png +0 -0
@@ -3,6 +3,7 @@
3
3
  <%
4
4
  category = 'pen'
5
5
  require 'smalruby_editor'
6
+ require 'smalruby_editor/blockly_message_helper'
6
7
  color = SmalrubyEditor::COLORS[category.to_sym]
7
8
  %>
8
9
 
@@ -34,7 +35,7 @@ Blockly.Blocks['<%= n %>'] =
34
35
  @setHelpUrl('')
35
36
  @setColour(<%= color %>)
36
37
  @interpolateMsg(<%= bm('.set_pen_color') %>,
37
- ['COLOUR', ['Colour', '#ff0000'], Blockly.ALIGN_RIGHT],
38
+ ['COLOUR', new Blockly.FieldColour('#ff0000')],
38
39
  Blockly.ALIGN_RIGHT)
39
40
  @setPreviousStatement(true)
40
41
  @setNextStatement(true)
@@ -63,9 +63,9 @@ Blockly.Blocks['<%= n %>'] =
63
63
  init: ()->
64
64
  @setHelpUrl('')
65
65
  @setColour(<%= color %>)
66
- @interpolateMsg('p %1',
67
- ['ARG', null, Blockly.ALIGN_RIGHT],
68
- Blockly.ALIGN_RIGHT)
66
+ @interpolateMsg(<%= bm('.p') %>,
67
+ ['ARG', null, Blockly.ALIGN_RIGHT],
68
+ Blockly.ALIGN_RIGHT)
69
69
  @setInputsInline(true)
70
70
  @setPreviousStatement(true)
71
71
  @setNextStatement(true)
@@ -215,10 +215,10 @@ Blockly.Blocks['<%= n %>'] =
215
215
 
216
216
  @setHelpUrl('')
217
217
  @setColour(<%= color %>)
218
- @appendDummyInput()
219
- .appendField(new Smalruby.FieldCharacter(), 'CHAR')
220
- .appendField(<%= bm('.character_property_middle') %>)
221
- .appendField(new Blockly.FieldDropdown(dropdown), 'PROPERTY')
218
+ @interpolateMsg(<%= bm('.character_property') %>,
219
+ ['CHAR', new Smalruby.FieldCharacter()],
220
+ ['PROPERTY', new Blockly.FieldDropdown(dropdown)],
221
+ Blockly.ALIGN_RIGHT)
222
222
  @setOutput(true, ['Number', 'String'])
223
223
  @setTooltip('')
224
224
 
@@ -244,9 +244,9 @@ Blockly.Blocks['<%= n %>'] =
244
244
 
245
245
  @setHelpUrl('')
246
246
  @setColour(<%= color %>)
247
- @appendDummyInput()
248
- .appendField(<%= bm('.time_now') %>)
249
- .appendField(new Blockly.FieldDropdown(dropdown), 'METHOD')
247
+ @interpolateMsg(<%= bm('.time_now') %>,
248
+ ['METHOD', new Blockly.FieldDropdown(dropdown)],
249
+ Blockly.ALIGN_RIGHT)
250
250
  @setOutput(true, 'Number')
251
251
  @setTooltip('')
252
252
 
@@ -261,7 +261,7 @@ Blockly.Blocks['<%= n %>'] =
261
261
  @setHelpUrl('')
262
262
  @setColour(<%= color %>)
263
263
  @appendDummyInput()
264
- .appendField('2000年からの日数')
264
+ .appendField(<%= bm('.days_since_2000') %>)
265
265
  @setOutput(true, 'Number')
266
266
  @setTooltip('')
267
267
 
@@ -23,7 +23,9 @@ Blockly.Blocks['<%= n %>'] =
23
23
  ]
24
24
  @setHelpUrl('')
25
25
  @setColour(<%= color %>)
26
- @appendDummyInput().appendField(new Blockly.FieldDropdown(sounds), 'NAME')
26
+ @interpolateMsg(<%= bm('.preset_sounds') %>,
27
+ ['NAME', new Blockly.FieldDropdown(sounds)],
28
+ Blockly.ALIGN_RIGHT)
27
29
  @setOutput(true, 'String')
28
30
  @setTooltip('')
29
31
 
@@ -0,0 +1,105 @@
1
+ /**
2
+ * this program copied from Blockly and modified
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ <%
18
+ require 'smalruby_editor'
19
+ %>
20
+
21
+ // blockly/core/toolbox.js
22
+ // HACK: don't close category when clicked twice
23
+ Blockly.Toolbox.TreeNode.prototype.onMouseDown = function(e) {
24
+ // Expand icon.
25
+ if (this.hasChildren() && this.isUserCollapsible_) {
26
+ this.toggle();
27
+ this.select();
28
+ } else if (this.isSelected()) {
29
+ //this.getTree().setSelectedItem(null);
30
+ } else {
31
+ this.select();
32
+ }
33
+ this.updateRow();
34
+ };
35
+
36
+ Blockly.Blocks.math.HUE = <%= SmalrubyEditor::COLORS[:operators] %>;
37
+ Blockly.Blocks.texts.HUE = <%= SmalrubyEditor::COLORS[:operators] %>;
38
+
39
+ // blockly/core/field_textinput.js
40
+ Blockly.FieldTextInput.prototype.showEditorOrig_ =
41
+ Blockly.FieldTextInput.prototype.showEditor_;
42
+ Blockly.FieldTextInput.prototype.showEditor_ = function(opt_quietInput) {
43
+ Blockly.FieldTextInput.prototype.showEditorOrig_.apply(this, arguments);
44
+ var htmlInput = Blockly.FieldTextInput.htmlInput_;
45
+ htmlInput.onKeyDownWrapper_ =
46
+ Blockly.bindEvent_(htmlInput, 'keydown', this, this.onHtmlInputChange2_);
47
+ };
48
+
49
+ Blockly.FieldTextInput.prototype.onHtmlInputChange_ = function(e) {
50
+ var htmlInput = Blockly.FieldTextInput.htmlInput_;
51
+ if (e.keyCode != 27) {
52
+ // Update source block.
53
+ var text = htmlInput.value;
54
+ if (text !== htmlInput.oldValue_) {
55
+ htmlInput.oldValue_ = text;
56
+ this.setText(text);
57
+ this.validate_();
58
+ } else if (goog.userAgent.WEBKIT) {
59
+ // Cursor key. Render the source block to show the caret moving.
60
+ // Chrome only (version 26, OS X).
61
+ this.sourceBlock_.render();
62
+ }
63
+ }
64
+ };
65
+
66
+ Blockly.FieldTextInput.prototype.onHtmlInputChange2_ = function(e) {
67
+ var htmlInput = Blockly.FieldTextInput.htmlInput_;
68
+ if (e.keyCode == 13) {
69
+ // Enter
70
+ Blockly.WidgetDiv.hide();
71
+ } else if (e.keyCode == 27) {
72
+ // Esc
73
+ this.setText(htmlInput.defaultValue);
74
+ Blockly.WidgetDiv.hide();
75
+ }
76
+ };
77
+
78
+ Blockly.FieldTextInput.prototype.widgetDisposeOrig_ =
79
+ Blockly.FieldTextInput.prototype.widgetDispose_;
80
+ Blockly.FieldTextInput.prototype.widgetDispose_ = function() {
81
+ var thisField = this;
82
+ return function() {
83
+ Blockly.FieldTextInput.prototype.widgetDisposeOrig_.call(thisField);
84
+ var htmlInput = Blockly.FieldTextInput.htmlInput_;
85
+ Blockly.unbindEvent_(htmlInput.onKeyDownWrapper_);
86
+ };
87
+ };
88
+
89
+ // blockly/core/names.js
90
+ Blockly.Names.prototype.safeName_ = function(name) {
91
+ if (!name) {
92
+ name = 'unnamed';
93
+ } else {
94
+ // Unfortunately names in non-latin characters will look like
95
+ // _E9_9F_B3_E4_B9_90 which is pretty meaningless.
96
+ // HACK: Rubyでは日本語の変数名を許可しているためencodeURIを行わない。
97
+ // また、使えない記号を置換する。
98
+ name = name.replace(/[ !"#$%&'()=\-~^\\|`@{\[+;*:}\]<>,.?\/]/g, '_')
99
+ // Most languages don't allow names with leading numbers.
100
+ if ('0123456789'.indexOf(name[0]) != -1) {
101
+ name = '_' + name;
102
+ }
103
+ }
104
+ return name;
105
+ };
@@ -51,6 +51,9 @@ Blockly.Ruby.init = ->
51
51
  @definitions_['receiver_stack'] = ['main']
52
52
  @definitions_['character_stack'] = []
53
53
 
54
+ if Smalruby.isEnabled('auto_init_hardware')
55
+ @definitions_['init_hardware'] = 'init_hardware'
56
+
54
57
  Blockly.Ruby.defineCharacter = (c) ->
55
58
  name = c.get('name')
56
59
  blockName = "character_#{name}"
@@ -16,18 +16,25 @@ Blockly.Msg.COMMON_BACKWARD = 'backward';
16
16
  Blockly.Msg.COMMON_TURN_LEFT = 'turn left';
17
17
  Blockly.Msg.COMMON_TURN_RIGHT = 'turn right';
18
18
  Blockly.Msg.COMMON_STOP = 'stop';
19
+ Blockly.Msg.COMMON_ERROR = 'Error';
19
20
 
20
21
 
21
22
  // colour name
22
23
  Blockly.Msg.COLOUR_RED = 'red';
23
24
  Blockly.Msg.COLOUR_GREEN = 'green';
25
+ Blockly.Msg.COLOUR_BLUE = 'blue';
26
+ Blockly.Msg.COLOUR_WHITE = 'white';
27
+
28
+
29
+ // smalruby.js.coffee
30
+ Blockly.Msg.SMALRUBY_WILL_DISAPPER_YOUR_PROGRAM = 'Disappear your program!';
24
31
 
25
32
 
26
33
  // views/main_menu_view.js.coffee
27
34
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_LINES = ' Lines';
28
35
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_LETTERS = ' Letters';
29
36
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_COMMA = ', ';
30
-
37
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_CONFIRM_OVERWRITE = 'Are you sure to save?\nBecause you saved as {$filename}, so that will disappear, if you will save!';
31
38
 
32
39
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_BLOCK_MODE_BLOCKUI_TITLE = 'Converting Program';
33
40
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_BLOCK_MODE_BLOCKUI_MESSAGE = 'Converting your program to instruction blocks.';
@@ -41,6 +48,40 @@ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_RUN_ERROR_CANCEL_TO_RUN = "Cancel to run your p
41
48
 
42
49
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_BLOCKUI_TITLE = 'Downloading';
43
50
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_BLOCKUI_MESSAGE = "Downloading your program.";
51
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_SUCCEEDED = 'Downloaded.<br>You can run with "ruby {$filename}" on windows or "rsdl {$filename}" on Mac OS X.';
52
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_ERROR = "Can't download";
53
+
54
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_LOAD_CONFIRM = "Your program will disappear, because you didn't save it! Are you sure to load?";
55
+
56
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_ERROR_NO_NAME = 'You must set program name before you save it!';
57
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_BLOCKUI_TITLE = 'Saving your program';
58
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_BLOCKUI_MESSAGE = 'Now, saving your program.';
59
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_BLOCKUI_NOTICE = 'Your program name is "{$filename}".<br>It will be saved at home directory.<br>';
60
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_ERROR_MESSAGE = "Can't save your program.";
61
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_CANCELED = 'Canceled to save.';
62
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_SUCCEEDED = 'Saved.';
63
+
64
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_BLOCKUI_TITLE = 'Checking your program';
65
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_BLOCKUI_MESSAGE = 'Now, checking syntax of your program.';
66
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_BLOCKUI_NOTICE = 'This is only checking syntax, so you will find error when you run it.';
67
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_SUCCEEDED = 'Checked.';
68
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_SUCCEEDED_NOTICE = 'Your program was checked only syntax, so you will find error when you run it.';
69
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_ERROR = "Can't check.";
70
+
71
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SIGNOUT_SUCCEEDED = 'Logouted.';
72
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SIGNOUT_ERROR = "Can't logout.";
73
+
74
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_LOAD_ERROR = '{$filename}{$error}';
75
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_LOAD_SUCCEEDED = 'Loaded.';
76
+
77
+
78
+ // views/load_modal_view.js.coffee
79
+ Blockly.Msg.VIEWS_LOAD_MODAL_VIEW_ERROR = "Can't load the program.";
80
+
81
+
82
+ // views/signin_modal_view.js.coffee
83
+ Blockly.Msg.VIEWS_SIGNIN_MODAL_VIEW_SIGNED_IN = 'Logged in.';
84
+ Blockly.Msg.VIEWS_SIGNIN_MODAL_VIEW_ERROR = "Can't login.";
44
85
 
45
86
 
46
87
  // blocks/motion.js.coffee.erb
@@ -49,13 +90,10 @@ Blockly.Msg.BLOCKS_MOTION_TURN_RIGHT_DEGREES = 'turn right %1 degrees';
49
90
  Blockly.Msg.BLOCKS_MOTION_TURN_LEFT_DEGREES = 'turn left %1 degrees';
50
91
  Blockly.Msg.BLOCKS_MOTION_POINT_IN_DIRECTION = 'point in direction %1';
51
92
  Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_MOUSE = 'point towards mouse-pointer';
52
- Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_CHARACTER = 'point towards';
53
- Blockly.Msg.BLOCKS_MOTION_SET_X_Y_X = 'go to x:';
54
- Blockly.Msg.BLOCKS_MOTION_SET_X_Y_Y = 'y:';
55
- Blockly.Msg.BLOCKS_MOTION_SET_X_Y_SUFFIX = '';
93
+ Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_CHARACTER = 'point towards %1';
94
+ Blockly.Msg.BLOCKS_MOTION_SET_X_Y = 'go to x: %1 y: %2';
56
95
  Blockly.Msg.BLOCKS_MOTION_GO_TO_MOUSE = 'go to mouse-pointer';
57
- Blockly.Msg.BLOCKS_MOTION_GO_TO_CHARACTER_PREFIX = 'go to ';
58
- Blockly.Msg.BLOCKS_MOTION_GO_TO_CHARACTER_SUFFIX = '';
96
+ Blockly.Msg.BLOCKS_MOTION_GO_TO_CHARACTER = 'go to %1';
59
97
  Blockly.Msg.BLOCKS_MOTION_CHANGE_X_BY = 'change x by %1';
60
98
  Blockly.Msg.BLOCKS_MOTION_SET_X = 'set x to %1';
61
99
  Blockly.Msg.BLOCKS_MOTION_CHANGE_Y_BY = 'change y by %1';
@@ -64,25 +102,22 @@ Blockly.Msg.BLOCKS_MOTION_TURN_IF_REACH_WALL = 'if reach wall, turn';
64
102
  Blockly.Msg.BLOCKS_MOTION_TURN = 'turn';
65
103
  Blockly.Msg.BLOCKS_MOTION_TURN_XY_X = '(x) horizontal';
66
104
  Blockly.Msg.BLOCKS_MOTION_TURN_XY_Y = '(y) vertical';
67
- Blockly.Msg.BLOCKS_MOTION_TURN_XY_PREFIX = 'turn to ';
68
- Blockly.Msg.BLOCKS_MOTION_TURN_XY_SUFFIX = '';
105
+ Blockly.Msg.BLOCKS_MOTION_TURN_XY = 'turn to %1';
106
+ Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE = 'set rotation style %1';
69
107
  Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_LEFT_RIGHT = 'left-right';
70
108
  Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_NONE = "don't rorate";
71
109
  Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_FREE = 'all around';
72
- Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_PREFIX = 'set rotation style ';
73
- Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_SUFFIX = '';
74
110
  Blockly.Msg.BLOCKS_MOTION_SELF_X = 'x position';
75
111
  Blockly.Msg.BLOCKS_MOTION_SELF_Y = 'y position';
76
112
  Blockly.Msg.BLOCKS_MOTION_SELF_ANGLE = 'direction';
77
113
 
114
+
78
115
  // blocks/events.js.coffee.erb
79
116
  Blockly.Msg.BLOCKS_EVENTS_ON_START = 'when Run clicked';
80
- Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN_PREFIX = 'when ';
81
- Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN_MIDDLE = ' key ';
82
- Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN_SUFFIX = '';
117
+ Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = 'when %1 key %2';
83
118
  Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = 'when this sprite clicked';
84
- Blockly.Msg.BLOCKS_EVENTS_ON_HIT_PREFIX = 'when ';
85
- Blockly.Msg.BLOCKS_EVENTS_ON_HIT_SUFFIX = ' hit';
119
+ Blockly.Msg.BLOCKS_EVENTS_ON_HIT = 'when %1 hit';
120
+
86
121
 
87
122
  // blocks/sensing.js.coffee.erb
88
123
  Blockly.Msg.BLOCKS_SENSING_K_UP = 'up arrow';
@@ -118,7 +153,7 @@ Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_COSTUME_INDEX = 'costume #';
118
153
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_COSTUME = 'contume name';
119
154
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_SCALE = 'size';
120
155
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_VOLUME = 'volume';
121
- Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_MIDDLE = ' of ';
156
+ Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY = '%2 of %1';
122
157
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_YEAR = 'year';
123
158
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_MONTH = 'month';
124
159
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_DAY = 'day';
@@ -127,6 +162,8 @@ Blockly.Msg.BLOCKS_SENSING_TIME_NOW_HOUR = 'hour';
127
162
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_MIN = 'min';
128
163
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_SEC = 'sec';
129
164
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW = 'current ';
165
+ Blockly.Msg.BLOCKS_SENSING_DAYS_SINCE_2000 = 'days since 2000';
166
+
130
167
 
131
168
  // blocks/control.js.coffee.erb
132
169
  Blockly.Msg.BLOCKS_CONTROL_SLEEP = 'wait %1 secs';
@@ -143,15 +180,20 @@ Blockly.Msg.BLOCKS_CONTROL_AWAIT_UNTIL = 'wait until %1';
143
180
  Blockly.Msg.BLOCKS_CONTROL_UNTIL = 'repeat until %1';
144
181
  Blockly.Msg.BLOCKS_CONTROL_AWAIT = 'just wait a little';
145
182
 
183
+
146
184
  // blocks/ruby.js.coffee.erb
147
185
  Blockly.Msg.BLOCKS_RUBY_STATEMENT = 'statement ';
148
186
  Blockly.Msg.BLOCKS_RUBY_EXPRESSION = 'expression ';
149
187
  Blockly.Msg.BLOCKS_RUBY_COMMENT = 'comment ';
188
+ Blockly.Msg.BLOCKS_RUBY_P = 'p %1';
189
+
150
190
 
151
191
  // blocks/field_character.js.coffee.erb
152
192
  Blockly.Msg.BLOCKS_FIELD_CHARACTER_NO_CHARACTER = 'no character';
153
193
 
194
+
154
195
  // blocks/sound.js.coffee.erb
196
+ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS = '%1';
155
197
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO = 'Middle C of piano';
156
198
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_RE = 'D of piano';
157
199
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_MI = 'E of piano';
@@ -162,6 +204,7 @@ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SI = 'B of piano';
162
204
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO_2 = 'High C of piano';
163
205
  Blockly.Msg.BLOCKS_SOUND_PLAY = 'play sound %1';
164
206
 
207
+
165
208
  // blocks/looks.js.coffee.erb
166
209
  Blockly.Msg.BLOCKS_LOOKS_SAY = 'say %1';
167
210
  Blockly.Msg.BLOCKS_LOOKS_THINK = 'think %1';
@@ -171,6 +214,7 @@ Blockly.Msg.BLOCKS_LOOKS_SHOW = 'show';
171
214
  Blockly.Msg.BLOCKS_LOOKS_HIDE = 'hide';
172
215
  Blockly.Msg.BLOCKS_LOOKS_VANISH = 'vanish';
173
216
 
217
+
174
218
  // blocks/hardware.js.coffee.erb
175
219
  Blockly.Msg.BLOCKS_HARDWARE_LED_TURN_ON = 'turn on LED %1';
176
220
  Blockly.Msg.BLOCKS_HARDWARE_LED_TURN_OFF = 'turn off LED %1';
@@ -186,6 +230,7 @@ Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_OFF = 'turn off 7 segment disp
186
230
  Blockly.Msg.BLOCKS_HARDWARE_LCD_PUTS = 'display %1 on the LCD';
187
231
  Blockly.Msg.BLOCKS_HARDWARE_LCD_CLEAR = 'clear LCD';
188
232
  Blockly.Msg.BLOCKS_HARDWARE_SERVO_SET_POSITION = 'servo motor %1 set %2 degree (5-180)';
233
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS = '%1';
189
234
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_FORWARD = 'forward 2WD car %1';
190
235
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_BACKWARD = 'backward 2WD car %1';
191
236
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_TURN_LEFT = 'turn left 2WD car %1';
@@ -214,6 +259,10 @@ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_ACTION = '%1 Smalrubot v3';
214
259
  Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_ACTION_WITH_SEC = '%1 Smalrubot v3 for %2 secs';
215
260
  Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_TOUCH_SENSOR_PRESSED_OR_RELEASED = 'Smalrubot v3 %1 touch sensor %2 ?';
216
261
  Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_LIGHT_SENSOR_VALUE = 'Smalrubot v3 light sensor value';
262
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_LED_TURN_ON_OR_OFF = '%2 Smalrubot s1 %1 LED';
263
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_ACTION = '%1 Smalrubot s1';
264
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_ACTION_WITH_SEC = '%1 Smalrubot s1 for %2 secs';
265
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_IR_PHOTOREFLECTOR_VALUE = 'Smalrubot s1 %1 IR Photoreflector';
217
266
 
218
267
 
219
268
  // blocks/operators.js.coffee.erb
@@ -252,6 +301,7 @@ Blockly.Msg.BLOCKS_OPERATORS_MATH_METHOD_10_SQUARE = '10 ^';
252
301
  Blockly.Msg.BLOCKS_OPERATORS_TRUE = 'true';
253
302
  Blockly.Msg.BLOCKS_OPERATORS_FALSE = 'false';
254
303
 
304
+
255
305
  // blocks/pen.js.coffee.erb
256
306
  Blockly.Msg.BLOCKS_PEN_DOWN_PEN = 'pen down';
257
307
  Blockly.Msg.BLOCKS_PEN_UP_PEN = 'pen up';
@@ -16,17 +16,25 @@ Blockly.Msg.COMMON_BACKWARD = 'バックさせる';
16
16
  Blockly.Msg.COMMON_TURN_LEFT = '左に曲げる';
17
17
  Blockly.Msg.COMMON_TURN_RIGHT = '右に曲げる';
18
18
  Blockly.Msg.COMMON_STOP = '止める';
19
+ Blockly.Msg.COMMON_ERROR = 'エラー';
19
20
 
20
21
 
21
22
  // colour name
22
23
  Blockly.Msg.COLOUR_RED = '赤色';
23
24
  Blockly.Msg.COLOUR_GREEN = '緑色';
25
+ Blockly.Msg.COLOUR_BLUE = '青色';
26
+ Blockly.Msg.COLOUR_WHITE = '白色';
27
+
28
+
29
+ // smalruby.js.coffee
30
+ Blockly.Msg.SMALRUBY_WILL_DISAPPER_YOUR_PROGRAM = '作成中のプログラムが消えてしまうよ!';
24
31
 
25
32
 
26
33
  // views/main_menu_view.js.coffee
27
34
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_LINES = '行';
28
35
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_LETTERS = '文字';
29
36
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_COMMA = '、';
37
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_COMMON_CONFIRM_OVERWRITE = '前に{$filename}という名前でセーブしているけど本当にセーブしますか?\nセーブすると前に作成したプログラムは消えてしまうよ!';
30
38
 
31
39
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_BLOCK_MODE_BLOCKUI_TITLE = 'プログラムの変換中';
32
40
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_BLOCK_MODE_BLOCKUI_MESSAGE = 'プログラムをブロックに変換しています。';
@@ -40,48 +48,76 @@ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_RUN_ERROR_CANCEL_TO_RUN = 'プログラムの
40
48
 
41
49
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_BLOCKUI_TITLE = 'プログラムのダウンロード中';
42
50
  Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_BLOCKUI_MESSAGE = 'プログラムをダウンロードしています。';
51
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_SUCCEEDED = 'ダウンロードしました。<br>ダウンロードしたプログラムは、Windowsだと「ruby {$filename}」、Macだと「rsdl {$filename}」で実行できます。';
52
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_DOWNLOAD_ERROR = 'ダウンロードできませんでした';
53
+
54
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_LOAD_CONFIRM = 'まだセーブしていないのでロードするとプログラムが消えてしまうよ!\nそれでもロードしますか?';
55
+
56
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_ERROR_NO_NAME = 'セーブする前にプログラムに名前をつけてね!';
57
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_BLOCKUI_TITLE = 'プログラムのセーブ中';
58
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_BLOCKUI_MESSAGE = 'プログラムをセーブしています。';
59
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_BLOCKUI_NOTICE = 'プログラムの名前は「{$filename}」です。<br>プログラムはホームディレクトリにセーブします。<br>';
60
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_ERROR_MESSAGE = 'セーブできませんでした';
61
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_CANCELED = 'セーブをキャンセルしました';
62
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SAVE_SUCCEEDED = 'セーブしました';
63
+
64
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_BLOCKUI_TITLE = 'プログラムのチェック中';
65
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_BLOCKUI_MESSAGE = 'プログラムの文法をチェックしています。';
66
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_BLOCKUI_NOTICE = 'このチェックは簡易的なものですので、<br>プログラムを動かすとエラーが見つかるかもしれません。';
67
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_SUCCEEDED = 'チェックしました';
68
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_SUCCEEDED_NOTICE = 'ただし、プログラムを動かすとエラーが見つかるかもしれません。';
69
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_CHECK_ERROR = 'チェックできませんでした';
70
+
71
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SIGNOUT_SUCCEEDED = 'ログアウトしました';
72
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_SIGNOUT_ERROR = 'ログアウトに失敗しました';
73
+
74
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_LOAD_ERROR = '{$filename}{$error}';
75
+ Blockly.Msg.VIEWS_MAIN_MENU_VIEW_LOAD_SUCCEEDED = 'ロードしました';
76
+
77
+
78
+ // views/load_modal_view.js.coffee
79
+ Blockly.Msg.VIEWS_LOAD_MODAL_VIEW_ERROR = 'ロードに失敗しました';
80
+
81
+
82
+ // views/signin_modal_view.js.coffee
83
+ Blockly.Msg.VIEWS_SIGNIN_MODAL_VIEW_SIGNED_IN = 'ログインしました';
84
+ Blockly.Msg.VIEWS_SIGNIN_MODAL_VIEW_ERROR = 'ログインに失敗しました';
43
85
 
44
86
 
45
87
  // blocks/motion.js.coffee.erb
46
- Blockly.Msg.BLOCKS_MOTION_MOVE = '%1歩動かす';
47
- Blockly.Msg.BLOCKS_MOTION_TURN_RIGHT_DEGREES = '時計回りに%1度回す';
48
- Blockly.Msg.BLOCKS_MOTION_TURN_LEFT_DEGREES = '反時計回りに%1度回す';
49
- Blockly.Msg.BLOCKS_MOTION_POINT_IN_DIRECTION = '%1度に向ける';
50
- Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_MOUSE = 'マウスポインターへ向ける';
51
- Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_CHARACTER = 'へ向ける';
52
- Blockly.Msg.BLOCKS_MOTION_SET_X_Y_X = 'x座標を';
53
- Blockly.Msg.BLOCKS_MOTION_SET_X_Y_Y = '、y座標を';
54
- Blockly.Msg.BLOCKS_MOTION_SET_X_Y_SUFFIX = 'にする';
55
- Blockly.Msg.BLOCKS_MOTION_GO_TO_MOUSE = 'マウスポインターへ行く';
56
- Blockly.Msg.BLOCKS_MOTION_GO_TO_CHARACTER_PREFIX = '';
57
- Blockly.Msg.BLOCKS_MOTION_GO_TO_CHARACTER_SUFFIX = 'へ行く';
58
- Blockly.Msg.BLOCKS_MOTION_CHANGE_X_BY = 'x座標を%1ずつ変える';
59
- Blockly.Msg.BLOCKS_MOTION_SET_X = 'x座標を%1にする';
60
- Blockly.Msg.BLOCKS_MOTION_CHANGE_Y_BY = 'y座標を%1ずつ変える';
61
- Blockly.Msg.BLOCKS_MOTION_SET_Y = 'y座標を%1にする';
62
- Blockly.Msg.BLOCKS_MOTION_TURN_IF_REACH_WALL = 'もし端に着いたら、跳ね返る';
63
- Blockly.Msg.BLOCKS_MOTION_TURN = '跳ね返る';
88
+ Blockly.Msg.BLOCKS_MOTION_MOVE = '■%1歩動かす';
89
+ Blockly.Msg.BLOCKS_MOTION_TURN_RIGHT_DEGREES = '■時計回りに%1度回す';
90
+ Blockly.Msg.BLOCKS_MOTION_TURN_LEFT_DEGREES = '■反時計回りに%1度回す';
91
+ Blockly.Msg.BLOCKS_MOTION_POINT_IN_DIRECTION = '■%1 度に向ける';
92
+ Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_MOUSE = '■マウスポインターへ向ける';
93
+ Blockly.Msg.BLOCKS_MOTION_POINT_TOWARDS_CHARACTER = '■%1 へ向ける';
94
+ Blockly.Msg.BLOCKS_MOTION_SET_X_Y = 'x座標を %1 、y座標を %2 にする';
95
+ Blockly.Msg.BLOCKS_MOTION_GO_TO_MOUSE = '■マウスポインターへ行く';
96
+ Blockly.Msg.BLOCKS_MOTION_GO_TO_CHARACTER = '■%1 へ行く';
97
+ Blockly.Msg.BLOCKS_MOTION_CHANGE_X_BY = '■x座標を %1 ずつ変える';
98
+ Blockly.Msg.BLOCKS_MOTION_SET_X = '■x座標を %1 にする';
99
+ Blockly.Msg.BLOCKS_MOTION_CHANGE_Y_BY = '■y座標を %1 ずつ変える';
100
+ Blockly.Msg.BLOCKS_MOTION_SET_Y = '■y座標を %1 にする';
101
+ Blockly.Msg.BLOCKS_MOTION_TURN_IF_REACH_WALL = '■もし端に着いたら、跳ね返る';
102
+ Blockly.Msg.BLOCKS_MOTION_TURN = '■跳ね返る';
64
103
  Blockly.Msg.BLOCKS_MOTION_TURN_XY_X = '水平(x)';
65
104
  Blockly.Msg.BLOCKS_MOTION_TURN_XY_Y = '垂直(y)';
66
- Blockly.Msg.BLOCKS_MOTION_TURN_XY_PREFIX = '';
67
- Blockly.Msg.BLOCKS_MOTION_TURN_XY_SUFFIX = '方向に跳ね返る';
105
+ Blockly.Msg.BLOCKS_MOTION_TURN_XY = '■%1 方向に跳ね返る';
68
106
  Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_LEFT_RIGHT = '左右のみ';
69
107
  Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_NONE = '回転しない';
70
108
  Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_FREE = '自由に回転';
71
- Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_PREFIX = '回転方法を';
72
- Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE_SUFFIX = 'にする';
73
- Blockly.Msg.BLOCKS_MOTION_SELF_X = 'x座標';
74
- Blockly.Msg.BLOCKS_MOTION_SELF_Y = 'y座標';
75
- Blockly.Msg.BLOCKS_MOTION_SELF_ANGLE = '向き';
109
+ Blockly.Msg.BLOCKS_MOTION_SET_ROTATION_STYLE = '■回転方法を %1 にする';
110
+ Blockly.Msg.BLOCKS_MOTION_SELF_X = '■x座標';
111
+ Blockly.Msg.BLOCKS_MOTION_SELF_Y = '■y座標';
112
+ Blockly.Msg.BLOCKS_MOTION_SELF_ANGLE = '■向き';
113
+
76
114
 
77
115
  // blocks/events.js.coffee.erb
78
- Blockly.Msg.BLOCKS_EVENTS_ON_START = '実行ボタンがクリックされたとき';
79
- Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN_PREFIX = 'キーボードの';
80
- Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN_MIDDLE = '';
81
- Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN_SUFFIX = 'とき';
82
- Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = 'キャラクターがクリックされたとき';
83
- Blockly.Msg.BLOCKS_EVENTS_ON_HIT_PREFIX = '';
84
- Blockly.Msg.BLOCKS_EVENTS_ON_HIT_SUFFIX = 'にぶつかったとき';
116
+ Blockly.Msg.BLOCKS_EVENTS_ON_START = '♣実行ボタンがクリックされたとき';
117
+ Blockly.Msg.BLOCKS_EVENTS_ON_KEY_PUSH_OR_DOWN = '♣キーボードの %1 が %2 のとき';
118
+ Blockly.Msg.BLOCKS_EVENTS_ON_CLICK = '♣キャラクターがクリックされたとき';
119
+ Blockly.Msg.BLOCKS_EVENTS_ON_HIT = '♣%1 にぶつかったとき';
120
+
85
121
 
86
122
  // blocks/sensing.js.coffee.erb
87
123
  Blockly.Msg.BLOCKS_SENSING_K_UP = '↑';
@@ -99,16 +135,16 @@ Blockly.Msg.BLOCKS_SENSING_M_MBUTTON = '中ボタン';
99
135
  Blockly.Msg.BLOCKS_SENSING_M_RBUTTON = '右ボタン';
100
136
  Blockly.Msg.BLOCKS_SENSING_RELEASED = '離された';
101
137
  Blockly.Msg.BLOCKS_SENSING_UP = Blockly.Msg.BLOCKS_SENSING_RELEASED;
102
- Blockly.Msg.BLOCKS_SENSING_REACH_WALL = '端に触れた';
103
- Blockly.Msg.BLOCKS_SENSING_INPUT_KEY_PUSH_OR_DOWN_PREFIX = 'キーボードの';
138
+ Blockly.Msg.BLOCKS_SENSING_REACH_WALL = '◎端に触れた';
139
+ Blockly.Msg.BLOCKS_SENSING_INPUT_KEY_PUSH_OR_DOWN_PREFIX = '◎キーボードの';
104
140
  Blockly.Msg.BLOCKS_SENSING_INPUT_KEY_PUSH_OR_DOWN_MIDDLE = 'が';
105
141
  Blockly.Msg.BLOCKS_SENSING_INPUT_KEY_PUSH_OR_DOWN_SUFFIX = '';
106
- Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_PUSH_OR_DOWN_PREFIX = 'マウスの';
142
+ Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_PUSH_OR_DOWN_PREFIX = '◎マウスの';
107
143
  Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_PUSH_OR_DOWN_MIDDLE = 'が';
108
144
  Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_PUSH_OR_DOWN_SUFFIX = '';
109
- Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_POS_X = 'マウスのx座標';
110
- Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_POS_Y = 'マウスのy座標';
111
- Blockly.Msg.BLOCKS_SENSING_HIT_PREFIX = '';
145
+ Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_POS_X = '◎マウスのx座標';
146
+ Blockly.Msg.BLOCKS_SENSING_INPUT_MOUSE_POS_Y = '◎マウスのy座標';
147
+ Blockly.Msg.BLOCKS_SENSING_HIT_PREFIX = '';
112
148
  Blockly.Msg.BLOCKS_SENSING_HIT_SUFFIX = 'に触れた';
113
149
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_X = 'x座標';
114
150
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_Y = 'y座標';
@@ -117,7 +153,7 @@ Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_COSTUME_INDEX = 'コスチュー
117
153
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_COSTUME = 'コスチューム名';
118
154
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_SCALE = '大きさ';
119
155
  Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_VOLUME = 'ボリューム';
120
- Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY_MIDDLE = 'の';
156
+ Blockly.Msg.BLOCKS_SENSING_CHARACTER_PROPERTY = '◎%1 %2';
121
157
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_YEAR = '年';
122
158
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_MONTH = '月';
123
159
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_DAY = '日';
@@ -125,32 +161,39 @@ Blockly.Msg.BLOCKS_SENSING_TIME_NOW_WDAY = '曜日';
125
161
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_HOUR = '時';
126
162
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_MIN = '分';
127
163
  Blockly.Msg.BLOCKS_SENSING_TIME_NOW_SEC = '秒';
128
- Blockly.Msg.BLOCKS_SENSING_TIME_NOW = '現在の';
164
+ Blockly.Msg.BLOCKS_SENSING_TIME_NOW = '◎現在の %1';
165
+ Blockly.Msg.BLOCKS_SENSING_DAYS_SINCE_2000 = '◎2000年からの日数';
166
+
129
167
 
130
168
  // blocks/control.js.coffee.erb
131
- Blockly.Msg.BLOCKS_CONTROL_SLEEP = '%1秒待つ';
132
- Blockly.Msg.BLOCKS_CONTROL_LOOP = 'ずっと';
169
+ Blockly.Msg.BLOCKS_CONTROL_SLEEP = '◆%1秒待つ';
170
+ Blockly.Msg.BLOCKS_CONTROL_LOOP = '◆ずっと';
133
171
  Blockly.Msg.BLOCKS_CONTROL_LOOP_END = 'を繰り返す';
134
- Blockly.Msg.BLOCKS_CONTROL_BREAK = '繰り返しから脱出する';
135
- Blockly.Msg.BLOCKS_CONTROL_NEXT = '次の繰り返しにジャンプする';
136
- Blockly.Msg.BLOCKS_CONTROL_REDO = '現在の繰り返しをやり直す';
137
- Blockly.Msg.BLOCKS_CONTROL_IF = 'もし';
172
+ Blockly.Msg.BLOCKS_CONTROL_BREAK = '◆繰り返しから脱出する';
173
+ Blockly.Msg.BLOCKS_CONTROL_NEXT = '◆以降の処理を飛ばして、次の回の処理を開始する';
174
+ Blockly.Msg.BLOCKS_CONTROL_REDO = '◆以降の処理を飛ばして、もう一度同じ処理をやり直す';
175
+ Blockly.Msg.BLOCKS_CONTROL_IF = '◆もし';
138
176
  Blockly.Msg.BLOCKS_CONTROL_THEN = 'ならば';
139
177
  Blockly.Msg.BLOCKS_CONTROL_ELSE = 'でなければ';
140
- Blockly.Msg.BLOCKS_CONTROL_TIMES = '%1回繰り返す';
141
- Blockly.Msg.BLOCKS_CONTROL_AWAIT_UNTIL = '%1まで待つ';
142
- Blockly.Msg.BLOCKS_CONTROL_UNTIL = '%1まで';
143
- Blockly.Msg.BLOCKS_CONTROL_AWAIT = 'ほんの少し待つ';
178
+ Blockly.Msg.BLOCKS_CONTROL_TIMES = '◆%1回繰り返す';
179
+ Blockly.Msg.BLOCKS_CONTROL_AWAIT_UNTIL = '◆%1まで待つ';
180
+ Blockly.Msg.BLOCKS_CONTROL_UNTIL = '◆%1まで';
181
+ Blockly.Msg.BLOCKS_CONTROL_AWAIT = '◆ほんの少し待つ';
182
+
144
183
 
145
184
  // blocks/ruby.js.coffee.erb
146
- Blockly.Msg.BLOCKS_RUBY_STATEMENT = '';
147
- Blockly.Msg.BLOCKS_RUBY_EXPRESSION = '';
148
- Blockly.Msg.BLOCKS_RUBY_COMMENT = 'コメント';
185
+ Blockly.Msg.BLOCKS_RUBY_STATEMENT = '♠文';
186
+ Blockly.Msg.BLOCKS_RUBY_EXPRESSION = '♠式';
187
+ Blockly.Msg.BLOCKS_RUBY_COMMENT = '♠コメント';
188
+ Blockly.Msg.BLOCKS_RUBY_P = '♠p %1';
189
+
149
190
 
150
191
  // blocks/field_character.js.coffee.erb
151
192
  Blockly.Msg.BLOCKS_FIELD_CHARACTER_NO_CHARACTER = 'キャラクターなし';
152
193
 
194
+
153
195
  // blocks/sound.js.coffee.erb
196
+ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS = '♪%1';
154
197
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO = 'ピアノのド';
155
198
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_RE = 'ピアノのレ';
156
199
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_MI = 'ピアノのミ';
@@ -159,60 +202,67 @@ Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SO = 'ピアノのソ';
159
202
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_RA = 'ピアノのラ';
160
203
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_SI = 'ピアノのシ';
161
204
  Blockly.Msg.BLOCKS_SOUND_PRESET_SOUNDS_PIANO_DO_2 = 'ピアノの高いド';
162
- Blockly.Msg.BLOCKS_SOUND_PLAY = '%1の音を鳴らす';
205
+ Blockly.Msg.BLOCKS_SOUND_PLAY = '♪%1 の音を鳴らす';
206
+
163
207
 
164
208
  // blocks/looks.js.coffee.erb
165
- Blockly.Msg.BLOCKS_LOOKS_SAY = '%1と言う';
166
- Blockly.Msg.BLOCKS_LOOKS_THINK = '%1と考える';
167
- Blockly.Msg.BLOCKS_LOOKS_SAY_WITH_SECOND = '%1と%2秒と言う';
168
- Blockly.Msg.BLOCKS_LOOKS_THINK_WITH_SECOND = '%1と%2秒と考える';
169
- Blockly.Msg.BLOCKS_LOOKS_SHOW = '表示する';
170
- Blockly.Msg.BLOCKS_LOOKS_HIDE = '隠す';
171
- Blockly.Msg.BLOCKS_LOOKS_VANISH = '消滅する';
209
+ Blockly.Msg.BLOCKS_LOOKS_SAY = '★%1 と言う';
210
+ Blockly.Msg.BLOCKS_LOOKS_THINK = '★%1 と考える';
211
+ Blockly.Msg.BLOCKS_LOOKS_SAY_WITH_SECOND = '★%1 と %2 秒と言う';
212
+ Blockly.Msg.BLOCKS_LOOKS_THINK_WITH_SECOND = '★%1 と %2 秒と考える';
213
+ Blockly.Msg.BLOCKS_LOOKS_SHOW = '★表示する';
214
+ Blockly.Msg.BLOCKS_LOOKS_HIDE = '★隠す';
215
+ Blockly.Msg.BLOCKS_LOOKS_VANISH = '★消滅する';
216
+
172
217
 
173
218
  // blocks/hardware.js.coffee.erb
174
- Blockly.Msg.BLOCKS_HARDWARE_LED_TURN_ON = 'LED%1をオンにする';
175
- Blockly.Msg.BLOCKS_HARDWARE_LED_TURN_OFF = 'LED%1をオフにする';
219
+ Blockly.Msg.BLOCKS_HARDWARE_LED_TURN_ON = 'LED %1 をオンにする';
220
+ Blockly.Msg.BLOCKS_HARDWARE_LED_TURN_OFF = 'LED %1 をオフにする';
176
221
  Blockly.Msg.BLOCKS_HARDWARE_ANODE = 'アノード';
177
222
  Blockly.Msg.BLOCKS_HARDWARE_CATHODE = 'カソード';
178
223
  Blockly.Msg.BLOCKS_HARDWARE_LEFT = ' 左';
179
224
  Blockly.Msg.BLOCKS_HARDWARE_RIGHT = '右';
180
- Blockly.Msg.BLOCKS_HARDWARE_INIT_HARDWARE = 'ハードウェアを準備する';
181
- Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_SET_COLOR = 'RGB LED%1コモン%2を%3にする';
182
- Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_TURN_OFF = 'RGB LED%1コモン%2をオフにする';
183
- Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_SHOW = '7セグディスプレイに%1を表示する';
184
- Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_OFF = '7セグディスプレイをオフにする';
185
- Blockly.Msg.BLOCKS_HARDWARE_LCD_PUTS = 'LCDに%1を表示する';
186
- Blockly.Msg.BLOCKS_HARDWARE_LCD_CLEAR = 'LCDをクリアする';
187
- Blockly.Msg.BLOCKS_HARDWARE_SERVO_SET_POSITION = 'サーボ%1を%2度(5~180)にする';
188
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_FORWARD = '2WD車%1を進める';
189
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_BACKWARD = '2WD車%1をバックさせる';
190
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_TURN_LEFT = '2WD車%1を左に曲げる';
191
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_TURN_RIGHT = '2WD車%1を右に曲げる';
192
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_STOP = '2WD車%1を止める';
193
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_RUN = '2WD車%2を%3秒%1';
225
+ Blockly.Msg.BLOCKS_HARDWARE_INIT_HARDWARE = '♠ハードウェアを準備する';
226
+ Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_SET_COLOR = 'RGB LED %1 コモン %2 を %3 にする';
227
+ Blockly.Msg.BLOCKS_HARDWARE_RGB_LED_TURN_OFF = 'RGB LED %1 コモン %2 をオフにする';
228
+ Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_SHOW = '7セグディスプレイに %1 を表示する';
229
+ Blockly.Msg.BLOCKS_HARDWARE_SEVEN_SEGMENT_DISPLAY_OFF = '7セグディスプレイをオフにする';
230
+ Blockly.Msg.BLOCKS_HARDWARE_LCD_PUTS = 'LCDに %1 を表示する';
231
+ Blockly.Msg.BLOCKS_HARDWARE_LCD_CLEAR = 'LCDをクリアする';
232
+ Blockly.Msg.BLOCKS_HARDWARE_SERVO_SET_POSITION = '■サーボ %1 を %2 度(5~180)にする';
233
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_FORWARD = '2WD車 %1 を進める';
234
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_BACKWARD = '2WD車 %1 をバックさせる';
235
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_TURN_LEFT = '2WD車 %1 を左に曲げる';
236
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_TURN_RIGHT = '2WD車 %1 を右に曲げる';
237
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_STOP = '2WD車 %1 を止める';
238
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_RUN = '2WD車 %2 を %3 秒 %1';
239
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS = '■%1';
194
240
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS_FORWARD = '進める';
195
241
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS_BACKWARD = 'バックさせる';
196
242
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS_TURN_LEFT = '左に曲げる';
197
243
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS_TURN_RIGHT = '右に曲げる';
198
244
  Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_COMMANDS_STOP = '止める';
199
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_SET_SPEED = '2WD車%1の%2の速度(%)を%3にする';
200
- Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_SPEED = '2WD車%1の%2の速度(%)';
245
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_SET_SPEED = '2WD車 %1 の %2 の速度(%)を %3 にする';
246
+ Blockly.Msg.BLOCKS_HARDWARE_TWO_WHEEL_DRIVE_CAR_SPEED = '2WD車 %1 の %2 の速度(%)';
201
247
  Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_FORWARD = '正転させる';
202
248
  Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_BACKWARD = '逆転させる';
203
249
  Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_STOP = '止める';
204
- Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER = '(モータードライバ%1で)モーターを%2';
205
- Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_SET_SPEED = '(モータードライバ%1の)モーターの速度を%2にする';
206
- Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_SPEED = '(モータードライバ%1の)モーターの速度(%)';
207
- Blockly.Msg.BLOCKS_HARDWARE_BUTTON_PRESSED_OR_RELEASED = 'ボタン %1 が %2 ?';
208
- Blockly.Msg.BLOCKS_HARDWARE_SENSOR_VALUE = 'センサー %1';
209
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_LED_TURN_ON_OR_OFF = 'スモウルボットV3の %1 LEDを %2';
210
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_MOTOR_SPEED = 'スモウルボットV3の %1 モーターの速度(%)';
211
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_MOTOR_SET_SPEED = 'スモウルボットV3の %1 モーターの速度を %2 (%) にする';
212
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_ACTION = 'スモウルボットV3を %1';
213
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_ACTION_WITH_SEC = 'スモウルボットV3を %2 秒 %1';
214
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_TOUCH_SENSOR_PRESSED_OR_RELEASED = 'スモウルボットV3の %1 のタッチセンサーが %2 ?';
215
- Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_LIGHT_SENSOR_VALUE = 'スモウルボットV3の光センサー';
250
+ Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER = '(モータードライバ %1 で)モーターを %2';
251
+ Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_SET_SPEED = '(モータードライバ %1 の)モーターの速度を %2 にする';
252
+ Blockly.Msg.BLOCKS_HARDWARE_MOTOR_DRIVER_SPEED = '(モータードライバ %1 の)モーターの速度(%)';
253
+ Blockly.Msg.BLOCKS_HARDWARE_BUTTON_PRESSED_OR_RELEASED = '◎ボタン %1 が %2 ?';
254
+ Blockly.Msg.BLOCKS_HARDWARE_SENSOR_VALUE = '◎センサー %1';
255
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_LED_TURN_ON_OR_OFF = '★スモウルボットV3の %1 LEDを %2';
256
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_MOTOR_SPEED = '◎スモウルボットV3の %1 モーターの速度(%)';
257
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_MOTOR_SET_SPEED = '■スモウルボットV3の %1 モーターの速度を %2 (%) にする';
258
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_ACTION = '■スモウルボットV3を %1';
259
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_ACTION_WITH_SEC = '■スモウルボットV3を %2 秒 %1';
260
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_TOUCH_SENSOR_PRESSED_OR_RELEASED = '◎スモウルボットV3の %1 のタッチセンサーが %2 ?';
261
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_V3_LIGHT_SENSOR_VALUE = '◎スモウルボットV3の光センサー';
262
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_LED_TURN_ON_OR_OFF = '★スモウルボットS1の %1 LEDを %2';
263
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_ACTION = '■スモウルボットS1を %1';
264
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_ACTION_WITH_SEC = '■スモウルボットS1を %2 秒 %1';
265
+ Blockly.Msg.BLOCKS_HARDWARE_SMALRUBOT_S1_IR_PHOTOREFLECTOR_VALUE = '◎スモウルボットS1の %1 のセンサー';
216
266
 
217
267
 
218
268
  // blocks/operators.js.coffee.erb
@@ -232,7 +282,7 @@ Blockly.Msg.BLOCKS_OPERATORS_NOT = '%1ではない';
232
282
  Blockly.Msg.BLOCKS_OPERATORS_INDEX_OF = '%1の%2番目';
233
283
  Blockly.Msg.BLOCKS_OPERATORS_LENGTH = '%1の長さ';
234
284
  Blockly.Msg.BLOCKS_OPERATORS_MODULO = '%1を%2で割った余り';
235
- Blockly.Msg.BLOCKS_OPERATORS_ROUND = '%1を丸める';
285
+ Blockly.Msg.BLOCKS_OPERATORS_ROUND = '%1を四捨五入';
236
286
  Blockly.Msg.BLOCKS_OPERATORS_MATH_METHOD = '%1の%2';
237
287
  Blockly.Msg.BLOCKS_OPERATORS_MATH_METHOD_ABS = '絶対値';
238
288
  Blockly.Msg.BLOCKS_OPERATORS_MATH_METHOD_FLOOR = '切り上げ';
@@ -251,7 +301,13 @@ Blockly.Msg.BLOCKS_OPERATORS_MATH_METHOD_10_SQUARE = '10 ^';
251
301
  Blockly.Msg.BLOCKS_OPERATORS_TRUE = '真';
252
302
  Blockly.Msg.BLOCKS_OPERATORS_FALSE = '偽';
253
303
 
304
+
254
305
  // blocks/pen.js.coffee.erb
255
- Blockly.Msg.BLOCKS_PEN_DOWN_PEN = 'ペンを下ろす';
256
- Blockly.Msg.BLOCKS_PEN_UP_PEN = 'ペンを上げる';
257
- Blockly.Msg.BLOCKS_PEN_SET_PEN_COLOR = 'ペンの色を%1にする';
306
+ Blockly.Msg.BLOCKS_PEN_DOWN_PEN = '●ペンを下ろす';
307
+ Blockly.Msg.BLOCKS_PEN_UP_PEN = '●ペンを上げる';
308
+ Blockly.Msg.BLOCKS_PEN_SET_PEN_COLOR = '●ペンの色を%1にする';
309
+
310
+
311
+ // override blockly's messages
312
+ Blockly.Msg.VARIABLES_SET_TITLE = '☼セット';
313
+ Blockly.Msg.VARIABLES_GET_TITLE = '☼';