panweitong 4 년 전
부모
커밋
7fd690dbe2
51개의 변경된 파일660개의 추가작업 그리고 592개의 파일을 삭제
  1. 6 3
      python/ardublockly_blockly.js
  2. 1 1
      python/ardublockly_lang.js
  3. 119 117
      python/blockly/blocks/python/ai.js
  4. 2 4
      python/blockly/blocks/python/dist/ai.dev.js
  5. 0 4
      python/blockly/blocks/python/dist/esp32.dev.js
  6. 0 1
      python/blockly/blocks/python/esp32.js
  7. 52 52
      python/blockly/blocks/python/extension_module.js
  8. BIN
      python/blockly/media/header_ble_setup copy.png
  9. BIN
      python/blockly/media/header_ble_setup.png
  10. BIN
      python/blockly/media/header_customized_model.png
  11. BIN
      python/blockly/media/lcd_draw_coordinate.png
  12. 1 4
      python/blockly/msg/en/blocks_messages.js
  13. 5 5
      python/blockly/msg/index.js
  14. 1 1
      python/blockly/msg/js/dist/zh-hans.dev.js
  15. 0 0
      python/blockly/msg/js/dist/zh-hans.prod.js
  16. 1 1
      python/blockly/msg/js/dist/zh-hant.dev.js
  17. 0 0
      python/blockly/msg/js/dist/zh-hant.prod.js
  18. 54 16
      python/blockly/msg/js/en.js
  19. 55 16
      python/blockly/msg/js/zh-hans.js
  20. 52 18
      python/blockly/msg/js/zh-hant.js
  21. 2 5
      python/blockly/msg/zh-hans/blocks_messages.js
  22. 2 0
      python/blockly/msg/zh-hans/dist/blocks_messages.dev.js
  23. 0 0
      python/blockly/msg/zh-hans/dist/blocks_messages.prod.js
  24. 86 86
      python/blockly/msg/zh-hans/microbit_messages.js
  25. 2 5
      python/blockly/msg/zh-hant/blocks_messages.js
  26. 2 0
      python/blockly/msg/zh-hant/dist/blocks_messages.dev.js
  27. 0 0
      python/blockly/msg/zh-hant/dist/blocks_messages.prod.js
  28. 86 86
      python/blockly/msg/zh-hant/microbit_messages.js
  29. 27 6
      python/data.json
  30. 1 0
      python/dist/index.dev.js
  31. 6 6
      python/index.html
  32. 14 7
      python/materialize/js/materialize.js
  33. 0 0
      python/msg/dist/en.dev.js
  34. 0 0
      python/msg/dist/en.prod.js
  35. 0 0
      python/msg/dist/zh-hans.dev.js
  36. 0 0
      python/msg/dist/zh-hans.prod.js
  37. 0 0
      python/msg/dist/zh-hant.prod.js
  38. 20 22
      python/msg/en.js
  39. 6 7
      python/msg/zh-hans.js
  40. 21 23
      python/msg/zh-hant.js
  41. 5 6
      python/src/blockly/account.js
  42. 3 5
      python/src/blockly/ardublockly.js
  43. 6 3
      python/src/blockly/ardublockly_blockly.js
  44. 4 4
      python/src/blockly/ardublockly_design.js
  45. 8 3
      python/src/blockly/cocoblockly.js
  46. 1 1
      python/src/blockly/web.js
  47. 2 2
      python/src/blockpy.css
  48. 2 66
      python/src/editor.js
  49. 1 1
      python/src/python/IoT模組_開機啓動可視化菜單界面.py
  50. 3 4
      python/src/toolbar.js
  51. 1 1
      python/web.html

+ 6 - 3
python/ardublockly_blockly.js

@@ -198,10 +198,13 @@ Ardublockly.loadLocalStorageBlocks = function () {
 Ardublockly.discardAllBlocks = function () {
     var blockCount = blockpy.components.editor.blockly.getAllBlocks().length;
     var is_delete = false;
-    if (blockCount >= 1) {
+    if (blockCount == 1) {
+        blockpy.components.editor.blockly.clear();
+        Ardublockly.renderContent();
+    } else if (blockCount > 1) {
         Ardublockly.alertMessage(
-            Ardublockly.getLocalStr('discardAllCode'),
-            '',
+            Ardublockly.getLocalStr('discardBlocksTitle'),
+            Ardublockly.getLocalStr('discardBlocksBody').replace('%1', blockCount),
             true,
             function () {
                 blockpy.components.editor.blockly.clear();

+ 1 - 1
python/ardublockly_lang.js

@@ -117,7 +117,7 @@ Ardublockly.injectLanguageJsSources = function (langKey) {
 
   // Retrieve and inject Blockly translations asynchronously
   var blocklyLangJsLoad = document.createElement('script');
-  blocklyLangJsLoad.src = '../blockly/msg/js/' + langKey + '.js';
+  blocklyLangJsLoad.src = 'blockly/msg/js/' + langKey + '.js';
   head.appendChild(blocklyLangJsLoad);
 };
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 119 - 117
python/blockly/blocks/python/ai.js


+ 2 - 4
python/blockly/blocks/python/dist/ai.dev.js

@@ -2258,8 +2258,7 @@ Blockly.Python.ai_audio_init_speaker = function (block) {
 Blockly.Blocks['ai_audio_play_song_speaker'] = {
   init: function init() {
     this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file);
-    // this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file_set_vol).appendField(new Blockly.FieldNumber(95, 0, 100, 1), "play_vol");
-    this.appendValueInput("volume").setCheck(null).appendField(Blockly.Msg.ai_audio_play_music_file_set_vol);
+    this.appendDummyInput().appendField(Blockly.Msg.ai_audio_play_music_file_set_vol).appendField(new Blockly.FieldNumber(95, 0, 100, 1), "play_vol");
     this.appendValueInput("path").setCheck(null).appendField(Blockly.Msg.ai_audio_play_music_file_set_file_path);
     this.setPreviousStatement(true, null);
     this.setNextStatement(true, null);
@@ -2270,8 +2269,7 @@ Blockly.Blocks['ai_audio_play_song_speaker'] = {
 };
 
 Blockly.Python['ai_audio_play_song_speaker'] = function (block) {
-  // var number_play_vol = block.getFieldValue('play_vol');
-  var number_play_vol = Blockly.Python.valueToCode(block, 'volume', Blockly.Python.ORDER_ATOMIC);
+  var number_play_vol = block.getFieldValue('play_vol');
   var value_name = Blockly.Python.valueToCode(block, 'path', Blockly.Python.ORDER_ATOMIC);
 
   var _in = "" + "_audio_rx = I2S(I2S.DEVICE_0)\n" + "\n" + "def _speaker_play_song(path, volume):\n" + "    global _audio_play_state\n" + "    _player = audio.Audio(path = path)\n" + "    _player.volume(volume)\n" + "    _wav_info = _player.play_process(_audio_rx)\n" + "    _audio_rx.channel_config(_audio_rx.CHANNEL_1, I2S.TRANSMITTER, resolution = I2S.RESOLUTION_16_BIT, align_mode = I2S.STANDARD_MODE)\n" + "    _audio_rx.set_sample_rate(_wav_info[1])\n" + "    _audio_play_state = 0\n" + "\n" + "    fm.register(34,fm.fpioa.I2S0_OUT_D1)\n" + "    fm.register(35,fm.fpioa.I2S0_SCLK)\n" + "    fm.register(33,fm.fpioa.I2S0_WS)\n" + "\n" + "    while True:\n" + "        _audio_play_state = _player.play()\n" + "        if (_audio_play_state) == True:\n" + "            print(\"Playing.\")\n" + "        elif (_audio_play_state) == False:\n" + "            print(\"Done.\")\n" + "            break\n" + "\n"; // Blockly.Python.definitions_.import_audio = _in;

+ 0 - 4
python/blockly/blocks/python/dist/esp32.dev.js

@@ -2860,11 +2860,7 @@ Blockly.Python['iot_service_cococloud'] = function (block) {
   }
 
   var cococloud_data_final = cococloud_data + "}'";
-<<<<<<< HEAD
-  var code = '' + '_COCOCLOUD_SEND_ENDPOINT = "http://api.cocorobo.cn/iot/data/eventAPIKey/"+ "' + api + '"\n' + '_COCOCLOUD_SEND_DATA = ' + cococloud_data_final.slice(0, -3) + '}\'' + '\n' + '_COCOCLOUD_SEND_REQUEST = urequests.post(_COCOCLOUD_SEND_ENDPOINT, data = _COCOCLOUD_SEND_DATA , headers = { "Content-type": "application/json" })\n';
-=======
   var code = '' + '_COCOCLOUD_SEND_ENDPOINT = "http://api.cocorobo.cn/iot/data/eventAPIKey/"+ "' + api + '"\n' + '_COCOCLOUD_SEND_DATA = ' + cococloud_data_final.slice(0, -3) + '}\'' + '\n' + '_COCOCLOUD_SEND_REQUEST = urequests.post(_COCOCLOUD_SEND_ENDPOINT, data = _COCOCLOUD_SEND_DATA , headers = { "Content-type": "application/json" }, timeout = 30)\n';
->>>>>>> develop
   ''; // cococloud_data_final.slice(0, -3) + '}\''
 
   return code;

+ 0 - 1
python/blockly/blocks/python/esp32.js

@@ -26,7 +26,6 @@ Blockly.Python['text_split_string_by_delimiter'] = function(block) {
     return [code, Blockly.Python.ORDER_NONE];
 };
 
-
 /* additional math */
 Blockly.Blocks['math_degrad'] = {
     init: function() {

+ 52 - 52
python/blockly/blocks/python/extension_module.js

@@ -306,7 +306,7 @@ var ai_servo_timer = [
 
 var ai_servo_pin = [
     // '0', 
-    '1', '2', '3', '13', '14', '15', '17', '21', '22', '23', '24', '29', '30']
+    '1', '2', '3', '13', '14', '15', '17', '21', '22', '23', '24', '29','30']
 
 
 Blockly.Blocks['extension_servo_setup_on_ai'] = {
@@ -532,10 +532,10 @@ Blockly.Blocks['esp32_motor_run'] = {
             .setCheck(null);
         this.appendDummyInput()
             .appendField(Blockly.Msg.x_motor_exec)
-            // .appendField(new Blockly.FieldDropdown([
-            //     [Blockly.Msg.x_motor_cw, "pos"],
-            //     [Blockly.Msg.x_motor_acw, "neg"]
-            // ]), "direction")
+            .appendField(new Blockly.FieldDropdown([
+                [Blockly.Msg.x_motor_cw, "pos"],
+                [Blockly.Msg.x_motor_acw, "neg"]
+            ]), "direction")
             .appendField(Blockly.Msg.x_motor_set_motor_turns);
         this.setInputsInline(true);
         this.setPreviousStatement(true, null);
@@ -549,13 +549,13 @@ Blockly.Blocks['esp32_motor_run'] = {
 Blockly.Python['esp32_motor_run'] = function (block) {
     var dropdown_motor_type = block.getFieldValue('motor_type');
     var value_speed = Blockly.Python.valueToCode(block, 'speed', Blockly.Python.ORDER_ATOMIC);
-    // var dropdown_direction = block.getFieldValue('direction');
+    var dropdown_direction = block.getFieldValue('direction');
 
     var code;
-    if (value_speed.indexOf("-") == -1) {
+    if (dropdown_direction == "pos") {
         code = '_iot_motor.speed(' + dropdown_motor_type + ', (' + value_speed + '*16))\n';
-    } else {
-        code = '_iot_motor.speed(' + dropdown_motor_type + ', -(abs' + value_speed + '*16))\n';
+    } else if (dropdown_direction == "neg") {
+        code = '_iot_motor.speed(' + dropdown_motor_type + ', -(' + value_speed + '*16))\n';
     }
 
     return code;
@@ -615,10 +615,10 @@ Blockly.Blocks['ai_motor_run'] = {
             .setCheck(null);
         this.appendDummyInput()
             .appendField(Blockly.Msg.x_motor_exec_ai)
-            // .appendField(new Blockly.FieldDropdown([
-            //     [Blockly.Msg.x_motor_cw_ai, "pos"],
-            //     [Blockly.Msg.x_motor_acw_ai, "neg"]
-            // ]), "direction")
+            .appendField(new Blockly.FieldDropdown([
+                [Blockly.Msg.x_motor_cw_ai, "pos"],
+                [Blockly.Msg.x_motor_acw_ai, "neg"]
+            ]), "direction")
             .appendField(Blockly.Msg.x_motor_set_motor_turns_ai);
         this.setInputsInline(true);
         this.setPreviousStatement(true, null);
@@ -632,12 +632,12 @@ Blockly.Blocks['ai_motor_run'] = {
 Blockly.Python['ai_motor_run'] = function (block) {
     var dropdown_motor_type = block.getFieldValue('motor_type');
     var value_speed = Blockly.Python.valueToCode(block, 'speed', Blockly.Python.ORDER_ATOMIC);
-    // var dropdown_direction = block.getFieldValue('direction');
+    var dropdown_direction = block.getFieldValue('direction');
 
-    if (value_speed.indexOf("-") == -1) {
+    if (dropdown_direction == "pos") {
         var code = '_ai_motor.speed(' + dropdown_motor_type + ', (' + value_speed + '*16))\n';
-    } else {
-        var code = '_ai_motor.speed(' + dropdown_motor_type + ', -(abs' + value_speed + '*16))\n';
+    } else if (dropdown_direction == "neg") {
+        var code = '_ai_motor.speed(' + dropdown_motor_type + ', -(' + value_speed + '*16))\n';
     }
 
 
@@ -2018,7 +2018,7 @@ Blockly.Python['x_ai_read_gamepad_button_pressed'] = function (block) {
 
     Blockly.Python.definitions_['gamepad_button_def'] = '' +
         '_gp_side_button = [13, 14]\n' +
-        '_gp_right_button = [15, 17, 22, 21]\n' +
+        '_gp_right_button = [22, 21, 15, 17]\n' +
         'FPIOA().set_function(_gp_side_button[0],FPIOA.GPIO0)\n' +
         'FPIOA().set_function(_gp_side_button[1],FPIOA.GPIO1)\n' +
         'FPIOA().set_function(_gp_right_button[0],FPIOA.GPIO2)\n' +
@@ -3236,45 +3236,45 @@ def calibration():
     #print(zavg)
 
 def getPedometer():
-    global q, xaccl, yaccl, zaccl, totvect, totave, data, peak, flag0, flag1, flag2, starttime, lasttime, endtime, hill, trough, threshold_hill, hill, threshold_time, steps
-    for a in range(100):
-        xaccl[a]=mpu6050_get_accel('X')-345
-        time.sleep_ms(1)
-        yaccl[a]=mpu6050_get_accel('Y')-346
-        time.sleep_ms(1)
-        zaccl[a]=mpu6050_get_accel('Z')-416
-        time.sleep_ms(1)
+    global q, a, xaccl, yaccl, zaccl, totvect, totave, data, peak, flag0, flag1, flag2, starttime, lasttime, endtime, hill, trough, threshold_hill, hill, threshold_time, steps
+    #for a in range(100):
+    xaccl=mpu6050_get_accel('X')-345
+    time.sleep_ms(1)
+    yaccl=mpu6050_get_accel('Y')-346
+    time.sleep_ms(1)
+    zaccl=mpu6050_get_accel('Z')-416
+    time.sleep_ms(1)
         #计算X、Y、Z轴三个方向加速度值的平方根来计算总加速度矢量
-        totvect[a]=math.sqrt(((xaccl[a]-xavg)*(xaccl[a]-xavg))+((yaccl[a]-yavg)*(yaccl[a]-yavg))+((zaccl[a]-zavg)*(zaccl[a]-zavg)))
-        totave[a]=(totvect[a]+totave[a-1])/2
-        q=totave[a]
+    totvect=math.sqrt(((xaccl-xavg)*(xaccl-xavg))+((yaccl-yavg)*(yaccl-yavg))+((zaccl-zavg)*(zaccl-zavg)))
+    totave[0]=totave[1]
+    totave[1]=(totvect+totave[0])/2
         #数据轮替
-        data[2]=data[1]
-        data[1]=data[0]
-        data[0]=totave[a]
+    data[2]=data[1]
+    data[1]=data[0]
+    data[0]=totave[1]
         #检测是否到达一个波峰,如果是,将波峰数据采集标志位置1,并开始计时
-        if ((data[1]>data[0])&(data[1]>data[2])&(flag1==0)):
-            peak=data[1]
-            flag1=1
-            starttime=time.ticks_ms()
+    if ((data[1]>data[0])&(data[1]>data[2])&(flag1==0)):
+        peak=data[1]
+        flag1=1
+        starttime=time.ticks_ms()
         #检测是否到达一个波谷,如果是,将波谷数据采集标志位置1,并读取当前时间
-        if ((data[1]<data[0])&(data[1]<data[2])&(flag2==0)):
-            trough=data[1]
-            flag2=1
-            endtime=time.ticks_ms()
+    if ((data[1]<data[0])&(data[1]<data[2])&(flag2==0)):
+        trough=data[1]
+        flag2=1
+        endtime=time.ticks_ms()
         #如果采集到一组波峰波谷数据
-        if((flag1==1)&(flag2==1)):
-            flag1=0                             #将波峰数据采集标志位置0
-            flag2=0                             #将波谷数据采集标指位置1
-            hill=peak-trough                    #计算波峰波谷差值
-            lasttime=endtime-starttime          #计算波峰波谷间隔时间
-            if(hill>threshold_hill)&(lasttime>threshold_time):       #如果波峰波谷差值大于threshold_hill且间隔时间大于threshold_time
-                steps=steps+1                   #步数加一
-                flag0=1                         #将步数数据提取标志位置1
-            lasttime=0                          #将波峰波谷间隔时间清零
-            hill=0                              #将波峰波谷差值清零
-        time.sleep_ms(20)
-        return steps
+    if((flag1==1)&(flag2==1)):
+        flag1=0                             #将波峰数据采集标志位置0
+        flag2=0                             #将波谷数据采集标指位置1
+        hill=peak-trough                    #计算波峰波谷差值
+        lasttime=endtime-starttime          #计算波峰波谷间隔时间
+        if(hill>threshold_hill)&(lasttime>threshold_time):       #如果波峰波谷差值大于threshold_hill且间隔时间大于threshold_time
+            steps=steps+1                   #步数加一
+            flag0=1                         #将步数数据提取标志位置1
+        lasttime=0                          #将波峰波谷间隔时间清零
+        hill=0                              #将波峰波谷差值清零
+    return steps
+    time.sleep_ms(20)
 `;
 
     var code = "";

BIN
python/blockly/media/header_ble_setup copy.png


BIN
python/blockly/media/header_ble_setup.png


BIN
python/blockly/media/header_customized_model.png


BIN
python/blockly/media/lcd_draw_coordinate.png


+ 1 - 4
python/blockly/msg/en/blocks_messages.js

@@ -3619,13 +3619,10 @@ Blockly.Msg.ai_led_matrix_clear_screen_TOOLTIP= "Clear light screen";
 
 // ai_speaker
 Blockly.Msg.ai_audio_init_speaker_TOOLTIP = "Horn initialization";
-Blockly.Msg.ai_audio_play_song_speaker_TOOLTIP = "Play audio files(Single tune circulation)";
-Blockly.Msg.ai_audio_play_song_speaker_list_loop_TOOLTIP = "Play audio files(Sequential play)";
-Blockly.Msg.ai_audio_play_music_file_list_random_TOOLTIP = "Play audio files(Random play)";
+Blockly.Msg.ai_audio_play_song_speaker_TOOLTIP = "Play audio files";
 Blockly.Msg.ai_audio_play_state_speaker_TOOLTIP = "Get the play state of playing file";
 Blockly.Msg.ai_audio_play_finish_speaker_TOOLTIP = "End audio playing";
 Blockly.Msg.ai_audio_set_speaker_TOOLTIP = "Set Playing Volume";
-Blockly.Msg.ai_audio_files_list_TOOLTIP = "Get the list of audio files in the current path";
 
 // ai_camera
 Blockly.Msg.ai_camera_init_TOOLTIP = "Camera Initialization";

+ 5 - 5
python/blockly/msg/index.js

@@ -9,11 +9,11 @@
 	    language = val ? decodeURIComponent(val[1].replace(/\+/g, '%20')) : '';
 		if (['en', 'zh-hant', 'zh-hans'].indexOf(language) < 0) { language = 'zh-hant'; }
 		localStorage.handPyLanguage = language;
-		document.write('<script src="/blockly/msg/' + language + '/blockly_messages.js"><\/script>');
-		document.write('<script src="/blockly/msg/' + language + '/blocks_messages.js"><\/script>');
-		document.write('<script src="/blockly/msg/' + language + '/microbit_messages.js"><\/script>');
-		document.write('<script src="/blockly/msg/' + language + '/other_messages.js"><\/script>');
-		document.write('<script src="/blockly/msg/js/' + language + '.js"><\/script>');
+		document.write('<script src="blockly/msg/' + language + '/blockly_messages.js"><\/script>');
+		document.write('<script src="blockly/msg/' + language + '/blocks_messages.js"><\/script>');
+		document.write('<script src="blockly/msg/' + language + '/microbit_messages.js"><\/script>');
+		document.write('<script src="blockly/msg/' + language + '/other_messages.js"><\/script>');
+		document.write('<script src="blockly/msg/js/' + language + '.js"><\/script>');
 	}
 	getLanguage()
 })()

+ 1 - 1
python/blockly/msg/js/dist/zh-hans.dev.js

@@ -4437,7 +4437,7 @@ Blockly.Msg.ai_audio_play_music_file_set_file_path = "音频文件路径:";
 Blockly.Msg.ai_audio_get_play_status = "获取音频文件播放状态";
 Blockly.Msg.ai_audio_end_play = "结束音频文件播放";
 Blockly.Msg.ai_audio_init = "喇叭初始化";
-Blockly.Msg.ai_audio_set_music_vol = "设置音频文播放音量为:";
+Blockly.Msg.ai_audio_set_music_vol = "设置音频文播放音量为:";
 /*
      _    ___  __     ___     _            
     / \  |_ _| \ \   / (_) __| | ___  ___  

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/blockly/msg/js/dist/zh-hans.prod.js


+ 1 - 1
python/blockly/msg/js/dist/zh-hant.dev.js

@@ -5085,7 +5085,7 @@ Blockly.Msg.ai_audio_play_music_file_set_file_path = "音訊檔案路徑:";
 Blockly.Msg.ai_audio_get_play_status = "獲取音訊檔案播放狀態";
 Blockly.Msg.ai_audio_end_play = "結束音訊檔案播放";
 Blockly.Msg.ai_audio_init = "喇叭初始化";
-Blockly.Msg.ai_audio_set_music_vol = "設定音訊檔案播放音量爲:";
+Blockly.Msg.ai_audio_set_music_vol = "設定音訊文件播放音量爲:";
 /*
      _    ___  __     ___     _            
     / \  |_ _| \ \   / (_) __| | ___  ___  

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/blockly/msg/js/dist/zh-hant.prod.js


+ 54 - 16
python/blockly/msg/js/en.js

@@ -3993,7 +3993,7 @@ Blockly.Msg.servo_degree_ai = "Degree (0˚~180˚)";
 Blockly.Msg.x_motor_set_motor = "IoT Module Motor Driver Setup";
 Blockly.Msg.x_motor_set_motor_turn = "IoT Module Set Motor";
 Blockly.Msg.x_motor_set_motor_speed = "'s Speed to";
-Blockly.Msg.x_motor_exec = "(-255~255) Rotating";
+Blockly.Msg.x_motor_exec = "(0~255) Rotating";
 Blockly.Msg.x_motor_cw = "Clockwise";
 Blockly.Msg.x_motor_acw = "Anti-Clockwise";
 Blockly.Msg.x_motor_set_motor_turns = "";
@@ -4001,7 +4001,7 @@ Blockly.Msg.x_motor_set_motor_turns = "";
 Blockly.Msg.x_motor_set_motor_ai = "AI Module Motor Driver Setup";
 Blockly.Msg.x_motor_set_motor_turn_ai = "AI Module Set Motor";
 Blockly.Msg.x_motor_set_motor_speed_ai = "'s Speed to";
-Blockly.Msg.x_motor_exec_ai = "(-255~255) Rotating";
+Blockly.Msg.x_motor_exec_ai = "(0~255) Rotating";
 Blockly.Msg.x_motor_cw_ai = "Clockwise";
 Blockly.Msg.x_motor_acw_ai = "Anti-Clockwise";
 Blockly.Msg.x_motor_set_motor_turns_ai = "";
@@ -4158,6 +4158,22 @@ Blockly.Msg.image_process_text_set_canvas_setup = "Set Canvas";
 Blockly.Msg.image_process_text_filled = "Filled";
 Blockly.Msg.image_process_text_stroked = "Stroked";
 
+Blockly.Msg.image_process_statistical_chart_bar = "Bar";
+Blockly.Msg.image_process_statistical_chart_broken_line = "Broken Line";
+Blockly.Msg.image_process_statistical_chart_sector = "Sector";
+
+Blockly.Msg.image_process_sensor = "Sensor  ";
+Blockly.Msg.image_process_temperature = "Temperature";
+Blockly.Msg.image_process_humidity = "Humidity";
+Blockly.Msg.image_process_Ray_value = "Ray Value";
+Blockly.Msg.image_process_temperature_range = "Range  ";
+Blockly.Msg.image_process_nothing = "No Scope Definition(Except Temperature)";
+
+Blockly.Msg.image_process_interface = "Interface  ";
+Blockly.Msg.ai_speech_recognition_setup_set_english = "English";
+Blockly.Msg.ai_speech_recognition_setup_set_simplified_chinese = "Simplified Chinese";
+Blockly.Msg.ai_speech_recognition_setup_set_traditional_chinese = "Traditional Chinese";
+
 Blockly.Msg.image_process_text_start_coord_as = "'s Starting Coordinate as:";
 
 Blockly.Msg.image_process_text_start_coord = "Set Start Coordinate:";
@@ -4168,6 +4184,8 @@ Blockly.Msg.image_process_background_color = "BackgroundColor:";
 Blockly.Msg.image_process_text_thick = "Thickness:";
 Blockly.Msg.image_process_text_radius = "Radius:";
 Blockly.Msg.image_process_text_content = "Content";
+Blockly.Msg.image_process_statistical_chart_content = "Get the data to be drawn";
+Blockly.Msg.image_process_statistical_chart_y_property = "Define the y-axis as";
 
 Blockly.Msg.image_process_pixtovec_text_first = "Do";
 Blockly.Msg.image_process_pixtovec_v2p = "Vector to Pixel";
@@ -4207,6 +4225,7 @@ Blockly.Msg.image_process_draw_circle_text_start = "Center coordinates";
 Blockly.Msg.image_process_draw_text_font_size = "Text Size";
 Blockly.Msg.image_process_draw_text_if_monospace = "Set Monospace";
 Blockly.Msg.image_process_draw_text = " Text";
+Blockly.Msg.image_process_draw_statistical_chart = " Statistical chart";
 Blockly.Msg.image_process_draw_characters = " Hanzi Characters";
 Blockly.Msg.image_process_draw_line = " Line";
 Blockly.Msg.image_process_create_blank_canvas = "Create Blank Canvas:";
@@ -4476,19 +4495,13 @@ Blockly.Msg.ai_microphone_get_spectrum_analyze_result_8 = "High Pitch 2";
 */
 
 
-Blockly.Msg.ai_audio_play_music_file = "Play Audio Files(Single tune circulation)";
-Blockly.Msg.ai_audio_play_music_file_list_loop = "Play Audio Files(Sequential play)";
-Blockly.Msg.ai_audio_play_music_file_list_random = "Play Audio Files(Random play)";
+Blockly.Msg.ai_audio_play_music_file = "Play Audio File";
 Blockly.Msg.ai_audio_play_music_file_set_vol = "Set Volume:";
 Blockly.Msg.ai_audio_play_music_file_set_file_path = "Load audio File from path:";
-Blockly.Msg.ai_audio_play_music_file_set_files_list = "Audio file list:";
-Blockly.Msg.ai_audio_play_music_file_set_first_index = "Starting point:";
-Blockly.Msg.ai_audio_files_list_set_file_path = "Current path:";
 Blockly.Msg.ai_audio_get_play_status = "Get the play state of playing file";
 Blockly.Msg.ai_audio_end_play = "End audio playing";
 Blockly.Msg.ai_audio_init = "Speaker Setup";
 Blockly.Msg.ai_audio_set_music_vol = "Set Playing Volume:";
-Blockly.Msg.ai_audio_files_list = "Get a list of audio files";
 
 Blockly.Msg.ai_speech_recognition_setup = "Speech Recognition Setup";
 Blockly.Msg.ai_speech_recognition_setup_set_sensi = "Set Background Noise Sensitivity:";
@@ -4526,8 +4539,8 @@ Blockly.Msg.ai_video_stop_recording = "Stop Video Recording";
 Blockly.Msg.ai_video_play_video = "Play Video File";
 Blockly.Msg.ai_video_play_video_2 = "Note: Only Support 320*240 Resolution";
 Blockly.Msg.ai_video_play_video_file_path = "Load Video file from path:";
-Blockly.Msg.ai_video_stop_video_playing = "End Video plyaing";
-Blockly.Msg.ai_video_get_video_playing_status = "Get the playing status";
+Blockly.Msg.ai_video_stop_video_playing = "Stop Playing Video";
+Blockly.Msg.ai_video_get_video_playing_status = "Get Current Playing Status";
 
 
 /*
@@ -4568,14 +4581,10 @@ Blockly.Msg.ai_models_face_model_h = "Height of the bounding box";
 Blockly.Msg.ai_models_face_model_count = "Total Number";
 Blockly.Msg.ai_models_face_model_index = "Index";
 Blockly.Msg.ai_models_face_model_confidence = "Confidence Rate";
+Blockly.Msg.ai_model_customized_init_setup_definition = "Setup for Loading Customized A.I. Model";
 Blockly.Msg.ai_models_customized_init_setup_title = "Load and Initialize Customized A.I. Model";
 Blockly.Msg.ai_models_customized_init_setup_path = "Load model file from path";
 Blockly.Msg.ai_models_customized_init_setup_source = "Recognize from:";
-
-Blockly.Msg.ai_models_customized_init_type_set = "Set Recognition Mode:";
-Blockly.Msg.ai_models_customized_init_type_set_fast = "Single Face (Fast)";
-Blockly.Msg.ai_models_customized_init_type_set_slow = "Multiple Faces (Slow)";
-
 Blockly.Msg.ai_models_customized_init_setup_name = "Define class name by list:";
 Blockly.Msg.ai_models_customized_if_got = "Recognized any object from customized model";
 Blockly.Msg.ai_models_customized_get_result_any = "Get the recognized Object's";
@@ -4674,3 +4683,32 @@ Blockly.Msg.third_party_hcsr04_echo_pin = ", Set Echo Pin: GPIO";
 Blockly.Msg.third_party_hcsr04_read_text = "Read Distance (Unit: CM) from Ultrasonic Sensor";
 Blockly.Msg.third_party_hcsr04_read_text_after = "";
 Blockly.Msg.Set_Auto_Wrap = "Set Auto Wrap";
+
+
+/*
+  ____  _     _____ 
+ | __ )| |   | ____|
+ |  _ \| |   |  _|  
+ | |_) | |___| |___ 
+ |____/|_____|_____|
+
+*/
+
+Blockly.Msg.esp32_ble_setup_sender_msg = "BLE (Bluetooth Low Energy)";
+Blockly.Msg.esp32_ble_setup_sender = "Sender Setup";
+Blockly.Msg.esp32_ble_send_data_msg = "BLE Send Data";
+Blockly.Msg.esp32_ble_setup_receiver_msg = "BLE (Bluetooth Low Energy)";
+Blockly.Msg.esp32_ble_setup_receiver = "Receiver Setup";
+Blockly.Msg.esp32_ble_get_data_msg = "From BLE Get Data Received";
+Blockly.Msg.esp32_ble_sender_connected_msg = "Sender is Connected";
+Blockly.Msg.esp32_ble_receiver_connected_msg = "Receiver is Connected";
+
+
+/* additional text */
+
+Blockly.Msg.text_additional_delimiter_string = "Split string to a list";
+Blockly.Msg.text_additional_delimiter_deli = "by delimiter:";
+Blockly.Msg.text_additional_delimiter_end = "";
+
+
+

+ 55 - 16
python/blockly/msg/js/zh-hans.js

@@ -3961,7 +3961,7 @@ Blockly.Msg.servo_degree_ai = "度 (0˚~180˚)";
 Blockly.Msg.x_motor_set_motor = "IoT 模块电机驱动初始化设置";
 Blockly.Msg.x_motor_set_motor_turn = "IoT 模块设定电机";
 Blockly.Msg.x_motor_set_motor_speed = "以速度";
-Blockly.Msg.x_motor_exec = "(-255~255)进行";
+Blockly.Msg.x_motor_exec = "(0~255)进行";
 Blockly.Msg.x_motor_cw = "顺时针";
 Blockly.Msg.x_motor_acw = "逆时针";
 Blockly.Msg.x_motor_set_motor_turns = "转动";
@@ -3969,7 +3969,7 @@ Blockly.Msg.x_motor_set_motor_turns = "转动";
 Blockly.Msg.x_motor_set_motor_ai = "AI 模块电机驱动初始化设置";
 Blockly.Msg.x_motor_set_motor_turn_ai = "AI 模块设定电机";
 Blockly.Msg.x_motor_set_motor_speed_ai = "以速度";
-Blockly.Msg.x_motor_exec_ai = "(-255~255)进行";
+Blockly.Msg.x_motor_exec_ai = "(0~255)进行";
 Blockly.Msg.x_motor_cw_ai = "顺时针";
 Blockly.Msg.x_motor_acw_ai = "逆时针";
 Blockly.Msg.x_motor_set_motor_turns_ai = "转动";
@@ -4116,6 +4116,22 @@ Blockly.Msg.image_process_text_set_canvas_setup = "设置画布";
 Blockly.Msg.image_process_text_filled = "实心";
 Blockly.Msg.image_process_text_stroked = "空心";
 
+Blockly.Msg.image_process_statistical_chart_bar = "条形";
+Blockly.Msg.image_process_statistical_chart_broken_line = "折线";
+Blockly.Msg.image_process_statistical_chart_sector = "扇形";
+
+Blockly.Msg.image_process_sensor = "传感器  ";
+Blockly.Msg.image_process_temperature = "温度";
+Blockly.Msg.image_process_humidity = "湿度";
+Blockly.Msg.image_process_Ray_value = "光线值";
+Blockly.Msg.image_process_temperature_range = "范围  ";
+Blockly.Msg.image_process_nothing = "不定义范围(温度除外)";
+
+Blockly.Msg.image_process_interface = "界面  ";
+Blockly.Msg.ai_speech_recognition_setup_set_english = "英文";
+Blockly.Msg.ai_speech_recognition_setup_set_simplified_chinese = "简体中文";
+Blockly.Msg.ai_speech_recognition_setup_set_traditional_chinese = "繁体中文";
+
 Blockly.Msg.image_process_text_start_coord_as = "起始点坐标为:";
 Blockly.Msg.image_process_text_start_coord = "设置起始点坐标:";
 Blockly.Msg.image_process_text_end_coord = "设置结束点坐标:";
@@ -4125,6 +4141,8 @@ Blockly.Msg.image_process_background_color = "背景颜色:";
 Blockly.Msg.image_process_text_thick = "厚度:";
 Blockly.Msg.image_process_text_radius = "半径:";
 Blockly.Msg.image_process_text_content = "内容";
+Blockly.Msg.image_process_statistical_chart_content = "获取需绘图的数据";
+Blockly.Msg.image_process_statistical_chart_y_property = "定义 Y 轴为";
 
 Blockly.Msg.image_process_pixtovec_text_first = "进行";
 Blockly.Msg.image_process_pixtovec_v2p = "矢量转像素";
@@ -4164,6 +4182,7 @@ Blockly.Msg.image_process_draw_circle_text_start = "圆心坐标";
 Blockly.Msg.image_process_draw_text_font_size = "文本大小";
 Blockly.Msg.image_process_draw_text_if_monospace = "是否等宽字体";
 Blockly.Msg.image_process_draw_text = "文本";
+Blockly.Msg.image_process_draw_statistical_chart = "统计图";
 Blockly.Msg.image_process_draw_characters = "汉字字符";
 Blockly.Msg.image_process_draw_line = "直线";
 Blockly.Msg.image_process_create_blank_canvas = "创建空白画布";
@@ -4431,19 +4450,13 @@ Blockly.Msg.ai_microphone_get_spectrum_analyze_result_8 = "高音 2";
 */ 
 
 
-Blockly.Msg.ai_audio_play_music_file = "播放音频文件(单个循环)";
-Blockly.Msg.ai_audio_play_music_file_list_loop = "播放音频文件(顺序播放)";
-Blockly.Msg.ai_audio_play_music_file_list_random = "播放音频文件(随机播放)";
+Blockly.Msg.ai_audio_play_music_file = "播放音频文件";
 Blockly.Msg.ai_audio_play_music_file_set_vol = "设置音量为:";
 Blockly.Msg.ai_audio_play_music_file_set_file_path = "音频文件路径:";
-Blockly.Msg.ai_audio_play_music_file_set_files_list = "音频文件列表:";
-Blockly.Msg.ai_audio_play_music_file_set_first_index = "起始位置:";
-Blockly.Msg.ai_audio_files_list_set_file_path = "当前路径:";
 Blockly.Msg.ai_audio_get_play_status = "获取音频文件播放状态";
 Blockly.Msg.ai_audio_end_play = "结束音频文件播放";
 Blockly.Msg.ai_audio_init = "喇叭初始化";
-Blockly.Msg.ai_audio_set_music_vol = "设置音频文件播放音量为:";
-Blockly.Msg.ai_audio_files_list = "获取音频文件列表";
+Blockly.Msg.ai_audio_set_music_vol = "设置音频文档播放音量为:";
 
 Blockly.Msg.ai_speech_recognition_setup = "语音识别初始化";
 Blockly.Msg.ai_speech_recognition_setup_set_sensi = "设置环境噪音灵敏度为:";
@@ -4523,14 +4536,10 @@ Blockly.Msg.ai_models_face_model_h = "检测框的高度";
 Blockly.Msg.ai_models_face_model_count = "数量";
 Blockly.Msg.ai_models_face_model_index = "出现顺序";
 Blockly.Msg.ai_models_face_model_confidence = "置信度";
+Blockly.Msg.ai_model_customized_init_setup_definition = "加载自定义模型前的设置";
 Blockly.Msg.ai_models_customized_init_setup_title = "加载并初始化自定义模型 (TinyYOLOv2)";
 Blockly.Msg.ai_models_customized_init_setup_path = "模型文件路径:";
 Blockly.Msg.ai_models_customized_init_setup_source = "设置要识别的图像源为:";
-
-Blockly.Msg.ai_models_customized_init_type_set = "设置识别模式:";	
-Blockly.Msg.ai_models_customized_init_type_set_fast = "识别单张人脸(速度快)";	
-Blockly.Msg.ai_models_customized_init_type_set_slow = "识别多张人脸(速度慢):";
-
 Blockly.Msg.ai_models_customized_init_setup_name = "设置模型识别物体的名称:";
 Blockly.Msg.ai_models_customized_if_got = "识别到了自定义模型的对象";
 Blockly.Msg.ai_models_customized_get_result_any = "获取识别到自定义模型结果的";
@@ -4620,4 +4629,34 @@ Blockly.Msg.third_party_hcsr04_trig_pin = "设置 Trig 接口为 GPIO";
 Blockly.Msg.third_party_hcsr04_echo_pin = ", 设置 Echo 接口为 GPIO";
 Blockly.Msg.third_party_hcsr04_read_text = "读取来自超声波传感器";
 Blockly.Msg.third_party_hcsr04_read_text_after = "的距离检测数值 (单位: 厘米)";
-Blockly.Msg.Set_Auto_Wrap = "自动换行";
+Blockly.Msg.Set_Auto_Wrap = "自动换行";
+
+
+/*
+  ____  _     _____ 
+ | __ )| |   | ____|
+ |  _ \| |   |  _|  
+ | |_) | |___| |___ 
+ |____/|_____|_____|
+
+*/
+
+Blockly.Msg.esp32_ble_setup_sender_msg = "BLE(低功耗蓝牙)";
+Blockly.Msg.esp32_ble_setup_sender = "发送端初始化";
+Blockly.Msg.esp32_ble_send_data_msg = "BLE 发送数据";
+Blockly.Msg.esp32_ble_setup_receiver_msg = "BLE(低功耗蓝牙)";
+Blockly.Msg.esp32_ble_setup_receiver = "接收端初始化";
+Blockly.Msg.esp32_ble_get_data_msg = "获取从BLE接收的数据";
+Blockly.Msg.esp32_ble_sender_connected_msg = "发送端已经被连接";
+Blockly.Msg.esp32_ble_receiver_connected_msg = "接收端已经被连接";
+
+
+
+
+
+/* additional text */
+
+Blockly.Msg.text_additional_delimiter_string = "将字符串";
+Blockly.Msg.text_additional_delimiter_deli = "使用分隔符:";
+Blockly.Msg.text_additional_delimiter_end = "进行拆分并生成列表";
+

+ 52 - 18
python/blockly/msg/js/zh-hant.js

@@ -4401,9 +4401,6 @@ Blockly.Msg.ledstrip_set_brightness_1 = "設定 LED 燈帶亮度爲:";
 Blockly.Msg.ledstrip_set_brightness_after = "(亮度範圍: 0~255)";
 
 
-
-
-
 /*
   ____                       
  / ___|  ___ _ ____   _____  
@@ -4437,7 +4434,7 @@ Blockly.Msg.servo_degree_ai = "度 (0˚~180˚)";
 Blockly.Msg.x_motor_set_motor = "IoT 模組馬達驅動初始化";
 Blockly.Msg.x_motor_set_motor_turn = "IoT 模組設定馬達";
 Blockly.Msg.x_motor_set_motor_speed = "以速度";
-Blockly.Msg.x_motor_exec = "(-255~255)進行";
+Blockly.Msg.x_motor_exec = "(0~255)進行";
 Blockly.Msg.x_motor_cw = "順時針";
 Blockly.Msg.x_motor_acw = "逆時針";
 Blockly.Msg.x_motor_set_motor_turns = "轉動";
@@ -4445,7 +4442,7 @@ Blockly.Msg.x_motor_set_motor_turns = "轉動";
 Blockly.Msg.x_motor_set_motor_ai = "AI 模組馬達驅動初始化";
 Blockly.Msg.x_motor_set_motor_turn_ai = "AI 模組設定馬達";
 Blockly.Msg.x_motor_set_motor_speed_ai = "以速度";
-Blockly.Msg.x_motor_exec_ai = "(-255~255)進行";
+Blockly.Msg.x_motor_exec_ai = "(0~255)進行";
 Blockly.Msg.x_motor_cw_ai = "順時針";
 Blockly.Msg.x_motor_acw_ai = "逆時針";
 Blockly.Msg.x_motor_set_motor_turns_ai = "轉動";
@@ -4590,6 +4587,22 @@ Blockly.Msg.image_process_text_set_canvas_setup = "設定畫布";
 Blockly.Msg.image_process_text_filled = "實心";
 Blockly.Msg.image_process_text_stroked = "空心";
 
+Blockly.Msg.image_process_statistical_chart_bar = "條形";
+Blockly.Msg.image_process_statistical_chart_broken_line = "折線";
+Blockly.Msg.image_process_statistical_chart_sector = "扇形";
+
+Blockly.Msg.image_process_sensor = "傳感器  ";
+Blockly.Msg.image_process_temperature = "溫度";
+Blockly.Msg.image_process_humidity = "溼度";
+Blockly.Msg.image_process_Ray_value = "光線值";
+Blockly.Msg.image_process_temperature_range = "範圍  ";
+Blockly.Msg.image_process_nothing = "不定義範圍(溫度除外)";
+
+Blockly.Msg.image_process_interface = "介面  ";
+Blockly.Msg.ai_speech_recognition_setup_set_english = "英文";
+Blockly.Msg.ai_speech_recognition_setup_set_simplified_chinese = "簡體中文";
+Blockly.Msg.ai_speech_recognition_setup_set_traditional_chinese = "繁體中文";
+
 Blockly.Msg.image_process_text_start_coord_as = "起始點座標為:";
 Blockly.Msg.image_process_text_start_coord = "設定起始點座標:";
 Blockly.Msg.image_process_text_end_coord = "設定結束點座標:";
@@ -4600,6 +4613,9 @@ Blockly.Msg.image_process_text_thick = "厚度:";
 Blockly.Msg.image_process_text_radius = "半徑:";
 Blockly.Msg.image_process_text_content = "內容";
 
+Blockly.Msg.image_process_statistical_chart_content = "獲取需繪圖的數據";
+Blockly.Msg.image_process_statistical_chart_y_property = "定義 Y 軸爲";
+
 Blockly.Msg.image_process_pixtovec_text_first = "進行";
 Blockly.Msg.image_process_pixtovec_v2p = "矢量轉像素";
 Blockly.Msg.image_process_pixtovec_p2v = "像素轉矢量";
@@ -4638,6 +4654,7 @@ Blockly.Msg.image_process_draw_circle_text_start = "圓心坐標";
 Blockly.Msg.image_process_draw_text_font_size = "字串大小";
 Blockly.Msg.image_process_draw_text_if_monospace = "是否等寬字體";
 Blockly.Msg.image_process_draw_text = "字串";
+Blockly.Msg.image_process_draw_statistical_chart = "統計圖";
 Blockly.Msg.image_process_draw_characters = "漢字字符";
 Blockly.Msg.image_process_draw_line = "直線";
 Blockly.Msg.image_process_create_blank_canvas = "創建空白畫布";
@@ -4907,19 +4924,13 @@ Blockly.Msg.ai_microphone_get_spectrum_analyze_result_8 = "高音 2";
 */
 
 
-Blockly.Msg.ai_audio_play_music_file = "播放音訊檔案(單個循環)";
-Blockly.Msg.ai_audio_play_music_file_list_loop = "播放音訊檔案(順序播放)";
-Blockly.Msg.ai_audio_play_music_file_list_random = "播放音訊檔案(隨機播放)";
+Blockly.Msg.ai_audio_play_music_file = "播放音訊檔案";
 Blockly.Msg.ai_audio_play_music_file_set_vol = "設定音量爲:";
 Blockly.Msg.ai_audio_play_music_file_set_file_path = "音訊檔案路徑:";
-Blockly.Msg.ai_audio_play_music_file_set_files_list = "音訊檔案陣列:";
-Blockly.Msg.ai_audio_play_music_file_set_first_index = "起始位置:";
-Blockly.Msg.ai_audio_files_list_set_file_path = "當前路徑:";
 Blockly.Msg.ai_audio_get_play_status = "獲取音訊檔案播放狀態";
 Blockly.Msg.ai_audio_end_play = "結束音訊檔案播放";
 Blockly.Msg.ai_audio_init = "喇叭初始化";
-Blockly.Msg.ai_audio_set_music_vol = "設定音訊檔案播放音量爲:";
-Blockly.Msg.ai_audio_files_list = "獲取音頻檔案陣列";
+Blockly.Msg.ai_audio_set_music_vol = "設定音訊文件播放音量爲:";
 
 Blockly.Msg.ai_speech_recognition_setup = "語音識別初始化";
 Blockly.Msg.ai_speech_recognition_setup_set_sensi = "設定環境噪音靈敏度為:";
@@ -5000,14 +5011,10 @@ Blockly.Msg.ai_models_face_model_h = "檢測框的高度";
 Blockly.Msg.ai_models_face_model_count = "數量";
 Blockly.Msg.ai_models_face_model_index = "出現順序";
 Blockly.Msg.ai_models_face_model_confidence = "置信度";
+Blockly.Msg.ai_model_customized_init_setup_definition = "加載自定義模型前的設定";
 Blockly.Msg.ai_models_customized_init_setup_title = "加載並初始化客製化模型 (TinyYOLOv2)";
 Blockly.Msg.ai_models_customized_init_setup_path = "模型文件路徑:";
 Blockly.Msg.ai_models_customized_init_setup_source = "設定要識別的圖像源爲:";
-
-Blockly.Msg.ai_models_customized_init_type_set = "設定識別模式:";	
-Blockly.Msg.ai_models_customized_init_type_set_fast = "識別單張人臉(速度快)";	
-Blockly.Msg.ai_models_customized_init_type_set_slow = "識別多張人臉(速度慢):";
-
 Blockly.Msg.ai_models_customized_init_setup_name = "設定模型識別物體的名稱:";
 Blockly.Msg.ai_models_customized_if_got = "識別到了客製化模型的物件";
 Blockly.Msg.ai_models_customized_get_result_any = "獲取識別到客製化模型結果的";
@@ -5097,3 +5104,30 @@ Blockly.Msg.third_party_hcsr04_read_text_after = "的距離檢測數值 (單位:
 Blockly.Msg.Set_Auto_Wrap = "自動換行";
 
 
+/*
+  ____  _     _____ 
+ | __ )| |   | ____|
+ |  _ \| |   |  _|  
+ | |_) | |___| |___ 
+ |____/|_____|_____|
+
+*/
+
+Blockly.Msg.esp32_ble_setup_sender_msg = "BLE(低功耗藍牙)";
+Blockly.Msg.esp32_ble_setup_sender = "發送端初始化";
+Blockly.Msg.esp32_ble_send_data_msg = "BLE 發送數據";
+Blockly.Msg.esp32_ble_setup_receiver_msg = "BLE(低功耗藍牙)";
+Blockly.Msg.esp32_ble_setup_receiver = "接收端初始化";
+Blockly.Msg.esp32_ble_get_data_msg = "獲取從BLE接收的數據";
+Blockly.Msg.esp32_ble_sender_connected_msg = "發送端已經被連接";
+Blockly.Msg.esp32_ble_receiver_connected_msg = "接收端已經被連接";
+
+
+
+/* additional text */
+
+Blockly.Msg.text_additional_delimiter_string = "將字串";
+Blockly.Msg.text_additional_delimiter_deli = "使用分隔符:";
+Blockly.Msg.text_additional_delimiter_end = "進行拆分並生成陣列";
+
+

+ 2 - 5
python/blockly/msg/zh-hans/blocks_messages.js

@@ -4747,13 +4747,10 @@ Blockly.Msg.ai_led_matrix_clear_screen_TOOLTIP= "清除灯屏";
 
 // ai_speaker
 Blockly.Msg.ai_audio_init_speaker_TOOLTIP = "喇叭初始化";
-Blockly.Msg.ai_audio_play_song_speaker_TOOLTIP = "播放音频文件(单个循环)";
-Blockly.Msg.ai_audio_play_song_speaker_list_loop_TOOLTIP = "播放音频文件(顺序播放)";
-Blockly.Msg.ai_audio_play_music_file_list_random_TOOLTIP = "播放音频文件(随机播放)";
+Blockly.Msg.ai_audio_play_song_speaker_TOOLTIP = "播放音频文件";
 Blockly.Msg.ai_audio_play_state_speaker_TOOLTIP = "获取音频文件播放状态";
 Blockly.Msg.ai_audio_play_finish_speaker_TOOLTIP = "结束音频文件播放";
-Blockly.Msg.ai_audio_set_speaker_TOOLTIP = "设置音频文件播放音量";
-Blockly.Msg.ai_audio_files_list_TOOLTIP = "获取当前路径的音频文件列表";
+Blockly.Msg.ai_audio_set_speaker_TOOLTIP = "设置音频文档播放音量";
 
 // ai_camera
 Blockly.Msg.ai_camera_init_TOOLTIP = "相机初始化";

+ 2 - 0
python/blockly/msg/zh-hans/dist/blocks_messages.dev.js

@@ -3674,6 +3674,8 @@ Blockly.Msg.CocoRobo_LARK_CAR_MOTION_STOP = '停止';
 Blockly.Msg.Math_Degrad_RAD_TOOLTIP = "返回转换角度为弧度的结果";
 Blockly.Msg.Math_Degrad_DEG_TOOLTIP = "返回转换弧度为角度的结果";
 
+Blockly.Msg.Text_Split_String_By_Delimiter_TOOLTIP = "将字符串使用分隔符进行拆分并生成列表";
+
 Blockly.Msg.Text_List_TOOLTIP = "初始化列表[0,0,0]";
 Blockly.Msg.Text_Dict_TOOLTIP = "初始化字典";
 Blockly.Msg.Text_Tuple_TOOLTIP = "初始化元组";

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/blockly/msg/zh-hans/dist/blocks_messages.prod.js


+ 86 - 86
python/blockly/msg/zh-hans/microbit_messages.js

@@ -494,7 +494,7 @@ Blockly.Msg.MICROBIT_IMAGE_UMBRELLA = '伞';
 Blockly.Msg.MICROBIT_IMAGE_SNAKE = '蛇';
 Blockly.Msg.MICROBIT_IMAGE_ALL_CLOCKS = '所有时钟';
 Blockly.Msg.MICROBIT_IMAGE_ALL_ARROWS = '所有箭头';
-Blockly.Msg.MICROBIT_PIN_SET_SERVO_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%88%B5%E6%9C%BA';
+Blockly.Msg.MICROBIT_PIN_SET_SERVO_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%88%B5%E6%9C%BA';
 Blockly.Msg.MICROBIT_PIN_SET_SERVO_TOOLTIP = '设置舵机角度,取值范围为 0 ~ 180度';
 Blockly.Msg.MICROBIT_PIN_SET_SERVO_MESSAGE0 = '设置舵机 引脚 %1 角度为 %2';
 Blockly.Msg.MICROBIT_PIN_SET_MODE_HELPURL = '';
@@ -538,53 +538,53 @@ Blockly.Msg.LABPLUS_BUTTON_GET_PRESSES_HELPURL = 'https://microbit-micropython.r
 
 Blockly.Msg.LABPLUS_LED_MESSAGE0 = '设置LED灯 引脚 %2 输出 %1';
 Blockly.Msg.LABPLUS_LED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_LED_HELPURL = 'http://wiki.labplus.hk/index.php?title=LED';
+Blockly.Msg.LABPLUS_LED_HELPURL = 'http://wiki.labplus.cn/index.php?title=LED';
 
 Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_MESSAGE0 = '红外探测 引脚 %1 被触发';
 Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%BA%A2%E5%A4%96%E6%8E%A2%E6%B5%8B';
+Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%BA%A2%E5%A4%96%E6%8E%A2%E6%B5%8B';
 
 Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_MESSAGE0 = '热敏传感器 引脚 %1 的值';
 Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%83%AD%E6%95%8F%E7%94%B5%E9%98%BB';
+Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%83%AD%E6%95%8F%E7%94%B5%E9%98%BB';
 
 Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_MESSAGE0 = 'I2C数字光线传感器的值(lux)';
 Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%95%B0%E5%AD%97%E5%85%89%E7%BA%BF';
+Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%95%B0%E5%AD%97%E5%85%89%E7%BA%BF';
 
 Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_MESSAGE0 = '水位传感器 引脚 %1 的值';
 Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%B0%B4%E4%BD%8D';
+Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%B0%B4%E4%BD%8D';
 
 Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_MESSAGE0 = '烟雾探测器 引脚 %1 被触发';
 Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%83%9F%E9%9B%BE';
+Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%83%9F%E9%9B%BE';
 
-Blockly.Msg.LABPLUS_BUZZER_FOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_BUZZER_FOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_BUZZER_FOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUZZER_FOR_MESSAGE0 = '以频率 %1 激活蜂鸣器 引脚0 %2 毫秒';
 
-Blockly.Msg.LABPLUS_BUZZER_ON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_BUZZER_ON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_BUZZER_ON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUZZER_ON_MESSAGE0 = '以频率 %1 激活蜂鸣器 引脚0';
 
-Blockly.Msg.LABPLUS_BUZZER_OFF_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_BUZZER_OFF_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_BUZZER_OFF_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUZZER_OFF_MESSAGE0 = '关闭蜂鸣器 引脚0';
 
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_MESSAGE0 = 'I2C温湿度传感器的 %1 值';
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_TM_HM_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%B8%A9%E6%B9%BF%E5%BA%A6';
+Blockly.Msg.LABPLUS_TM_HM_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%B8%A9%E6%B9%BF%E5%BA%A6';
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_TM = '温度';
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_HM = '湿度';
 
-Blockly.Msg.LABPLUS_SET_SERVO_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%88%B5%E6%9C%BA';
+Blockly.Msg.LABPLUS_SET_SERVO_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%88%B5%E6%9C%BA';
 Blockly.Msg.LABPLUS_SET_SERVO_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_SERVO_MESSAGE0 = '设置舵机 引脚 %1 角度为 %2';
 
 Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_MESSAGE0 = '指纹传感器 引脚 %1 验证通过';
 Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%8C%87%E7%BA%B9';
+Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%8C%87%E7%BA%B9';
 
 Blockly.Msg.LABPLUS_SET_MOTOR_HELPURL = '';
 Blockly.Msg.LABPLUS_SET_MOTOR_TOOLTIP = '';
@@ -598,7 +598,7 @@ Blockly.Msg.LABPLUS_STOP_MOTOR_MESSAGE0 = '停止电机';
 
 Blockly.Msg.LABPLUS_GET_RFID_ID_MESSAGE0 = '射频卡 引脚 %1 验证通过';
 Blockly.Msg.LABPLUS_GET_RFID_ID_TOOLTIP = '';
-Blockly.Msg.LABPLUS_GET_RFID_ID_HELPURL = 'http://wiki.labplus.hk/index.php?title=RFID';
+Blockly.Msg.LABPLUS_GET_RFID_ID_HELPURL = 'http://wiki.labplus.cn/index.php?title=RFID';
 
 Blockly.Msg.LABPLUS_GET_RFID_VALUE_MESSAGE0 = '电子钱包 引脚 %1 余额';
 Blockly.Msg.LABPLUS_GET_RFID_VALUE_TOOLTIP = '';
@@ -612,7 +612,7 @@ Blockly.Msg.LABPLUS_SET_RFID_MINUS = '减少';
 
 Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_MESSAGE0 = '声音传感器 引脚 %1 被触发';
 Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%BA%A6%E5%85%8B%E9%A3%8E';
+Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%BA%A6%E5%85%8B%E9%A3%8E';
 
 Blockly.Msg.LABPLUS_USB_SWITCH_HELPURL = '';
 Blockly.Msg.LABPLUS_USB_SWITCH_TOOLTIP = '';
@@ -641,7 +641,7 @@ Blockly.Msg.LABPLUS_RGB_SET_HELPURL = 'https://microbit-micropython.readthedocs.
 
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_MESSAGE0 = '设置扩展端口 IO %1 为 %2';
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_TOOLTIP = '0表示输出引脚,1表示输入引脚';
-Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_INPUT = '输入';
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_OUTPUT = '输出';
@@ -651,17 +651,17 @@ Blockly.Msg.LABPLUS_SET_EXTIO_MODE_OUTPUT = '输出';
 
 Blockly.Msg.LABPLUS_SET_EXTIO_MODE_MESSAGE0 = '初始化扩展端口 %1 IO0 为 %2 %3 IO1 为 %4 %5 IO2 为 %6 %7 IO3 为 %8 %9 IO4 为 %10 %11 IO5 为 %12 %13 IO6 为 %14 %15 IO7 为 %16';
 Blockly.Msg.LABPLUS_SET_EXTIO_MODE_TOOLTIP = '0表示输出引脚,1表示输入引脚';
-Blockly.Msg.LABPLUS_SET_EXTIO_MODE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_SET_EXTIO_MODE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 
-Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_TOOLTIP = '';
 Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_MESSAGE0 = '读取扩展端口值 IO %1'
 
-Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_TOOLTIP = '';
 Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_MESSAGE0 = '设置扩展端口 IO %1 值为 %2';
 
-Blockly.Msg.LABPLUS_I2C_ULTRASONIC_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%B6%85%E5%A3%B0%E6%B3%A2';
+Blockly.Msg.LABPLUS_I2C_ULTRASONIC_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%B6%85%E5%A3%B0%E6%B3%A2';
 Blockly.Msg.LABPLUS_I2C_ULTRASONIC_TOOLTIP = '';
 Blockly.Msg.LABPLUS_I2C_ULTRASONIC_MESSAGE0 = 'I2C超声波传感器的值';
 
@@ -669,11 +669,11 @@ Blockly.Msg.MICROBIT_SET_MUSIC_PIN_HELPURL = '';
 Blockly.Msg.MICROBIT_SET_MUSIC_PIN_TOOLTIP = '';
 Blockly.Msg.MICROBIT_SET_MUSIC_PIN_MESSAGE0 = '设置默认蜂鸣器引脚为 %1';
 
-Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E4%BA%BA%E4%BD%93%E6%84%9F%E5%BA%94';
+Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E4%BA%BA%E4%BD%93%E6%84%9F%E5%BA%94';
 Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_MESSAGE0 = '人体感应 引脚 %1 被触发';
 
-Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%97%A8%E7%A3%81%E5%BC%80%E5%85%B3';
+Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%97%A8%E7%A3%81%E5%BC%80%E5%85%B3';
 Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_MESSAGE0 = '门磁开关 引脚 %1 被触发';
 
@@ -681,60 +681,60 @@ Blockly.Msg.LABPLUS_SOUND_LEVEL_SENSOR_HELPURL = '';
 Blockly.Msg.LABPLUS_SOUND_LEVEL_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SOUND_LEVEL_SENSOR_MESSAGE0 = '声音传感器 引脚 %1 的值';
 
-Blockly.Msg.LABPLUS_SMOKE_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%83%9F%E9%9B%BE';
+Blockly.Msg.LABPLUS_SMOKE_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%83%9F%E9%9B%BE';
 Blockly.Msg.LABPLUS_SMOKE_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SMOKE_SENSOR_MESSAGE0 = '烟雾传感器 引脚 %1 的值';
 
-Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E5%9C%9F%E5%A3%A4%E6%B9%BF%E5%BA%A6';
+Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E5%9C%9F%E5%A3%A4%E6%B9%BF%E5%BA%A6';
 Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_MESSAGE0 = '土壤湿度传感器 引脚 %1 的值';
 
-Blockly.Msg.LABPLUS_FAN_SWITCH_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%8E%92%E9%A3%8E%E6%89%87';
+Blockly.Msg.LABPLUS_FAN_SWITCH_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%8E%92%E9%A3%8E%E6%89%87';
 Blockly.Msg.LABPLUS_FAN_SWITCH_TOOLTIP = '';
 Blockly.Msg.LABPLUS_FAN_SWITCH_MESSAGE0 = '%1 风扇 引脚 %2';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_ON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_ON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON_MESSAGE0 = '打开录放器 %1 引脚 %2';
 Blockly.Msg.LABPLUS_VOICE_RECORD_PLAY = '播放';
 Blockly.Msg.LABPLUS_VOICE_RECORD_REC = '录音';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_MESSAGE0 = '关闭录放器 引脚 %1';
 
 
-Blockly.Msg.LABPLUS_MOTOR_ON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_ON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_ON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_ON_MESSAGE0 = '打开直流电机 %1 速度 %2 引脚 %3';
 Blockly.Msg.LABPLUS_MOTOR_ON_CLOCKWISE = '正转';
 Blockly.Msg.LABPLUS_MOTOR_ON_ANTICLOCKWISE = '反转';
 
-Blockly.Msg.LABPLUS_MOTOR_OFF_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_OFF_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_OFF_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_OFF_MESSAGE0 = '停止直流电机 引脚 %1';
 
-Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%A2%9C%E8%89%B2';
+Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%A2%9C%E8%89%B2';
 Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_TOOLTIP = '';
 Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_MESSAGE0 = 'I2C颜色传感器读取并储存颜色';
 
-Blockly.Msg.LABPLUS_RGB_COLOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=RGB_LED';
+Blockly.Msg.LABPLUS_RGB_COLOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=RGB_LED';
 Blockly.Msg.LABPLUS_RGB_COLOR_TOOLTIP = '读取已储存的颜色';
 Blockly.Msg.LABPLUS_RGB_COLOR_MESSAGE0 = 'RGB颜色 %1';
 
-Blockly.Msg.LABPLUS_SET_I2C_DIGITS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
+Blockly.Msg.LABPLUS_SET_I2C_DIGITS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
 Blockly.Msg.LABPLUS_SET_I2C_DIGITS_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_DIGITS_MESSAGE0 = '设置I2C数码管的值为 %1';
 
-Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
+Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
 Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_TOOLTIP = '';
 Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_MESSAGE0 = '关闭I2C数码管';
 
-Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_MESSAGE0 = '设置MIDI模块音调为 %1';
 
-Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_MESSAGE0 = 'MIDI模块 %2 音符 %1';
 Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_Do = 'Do';
@@ -749,35 +749,35 @@ Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE = '停止';
 
 
 
-Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_MESSAGE0 = 'MIDI模块停止播放音符 %1';
 
-Blockly.Msg.LABPLUS_UART_INIT_MIDI_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_INIT_MIDI_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_INIT_MIDI_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_INIT_MIDI_MESSAGE0 = '初始化MIDI模块 %1';
 
-Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E5%BE%AA%E8%BF%B9';
+Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E5%BE%AA%E8%BF%B9';
 Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_MESSAGE0 = '循迹传感器 引脚 %1 检测为黑';
 
-Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=LM35%E6%B8%A9%E5%BA%A6';
+Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=LM35%E6%B8%A9%E5%BA%A6';
 Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_MESSAGE0 = 'LM35温度传感器 引脚 %1 的值';
 
-Blockly.Msg.LABPLUS_ROTATE_DIMMER_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%97%8B%E9%92%AE%E7%94%B5%E4%BD%8D%E5%99%A8';
+Blockly.Msg.LABPLUS_ROTATE_DIMMER_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%97%8B%E9%92%AE%E7%94%B5%E4%BD%8D%E5%99%A8';
 Blockly.Msg.LABPLUS_ROTATE_DIMMER_TOOLTIP = '';
 Blockly.Msg.LABPLUS_ROTATE_DIMMER_MESSAGE0 = '旋转电位器 引脚 %1 的值';
 
-Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9C%87%E5%8A%A8';
+Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9C%87%E5%8A%A8';
 Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_MESSAGE0 = '震动传感器 引脚 %1 被触发';
 
-Blockly.Msg.LABPLUS_LASER_SWITCH_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%BF%80%E5%85%89%E5%8F%91%E5%B0%84';
+Blockly.Msg.LABPLUS_LASER_SWITCH_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%BF%80%E5%85%89%E5%8F%91%E5%B0%84';
 Blockly.Msg.LABPLUS_LASER_SWITCH_TOOLTIP = '';
 Blockly.Msg.LABPLUS_LASER_SWITCH_MESSAGE0 = '%1 激光开关 引脚 %2';
 
-Blockly.Msg.LABPLUS_4BUTTON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E5%9B%9B%E6%8C%89%E9%94%AE';
+Blockly.Msg.LABPLUS_4BUTTON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E5%9B%9B%E6%8C%89%E9%94%AE';
 Blockly.Msg.LABPLUS_4BUTTON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_4BUTTON_MESSAGE0 = '四向按键模块 引脚 %1 按键 %2 被按下';
 Blockly.Msg.BLUE = 'A';
@@ -789,61 +789,61 @@ Blockly.Msg.LABPLUS_JOYSTICK_HELPURL = '';
 Blockly.Msg.LABPLUS_JOYSTICK_TOOLTIP = '';
 Blockly.Msg.LABPLUS_JOYSTICK_MESSAGE0 = '摇杆 引脚A0 %1 引脚A1 %2   %3 轴的值';
 
-Blockly.Msg.LABPLUS_UART_MP3_PLAY_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
+Blockly.Msg.LABPLUS_UART_MP3_PLAY_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
 Blockly.Msg.LABPLUS_UART_MP3_PLAY_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_MP3_PLAY_MESSAGE0 = 'MP3模块(UART)播放第 %1 首音乐';
 
-Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
+Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
 Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_MESSAGE0 = '设置MP3模块(UART)音量为 %1';
 
-Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
+Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
 Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_MESSAGE0 = '设置MP3模块(UART)状态为 %1';
 Blockly.Msg.PAUSE = '暂停';
 Blockly.Msg.STOP = '停止';
 Blockly.Msg.PLAY = '继续播放';
 
-Blockly.Msg.LABPLUS_UART_INIT_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_INIT_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_INIT_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_INIT_MESSAGE0 = '初始化串口波特率为 %3 TX为 %1 RX为 %2';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_MESSAGE0 = '打开录放器 %1 %2 引脚REC %3 引脚PLAY %4';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_MESSAGE0 = '关闭录放器 %1 引脚REC %2 引脚PLAY %3';
 
-Blockly.Msg.LABPLUS_MOTOR_ON1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_ON1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_ON1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_ON1_MESSAGE0 = '打开直流电机 %1 速度 %2 引脚AIN1 %3 引脚AIN2 %4';
 
-Blockly.Msg.LABPLUS_MOTOR_OFF1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_OFF1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_OFF1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_OFF1_MESSAGE0 = '停止直流电机 %1 引脚AIN1 %2 引脚AIN2 %3';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_MESSAGE0 = '设置LCD游标位置%1 X %2 Y %3';
 
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_MESSAGE0 = '设置LCD显示 %1';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_TOOLTIP = '配合循环次数使用';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_MESSAGE0 = '%1 滚动LCD显示内容';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_ALEFT = '向左';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_RIGHTWARD = '向右';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_MESSAGE0 = '清除LCD显示内容';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_MESSAGE0 = '设置LCD %1';
 
@@ -857,71 +857,71 @@ Blockly.Msg.LABPLUS_SET_I2C_LCD1602_RIGHT_TO_LEFT = '字符串流从右到左';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_TO_ORIGIN = '光标回到原点';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR = '清屏';
 
-Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_MESSAGE0 = '%1 接收到数据';
 Blockly.Msg.BLUEBIT_UART = '串口';
 Blockly.Msg.BLUEBIT_INFRARED_SIGNAL = '红外信号';
 Blockly.Msg.BLUEBIT_BLUEBOOTH = '蓝牙';
-Blockly.Msg.LABPLUS_UART_READ_MSG_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_READ_MSG_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_READ_MSG_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_READ_MSG_MESSAGE0 = '读取 %1 数据';
-Blockly.Msg.LABPLUS_UART_WRITE_MSG_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_WRITE_MSG_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_WRITE_MSG_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_WRITE_MSG_MESSAGE0 = '%1 发送数据 %2';
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_MESSAGE0 = '设置点阵 %1 第一行显示%2 第二行显示%3 第三行显示%4 第四行显示%5 第五行显示%6 第六行显示%7 第七行显示%8 第八行显示%9 ';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_MESSAGE2 = '设置点阵 %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %20 %21 %22 %23 %24 %25 %26 %27 %28 %29 %30 %31 %32 %33 %34 %35 %36 %37 %38 %39 %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %50 %51 %52 %53 %54 %55 %56 %57 %58 %59 %60 %61 %62 %63 %64 %65 %66 %67 %68 %69 %70 %71 %72';
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_MESSAGE0 = '清空点阵';
 
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_MESSAGE0 = '点阵描点 %1 X %2 Y %3';
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_MESSAGE0 = '点阵显示生效';
 
-Blockly.Msg.LABPLUS_UART_SET_OLCD_HELPURL = 'http://wiki.labplus.hk/index.php?title=LCD';
+Blockly.Msg.LABPLUS_UART_SET_OLCD_HELPURL = 'http://wiki.labplus.cn/index.php?title=LCD';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_MESSAGE0 = '设置OLCD屏 %1 X %2 Y %3 显示文本 %4 字体为 %5';
-Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_HELPURL = 'http://wiki.labplus.hk/index.php?title=LCD';
+Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_HELPURL = 'http://wiki.labplus.cn/index.php?title=LCD';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_MESSAGE0 = '在OLCD屏上擦除矩阵 %1 X1 %2 Y1 %3 X2 %4 Y2 %5';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_MESSAGE0 = '清空OLCD屏';
-Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_HELPURL = 'http://wiki.labplus.hk/index.php?title=LCD';
+Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_HELPURL = 'http://wiki.labplus.cn/index.php?title=LCD';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_TOOLTIP = '';
-Blockly.Msg.LABPLUS_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%A8%A1%E6%8B%9F%E5%85%89%E7%BA%BF';
+Blockly.Msg.LABPLUS_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%A8%A1%E6%8B%9F%E5%85%89%E7%BA%BF';
 Blockly.Msg.LABPLUS_LIGHT_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_LIGHT_SENSOR_MESSAGE0 = '模拟光线传感器 引脚 %1 的值';
 Blockly.Msg.LABPLUS_BUTTON_MODULE_IS_PRESSED_HELPURL = 'https://microbit-micropython.readthedocs.io/en/latest/i2c.html';
 Blockly.Msg.LABPLUS_BUTTON_MODULE_IS_PRESSED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUTTON_MODULE_IS_PRESSED_MESSAGE0 = '按键模块 引脚 %1 被按下';
 
-Blockly.Msg.MICROBIT_EXT2_SET_SERVO_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SET_SERVO_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_SET_SERVO_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_SET_SERVO_MESSAGE0 = '设置舵机 %1 的角度为 %2';
-Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_MESSAGE0 = '设置马达 %1 方向 %2 速度 %3';
-Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_MESSAGE0 = '停止马达 %1';
 Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_MESSAGE0 = '声音传感器的值';
-Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_MESSAGE0 = '光线传感器的值';
-Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_TOOLTIP = '';
 
 Blockly.Msg.MICROBIT_EXT2_SET_PWM_MESSAGE0 = '设置 PWM 接口 %1 输出值为 %2';
 Blockly.Msg.MICROBIT_EXT2_SET_PWM_TOOLTIP = 'PWM 值范围 0~4095';
-Blockly.Msg.MICROBIT_EXT2_SET_PWM_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SET_PWM_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_MESSAGE0 = '驱动步进电机 接口 %1 方向 %2 速度 %3';
 Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_TOOLTIP = '注意:该功能不能与驱动舵机和DC马达及PWM输出同时使用。因为线序的问题,只支持28BYJ-48步进电机。\nspeed 值范围 25~150';
-Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 
 Blockly.Msg.MICROBIT_INIT_I2C_HELPURL = 'https://microbit-micropython.readthedocs.io/en/latest/i2c.html';
 Blockly.Msg.MICROBIT_INIT_I2C_TOOLTIP = '';
@@ -1014,11 +1014,11 @@ Blockly.Msg.BOTBIT_HOME_HELPURL = '';
 Blockly.Msg.BOTBIT_HOME_TOOLTIP = '';
 Blockly.Msg.BOTBIT_HOME_MESSAGE0 = '机器人舞步初始化';
 
-Blockly.Msg.BOTBIT_PIDtracking_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bot:bit';
+Blockly.Msg.BOTBIT_PIDtracking_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bot:bit';
 Blockly.Msg.BOTBIT_PIDtracking_TOOLTIP = '速度: 0~2000';
 Blockly.Msg.BOTBIT_PIDtracking_MESSAGE0 = '校准并循迹 %1 kp %2 kd %3 速度 %4';
 
-Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_HELPURL = 'http://wiki.labplus.hk/index.php?title=MIDI(%E7%94%B5%E5%AD%90%E7%90%B4)';
+Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_HELPURL = 'http://wiki.labplus.cn/index.php?title=MIDI(%E7%94%B5%E5%AD%90%E7%90%B4)';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_MESSAGE0 = '设置MIDI模块音量为 %1';
 
@@ -1052,43 +1052,43 @@ Blockly.Msg.JOINT_Steel_Drums = "钢鼓";  //Steel Drums
 Blockly.Msg.JOINT_Lead = "合成音主旋律";  //Lead
 Blockly.Msg.JOINT_Pad = "合成音衬底";  //Pad
 
-Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_MESSAGE0 ='播放音调 %1';
 
 Blockly.Msg.Carbit_init_MESSAGE0 = 'CarBit初始化';
 Blockly.Msg.Carbit_init_TOOLTIP = '';
-Blockly.Msg.Carbit_init_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_init_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 
 Blockly.Msg.Carbit_setLeftMotor_MESSAGE0 = '设置 B2 电机速度 %1';
 Blockly.Msg.Carbit_setLeftMotor_TOOLTIP = '范围:-100~100';
-Blockly.Msg.Carbit_setLeftMotor_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_setLeftMotor_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 
 Blockly.Msg.Carbit_setRightMotor_MESSAGE0 = '设置 B1 电机速度 %1';
 Blockly.Msg.Carbit_setRightMotor_TOOLTIP = '范围:-100~100';
-Blockly.Msg.Carbit_setRightMotor_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_setRightMotor_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 
-Blockly.Msg.Carbit_analog_light_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_analog_light_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_analog_light_TOOLTIP = 'Q3对应Pin1,Q4对应Pin2';
 Blockly.Msg.Carbit_analog_light_MESSAGE0 = '%1 模拟光线的值';
 
-Blockly.Msg.Carbit_Speed_U10_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_Speed_U10_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_Speed_U10_TOOLTIP = '对应U10';
 Blockly.Msg.Carbit_Speed_U10_MESSAGE0 = '左轮速度';
 
-Blockly.Msg.Carbit_Speed_U11_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_Speed_U11_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_Speed_U11_TOOLTIP = '对应U11';
 Blockly.Msg.Carbit_Speed_U11_MESSAGE0 = '右轮速度';
 
-Blockly.Msg.Carbit_Distance_HELPURL= 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_Distance_HELPURL= 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_Distance_TOOLTIP= '';
 Blockly.Msg.Carbit_Distance_MESSAGE0= '超声波的值';
 
-Blockly.Msg.Carbit_tracking_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_tracking_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_tracking_TOOLTIP = '';
 Blockly.Msg.Carbit_tracking_MESSAGE0 = '循迹参数 %1 直行速度 %2 最大限速 %3 转弯延时 %5 转弯速度系数 %4 ';
 
-/* Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+/* Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_MESSAGE0 = '蜂鸣器%1关闭音调 %2' */
 

+ 2 - 5
python/blockly/msg/zh-hant/blocks_messages.js

@@ -4438,13 +4438,10 @@ Blockly.Msg.ai_led_matrix_clear_screen_TOOLTIP= "清除燈屏";
 
 // ai_speaker
 Blockly.Msg.ai_audio_init_speaker_TOOLTIP = "喇叭初始化";
-Blockly.Msg.ai_audio_play_song_speaker_TOOLTIP = "播放音訊檔案(單個循環)";
-Blockly.Msg.ai_audio_play_song_speaker_list_loop_TOOLTIP = "播放音訊檔案(順序播放)";
-Blockly.Msg.ai_audio_play_music_file_list_random_TOOLTIP = "播放音訊檔案(隨機播放)";
+Blockly.Msg.ai_audio_play_song_speaker_TOOLTIP = "播放音訊檔案";
 Blockly.Msg.ai_audio_play_state_speaker_TOOLTIP = "獲取音訊檔案播放狀態";
 Blockly.Msg.ai_audio_play_finish_speaker_TOOLTIP = "結束音訊檔案播放";
-Blockly.Msg.ai_audio_set_speaker_TOOLTIP = "設定音訊檔案播放音量";
-Blockly.Msg.ai_audio_files_list_TOOLTIP = "獲取當前路徑的音頻檔案陣列";
+Blockly.Msg.ai_audio_set_speaker_TOOLTIP = "設定音訊文件播放音量";
 
 // ai_camera
 Blockly.Msg.ai_camera_init_TOOLTIP = "相機初始化";

+ 2 - 0
python/blockly/msg/zh-hant/dist/blocks_messages.dev.js

@@ -3439,6 +3439,8 @@ Blockly.Msg.CocoRobo_LARK_CAR_MOTION_STOP = '停止';
 Blockly.Msg.Math_Degrad_RAD_TOOLTIP = "返回轉換角度爲弧度的結果";
 Blockly.Msg.Math_Degrad_DEG_TOOLTIP = "返回轉換弧度爲角度的結果";
 
+Blockly.Msg.Text_Split_String_By_Delimiter_TOOLTIP = "將字符串使用分隔符進行拆分並生成陣列";
+
 Blockly.Msg.Text_List_TOOLTIP = "初始化陣列[0,0,0]";
 Blockly.Msg.Text_Dict_TOOLTIP = "初始化字典";
 Blockly.Msg.Text_Tuple_TOOLTIP = "初始化元組";

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/blockly/msg/zh-hant/dist/blocks_messages.prod.js


+ 86 - 86
python/blockly/msg/zh-hant/microbit_messages.js

@@ -494,7 +494,7 @@ Blockly.Msg.MICROBIT_IMAGE_UMBRELLA = '傘';
 Blockly.Msg.MICROBIT_IMAGE_SNAKE = '蛇';
 Blockly.Msg.MICROBIT_IMAGE_ALL_CLOCKS = '所有時鐘';
 Blockly.Msg.MICROBIT_IMAGE_ALL_ARROWS = '所有箭頭';
-Blockly.Msg.MICROBIT_PIN_SET_SERVO_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%88%B5%E6%9C%BA';
+Blockly.Msg.MICROBIT_PIN_SET_SERVO_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%88%B5%E6%9C%BA';
 Blockly.Msg.MICROBIT_PIN_SET_SERVO_TOOLTIP = '設置舵機角度,取值範圍為 0 ~ 180度';
 Blockly.Msg.MICROBIT_PIN_SET_SERVO_MESSAGE0 = '設置舵機 腳位 %1 角度為 %2';
 Blockly.Msg.MICROBIT_PIN_SET_MODE_HELPURL = '';
@@ -538,53 +538,53 @@ Blockly.Msg.LABPLUS_BUTTON_GET_PRESSES_HELPURL = 'https://microbit-micropython.r
 
 Blockly.Msg.LABPLUS_LED_MESSAGE0 = '設置LED燈 腳位 %2 輸出 %1';
 Blockly.Msg.LABPLUS_LED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_LED_HELPURL = 'http://wiki.labplus.hk/index.php?title=LED';
+Blockly.Msg.LABPLUS_LED_HELPURL = 'http://wiki.labplus.cn/index.php?title=LED';
 
 Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_MESSAGE0 = '紅外探測 腳位 %1 被觸發';
 Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%BA%A2%E5%A4%96%E6%8E%A2%E6%B5%8B';
+Blockly.Msg.LABPLUS_INFRARED_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%BA%A2%E5%A4%96%E6%8E%A2%E6%B5%8B';
 
 Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_MESSAGE0 = '熱敏傳感器 腳位 %1 的值';
 Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%83%AD%E6%95%8F%E7%94%B5%E9%98%BB';
+Blockly.Msg.LABPLUS_HEAT_SENSITIVE_DETECTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%83%AD%E6%95%8F%E7%94%B5%E9%98%BB';
 
 Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_MESSAGE0 = 'I2C數字光線傳感器的值(lux)';
 Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%95%B0%E5%AD%97%E5%85%89%E7%BA%BF';
+Blockly.Msg.LABPLUS_I2C_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%95%B0%E5%AD%97%E5%85%89%E7%BA%BF';
 
 Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_MESSAGE0 = '水位傳感器 腳位 %1 的值';
 Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%B0%B4%E4%BD%8D';
+Blockly.Msg.LABPLUS_WATER_LEVEL_DETECTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%B0%B4%E4%BD%8D';
 
 Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_MESSAGE0 = '煙霧探測器 腳位 %1 被觸發';
 Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%83%9F%E9%9B%BE';
+Blockly.Msg.LABPLUS_SMOKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%83%9F%E9%9B%BE';
 
-Blockly.Msg.LABPLUS_BUZZER_FOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_BUZZER_FOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_BUZZER_FOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUZZER_FOR_MESSAGE0 = '以頻率 %1 激活蜂鳴器 引腳0 %2 毫秒';
 
-Blockly.Msg.LABPLUS_BUZZER_ON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_BUZZER_ON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_BUZZER_ON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUZZER_ON_MESSAGE0 = '以頻率 %1 激活蜂鳴器 引腳0';
 
-Blockly.Msg.LABPLUS_BUZZER_OFF_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_BUZZER_OFF_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_BUZZER_OFF_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUZZER_OFF_MESSAGE0 = '關閉蜂鳴器 引腳0';
 
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_MESSAGE0 = 'I2C溫濕度傳感器的 %1 值';
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_TM_HM_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%B8%A9%E6%B9%BF%E5%BA%A6';
+Blockly.Msg.LABPLUS_TM_HM_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%B8%A9%E6%B9%BF%E5%BA%A6';
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_TM = '溫度';
 Blockly.Msg.LABPLUS_TM_HM_SENSOR_HM = '濕度';
 
-Blockly.Msg.LABPLUS_SET_SERVO_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%88%B5%E6%9C%BA';
+Blockly.Msg.LABPLUS_SET_SERVO_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%88%B5%E6%9C%BA';
 Blockly.Msg.LABPLUS_SET_SERVO_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_SERVO_MESSAGE0 = '設置舵機 腳位 %1 角度為 %2';
 
 Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_MESSAGE0 = '指紋傳感器 腳位 %1 驗證通過';
 Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_TOOLTIP = '';
-Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%8C%87%E7%BA%B9';
+Blockly.Msg.LABPLUS_FINGERPRINT_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%8C%87%E7%BA%B9';
 
 Blockly.Msg.LABPLUS_SET_MOTOR_HELPURL = '';
 Blockly.Msg.LABPLUS_SET_MOTOR_TOOLTIP = '';
@@ -598,7 +598,7 @@ Blockly.Msg.LABPLUS_STOP_MOTOR_MESSAGE0 = '停止電機';
 
 Blockly.Msg.LABPLUS_GET_RFID_ID_MESSAGE0 = '射頻卡 腳位 %1 驗證通過';
 Blockly.Msg.LABPLUS_GET_RFID_ID_TOOLTIP = '';
-Blockly.Msg.LABPLUS_GET_RFID_ID_HELPURL = 'http://wiki.labplus.hk/index.php?title=RFID';
+Blockly.Msg.LABPLUS_GET_RFID_ID_HELPURL = 'http://wiki.labplus.cn/index.php?title=RFID';
 
 Blockly.Msg.LABPLUS_GET_RFID_VALUE_MESSAGE0 = '電子錢包 腳位 %1 余額';
 Blockly.Msg.LABPLUS_GET_RFID_VALUE_TOOLTIP = '';
@@ -612,7 +612,7 @@ Blockly.Msg.LABPLUS_SET_RFID_MINUS = '減少';
 
 Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_MESSAGE0 = '聲音傳感器 腳位 %1 被觸發';
 Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_TOOLTIP = '';
-Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%BA%A6%E5%85%8B%E9%A3%8E';
+Blockly.Msg.LABPLUS_SOUND_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%BA%A6%E5%85%8B%E9%A3%8E';
 
 Blockly.Msg.LABPLUS_USB_SWITCH_HELPURL = '';
 Blockly.Msg.LABPLUS_USB_SWITCH_TOOLTIP = '';
@@ -641,7 +641,7 @@ Blockly.Msg.LABPLUS_RGB_SET_HELPURL = 'https://microbit-micropython.readthedocs.
 
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_MESSAGE0 = '設置擴展端口 IO %1 為 %2';
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_TOOLTIP = '0表示輸出引腳,1表示輸入引腳';
-Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_INPUT = '輸入';
 Blockly.Msg.LABPLUS_COMPITITION_INIT_EXTENDED_PINS_OUTPUT = '輸出';
@@ -651,17 +651,17 @@ Blockly.Msg.LABPLUS_SET_EXTIO_MODE_OUTPUT = '輸出';
 
 Blockly.Msg.LABPLUS_SET_EXTIO_MODE_MESSAGE0 = '初始化擴展端口 %1 IO0 為 %2 %3 IO1 為 %4 %5 IO2 為 %6 %7 IO3 為 %8 %9 IO4 為 %10 %11 IO5 為 %12 %13 IO6 為 %14 %15 IO7 為 %16';
 Blockly.Msg.LABPLUS_SET_EXTIO_MODE_TOOLTIP = '0表示輸出引腳,1表示輸入引腳';
-Blockly.Msg.LABPLUS_SET_EXTIO_MODE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_SET_EXTIO_MODE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 
-Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_TOOLTIP = '';
 Blockly.Msg.LABPLUS_READ_EXTENDED_PIN_MESSAGE0 = '讀取擴展端口值 IO %1'
 
-Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
+Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%AB%AF%E5%8F%A3%E6%89%A9%E5%B1%95';
 Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_TOOLTIP = '';
 Blockly.Msg.LABPLUS_WRITE_EXTENDED_PIN_MESSAGE0 = '設置擴展端口 IO %1 值為 %2';
 
-Blockly.Msg.LABPLUS_I2C_ULTRASONIC_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%B6%85%E5%A3%B0%E6%B3%A2';
+Blockly.Msg.LABPLUS_I2C_ULTRASONIC_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%B6%85%E5%A3%B0%E6%B3%A2';
 Blockly.Msg.LABPLUS_I2C_ULTRASONIC_TOOLTIP = '';
 Blockly.Msg.LABPLUS_I2C_ULTRASONIC_MESSAGE0 = 'I2C超聲波傳感器的值';
 
@@ -669,11 +669,11 @@ Blockly.Msg.MICROBIT_SET_MUSIC_PIN_HELPURL = '';
 Blockly.Msg.MICROBIT_SET_MUSIC_PIN_TOOLTIP = '';
 Blockly.Msg.MICROBIT_SET_MUSIC_PIN_MESSAGE0 = '設置默認蜂鳴器引腳為 %1';
 
-Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E4%BA%BA%E4%BD%93%E6%84%9F%E5%BA%94';
+Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E4%BA%BA%E4%BD%93%E6%84%9F%E5%BA%94';
 Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_HUMAN_DETECTOR_IS_TRIGGERED_MESSAGE0 = '人體感應 腳位 %1 被觸發';
 
-Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%97%A8%E7%A3%81%E5%BC%80%E5%85%B3';
+Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%97%A8%E7%A3%81%E5%BC%80%E5%85%B3';
 Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MAGNETIC_SWITCH_IS_TRIGGERED_MESSAGE0 = '門磁開關 腳位 %1 被觸發';
 
@@ -681,60 +681,60 @@ Blockly.Msg.LABPLUS_SOUND_LEVEL_SENSOR_HELPURL = '';
 Blockly.Msg.LABPLUS_SOUND_LEVEL_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SOUND_LEVEL_SENSOR_MESSAGE0 = '聲音傳感器 腳位 %1 的值';
 
-Blockly.Msg.LABPLUS_SMOKE_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%83%9F%E9%9B%BE';
+Blockly.Msg.LABPLUS_SMOKE_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%83%9F%E9%9B%BE';
 Blockly.Msg.LABPLUS_SMOKE_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SMOKE_SENSOR_MESSAGE0 = '煙霧傳感器 腳位 %1 的值';
 
-Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E5%9C%9F%E5%A3%A4%E6%B9%BF%E5%BA%A6';
+Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E5%9C%9F%E5%A3%A4%E6%B9%BF%E5%BA%A6';
 Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SOIL_MOISTURE_SENSOR_MESSAGE0 = '土壤濕度傳感器 腳位 %1 的值';
 
-Blockly.Msg.LABPLUS_FAN_SWITCH_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%8E%92%E9%A3%8E%E6%89%87';
+Blockly.Msg.LABPLUS_FAN_SWITCH_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%8E%92%E9%A3%8E%E6%89%87';
 Blockly.Msg.LABPLUS_FAN_SWITCH_TOOLTIP = '';
 Blockly.Msg.LABPLUS_FAN_SWITCH_MESSAGE0 = '%1 風扇 腳位 %2';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_ON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_ON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON_MESSAGE0 = '打開錄放器 %1 腳位 %2';
 Blockly.Msg.LABPLUS_VOICE_RECORD_PLAY = '播放';
 Blockly.Msg.LABPLUS_VOICE_RECORD_REC = '錄音';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF_MESSAGE0 = '關閉錄放器 腳位 %1';
 
 
-Blockly.Msg.LABPLUS_MOTOR_ON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_ON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_ON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_ON_MESSAGE0 = '打開直流電機 %1 速度 %2 腳位 %3';
 Blockly.Msg.LABPLUS_MOTOR_ON_CLOCKWISE = '正轉';
 Blockly.Msg.LABPLUS_MOTOR_ON_ANTICLOCKWISE = '反轉';
 
-Blockly.Msg.LABPLUS_MOTOR_OFF_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_OFF_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_OFF_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_OFF_MESSAGE0 = '停止直流電機 腳位 %1';
 
-Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%A2%9C%E8%89%B2';
+Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%A2%9C%E8%89%B2';
 Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_TOOLTIP = '';
 Blockly.Msg.LABPLUS_READ_COLOR_FROM_I2C_MESSAGE0 = 'I2C顏色傳感器讀取並儲存顏色';
 
-Blockly.Msg.LABPLUS_RGB_COLOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=RGB_LED';
+Blockly.Msg.LABPLUS_RGB_COLOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=RGB_LED';
 Blockly.Msg.LABPLUS_RGB_COLOR_TOOLTIP = '讀取已儲存的顏色';
 Blockly.Msg.LABPLUS_RGB_COLOR_MESSAGE0 = 'RGB顏色 %1';
 
-Blockly.Msg.LABPLUS_SET_I2C_DIGITS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
+Blockly.Msg.LABPLUS_SET_I2C_DIGITS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
 Blockly.Msg.LABPLUS_SET_I2C_DIGITS_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_DIGITS_MESSAGE0 = '設置I2C數碼管的值為 %1';
 
-Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
+Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%95%B0%E7%A0%81%E7%AE%A1';
 Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_TOOLTIP = '';
 Blockly.Msg.LABPLUS_TURN_OFF_I2C_DIGITS_MESSAGE0 = '關閉I2C數碼管';
 
-Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_MELODIC_MESSAGE0 = '設置MIDI模組音調為 %1';
 
-Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_MESSAGE0 = 'MIDI模組 %2 音符 %1';
 Blockly.Msg.LABPLUS_UART_PLAY_MIDI_NOTE_Do = 'Do';
@@ -749,35 +749,35 @@ Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE = '停止';
 
 
 
-Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_OFF_MIDI_NOTE_MESSAGE0 = 'MIDI模組停止播放音符 %1';
 
-Blockly.Msg.LABPLUS_UART_INIT_MIDI_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
+Blockly.Msg.LABPLUS_UART_INIT_MIDI_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E5%AD%90%E7%90%B4';
 Blockly.Msg.LABPLUS_UART_INIT_MIDI_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_INIT_MIDI_MESSAGE0 = '初始化MIDI模組 %1';
 
-Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E5%BE%AA%E8%BF%B9';
+Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E5%BE%AA%E8%BF%B9';
 Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_LINE_FOLLOWER_IS_TRIGGERED_MESSAGE0 = '循跡傳感器 腳位 %1 檢測為黑';
 
-Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=LM35%E6%B8%A9%E5%BA%A6';
+Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=LM35%E6%B8%A9%E5%BA%A6';
 Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_TEMPERATURE_SENSOR_MESSAGE0 = 'LM35溫度傳感器 腳位 %1 的值';
 
-Blockly.Msg.LABPLUS_ROTATE_DIMMER_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%97%8B%E9%92%AE%E7%94%B5%E4%BD%8D%E5%99%A8';
+Blockly.Msg.LABPLUS_ROTATE_DIMMER_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%97%8B%E9%92%AE%E7%94%B5%E4%BD%8D%E5%99%A8';
 Blockly.Msg.LABPLUS_ROTATE_DIMMER_TOOLTIP = '';
 Blockly.Msg.LABPLUS_ROTATE_DIMMER_MESSAGE0 = '旋轉電位器 腳位 %1 的值';
 
-Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9C%87%E5%8A%A8';
+Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9C%87%E5%8A%A8';
 Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SHAKE_DETECTOR_IS_TRIGGERED_MESSAGE0 = '震動傳感器 腳位 %1 被觸發';
 
-Blockly.Msg.LABPLUS_LASER_SWITCH_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%BF%80%E5%85%89%E5%8F%91%E5%B0%84';
+Blockly.Msg.LABPLUS_LASER_SWITCH_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%BF%80%E5%85%89%E5%8F%91%E5%B0%84';
 Blockly.Msg.LABPLUS_LASER_SWITCH_TOOLTIP = '';
 Blockly.Msg.LABPLUS_LASER_SWITCH_MESSAGE0 = '%1 激光開關 腳位 %2';
 
-Blockly.Msg.LABPLUS_4BUTTON_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E5%9B%9B%E6%8C%89%E9%94%AE';
+Blockly.Msg.LABPLUS_4BUTTON_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E5%9B%9B%E6%8C%89%E9%94%AE';
 Blockly.Msg.LABPLUS_4BUTTON_TOOLTIP = '';
 Blockly.Msg.LABPLUS_4BUTTON_MESSAGE0 = '四向按鍵模組 腳位 %1 按鍵 %2 被按下';
 Blockly.Msg.BLUE = 'A';
@@ -789,61 +789,61 @@ Blockly.Msg.LABPLUS_JOYSTICK_HELPURL = '';
 Blockly.Msg.LABPLUS_JOYSTICK_TOOLTIP = '';
 Blockly.Msg.LABPLUS_JOYSTICK_MESSAGE0 = '搖桿 引腳A0 %1 引腳A1 %2   %3 軸的值';
 
-Blockly.Msg.LABPLUS_UART_MP3_PLAY_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
+Blockly.Msg.LABPLUS_UART_MP3_PLAY_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
 Blockly.Msg.LABPLUS_UART_MP3_PLAY_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_MP3_PLAY_MESSAGE0 = 'MP3模組(UART)播放第 %1 首音樂';
 
-Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
+Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
 Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_MP3_SET_VOLUME_MESSAGE0 = '設置MP3模組(UART)音量為 %1';
 
-Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
+Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E9%9F%B3%E4%B9%90%E6%92%AD%E6%94%BE';
 Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_MP3_SET_STATUS_MESSAGE0 = '設置MP3模組(UART)狀態為 %1';
 Blockly.Msg.PAUSE = '暫停';
 Blockly.Msg.STOP = '停止';
 Blockly.Msg.PLAY = '繼續播放';
 
-Blockly.Msg.LABPLUS_UART_INIT_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_INIT_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_INIT_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_INIT_MESSAGE0 = '初始化串口波特率為 %3 TX為 %1 RX為 %2';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_ON1_MESSAGE0 = '打開錄放器 %1 %2 引腳REC %3 引腳PLAY %4';
 
-Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
+Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%AF%AD%E9%9F%B3%E5%BD%95%E6%94%BE';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_VOICE_RECORD_OFF1_MESSAGE0 = '關閉錄放器 %1 引腳REC %2 引腳PLAY %3';
 
-Blockly.Msg.LABPLUS_MOTOR_ON1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_ON1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_ON1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_ON1_MESSAGE0 = '打開直流電機 %1 速度 %2 引腳AIN1 %3 引腳AIN2 %4';
 
-Blockly.Msg.LABPLUS_MOTOR_OFF1_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
+Blockly.Msg.LABPLUS_MOTOR_OFF1_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%94%B5%E6%9C%BA%E9%A9%B1%E5%8A%A8';
 Blockly.Msg.LABPLUS_MOTOR_OFF1_TOOLTIP = '';
 Blockly.Msg.LABPLUS_MOTOR_OFF1_MESSAGE0 = '停止直流電機 %1 引腳AIN1 %2 引腳AIN2 %3';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_MESSAGE0 = '設置LCD遊標位置%1 X %2 Y %3';
 
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_PRINT_MESSAGE0 = '設置LCD顯示 %1';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_TOOLTIP = '配合循環次數使用';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_MESSAGE0 = '%1滾動LCD顯示內容';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_ALEFT = '向左';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_SCROLL_RIGHTWARD = '向右';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR_MESSAGE0 = '清除LCD顯示內容';
 
-Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_HELPURL = 'http://wiki.labplus.hk/index.php?title=1602_LCD';
+Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_HELPURL = 'http://wiki.labplus.cn/index.php?title=1602_LCD';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_STATE_MESSAGE0 = '設置LCD %1';
 
@@ -857,71 +857,71 @@ Blockly.Msg.LABPLUS_SET_I2C_LCD1602_RIGHT_TO_LEFT = '字符串流從右到左';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CURSOR_TO_ORIGIN = '光標回到原點';
 Blockly.Msg.LABPLUS_SET_I2C_LCD1602_CLEAR = '清屏';
 
-Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_ANY_MSG_RECEIVED_MESSAGE0 = '%1 接收到數據';
 Blockly.Msg.BLUEBIT_UART = '串口';
 Blockly.Msg.BLUEBIT_INFRARED_SIGNAL = '紅外信號';
 Blockly.Msg.BLUEBIT_BLUEBOOTH = '藍牙';
-Blockly.Msg.LABPLUS_UART_READ_MSG_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_READ_MSG_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_READ_MSG_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_READ_MSG_MESSAGE0 = '讀取 %1 數據';
-Blockly.Msg.LABPLUS_UART_WRITE_MSG_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bluebit';
+Blockly.Msg.LABPLUS_UART_WRITE_MSG_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bluebit';
 Blockly.Msg.LABPLUS_UART_WRITE_MSG_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_WRITE_MSG_MESSAGE0 = '%1 發送數據 %2';
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_MESSAGE0 = '設置點陣 %1 首個行顯示%2 第二行顯示%3 第三行顯示%4 第四行顯示%5 第五行顯示%6 第六行顯示%7 第七行顯示%8 第八行顯示%9 ';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_MESSAGE2 = '設置點陣 %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 %17 %18 %19 %20 %21 %22 %23 %24 %25 %26 %27 %28 %29 %30 %31 %32 %33 %34 %35 %36 %37 %38 %39 %40 %41 %42 %43 %44 %45 %46 %47 %48 %49 %50 %51 %52 %53 %54 %55 %56 %57 %58 %59 %60 %61 %62 %63 %64 %65 %66 %67 %68 %69 %70 %71 %72';
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_CLEAR_MESSAGE0 = '清空點陣';
 
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_DRAW_PIXEL_MESSAGE0 = '點陣描點 %1 X %2 Y %3';
-Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E7%82%B9%E9%98%B5';
+Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E7%82%B9%E9%98%B5';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_TOOLTIP = '';
 Blockly.Msg.LABPLUS_SET_I2C_LED_MATRIX_SHOW_MESSAGE0 = '點陣顯示生效';
 
-Blockly.Msg.LABPLUS_UART_SET_OLCD_HELPURL = 'http://wiki.labplus.hk/index.php?title=LCD';
+Blockly.Msg.LABPLUS_UART_SET_OLCD_HELPURL = 'http://wiki.labplus.cn/index.php?title=LCD';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_MESSAGE0 = '設置OLCD屏 %1 X %2 Y %3 顯示文本 %4 字體為 %5';
-Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_HELPURL = 'http://wiki.labplus.hk/index.php?title=LCD';
+Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_HELPURL = 'http://wiki.labplus.cn/index.php?title=LCD';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_MESSAGE0 = '在OLCD屏上擦除矩陣 %1 X1 %2 Y1 %3 X2 %4 Y2 %5';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_MESSAGE0 = '清空OLCD屏';
-Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_HELPURL = 'http://wiki.labplus.hk/index.php?title=LCD';
+Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_HELPURL = 'http://wiki.labplus.cn/index.php?title=LCD';
 Blockly.Msg.LABPLUS_UART_SET_OLCD_CLEAR_ALL_TOOLTIP = '';
-Blockly.Msg.LABPLUS_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E6%A8%A1%E6%8B%9F%E5%85%89%E7%BA%BF';
+Blockly.Msg.LABPLUS_LIGHT_SENSOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E6%A8%A1%E6%8B%9F%E5%85%89%E7%BA%BF';
 Blockly.Msg.LABPLUS_LIGHT_SENSOR_TOOLTIP = '';
 Blockly.Msg.LABPLUS_LIGHT_SENSOR_MESSAGE0 = '模擬光線傳感器 腳位 %1 的值';
 Blockly.Msg.LABPLUS_BUTTON_MODULE_IS_PRESSED_HELPURL = 'https://microbit-micropython.readthedocs.io/en/latest/i2c.html';
 Blockly.Msg.LABPLUS_BUTTON_MODULE_IS_PRESSED_TOOLTIP = '';
 Blockly.Msg.LABPLUS_BUTTON_MODULE_IS_PRESSED_MESSAGE0 = '按鍵模組 腳位 %1 被按下';
 
-Blockly.Msg.MICROBIT_EXT2_SET_SERVO_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SET_SERVO_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_SET_SERVO_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_SET_SERVO_MESSAGE0 = '設置舵機 %1 的角度為 %2';
-Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_SET_MOTOR_MESSAGE0 = '設置馬達 %1 方向 %2 速度 %3';
-Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_STOP_MOTOR_MESSAGE0 = '停止馬達 %1';
 Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_MESSAGE0 = '聲音傳感器的值';
-Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_SOUND_VALUE_TOOLTIP = '';
 Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_MESSAGE0 = '光線傳感器的值';
-Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_LIGHT_VALUE_TOOLTIP = '';
 
 Blockly.Msg.MICROBIT_EXT2_SET_PWM_MESSAGE0 = '設置 PWM 接口 %1 輸出值為 %2';
 Blockly.Msg.MICROBIT_EXT2_SET_PWM_TOOLTIP = 'PWM 值範圍 0~4095';
-Blockly.Msg.MICROBIT_EXT2_SET_PWM_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_SET_PWM_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_MESSAGE0 = '驅動步進電機 接口 %1 方向 %2 速度 %3';
 Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_TOOLTIP = '註意:該功能不能與驅動舵機和DC馬達及PWM輸出同時使用。因為線序的問題,只支持28BYJ-48步進電機。\nspeed 值範圍 25~150';
-Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_HELPURL = 'http://wiki.labplus.hk/index.php?title=Extend:bit%E2%85%A1';
+Blockly.Msg.MICROBIT_EXT2_STEP_MOTOR_HELPURL = 'http://wiki.labplus.cn/index.php?title=Extend:bit%E2%85%A1';
 
 Blockly.Msg.MICROBIT_INIT_I2C_HELPURL = 'https://microbit-micropython.readthedocs.io/en/latest/i2c.html';
 Blockly.Msg.MICROBIT_INIT_I2C_TOOLTIP = '';
@@ -1014,11 +1014,11 @@ Blockly.Msg.BOTBIT_HOME_HELPURL = '';
 Blockly.Msg.BOTBIT_HOME_TOOLTIP = '';
 Blockly.Msg.BOTBIT_HOME_MESSAGE0 = '機器人舞步初始化';
 
-Blockly.Msg.BOTBIT_PIDtracking_HELPURL = 'http://wiki.labplus.hk/index.php?title=Bot:bit';
+Blockly.Msg.BOTBIT_PIDtracking_HELPURL = 'http://wiki.labplus.cn/index.php?title=Bot:bit';
 Blockly.Msg.BOTBIT_PIDtracking_TOOLTIP = '速度: 0~2000';
 Blockly.Msg.BOTBIT_PIDtracking_MESSAGE0 = '校準並循跡 %1 kp %2 kd %3 速度 %4';
 
-Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_HELPURL = 'http://wiki.labplus.hk/index.php?title=MIDI(%E7%94%B5%E5%AD%90%E7%90%B4)';
+Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_HELPURL = 'http://wiki.labplus.cn/index.php?title=MIDI(%E7%94%B5%E5%AD%90%E7%90%B4)';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_TOOLTIP = '';
 Blockly.Msg.LABPLUS_UART_SET_MIDI_VOL_MESSAGE0 = '設置MIDI模組音量為 %1';
 
@@ -1052,43 +1052,43 @@ Blockly.Msg.JOINT_Steel_Drums = "鋼鼓";  //Steel Drums
 Blockly.Msg.JOINT_Lead = "合成音主旋律";  //Lead
 Blockly.Msg.JOINT_Pad = "合成音襯底";  //Pad
 
-Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_PLAY_BUZZER_NOTE_MESSAGE0 ='播放音調 %1';
 
 Blockly.Msg.Carbit_init_MESSAGE0 = 'CarBit初始化';
 Blockly.Msg.Carbit_init_TOOLTIP = '';
-Blockly.Msg.Carbit_init_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_init_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 
 Blockly.Msg.Carbit_setLeftMotor_MESSAGE0 = '設置 B2 電機速度 %1';
 Blockly.Msg.Carbit_setLeftMotor_TOOLTIP = '範圍:-100~100';
-Blockly.Msg.Carbit_setLeftMotor_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_setLeftMotor_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 
 Blockly.Msg.Carbit_setRightMotor_MESSAGE0 = '設置 B1 電機速度 %1';
 Blockly.Msg.Carbit_setRightMotor_TOOLTIP = '範圍:-100~100';
-Blockly.Msg.Carbit_setRightMotor_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_setRightMotor_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 
-Blockly.Msg.Carbit_analog_light_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_analog_light_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_analog_light_TOOLTIP = 'Q3對應Pin1,Q4對應Pin2';
 Blockly.Msg.Carbit_analog_light_MESSAGE0 = '%1 模擬光線的值';
 
-Blockly.Msg.Carbit_Speed_U10_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_Speed_U10_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_Speed_U10_TOOLTIP = '對應U10';
 Blockly.Msg.Carbit_Speed_U10_MESSAGE0 = '左輪速度';
 
-Blockly.Msg.Carbit_Speed_U11_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_Speed_U11_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_Speed_U11_TOOLTIP = '對應U11';
 Blockly.Msg.Carbit_Speed_U11_MESSAGE0 = '右輪速度';
 
-Blockly.Msg.Carbit_Distance_HELPURL= 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_Distance_HELPURL= 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_Distance_TOOLTIP= '';
 Blockly.Msg.Carbit_Distance_MESSAGE0= '超聲波的值';
 
-Blockly.Msg.Carbit_tracking_HELPURL = 'http://wiki.labplus.hk/index.php?title=Car:bit';
+Blockly.Msg.Carbit_tracking_HELPURL = 'http://wiki.labplus.cn/index.php?title=Car:bit';
 Blockly.Msg.Carbit_tracking_TOOLTIP = '';
 Blockly.Msg.Carbit_tracking_MESSAGE0 = '循跡參數 %1 直行速度 %2 最大限速 %3 轉彎延時 %5 轉彎速度系數 %4 ';
 
-/* Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.hk/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
+/* Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_HELPURL = 'http://wiki.labplus.cn/index.php?title=%E8%9C%82%E9%B8%A3%E5%99%A8';
 Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_TOOLTIP = '';
 Blockly.Msg.LABPLUS_OFF_BUZZER_NOTE_MESSAGE0 = '蜂鳴器%1關閉音調 %2' */
 

+ 27 - 6
python/data.json

@@ -56,7 +56,7 @@
             "icon_tool_7": "Tutorial",
             "back_home": "Go to Home",
             "nav_language": "Language",
-            "close_editing":"Enable/Disable Editing",
+            "close_editing":"Disable Editing",
             "nav_devices": "Soon to launch",
             "nav_journal": "journal",
             "cloud_storage": "Cloud",
@@ -176,8 +176,15 @@
             "number_only":"Print data serial port no more than 10",
             "echart_text": "Please print data via serial monitor first",
             "get_data_cloud_event": "Getting a list of the latest events",
+            "start_speech": "Start Recording",
+            "end_speech": "End recording",
             "fullscreen": "Fullscreen",
-            "fullscreenExit": "Exit fullscreen"
+            "fullscreenExit": "Exit fullscreen",
+            "editing": "Enable Editing",
+            "copy_code": "Copy All Code",
+            "blockpy_toolbar_upload": "Upload to the cloud",
+            "blockpy_toolbar_download": "Download to local",
+            "repl_delete": "Clear all content"
         },
         "zh-hant": {
             "project": "項目",
@@ -236,7 +243,7 @@
             "nav_devices": "即將推出",
             "nav_journal": "日志",
             "nav_language": "語言設定",
-            "close_editing":"是否啟用編輯模式",
+            "close_editing":"關閉編輯模式",
             "cloud_storage": "雲端存儲",
             "local_storage": "檔案",
             "help": "幫助",
@@ -336,8 +343,15 @@
             "number_only":"打贏數據串口不超過10個",
             "echart_text": "請先設定在序列埠中打印資料",
             "get_data_cloud_event": "正在獲取最新的事件列表",
+            "start_speech": "開始錄音",
+            "end_speech": "結束錄音",
             "fullscreen": "全屏",
-            "fullscreenExit": "退出全屏"
+            "fullscreenExit": "退出全屏",
+            "editing":"啟用編輯模式",
+            "copy_code": "複製所有代碼",
+            "blockpy_toolbar_upload": "上傳到雲端",
+            "blockpy_toolbar_download": "下載到本地",
+            "repl_delete": "清除所有內容"
         },
         "zh-hans": {
             "project": "项目",
@@ -397,7 +411,7 @@
             "nav_devices": "即将推出",
             "nav_journal": "日誌",
             "nav_language": "语言设定",
-            "close_editing":"是否启用编辑模式",
+            "close_editing":"关闭编辑模式",
             "cloud_storage": "云端存储",
             "local_storage": "文件",
             "Connect": "连接",
@@ -507,8 +521,15 @@
             "number_only":"打印数据串口打印不超过10个",
             "echart_text": "请先设置在串口中打印数据",
             "get_data_cloud_event": "正在获取最新的事件列表",
+            "start_speech": "开始录音",
+            "end_speech": "结束录音",
             "fullscreen": "全屏",
-            "fullscreenExit": "退出全屏"
+            "fullscreenExit": "退出全屏",
+            "editing": "启用编辑模式",
+            "copy_code": "复制所有代码",
+            "blockpy_toolbar_upload": "上传到云端",
+            "blockpy_toolbar_download": "下载到本地",
+            "repl_delete": "清除所有内容"
         }
     },
     "examples": {

+ 1 - 0
python/dist/index.dev.js

@@ -408,6 +408,7 @@ function fanyi() {
   $('.ModeBox ul')[0].children[8].innerHTML = Ardublockly.LOCALISED_TEXT.select_ldliv;
   $('.ModeBox ul')[0].children[9].innerHTML = Ardublockly.LOCALISED_TEXT.select_line;
   $('.ModeBox ul')[0].children[10].innerHTML = Ardublockly.LOCALISED_TEXT.select_bccs;
+
   $('.ModeBox')[0].children[1].children[0].innerHTML = Ardublockly.LOCALISED_TEXT.select_imefc;
   $('.ModeBox ul')[1].children[0].innerHTML = Ardublockly.LOCALISED_TEXT.select_uls;
   $('.ModeBox ul')[1].children[1].innerHTML = Ardublockly.LOCALISED_TEXT.select_umdm;

+ 6 - 6
python/index.html

@@ -76,7 +76,7 @@
     <script type="text/javascript" src="blockly/generators/python/mainwifi.js"></script>
     <script type="text/javascript" src="blockly/blocks/python/screen.js"></script>
     <script type="text/javascript" src="blockly/generators/python/screen.js"></script>
-    <script type="text/javascript" src="/blockly/msg/index.js"></script>
+    <script type="text/javascript" src="blockly/msg/index.js"></script>
     <script type="text/javascript" src="src/blockly/FileSaver.js"></script>
     <script type="text/javascript" src="src/blockly/term.js"></script>
     <script type="text/javascript" src="src/blockly/web.js"></script>
@@ -182,7 +182,7 @@
                         <a id="nav_language" class='dropdown-button lang_resize' data-activates='languages'
                             style="position:relative;padding: 0 25px;">
                             <span class="translatable_language" style="display: none;">Language</span>
-                            <img class="left nav-icon" src="/images/language.png" style="width: 30px;height: 50px;">
+                            <img class="left nav-icon" src="./images/language.png" style="width: 30px;height: 50px;">
                             <i class="down" style="position: relative;top: 30px;left: 2px;float: right;"></i>
                         </a>
                         <ul id='languages' class='dropdown-content active'>
@@ -684,7 +684,7 @@
                         <i class="material-icons" style="margin-left:5px;cursor: pointer;display: none;">share</i>
                     </li>
                     <i id="workspace_screenshot" style="margin-left:5px;cursor: pointer;">
-                        <img src="/images/screenshot.png" style="width: 40px;height: 35px;margin:15px;" />
+                        <img src="./images/screenshot.png" style="width: 40px;height: 35px;margin:15px;" />
                     </i>
                     <i id="button_delete" class="material-icons sketch_name_icon right"
                         style="margin-left:5px;cursor: pointer;display: none;">delete</i>
@@ -1163,9 +1163,9 @@
                                         <div class="col s6" style="float: right;">
                                             <div style="float: right;margin-top: 15px;">
                                                 <div style="display: inline-block;vertical-align: middle;">
-                                                    <img id="runSuccess" src="/images/success.png"
+                                                    <img id="runSuccess" src="./images/success.png"
                                                         style="display: none;" />
-                                                    <img id="runFail" src="/images/fail.png" style="display: none;" />
+                                                    <img id="runFail" src="./images/fail.png" style="display: none;" />
                                                 </div>
                                                 <div style="display: inline-block;">
                                                     <span id="statusMsg"></span>
@@ -2723,7 +2723,7 @@
         <div class="modal-footer" style="display:none;">
             <a id="modal_logout_btn" class="waves-effect btn-flat blue">
                 <span class="translatable_signout">Sign Out</span>
-                <img class="xuanhuan svgImg" src="/images/loading.svg" alt="">
+                <img class="xuanhuan svgImg" src="./images/loading.svg" alt="">
             </a>
             <a id="modal_cococloud_btn" href="//cocorobo.cn/cloud" target="_black"
                 class="waves-effect btn-flat blue"><span class="translatable_cococloud">Go to CocoCloud</span></a>

+ 14 - 7
python/materialize/js/materialize.js

@@ -6052,14 +6052,21 @@ if (Vel) {
         offsetY = 40;
       }
 
-      $this.addClass('active');
-      $this.find('ul .btn-floating').velocity({ scaleY: ".4", scaleX: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px' }, { duration: 0 });
+      if ($this.find("div").length > 0) {
+
+        $this.find("div")[0].style.display = "block";
+      }
+      else {
+        $this.addClass('active');
+        $this.find('ul .btn-floating').velocity({ scaleY: ".4", scaleX: ".4", translateY: offsetY + 'px', translateX: offsetX + 'px' }, { duration: 0 });
+
+        var time = 0;
+        $this.find('ul .btn-floating').reverse().each(function () {
+          $(this).velocity({ opacity: "1", scaleX: "1", scaleY: "1", translateY: "0", translateX: '0' }, { duration: 80, delay: time });
+          time += 40;
+        });
+      }
 
-      var time = 0;
-      $this.find('ul .btn-floating').reverse().each(function () {
-        $(this).velocity({ opacity: "1", scaleX: "1", scaleY: "1", translateY: "0", translateX: '0' }, { duration: 80, delay: time });
-        time += 40;
-      });
     }
   };
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/msg/dist/en.dev.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/msg/dist/en.prod.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/msg/dist/zh-hans.dev.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/msg/dist/zh-hans.prod.js


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 0 - 0
python/msg/dist/zh-hant.prod.js


+ 20 - 22
python/msg/en.js

@@ -40,18 +40,15 @@ Ardublockly.LOCALISED_TEXT = {
     localimport: "Import",
     localexport: "Export",
     localStorageImport: "Import Project",
-    ImportTooltip: "Select your project file(*.xml) and import it to the current workspace.Warning:will replace current blocks",
-    ImportPyTooltip: "Select your project file(*.py) and import it to the current workspace.Warning:will replace current codes",
+    ImportTooltip: "Select your project file(*.xml) and import it to the current workspace.Warning:will replace current blocks)",
     import: "Import",
     export: "Export",
     ImportContent: "Click to choose a file from your computer",
     localStorageExport: "Export Project",
     ExportTooltip: "Export current project blocks and save it your computer,so you can open it next time when you need it",
-    ExportPyTooltip: "Export current project codes and save it your computer,so you can open it next time when you need it",
     exportFile: "Project File",
     exportSnap: "Snapshot",
     ExportFileContent: "Will export as an *xml file.<br>for you to continuing code nextime",
-    ExportPyFileContent: "Will export as an *py file.<br>for you to continuing code nextime",
     ExportSnapContent: "Will export to a *png picture.<br>for your reference",
     cloudStorageTitle: "Cloud Storage",
     cloudFileOpen: "Open",
@@ -112,7 +109,6 @@ Ardublockly.LOCALISED_TEXT = {
         "Are you sure you want to proceed?",
     loadBlockBody: "Loading the block code... Please wait.",
     discardBlocksTitle: "Delete blocks?",
-    discardAllCode: "Delete All Python Codes?",
     discardBlocksBody: "There are %1 blocks on the workspace.<br>" +
         "Are you sure you want to delete them?",
     invalidXmlTitle: "Invalid XML",
@@ -121,7 +117,6 @@ Ardublockly.LOCALISED_TEXT = {
     ErrorBlockBody: "The XML file has some kinds of wrong blocks which were not used any more. We have deleted it automatically for you, please review your code carefully",
     ErrorFileDragTitle: "Invalid File",
     ErrorFileDragBody: "The file you selected should be the format of XML。Please review the file your choose",
-    ErrorPyDragBody: "The file you selected should be the format of py。Please review the file your choose",
     invalidNameTitle: "Invalid Name",
     invalidFileName: "The illegal character exist,and Chinese character is not support now, please rename it! <br>Illegal character include ~!@#$%^&*()+<>?.:\"{},]",
     invalidFileName1: "The filename shouldn't be start with \"-\" or \"_\",please rename it.",
@@ -143,7 +138,7 @@ Ardublockly.LOCALISED_TEXT = {
     cancel: "Cancel",
 
     /* Arduino Source Code Panel */
-    pythonSourceCode: "Python Source Code",
+    pythonSourceCode: "Python Code",
     blocksXml: "Upload Area",
 
     /* Serial Monitor Panel */
@@ -246,6 +241,8 @@ Ardublockly.LOCALISED_TEXT = {
     EFNI: "NB-IoT",
     EFBluetooth: "Bluetooth",
 
+    Pedometer: "Pedometer",
+
     // title
     basis_button: "Button",
     basis_led: "LED lamp",
@@ -438,6 +435,7 @@ Ardublockly.LOCALISED_TEXT = {
     posenetRecognition: "Posenet Recognition",
 
     // speech
+    speech_recognition: "Start Recording",
     speechDemoTitle: "Speech Recognition",
     speechTip: "Voice recognition for English, Cantonese & Mandarin.",
     speech_language_select: "Select a language to recognize: ",
@@ -551,25 +549,25 @@ Ardublockly.LOCALISED_TEXT = {
     ai_tph: "automatic transmission part Ⅲ(HK_trafficsigns)",
 
 
-    artificial_intelligence_textbook_program:"AI textbook program",
+    artificial_intelligence_textbook_program: "AI textbook program",
 
-    third_grade:"the third grade",
-    recorded_voice_command:"Recorded voice command",
-    voice_recognition_lamp_stand:"Voice recognition lamp stand",
+    third_grade: "the third grade",
+    recorded_voice_command: "Recorded voice command",
+    voice_recognition_lamp_stand: "Voice recognition lamp stand",
 
-    fifth_grade:"the fifth grade",
-    intelligent_curtain:"Intelligent curtain",
-    fruit_picking_robot:"Fruit picking robot",
+    fifth_grade: "the fifth grade",
+    intelligent_curtain: "Intelligent curtain",
+    fruit_picking_robot: "Fruit picking robot",
 
-    sixth_grade:"the sixth grade",
-    intelligent_traffic_lights:"Intelligent traffic lights",
-    seeing_eye_necklace:"Seeing-eye necklace",
+    sixth_grade: "the sixth grade",
+    intelligent_traffic_lights: "Intelligent traffic lights",
+    seeing_eye_necklace: "Seeing-eye necklace",
 
-    seventh_grade:"the seventh grade",
-    face_recognition_electronic_police:"Face recognition electronic police",
+    seventh_grade: "the seventh grade",
+    face_recognition_electronic_police: "Face recognition electronic police",
 
-    eighth_grade:"the eighth grade",
-    payment_platform:"Payment platform",
+    eighth_grade: "the eighth grade",
+    payment_platform: "Payment platform",
 
 
     uploadFiles: "Upload",
@@ -616,7 +614,7 @@ Ardublockly.LOCALISED_TEXT = {
     select_ktsedti: "key to send environmental data to IFTTT",
     select_btoldalua: "button to obtain lighting data and light up according to conditions",
     select_tsedtc: "timely sending environmental data to CocoCloud",
-    select_toedaluatc:"timely obtain environmental data and light up according to condition",
+    select_toedaluatc: "timely obtain environmental data and light up according to condition",
     select_ewhadtnocd: "establish WiFi hotspot and display the number of connected devices",
     select_ledss: "LAN environment data storage-server side",
     select_ledac: "LAN Environment Data Acquisition-Client",

+ 6 - 7
python/msg/zh-hans.js

@@ -49,17 +49,14 @@ Ardublockly.LOCALISED_TEXT = {
     cloudFileUpdate: "更新",
     localStorageImport: "导入项目",
     ImportTooltip: "选择你的项目文件(*.xml)并且导入到工作区.警告:将会替换当前积木",
-    ImportPyTooltip: "选择你的项目文件(*.py)并且导入到工作区.警告:将会替换当前代码",
     import: "导入",
     export: "导出",
     ImportContent: "点击从你的电脑选择文件",
     localStorageExport: "导出项目",
     ExportTooltip: "导出当前项目积木并且保存到你的电脑,当你需要的时候可以再次打开它",
-    ExportPyTooltip: "导出当前项目代码并且保存到你的电脑,当你需要的时候可以再次打开它",
     exportFile: "导出项目文件",
     exportSnap: "导出快照",
     ExportFileContent: "导出成XML文件,便于下次继续编程",
-    ExportPyFileContent: "导出成py文件,便于下次继续编程",
     ExportSnapContent: "导出成PNG图片,便于参考",
     cloudStorageTitle: "云端存储",
     help_board: "帮助",
@@ -107,7 +104,6 @@ Ardublockly.LOCALISED_TEXT = {
     loadNewBlocksBody: "尝试加载新的 XML 文件将会把现有的编程模块清除,确定要继续吗?",
     loadBlockBody: "积木程序正在加载中,请稍候…",
     discardBlocksTitle: "删除所有编程模块?",
-    discardAllCode: "删除所有的python代码?",
     discardBlocksBody: "项目空间里还有 %1 个编程模块,<br>" +
         "确认要删除他们吗?",
     invalidXmlTitle: "无效的 XML 代码",
@@ -116,7 +112,6 @@ Ardublockly.LOCALISED_TEXT = {
     ErrorBlockBody: "该段 XML 代码中含有一个或多个已经不再使用的错误积木,继续加载该类积木会导致出错。我们已经自动替您删除了错误积木,请重新检查您的积木代码",
     ErrorFileDragTitle: "错误文件类型",
     ErrorFileDragBody: "您选择的文件格式应该为XML,请重新检查您的文件",
-    ErrorPyDragBody: "您选择的文件格式应该为py,请重新检查您的文件",
     invalidNameTitle: "无效命名",
     invalidFileName: "文件命名出现非法字符,且暂不支持中文命名,请重新命名. <br>非法字符包括 ~!@#$%^&*()+<>?.:\"{},]",
     invalidFileName1: "文件名不应该以 \"-\" 或者\"_\"开头,请重新命名!",
@@ -140,7 +135,7 @@ Ardublockly.LOCALISED_TEXT = {
     return: "确认",
 
     /* Arduino Source Code Panel */
-    pythonSourceCode: "Python代码",
+    pythonSourceCode: "Python代码",
     blocksXml: "上传区",
 
     /* Serial Monitor Panel */
@@ -216,6 +211,8 @@ Ardublockly.LOCALISED_TEXT = {
     catAIWifi: "Wi-Fi",
     catAISpeaker: "扬声器",
 
+    Pedometer:"计步器",
+
     basis_button: "按钮",
     basis_led: "LED灯",
     basis_system: "系统",
@@ -611,6 +608,7 @@ Ardublockly.LOCALISED_TEXT = {
     eighth_grade:"八年级",
     payment_platform:"支付台",
 
+
     uploadFiles: "上传",
     runCode: "运行",
     resetDevice: "重启设备",
@@ -658,7 +656,7 @@ Ardublockly.LOCALISED_TEXT = {
     select_wrcbmr: "模块间进行 WebSocket 实时通信 - 接收端",
     select_snt: "同步网络时间",
     select_dwsdat: "数字手表显示实时时间",
-    
+
 
     select_imefc: "IoT 模块扩展功能案例",
     select_uls: "使用 LED 灯屏",
@@ -790,6 +788,7 @@ Ardublockly.LOCALISED_TEXT = {
     device_no_connect: "硬件(未连接)",
     device_connect: "硬件(正常连接)",
 
+
     "EPER": "不允许操作",
     "ENOEN": "没有这样的文件或目录",
     "ESRC": "没有这样的过程",

+ 21 - 23
python/msg/zh-hant.js

@@ -50,17 +50,14 @@ Ardublockly.LOCALISED_TEXT = {
     cloudFileUpdate: "更新",
     localStorageImport: "導入項目",
     ImportTooltip: "選擇你的項目檔案(*.xml)并且導入到工作區.警告:將會替換當前的積木",
-    ImportPyTooltip: "選擇你的項目檔案(*.py)并且導入到工作區.警告:將會替換當前的代碼",
     import: "導入",
     export: "導出",
     ImportContent: "点击从你的电脑选择檔案",
     localStorageExport: "導出項目",
     ExportTooltip: "導出當前項目積木并且保存到你的電腦,當你需要的時候你可以再次打開它",
-    ExportPyTooltip: "導出當前項目代碼并且保存到你的電腦,當你需要的時候你可以再次打開它",
     exportFile: "導出項目檔案",
     exportSnap: "導出快照",
     ExportFileContent: "導出成XML檔案,便於你的下次繼續編程",
-    ExportPyFileContent: "導出成py檔案,便於你的下次繼續編程",
     ExportSnapContent: "導出成PNG圖片,便於參考",
     cloudStorageTitle: "雲端存儲",
     help_board: "幫助",
@@ -108,7 +105,6 @@ Ardublockly.LOCALISED_TEXT = {
     loadNewBlocksBody: "嘗試加載新的 XML 檔案將會把現有的編程模組清除,確定要繼續嗎?",
     loadBlockBody: "積木程序正在加載中,請稍候…",
     discardBlocksTitle: "刪除所有編程模組?",
-    discardAllCode: "刪除所有的python代碼?",
     discardBlocksBody: "項目空間裏還有 %1 個編程模組,<br>" +
         "確認要刪除他們嗎?",
     invalidXmlTitle: "無效的 XML 檔案",
@@ -117,7 +113,6 @@ Ardublockly.LOCALISED_TEXT = {
     ErrorBlockBody: "該段 XML 檔案中含有一個或者多個已經不再使用的錯誤積木,繼續加载該類積木將會導致錯誤。我們已經自動幫您清除該類積木,請重新檢查您的積木程式碼",
     ErrorFileDragTitle: "錯誤檔案格式",
     ErrorFileDragBody: "您選擇的檔案格式應該爲XML,請重新檢查您的檔案",
-    ErrorPyDragBody: "您選擇的檔案格式應該爲py,請重新檢查您的檔案",
     invalidNameTitle: "無效命名",
     invalidFileName: "檔案名中出現非法命名,且暫不支持中文命名,請重新命名. <br>非法字符包括 ~!@#$%^&*()+<>?.:\"{},]",
     invalidFileName1: "檔案名不應以 \"-\" 或者\"_\"開頭,請重新命名!",
@@ -141,7 +136,7 @@ Ardublockly.LOCALISED_TEXT = {
     return: "確認",
 
     /* Arduino Source Code Panel */
-    pythonSourceCode: "Python 程式碼",
+    pythonSourceCode: "Python程式碼",
     blocksXml: "上載區",
 
     /* Serial Monitor Panel */
@@ -217,6 +212,8 @@ Ardublockly.LOCALISED_TEXT = {
     catAIWifi: "Wi-Fi",
     catAISpeaker: "喇叭",
 
+    Pedometer: "計步器",
+
     basis_button: "按鈕",
     basis_led: "LED燈",
     basis_system: "系統",
@@ -487,7 +484,7 @@ Ardublockly.LOCALISED_TEXT = {
     emotion_result_expression_title: "表情:",
     emotion_result_default: "未識別到任何結果",
 
-    speech_button: "開始錄音",
+    speech_recognition: "開始錄音",
     speechDemoTitle: "語音辨識",
     speechTip: "針對英語、粵語及普通話的語音識別,並轉換為字串",
     speech_language_select: "選擇你要辨識的語言:",
@@ -592,25 +589,26 @@ Ardublockly.LOCALISED_TEXT = {
     ai_tpl2: "第二場-巡線(單線-靠左行駛))",
     ai_tph: "第三場-自動駕駛-香港標識",
 
-    artificial_intelligence_textbook_program:"人工智慧教材程序",
+    artificial_intelligence_textbook_program: "人工智慧教材程序",
+
+    third_grade: "三年級",
+    recorded_voice_command: "錄製語音指令",
+    voice_recognition_lamp_stand: "語音識別檯燈",
 
-    third_grade:"三年級",
-    recorded_voice_command:"錄製語音指令",
-    voice_recognition_lamp_stand:"語音識別檯燈",
+    fifth_grade: "五年級",
+    intelligent_curtain: "智慧窗簾",
+    fruit_picking_robot: "水果採摘機器人",
 
-    fifth_grade:"五年級",
-    intelligent_curtain:"智慧窗簾",
-    fruit_picking_robot:"水果採摘機器人",
+    sixth_grade: "六年級",
+    intelligent_traffic_lights: "智慧交通信號燈",
+    seeing_eye_necklace: "導盲項鍊",
 
-    sixth_grade:"六年級",
-    intelligent_traffic_lights:"智慧交通信號燈",
-    seeing_eye_necklace:"導盲項鍊",
+    seventh_grade: "七年級",
+    face_recognition_electronic_police: "人臉辨識電子警察",
 
-    seventh_grade:"七年級",
-    face_recognition_electronic_police:"人臉辨識電子警察",
+    eighth_grade: "八年級",
+    payment_platform: "支付臺",
 
-    eighth_grade:"八年級",
-    payment_platform:"支付臺",
 
 
     uploadFiles: "上載",
@@ -672,7 +670,7 @@ Ardublockly.LOCALISED_TEXT = {
     select_ktsedti: "按鍵發送環境數據至 IFTTT",
     select_btoldalua: "按鍵獲取光照數據並根據條件亮燈",
     select_tsedtc: "定時發送環境數據至 CocoCloud",
-    select_toedaluatc:"定時接收環境數據並根據條件亮燈",
+    select_toedaluatc: "定時接收環境數據並根據條件亮燈",
     select_ewhadtnocd: "建立 WiFi 熱點並顯示連接設備數量",
     select_ledss: "局域網環境數據存儲 - 服務器端",
     select_ledac: "局域網環境數據獲取 - 客戶端",
@@ -684,7 +682,7 @@ Ardublockly.LOCALISED_TEXT = {
     select_snt: "同步網絡時間",
     select_dwsdat: "數字手錶顯示實時時間",
 
-    
+
     select_CSDAOD: "連接熱點及HTTP用戶端",
     select_ISED: "IFTTT發送環境數據",
     select_ITE: "IFTTT觸發事件",

+ 5 - 6
python/src/blockly/account.js

@@ -1036,21 +1036,20 @@ $(window).one("load", () => {
     appendIframe("before_login");
     appendIframe("cloud_askLogin");
   }
-  // api.cocorobo.cn/blockx/filenameid
-  let arr = window.location.search.split('&')[1];
-  if (arr) {
-    $.ajax(`${CCB.base_url}blockx/${arr.split('=')[1]}`, {
+  // api.cocorobo.hk/blockx/filenameid
+  var _id = U.UF.C.queryString("id") || U.UF.C.queryString("Qd")
+  if (_id) {
+    $.ajax(`${CCB.base_url}blockx/${_id}`, {
       type: "GET",
       xhrFields: {
         withCredentials: true
       },
+      //data: { userId: CCB.UserInfo.data.username },
       success: x => {
         loadCloudXmlFile(x.xml, x.filename)
-
       }
     });
   }
-
   // addObserver("Teachable_Machine")
 });
 

+ 3 - 5
python/src/blockly/ardublockly.js

@@ -52,7 +52,7 @@ Ardublockly.bindActionFunctions = function () {
     //     $("#Storage_import_modal").modal("close");
     // });
     $('#modal_import_btn').click(e => {
-        $('#fileImport > input').click();
+        $('#xmlFileImport > input').click();
         $("#Storage_import_modal").modal("close");
     });
     // Ardublockly.bindClick_('modal_exportFileBtn', () => {
@@ -60,8 +60,7 @@ Ardublockly.bindActionFunctions = function () {
     //     $("#Storage_export_modal").modal("close");
     // });
     $('#modal_exportFileBtn').click(() => {
-        // downloadXml();
-        $('#button_save').click();
+        downloadXml();
         $("#Storage_export_modal").modal("close");
     });
     Ardublockly.bindClick_('button_delete', () => {
@@ -675,9 +674,8 @@ function downloadXml() {
     _xml.setAttribute("type", $("#mode")[0].selectedIndex == 1 ? "AI" : "IoT")
     var data = Blockly.Xml.domToPrettyText(_xml);
     let filename = $('#sketch_name').val();
-    let reg = new RegExp(/[^a-z0-9]/)
     // Make safe
-    filename = reg.test(filename) ? filename : filename.replace(/[^a-z0-9]/gi, '_').toLowerCase();
+    filename = filename.replace(/[^a-z0-9]/gi, '_').toLowerCase();
     filename = filename + '.xml'
     var blob = new Blob([data], { type: 'text/plain;charset=utf-8' });
     // if (window.navigator.msSaveOrOpenBlob) {

+ 6 - 3
python/src/blockly/ardublockly_blockly.js

@@ -202,10 +202,13 @@ Ardublockly.loadLocalStorageBlocks = function () {
 Ardublockly.discardAllBlocks = function () {
     var blockCount = blockpy.components.editor.blockly.getAllBlocks().length;
     var is_delete = false;
-    if (blockCount >= 1) {
+    if (blockCount == 1) {
+        blockpy.components.editor.blockly.clear();
+        Ardublockly.renderContent();
+    } else if (blockCount > 1) {
         Ardublockly.alertMessage(
-            Ardublockly.getLocalStr('discardAllCode'),
-            '',
+            Ardublockly.getLocalStr('discardBlocksTitle'),
+            Ardublockly.getLocalStr('discardBlocksBody').replace('%1', blockCount),
             true,
             function () {
                 blockpy.components.editor.blockly.clear();

+ 4 - 4
python/src/blockly/ardublockly_design.js

@@ -109,7 +109,7 @@ Ardublockly.materializeJsInit = function () {
             CCB.UserInfo.boards = CCB.boards[0];
             $("#TM_id").css("height", $("#Teachable_Machine")[0].offsetHeight)
             // document.getElementById("TM_id").contentWindow.postMessage("startCam", "*")
-            appendTMIframe("TM_iframe", function () { document.getElementById("TM_id").contentWindow.postMessage(CCB.UserInfo, "*"); }, "//beta.ai-demos.cocorobo.cn/teachable-machine-2/public/");
+            appendTMIframe("TM_iframe", function () { document.getElementById("TM_id").contentWindow.postMessage(CCB.UserInfo, "*"); }, "//ai-demos.cocorobo.cn/teachable-machine-2/public/");
             let loading = document.getElementById('TM_id');
             loading.onload = () => {
                 document.getElementById("TM_id").contentWindow.postMessage(CCB.UserInfo, "*")
@@ -201,7 +201,7 @@ Ardublockly.materializeJsInit = function () {
             CCB.UserInfo.boards = CCB.boards[0];
             $("#TM_posenet_id").css("height", $("#Teachable_Machine_ponsenet")[0].offsetHeight)
             // document.getElementById("TM_id").contentWindow.postMessage("startCam", "*")
-            let url = "//beta.ai-demos.cocorobo.cn/teachable-machine-pose-recognition-2/public/"
+            let url = "//ai-demos.cocorobo.cn/teachable-machine-pose-recognition-2/public/"
             appendTMPosenetIframe("TM_posenet_iframe", function () { document.getElementById("TM_posenet_id").contentWindow.postMessage(CCB.UserInfo, "*"); }, url);
             let loading = document.getElementById('TM_posenet_id');
             loading.onload = () => {
@@ -464,7 +464,7 @@ Ardublockly.materializeJsInit = function () {
             $("#TM_id_object").css("height", $("#Object_recog_modal")[0].offsetHeight)
             CCB.UserInfo.state = "startCam"
             CCB.UserInfo.url = lang
-            appendTMIframes("TM_iframe_object", function () { document.getElementById("TM_id_object").contentWindow.postMessage(CCB.UserInfo, "*"); }, "//beta.ai-demos.cocorobo.cn/object-detection-2/");
+            appendTMIframes("TM_iframe_object", function () { document.getElementById("TM_id_object").contentWindow.postMessage(CCB.UserInfo, "*"); }, "//ai-demos.cocorobo.cn/object-detection-2/");
             let loading = document.getElementById('TM_id_object');
             loading.onload = () => {
                 document.getElementById("TM_id_object").contentWindow.postMessage(CCB.UserInfo, "*")
@@ -551,7 +551,7 @@ Ardublockly.materializeJsInit = function () {
             CCB.UserInfo.state = "startCam";
             CCB.UserInfo.url = lang;
             CCB.UserInfo.boards = CCB.boards[0];
-            appendTMIframePosenet("TM_iframe_posenet", function () { document.getElementById("TM_id_posenet").contentWindow.postMessage(CCB.UserInfo, "*"); }, "//beta.ai-demos.cocorobo.cn/posenet-2/demos/dist/");
+            appendTMIframePosenet("TM_iframe_posenet", function () { document.getElementById("TM_id_posenet").contentWindow.postMessage(CCB.UserInfo, "*"); }, "//ai-demos.cocorobo.cn/posenet-2/demos/dist/");
             let loading = document.getElementById('TM_id_posenet');
             loading.onload = () => {
                 document.getElementById("TM_id_posenet").contentWindow.postMessage(CCB.UserInfo, "*")

+ 8 - 3
python/src/blockly/cocoblockly.js

@@ -582,7 +582,7 @@ function disableCompileUploadBtn() {
  * @returns {void} void
  */
 function progress_text(msg, percent) {
-     // percent != "0%" ?
+    // percent != "0%" ?
     //     $('#status_bar').replaceWith(`<span id="status_bar"><span id="status_txt">${msg}&nbsp&nbsp&nbsp&nbsp</span><span>${percent}</span></span>`) :
     //     $('#status_bar').replaceWith(`<span id="status_bar"><span id="status_txt">${msg}&nbsp&nbsp&nbsp&nbsp</span><span></span></span>`);
 
@@ -1401,7 +1401,7 @@ async function cocoblockly() {
         { selector: "#discnt_icon", delay: 50, position: "top", tooltip: CCB.str_group.disconnect_tooltip },
         { selector: "#code-copy", delay: 500, position: "bottom", tooltip: CCB.str_group.code_copy_tooltip },
         { selector: '#code-download', delay: 500, position: 'bottom', tooltip: CCB.str_group.code_download_tooltip },
-        // { selector: '#plugin_download', delay: 1000, position: 'bottom', tooltip: CCB.str_group.plugin_download_tooltip },
+        // { selector: '#plugin_download', delay: 1000, position: 'right', tooltip: CCB.str_group.plugin_download_tooltip },
         { selector: '#uploader>.code-header>a.upload_instruction', delay: 500, position: 'top', tooltip: CCB.str_group.upload_instruction_tooltip },
         { selector: '#icon-tool > li:first-child', delay: 1000, position: 'left', tooltip: CCB.str_group.icon_tool_1 },
         { selector: '#icon-tool>li:nth-child(2)', delay: 1000, position: 'left', tooltip: CCB.str_group.icon_tool_2 },
@@ -1429,10 +1429,15 @@ async function cocoblockly() {
         { selector: '.cloudBtn-delete', delay: 500, position: 'top', tooltip: CCB.str_group.cloudFileDeleteMsg },
         { selector: '#runCode', delay: 500, position: 'top', tooltip: CCB.str_group.runCode },
         { selector: '#uploadFiles', delay: 500, position: 'top', tooltip: CCB.str_group.uploadFiles },
-        { selector: '#editDiv', delay: 200, position: 'bottom', tooltip: CCB.str_group.close_editing },
+        // { selector: '#editDiv', delay: 200, position: 'bottom', tooltip: CCB.str_group.close_editing },
         { selector: '#cloudBtn-shares', delay: 500, position: 'bottom', tooltip: CCB.str_group.cloudShares },
         { selector: '#fullscreenIcon', delay: 500, position: 'bottom', tooltip: CCB.str_group.fullscreen },
         { selector: '#fullscreenExitIcon', delay: 500, position: 'bottom', tooltip: CCB.str_group.fullscreenExit },
+        { selector: '#edit-off', delay: 500, position: 'bottom', tooltip: CCB.str_group.editing },
+        { selector: '#edit-on', delay: 500, position: 'bottom', tooltip: CCB.str_group.close_editing },
+        { selector: '#copy_code_view', delay: 500, position: 'bottom', tooltip: CCB.str_group.copy_code },
+        { selector: '#blockpy-toolbar-upload', delay: 500, position: 'bottom', tooltip: CCB.str_group.blockpy_toolbar_upload },
+        { selector: '#blockpy-toolbar-download', delay: 500, position: 'bottom', tooltip: CCB.str_group.blockpy_toolbar_download },
         { selector: '#repl_delete', delay: 500, position: 'bottom', tooltip: CCB.str_group.repl_delete },
         { selector: '#refresh', delay: 500, position: 'bottom', tooltip: CCB.str_group.reset_device }
     ];

+ 1 - 1
python/src/blockly/web.js

@@ -89,7 +89,7 @@ sendstring = function () {
                 $("#refresh-disabled").css("display","none");
             },
             error: function (error) {
-                 // $('#resetDevice')[0].innerHTML = CCB.str_group.reset_device;
+                // $('#resetDevice')[0].innerHTML = CCB.str_group.reset_device;
                 // $('#resetDevice')[0].style.backgroundColor = "#508cf0";
                 $("#refresh").css("display","block");
                 $("#refresh-press").css("display","none");

+ 2 - 2
python/src/blockpy.css

@@ -188,7 +188,7 @@ body {
   width: 100%;
   height: 100%;
   display: grid;
-  grid-template-rows: 64px 1fr 0px;
+  grid-template-rows: 64px auto;
 }
 
 #container,
@@ -300,7 +300,7 @@ body {
 }
 
 #blockpy-content > div {
-  height: calc(100vh - 111px);
+  height: calc(100vh - 64px);
 }
 
 #blockpy-content > div:first-child {

+ 2 - 66
python/src/editor.js

@@ -3595,8 +3595,8 @@ BlockPyEditor.CATEGORY_MAP = {
         */
 
         '<category id="catModels" name="Models" colour="#ee783a">' +//模型
-        '<block type="ai_model_allinit"></block>' +
         '<label id="basis_number_recognition" text="Basis number recognition" web-class="myLabelStyle" style="font-size:20px;"></label>' +
+        '<block type="ai_model_allinit"></block>' +
         '<block type="ai_model_index_mnist"></block>' +
         '<label id="basis_object_recognition" text="Basis object recognition" web-class="myLabelStyle" style="font-size:20px;"></label>' +
         '<block type="ai_model_get"></block>' +
@@ -4533,68 +4533,11 @@ BlockPyEditor.CATEGORY_MAP = {
         '<category id="catAISpeaker" name="Speaker" colour="#5f7fc1">' +
         '<block type="ai_audio_init_speaker"></block>' +
         '<block type="ai_audio_play_song_speaker">' +
-        '          <value name="volume">' +
-        '            <block type="math_number">' +
-        '              <field name="NUM">95</field>' +
-        '            </block>' +
-        '          </value>' +
-        '          <value name="path">' +
-        '            <shadow type="text">' +
-        '              <field name="TEXT">/sd/preset/songs/boot.wav</field>' +
-        '            </shadow>' +
-        '          </value>' +
-        '</block>' +
-        '<block type="ai_audio_play_song_list_loop_speaker">' +
-        '          <value name="volume">' +
-        '            <block type="math_number">' +
-        '              <field name="NUM">95</field>' +
-        '            </block>' +
-        '          </value>' +
-        '          <value name="path">' +
-        '            <shadow type="text">' +
-        '              <field name="TEXT">/sd/preset/songs/boot.wav</field>' +
-        '            </shadow>' +
-        '          </value>' +
-        '          <value name="my_list">' +
-        '            <block type="ai_audio_files_list">' +
-        '              <value name="path">' +
-        '                <shadow type="text">' +
-        '                   <field name="TEXT">/sd/preset/songs</field>' +
-        '                </shadow>' +
-        '              </value>' +
-        '            </block>' +
-        '          </value>' +
-        '          <value name="firstIndex">' +
-        '            <block type="math_number">' +
-        '              <field name="NUM">0</field>' +
-        '            </block>' +
-        '          </value>' +
-        '</block>' +
-        '<block type="ai_audio_play_song_list_random_speaker">' +
-        '          <value name="volume">' +
-        '            <block type="math_number">' +
-        '              <field name="NUM">95</field>' +
-        '            </block>' +
-        '          </value>' +
         '          <value name="path">' +
         '            <shadow type="text">' +
-        '              <field name="TEXT">/sd/preset/songs/boot.wav</field>' +
+        '              <field name="TEXT">/sd/preset/songs/luckystar.wav</field>' +
         '            </shadow>' +
         '          </value>' +
-        '          <value name="my_list">' +
-        '            <block type="ai_audio_files_list">' +
-        '              <value name="path">' +
-        '                <shadow type="text">' +
-        '                   <field name="TEXT">/sd/preset/songs</field>' +
-        '                </shadow>' +
-        '              </value>' +
-        '            </block>' +
-        '          </value>' +
-        '          <value name="firstIndex">' +
-        '            <block type="math_number">' +
-        '              <field name="NUM">0</field>' +
-        '            </block>' +
-        '          </value>' +
         '</block>' +
         '<block type="ai_audio_play_state_speaker"></block>' +
         '<block type="ai_audio_play_finish_speaker"></block>' +
@@ -4605,13 +4548,6 @@ BlockPyEditor.CATEGORY_MAP = {
         '               </shadow>' +
         '           </value>' +
         '</block>' +
-        '<block type="ai_audio_files_list">' +
-        '          <value name="path">' +
-        '            <shadow type="text">' +
-        '              <field name="TEXT">/sd/preset/songs</field>' +
-        '            </shadow>' +
-        '          </value>' +
-        '</block>' +
         '</category>' +
 
 

+ 1 - 1
python/src/python/IoT模組_開機啓動可視化菜單界面.py

@@ -62,4 +62,4 @@ for n in range(0,9,1):
     time.sleep_ms(20)
 for n in range(0,9,1):
     light[n].value(0)
-    time.sleep_ms(20)
+    time.sleep_ms(20)

+ 3 - 4
python/src/toolbar.js

@@ -150,9 +150,9 @@ BlockPyToolbar.prototype.activateToolbar = function () {
         uploadXmlButton.val("");
     });
 
-    $('#button_load').click(e => $('#fileImport > input').click());
+    $('#button_load').click(e => $('#xmlFileImport > input').click());
     $('#side_button_load').click(e => $('#xmlFileImport > input').click());
-    // $('#downloadbutton').click(downloadXml);
+    $('#downloadbutton').click(downloadXml);
 
     function downloadCode() {
         var data = main.model.programs['__main__']();
@@ -205,14 +205,13 @@ BlockPyToolbar.prototype.activateToolbar = function () {
         // }
     }
 
-    $('#downloadbutton').click(downloadCode);
 
     $("#AIYdownload").click(downloadCode);
 
     var downloadButton = this.tag.find('.blockpy-toolbar-download');
     downloadButton.click(downloadCode);
 
-    $('#button_save').click(downloadCode);
+    $('#button_save').click(downloadXml);
     $('#side_button_save').click(downloadXml);
 
     this.tag.find('.blockpy-toolbar-filename-picker label').click(function () {

+ 1 - 1
python/web.html

@@ -12,7 +12,7 @@
     <script type="text/javascript" src="libs/jquery-ui.min.js"></script>
     <script type="text/javascript" src="libs/jquery.hotkeys.js"></script>
     <script type="text/javascript" src="libs/jquery.multi-select.js"></script>
-    <script type="text/javascript" src="//beta.x.cocorobo.cn/src/blockly/web.js"></script>
+    <script type="text/javascript" src="//x.cocorobo.cn/src/blockly/web.js"></script>
 </head>
 
 <body>

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.