diff --git a/_server/blockly/LICENSE b/_server/blockly/LICENSE new file mode 100644 index 00000000..6a199298 --- /dev/null +++ b/_server/blockly/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2011 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/_server/blockly/NOTICE.md b/_server/blockly/NOTICE.md new file mode 100644 index 00000000..d485ba50 --- /dev/null +++ b/_server/blockly/NOTICE.md @@ -0,0 +1,21 @@ +# NOTICE +files +`blockly_compressed.js` +`blocks_compressed.js` +`javascript_compressed.js` +`zh-hans.js` +`media/*` +copyed from +https://github.com/google/blockly.git + + +### diff in blockly code +blocks_compressed.js +line 44 ~ 48 +```javascript +// change by zhaouv @ logic_compare output : "Boolean" -> null +colour:"%{BKY_LOGIC_HUE}",tooltip:"%{BKYCONTROLS_IF_TOOLTIP_2}",helpUrl:"%{BKY_CONTROLS_IF_HELPURL}",extensions:["controls_if_tooltip"]},{type:"logic_compare",message0:"%1 %2 %3",args0:[{type:"input_value",name:"A"},{type:"field_dropdown",name:"OP",options:[["=","EQ"],["\u2260","NEQ"],["<","LT"],["\u2264","LTE"],[">","GT"],["\u2265","GTE"]]},{type:"input_value",name:"B"}],inputsInline:!0,output:null,colour:"%{BKY_LOGIC_HUE}",helpUrl:"%{BKY_LOGIC_COMPARE_HELPURL}",extensions:["logic_compare", +// change by zhaouv @ logic_operation output,check : "Boolean" -> null +// change by zhaouv @ logic_negate output,check : "Boolean" -> null +"logic_op_tooltip"]},{type:"logic_operation",message0:"%1 %2 %3",args0:[{type:"input_value",name:"A",check:null},{type:"field_dropdown",name:"OP",options:[["%{BKY_LOGIC_OPERATION_AND}","AND"],["%{BKY_LOGIC_OPERATION_OR}","OR"]]},{type:"input_value",name:"B",check:null}],inputsInline:!0,output:null,colour:"%{BKY_LOGIC_HUE}",helpUrl:"%{BKY_LOGIC_OPERATION_HELPURL}",extensions:["logic_op_tooltip"]},{type:"logic_negate",message0:"%{BKY_LOGIC_NEGATE_TITLE}",args0:[{type:"input_value",name:"BOOL", +``` \ No newline at end of file diff --git a/_server/blockly/blockly_compressed.js b/_server/blockly/blockly_compressed.js new file mode 100644 index 00000000..75586e3d --- /dev/null +++ b/_server/blockly/blockly_compressed.js @@ -0,0 +1,1604 @@ +// Do not edit this file; automatically generated by build.py. +'use strict'; + +var $jscomp=$jscomp||{};$jscomp.scope={};var COMPILED=!0,goog=goog||{};goog.global=this;goog.isDef=function(a){return void 0!==a};goog.isString=function(a){return"string"==typeof a};goog.isBoolean=function(a){return"boolean"==typeof a};goog.isNumber=function(a){return"number"==typeof a}; +goog.exportPath_=function(a,b,c){a=a.split(".");c=c||goog.global;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&goog.isDef(b)?c[d]=b:c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}}; +goog.define=function(a,b){var c=b;COMPILED||(goog.global.CLOSURE_UNCOMPILED_DEFINES&&void 0===goog.global.CLOSURE_UNCOMPILED_DEFINES.nodeType&&Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES,a)?c=goog.global.CLOSURE_UNCOMPILED_DEFINES[a]:goog.global.CLOSURE_DEFINES&&void 0===goog.global.CLOSURE_DEFINES.nodeType&&Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES,a)&&(c=goog.global.CLOSURE_DEFINES[a]));goog.exportPath_(a,c)};goog.DEBUG=!1;goog.LOCALE="en"; +goog.TRUSTED_SITE=!0;goog.STRICT_MODE_COMPATIBLE=!1;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG;goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;goog.provide=function(a){if(goog.isInModuleLoader_())throw Error("goog.provide can not be used within a goog.module.");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace "'+a+'" already declared.');goog.constructNamespace_(a)}; +goog.constructNamespace_=function(a,b){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var c=a;(c=c.substring(0,c.lastIndexOf(".")))&&!goog.getObjectByName(c);)goog.implicitNamespaces_[c]=!0}goog.exportPath_(a,b)};goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module=function(a){if(!goog.isString(a)||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error("Invalid module identifier");if(!goog.isInModuleLoader_())throw Error("Module "+a+" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");if(goog.moduleLoaderState_.moduleName)throw Error("goog.module may only be called once per module."); +goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace "'+a+'" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};goog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a];if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.moduleLoaderState_=null; +goog.isInModuleLoader_=function(){return null!=goog.moduleLoaderState_};goog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInModuleLoader_())throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");goog.moduleLoaderState_.declareLegacyNamespace=!0}; +goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||"",Error("Importing test-only code into non-debug environment"+(a?": "+a:"."));};goog.forwardDeclare=function(a){};COMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&goog.isDefAndNotNull(goog.getObjectByName(a))},goog.implicitNamespaces_={"goog.module":!0}); +goog.getObjectByName=function(a,b){for(var c=a.split("."),d=b||goog.global,e=0;e>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid; +goog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if("object"==b||"array"==b){if(a.clone)return a.clone();b="array"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)}; +goog.bindJs_=function(a,b,c){if(!a)throw Error();if(2Number(a[1])?!1:b('(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});a("es6-impl",function(){return!0});a("es7",function(){return b("2 ** 2 == 4")});a("es8",function(){return b("async () => 1, true")});return c},goog.Transpiler.prototype.needsTranspile= +function(a){if("always"==goog.TRANSPILE)return!0;if("never"==goog.TRANSPILE)return!1;this.requiresTranspilation_||(this.requiresTranspilation_=this.createRequiresTranspilation_());if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a];throw Error("Unknown language mode: "+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b)},goog.transpiler_=new goog.Transpiler,goog.DebugLoader=function(){this.dependencies_={loadFlags:{},nameToPath:{},requires:{},visited:{}, +written:{},deferred:{}};this.oldIeWaiting_=!1;this.queuedModules_=[];this.lastNonModuleScriptIndex_=0},goog.DebugLoader.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader.prototype.earlyProcessLoad=function(a){goog.DebugLoader.IS_OLD_IE_&&this.maybeProcessDeferredDep_(a)},goog.DebugLoader.prototype.load=function(a){var b=this.getPathFromDeps_(a);if(b){var c=function(a){if(!(a in f.written||a in f.visited)){f.visited[a]=!0;if(a in f.requires)for(var b in f.requires[a])if(!g.isProvided(b))if(b in +f.nameToPath)c(f.nameToPath[b]);else throw Error("Undefined nameToPath for "+b);a in e||(e[a]=!0,d.push(a))}},d=[],e={},f=this.dependencies_,g=this;c(b);for(a=0;a\x3c/script>')},goog.DebugLoader.prototype.appendScriptSrcNode_=function(a){var b=goog.global.document,c=b.createElement("script");c.type="text/javascript";c.src=a;c.defer=!1;c.async=!1;b.head.appendChild(c)},goog.DebugLoader.prototype.writeScriptTag_=function(a,b){if(this.inHtmlDocument()){var c=goog.global.document;if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&& +"complete"==c.readyState){if(/\bdeps.js$/.test(a))return!1;throw Error('Cannot write "'+a+'" after document load');}if(void 0===b)if(goog.DebugLoader.IS_OLD_IE_){this.oldIeWaiting_=!0;var d=" onreadystatechange='goog.debugLoader_.onScriptLoad_(this, "+ ++this.lastNonModuleScriptIndex_+")' ";c.write(' + + + + + + + + + + +

+ + + +

+ +
+ +

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_server/blockly/zh-hans.js b/_server/blockly/zh-hans.js
new file mode 100644
index 00000000..d4cfbee4
--- /dev/null
+++ b/_server/blockly/zh-hans.js
@@ -0,0 +1,425 @@
+// This file was automatically generated.  Do not modify.
+
+'use strict';
+
+goog.provide('Blockly.Msg.zh.hans');
+
+goog.require('Blockly.Msg');
+
+/** @export */ Blockly.Msg.ADD_COMMENT = "添加注释";
+/** @export */ Blockly.Msg.CANNOT_DELETE_VARIABLE_PROCEDURE = "不能删除变量“%1”,因为它是功能“%2”定义的一部分";
+/** @export */ Blockly.Msg.CHANGE_VALUE_TITLE = "更改值:";
+/** @export */ Blockly.Msg.CLEAN_UP = "整理块";
+/** @export */ Blockly.Msg.COLLAPSE_ALL = "折叠块";
+/** @export */ Blockly.Msg.COLLAPSE_BLOCK = "折叠块";
+/** @export */ Blockly.Msg.COLOUR_BLEND_COLOUR1 = "颜色1";
+/** @export */ Blockly.Msg.COLOUR_BLEND_COLOUR2 = "颜色2";
+/** @export */ Blockly.Msg.COLOUR_BLEND_HELPURL = "http://meyerweb.com/eric/tools/color-blend/";  // untranslated
+/** @export */ Blockly.Msg.COLOUR_BLEND_RATIO = "比例";
+/** @export */ Blockly.Msg.COLOUR_BLEND_TITLE = "混合";
+/** @export */ Blockly.Msg.COLOUR_BLEND_TOOLTIP = "用一个给定的比率(0.0-1.0)混合两种颜色。";
+/** @export */ Blockly.Msg.COLOUR_PICKER_HELPURL = "https://zh.wikipedia.org/wiki/颜色";
+/** @export */ Blockly.Msg.COLOUR_PICKER_TOOLTIP = "从调色板中选择一种颜色。";
+/** @export */ Blockly.Msg.COLOUR_RANDOM_HELPURL = "http://randomcolour.com";  // untranslated
+/** @export */ Blockly.Msg.COLOUR_RANDOM_TITLE = "随机颜色";
+/** @export */ Blockly.Msg.COLOUR_RANDOM_TOOLTIP = "随机选择一种颜色。";
+/** @export */ Blockly.Msg.COLOUR_RGB_BLUE = "蓝色";
+/** @export */ Blockly.Msg.COLOUR_RGB_GREEN = "绿色";
+/** @export */ Blockly.Msg.COLOUR_RGB_HELPURL = "http://www.december.com/html/spec/colorper.html";  // untranslated
+/** @export */ Blockly.Msg.COLOUR_RGB_RED = "红色";
+/** @export */ Blockly.Msg.COLOUR_RGB_TITLE = "颜色";
+/** @export */ Blockly.Msg.COLOUR_RGB_TOOLTIP = "通过指定红色、绿色和蓝色的量创建一种颜色。所有的值必须在0和100之间。";
+/** @export */ Blockly.Msg.CONTROLS_FLOW_STATEMENTS_HELPURL = "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks";  // untranslated
+/** @export */ Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK = "中断循环";
+/** @export */ Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE = "继续下一次循环";
+/** @export */ Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK = "中断包含它的循环。";
+/** @export */ Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE = "跳过这个循环的剩余部分,并继续下一次迭代。";
+/** @export */ Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING = "警告:此块仅可用于在一个循环内。";
+/** @export */ Blockly.Msg.CONTROLS_FOREACH_HELPURL = "https://github.com/google/blockly/wiki/Loops#for-each";  // untranslated
+/** @export */ Blockly.Msg.CONTROLS_FOREACH_TITLE = "为每个项目 %1 在列表中 %2";
+/** @export */ Blockly.Msg.CONTROLS_FOREACH_TOOLTIP = "遍历每个列表中的项目,将变量“%1”设定到该项中,然后执行某些语句。";
+/** @export */ Blockly.Msg.CONTROLS_FOR_HELPURL = "https://github.com/google/blockly/wiki/Loops#count-with";  // untranslated
+/** @export */ Blockly.Msg.CONTROLS_FOR_TITLE = "使用 %1 从范围 %2 到 %3 每隔 %4";
+/** @export */ Blockly.Msg.CONTROLS_FOR_TOOLTIP = "从起始数到结尾数中取出变量“%1”的值,按指定的时间间隔,执行指定的块。";
+/** @export */ Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP = "在if语句块中增加一个条件。";
+/** @export */ Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP = "添加一个最终的,包括所有情况的节到if块中。";
+/** @export */ Blockly.Msg.CONTROLS_IF_HELPURL = "https://github.com/google/blockly/wiki/IfElse";  // untranslated
+/** @export */ Blockly.Msg.CONTROLS_IF_IF_TOOLTIP = "增加、删除或重新排列各节来重新配置“if”块。";
+/** @export */ Blockly.Msg.CONTROLS_IF_MSG_ELSE = "否则";
+/** @export */ Blockly.Msg.CONTROLS_IF_MSG_ELSEIF = "否则如果";
+/** @export */ Blockly.Msg.CONTROLS_IF_MSG_IF = "如果";
+/** @export */ Blockly.Msg.CONTROLS_IF_TOOLTIP_1 = "如果值为真,执行一些语句。";
+/** @export */ Blockly.Msg.CONTROLS_IF_TOOLTIP_2 = "如果值为真,则执行第一块语句。否则,则执行第二块语句。";
+/** @export */ Blockly.Msg.CONTROLS_IF_TOOLTIP_3 = "如果第一个值为真,则执行第一块的语句。否则,如果第二个值为真,则执行第二块的语句。";
+/** @export */ Blockly.Msg.CONTROLS_IF_TOOLTIP_4 = "如果第一个值为真,则执行第一块对语句。否则,如果第二个值为真,则执行语句的第二块。如果没有值为真,则执行最后一块的语句。";
+/** @export */ Blockly.Msg.CONTROLS_REPEAT_HELPURL = "https://zh.wikipedia.org/wiki/For循环";
+/** @export */ Blockly.Msg.CONTROLS_REPEAT_INPUT_DO = "执行";
+/** @export */ Blockly.Msg.CONTROLS_REPEAT_TITLE = "重复 %1 次";
+/** @export */ Blockly.Msg.CONTROLS_REPEAT_TOOLTIP = "多次执行一些语句。";
+/** @export */ Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL = "https://github.com/google/blockly/wiki/Loops#repeat";  // untranslated
+/** @export */ Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_UNTIL = "重复直到";
+/** @export */ Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_WHILE = "重复当";
+/** @export */ Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL = "只要值为假,执行一些语句。";
+/** @export */ Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE = "只要值为真,执行一些语句。";
+/** @export */ Blockly.Msg.DELETE_ALL_BLOCKS = "删除所有%1块吗?";
+/** @export */ Blockly.Msg.DELETE_BLOCK = "删除块";
+/** @export */ Blockly.Msg.DELETE_VARIABLE = "删除“%1”变量";
+/** @export */ Blockly.Msg.DELETE_VARIABLE_CONFIRMATION = "删除“%2”变量的%1用途么?";
+/** @export */ Blockly.Msg.DELETE_X_BLOCKS = "删除 %1 块";
+/** @export */ Blockly.Msg.DISABLE_BLOCK = "禁用块";
+/** @export */ Blockly.Msg.DUPLICATE_BLOCK = "复制";
+/** @export */ Blockly.Msg.ENABLE_BLOCK = "启用块";
+/** @export */ Blockly.Msg.EXPAND_ALL = "展开块";
+/** @export */ Blockly.Msg.EXPAND_BLOCK = "展开块";
+/** @export */ Blockly.Msg.EXTERNAL_INPUTS = "外部输入";
+/** @export */ Blockly.Msg.HELP = "帮助";
+/** @export */ Blockly.Msg.INLINE_INPUTS = "单行输入";
+/** @export */ Blockly.Msg.IOS_CANCEL = "取消";
+/** @export */ Blockly.Msg.IOS_ERROR = "错误";
+/** @export */ Blockly.Msg.IOS_OK = "确定";
+/** @export */ Blockly.Msg.IOS_PROCEDURES_ADD_INPUT = "+添加输入";
+/** @export */ Blockly.Msg.IOS_PROCEDURES_ALLOW_STATEMENTS = "允许声明";
+/** @export */ Blockly.Msg.IOS_PROCEDURES_DUPLICATE_INPUTS_ERROR = "此功能有重复输入内容。";
+/** @export */ Blockly.Msg.IOS_PROCEDURES_INPUTS = "输入";
+/** @export */ Blockly.Msg.IOS_VARIABLES_ADD_BUTTON = "添加";
+/** @export */ Blockly.Msg.IOS_VARIABLES_ADD_VARIABLE = "+添加变量";
+/** @export */ Blockly.Msg.IOS_VARIABLES_DELETE_BUTTON = "删除";
+/** @export */ Blockly.Msg.IOS_VARIABLES_EMPTY_NAME_ERROR = "您不能使用空变量名称。";
+/** @export */ Blockly.Msg.IOS_VARIABLES_RENAME_BUTTON = "重命名";
+/** @export */ Blockly.Msg.IOS_VARIABLES_VARIABLE_NAME = "变量名称";
+/** @export */ Blockly.Msg.LISTS_CREATE_EMPTY_HELPURL = "https://github.com/google/blockly/wiki/Lists#create-empty-list";
+/** @export */ Blockly.Msg.LISTS_CREATE_EMPTY_TITLE = "创建空列表";
+/** @export */ Blockly.Msg.LISTS_CREATE_EMPTY_TOOLTIP = "返回一个列表,长度为 0,不包含任何数据记录";
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD = "列表";
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP = "增加、删除或重新排列各部分以此重新配置这个列表块。";
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_HELPURL = "https://github.com/google/blockly/wiki/Lists#create-list-with";
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH = "建立列表使用";
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP = "将一个项添加到列表中。";
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP = "建立一个具有任意数量项目的列表。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_FIRST = "第一";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_FROM_END = "倒数第#";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_FROM_START = "#";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_GET = "取得";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE = "取出并移除";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_LAST = "最后";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_RANDOM = "随机";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_REMOVE = "移除";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TAIL = "空白";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST = "返回列表中的第一个项目。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM = "返回在列表中的指定位置的项。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST = "返回列表中的最后一项。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM = "随机返回列表中的一个项目。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST = "移除并返回列表中的第一个项目。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM = "移除并返回列表中的指定位置的项。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST = "移除并返回列表中的最后一个项目。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM = "移除并返回列表中的一个随机项目中。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST = "移除列表中的第一项";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM = "移除在列表中的指定位置的项。";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST = "移除列表中的最后一项";
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM = "删除列表中的一个随机的项。";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END = "到倒数第#";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START = "到#";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_END_LAST = "到最后";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_HELPURL = "https://github.com/google/blockly/wiki/Lists#getting-a-sublist";  // untranslated
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST = "从头获得子列表";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END = "从倒数#取得子列表";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START = "从#取得子列表";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_TAIL = "空白";
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP = "复制列表中指定的部分。";
+/** @export */ Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP = "%1是最后一项。";
+/** @export */ Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP = "%1是第一个项目。";
+/** @export */ Blockly.Msg.LISTS_INDEX_OF_FIRST = "找出第一个项出现";
+/** @export */ Blockly.Msg.LISTS_INDEX_OF_HELPURL = "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list";  // untranslated
+/** @export */ Blockly.Msg.LISTS_INDEX_OF_LAST = "找出最后一个项出现";
+/** @export */ Blockly.Msg.LISTS_INDEX_OF_TOOLTIP = "返回在列表中的第一/最后一个匹配项的索引值。如果找不到项目则返回%1。";
+/** @export */ Blockly.Msg.LISTS_INLIST = "在列表中";
+/** @export */ Blockly.Msg.LISTS_ISEMPTY_HELPURL = "https://github.com/google/blockly/wiki/Lists#is-empty";  // untranslated
+/** @export */ Blockly.Msg.LISTS_ISEMPTY_TITLE = "%1是空的";
+/** @export */ Blockly.Msg.LISTS_ISEMPTY_TOOLTIP = "如果改列表为空,则返回真。";
+/** @export */ Blockly.Msg.LISTS_LENGTH_HELPURL = "https://github.com/google/blockly/wiki/Lists#length-of";  // untranslated
+/** @export */ Blockly.Msg.LISTS_LENGTH_TITLE = "%1的长度";
+/** @export */ Blockly.Msg.LISTS_LENGTH_TOOLTIP = "返回列表的长度。";
+/** @export */ Blockly.Msg.LISTS_REPEAT_HELPURL = "https://github.com/google/blockly/wiki/Lists#create-list-with";  // untranslated
+/** @export */ Blockly.Msg.LISTS_REPEAT_TITLE = "建立列表使用项 %1 重复 %2 次";
+/** @export */ Blockly.Msg.LISTS_REPEAT_TOOLTIP = "建立包含指定重复次数的值的列表。";
+/** @export */ Blockly.Msg.LISTS_REVERSE_HELPURL = "https://github.com/google/blockly/wiki/Lists#reversing-a-list";
+/** @export */ Blockly.Msg.LISTS_REVERSE_MESSAGE0 = "倒转%1";
+/** @export */ Blockly.Msg.LISTS_REVERSE_TOOLTIP = "倒转一个列表的拷贝。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_HELPURL = "https://github.com/google/blockly/wiki/Lists#in-list--set";  // untranslated
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_INPUT_TO = "为";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_INSERT = "插入在";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_SET = "设置";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST = "在列表的起始处添加该项。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM = "插入在列表中指定位置的项。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST = "将该项追加到列表的末尾。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM = "在列表中随机插入项。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST = "设置列表中的第一个项目。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM = "设置在列表中指定位置的项。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST = "设置列表中的最后一项。";
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM = "设置列表中一个随机的项目。";
+/** @export */ Blockly.Msg.LISTS_SORT_HELPURL = "https://github.com/google/blockly/wiki/Lists#sorting-a-list";
+/** @export */ Blockly.Msg.LISTS_SORT_ORDER_ASCENDING = "升序";
+/** @export */ Blockly.Msg.LISTS_SORT_ORDER_DESCENDING = "降序";
+/** @export */ Blockly.Msg.LISTS_SORT_TITLE = "排序%1 %2 %3";
+/** @export */ Blockly.Msg.LISTS_SORT_TOOLTIP = "排序一个列表的拷贝。";
+/** @export */ Blockly.Msg.LISTS_SORT_TYPE_IGNORECASE = "按字母排序,忽略大小写";
+/** @export */ Blockly.Msg.LISTS_SORT_TYPE_NUMERIC = "按数字排序";
+/** @export */ Blockly.Msg.LISTS_SORT_TYPE_TEXT = "按字母排序";
+/** @export */ Blockly.Msg.LISTS_SPLIT_HELPURL = "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists";
+/** @export */ Blockly.Msg.LISTS_SPLIT_LIST_FROM_TEXT = "从文本制作列表";
+/** @export */ Blockly.Msg.LISTS_SPLIT_TEXT_FROM_LIST = "从列表拆出文本";
+/** @export */ Blockly.Msg.LISTS_SPLIT_TOOLTIP_JOIN = "加入文本列表至一个文本,由分隔符分隔。";
+/** @export */ Blockly.Msg.LISTS_SPLIT_TOOLTIP_SPLIT = "拆分文本到文本列表,按每个分隔符拆分。";
+/** @export */ Blockly.Msg.LISTS_SPLIT_WITH_DELIMITER = "用分隔符";
+/** @export */ Blockly.Msg.LOGIC_BOOLEAN_FALSE = "假";
+/** @export */ Blockly.Msg.LOGIC_BOOLEAN_HELPURL = "https://github.com/google/blockly/wiki/Logic#values";  // untranslated
+/** @export */ Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP = "返回真或假。";
+/** @export */ Blockly.Msg.LOGIC_BOOLEAN_TRUE = "真";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_HELPURL = "https://zh.wikipedia.org/wiki/不等";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ = "如果两个输入结果相等,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT = "如果第一个输入结果比第二个大,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE = "如果第一个输入结果大于或等于第二个输入结果,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT = "如果第一个输入结果比第二个小,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE = "如果第一个输入结果小于或等于第二个输入结果,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ = "如果两个输入结果不相等,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_NEGATE_HELPURL = "https://github.com/google/blockly/wiki/Logic#not";
+/** @export */ Blockly.Msg.LOGIC_NEGATE_TITLE = "非%1";
+/** @export */ Blockly.Msg.LOGIC_NEGATE_TOOLTIP = "如果输入结果为假,则返回真;如果输入结果为真,则返回假。";
+/** @export */ Blockly.Msg.LOGIC_NULL = "空";
+/** @export */ Blockly.Msg.LOGIC_NULL_HELPURL = "https://en.wikipedia.org/wiki/Nullable_type";  // untranslated
+/** @export */ Blockly.Msg.LOGIC_NULL_TOOLTIP = "返回空值。";
+/** @export */ Blockly.Msg.LOGIC_OPERATION_AND = "和";
+/** @export */ Blockly.Msg.LOGIC_OPERATION_HELPURL = "https://github.com/google/blockly/wiki/Logic#logical-operations";  // untranslated
+/** @export */ Blockly.Msg.LOGIC_OPERATION_OR = "或";
+/** @export */ Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND = "如果两个输入结果都为真,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR = "如果至少有一个输入结果为真,则返回真。";
+/** @export */ Blockly.Msg.LOGIC_TERNARY_CONDITION = "测试";
+/** @export */ Blockly.Msg.LOGIC_TERNARY_HELPURL = "https://zh.wikipedia.org/wiki/条件运算符";
+/** @export */ Blockly.Msg.LOGIC_TERNARY_IF_FALSE = "如果为假";
+/** @export */ Blockly.Msg.LOGIC_TERNARY_IF_TRUE = "如果为真";
+/** @export */ Blockly.Msg.LOGIC_TERNARY_TOOLTIP = "检查“test”中的条件。如果条件为真,则返回“if true”的值,否则,则返回“if false”的值。";
+/** @export */ Blockly.Msg.MATH_ADDITION_SYMBOL = "+";  // untranslated
+/** @export */ Blockly.Msg.MATH_ARITHMETIC_HELPURL = "https://zh.wikipedia.org/wiki/算术";
+/** @export */ Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD = "返回两个数字的和。";
+/** @export */ Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE = "返回两个数字的商。";
+/** @export */ Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS = "返回两个数字的区别。";
+/** @export */ Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY = "返回两个数字的乘积。";
+/** @export */ Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER = "返回第一个数的第二个数次幂。";
+/** @export */ Blockly.Msg.MATH_CHANGE_HELPURL = "https://zh.wikipedia.org/wiki/加法";
+/** @export */ Blockly.Msg.MATH_CHANGE_TITLE = "更改 %1 从 %2";
+/** @export */ Blockly.Msg.MATH_CHANGE_TOOLTIP = "将一个数添加到变量“%1”。";
+/** @export */ Blockly.Msg.MATH_CONSTANT_HELPURL = "https://zh.wikipedia.org/wiki/数学常数";
+/** @export */ Blockly.Msg.MATH_CONSTANT_TOOLTIP = "返回一个常见常量:π (3.141…)、e (2.718…)、φ (1.618…)、平方根 (1.414…)、开平方根 (0.707…)或∞ (infinity)。";
+/** @export */ Blockly.Msg.MATH_CONSTRAIN_HELPURL = "https://en.wikipedia.org/wiki/Clamping_(graphics)";  // untranslated
+/** @export */ Blockly.Msg.MATH_CONSTRAIN_TITLE = "限制数字 %1 介于 (低) %2 到 (高) %3";
+/** @export */ Blockly.Msg.MATH_CONSTRAIN_TOOLTIP = "限制数字介于两个指定的数字之间";
+/** @export */ Blockly.Msg.MATH_DIVISION_SYMBOL = "÷";  // untranslated
+/** @export */ Blockly.Msg.MATH_IS_DIVISIBLE_BY = "可被整除";
+/** @export */ Blockly.Msg.MATH_IS_EVEN = "是偶数";
+/** @export */ Blockly.Msg.MATH_IS_NEGATIVE = "为负";
+/** @export */ Blockly.Msg.MATH_IS_ODD = "是奇数";
+/** @export */ Blockly.Msg.MATH_IS_POSITIVE = "为正";
+/** @export */ Blockly.Msg.MATH_IS_PRIME = "是质数";
+/** @export */ Blockly.Msg.MATH_IS_TOOLTIP = "如果数字是偶数、奇数、非负整数、正数、负数或如果它可被某数字整除,则返回真或假。";
+/** @export */ Blockly.Msg.MATH_IS_WHOLE = "为整数";
+/** @export */ Blockly.Msg.MATH_MODULO_HELPURL = "https://zh.wikipedia.org/wiki/模除";
+/** @export */ Blockly.Msg.MATH_MODULO_TITLE = "取余数自 %1 ÷ %2";
+/** @export */ Blockly.Msg.MATH_MODULO_TOOLTIP = "返回这两个数字相除后的余数。";
+/** @export */ Blockly.Msg.MATH_MULTIPLICATION_SYMBOL = "×";  // untranslated
+/** @export */ Blockly.Msg.MATH_NUMBER_HELPURL = "https://zh.wikipedia.org/wiki/数";
+/** @export */ Blockly.Msg.MATH_NUMBER_TOOLTIP = "一个数字。";
+/** @export */ Blockly.Msg.MATH_ONLIST_HELPURL = "";  // untranslated
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE = "列表中的平均数";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_MAX = "列表中的最大值";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN = "列表中位数";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_MIN = "列表中的最小值";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_MODE = "列表模式";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_RANDOM = "列表的随机项";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV = "列表中的标准差";
+/** @export */ Blockly.Msg.MATH_ONLIST_OPERATOR_SUM = "列表中的数的总和";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE = "返回列表中的数值的平均值。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX = "返回列表中最大数。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN = "返回列表中的中位数。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN = "返回列表中最小数。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE = "返回列表中的最常见的项的列表。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_RANDOM = "从列表中返回一个随机的元素。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV = "返回列表的标准偏差。";
+/** @export */ Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM = "返回列表中的所有数字的和。";
+/** @export */ Blockly.Msg.MATH_POWER_SYMBOL = "^";  // untranslated
+/** @export */ Blockly.Msg.MATH_RANDOM_FLOAT_HELPURL = "https://zh.wikipedia.org/wiki/随机数生成器";
+/** @export */ Blockly.Msg.MATH_RANDOM_FLOAT_TITLE_RANDOM = "随机分数";
+/** @export */ Blockly.Msg.MATH_RANDOM_FLOAT_TOOLTIP = "返回介于(包含)0.0到1.0之间的随机数。";
+/** @export */ Blockly.Msg.MATH_RANDOM_INT_HELPURL = "https://zh.wikipedia.org/wiki/随机数生成器";
+/** @export */ Blockly.Msg.MATH_RANDOM_INT_TITLE = "从 %1 到 %2 之间的随机整数";
+/** @export */ Blockly.Msg.MATH_RANDOM_INT_TOOLTIP = "返回两个指定的范围(含)之间的随机整数。";
+/** @export */ Blockly.Msg.MATH_ROUND_HELPURL = "https://zh.wikipedia.org/wiki/数值修约";
+/** @export */ Blockly.Msg.MATH_ROUND_OPERATOR_ROUND = "向下舍入";
+/** @export */ Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDDOWN = "向下舍入";
+/** @export */ Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDUP = "向上舍入";
+/** @export */ Blockly.Msg.MATH_ROUND_TOOLTIP = "数字向上或向下舍入。";
+/** @export */ Blockly.Msg.MATH_SINGLE_HELPURL = "https://zh.wikipedia.org/wiki/平方根";
+/** @export */ Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE = "绝对";
+/** @export */ Blockly.Msg.MATH_SINGLE_OP_ROOT = "平方根";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS = "返回一个数的绝对值。";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_EXP = "返回一个数的e次幂。";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_LN = "返回一个数的自然对数。";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_LOG10 = "返回一个数的对数。";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_NEG = "返回一个数的逻辑非。";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_POW10 = "返回一个数的10次幂。";
+/** @export */ Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT = "返回一个数的平方根。";
+/** @export */ Blockly.Msg.MATH_SUBTRACTION_SYMBOL = "-";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_ACOS = "acos";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_ASIN = "asin";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_ATAN = "atan";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_COS = "cos";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_HELPURL = "https://zh.wikipedia.org/wiki/三角函数";
+/** @export */ Blockly.Msg.MATH_TRIG_SIN = "sin";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_TAN = "tan";  // untranslated
+/** @export */ Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS = "返回一个数的反余弦值。";
+/** @export */ Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN = "返回一个数的反正弦值。";
+/** @export */ Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN = "返回指定角度的反正切值。";
+/** @export */ Blockly.Msg.MATH_TRIG_TOOLTIP_COS = "返回指定角度的余弦值(非弧度)。";
+/** @export */ Blockly.Msg.MATH_TRIG_TOOLTIP_SIN = "返回指定角度的正弦值(非弧度)。";
+/** @export */ Blockly.Msg.MATH_TRIG_TOOLTIP_TAN = "返回指定角度的正切值(非弧度)。";
+/** @export */ Blockly.Msg.NEW_VARIABLE = "创建变量...";
+/** @export */ Blockly.Msg.NEW_VARIABLE_TITLE = "新变量的名称:";
+/** @export */ Blockly.Msg.ORDINAL_NUMBER_SUFFIX = "空白";
+/** @export */ Blockly.Msg.PROCEDURES_ALLOW_STATEMENTS = "允许声明";
+/** @export */ Blockly.Msg.PROCEDURES_BEFORE_PARAMS = "与:";
+/** @export */ Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL = "https://zh.wikipedia.org/wiki/子程序";
+/** @export */ Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP = "运行用户定义的函数“%1”。";
+/** @export */ Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL = "https://zh.wikipedia.org/wiki/子程序";
+/** @export */ Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP = "运行用户定义的函数“%1”,并使用它的输出值。";
+/** @export */ Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS = "与:";
+/** @export */ Blockly.Msg.PROCEDURES_CREATE_DO = "创建“%1”";
+/** @export */ Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = "描述该功能...";
+/** @export */ Blockly.Msg.PROCEDURES_DEFNORETURN_DO = "空白";
+/** @export */ Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL = "https://zh.wikipedia.org/wiki/子程序";
+/** @export */ Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "做点什么";
+/** @export */ Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = "至";
+/** @export */ Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP = "创建一个不带输出值的函数。";
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL = "https://zh.wikipedia.org/wiki/子程序";
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_RETURN = "返回";
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP = "创建一个有输出值的函数。";
+/** @export */ Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING = "警告: 此函数具有重复参数。";
+/** @export */ Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF = "突出显示函数定义";
+/** @export */ Blockly.Msg.PROCEDURES_IFRETURN_HELPURL = "http://c2.com/cgi/wiki?GuardClause";
+/** @export */ Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP = "如果值为真,则返回第二个值。";
+/** @export */ Blockly.Msg.PROCEDURES_IFRETURN_WARNING = "警告: 仅在定义函数内可使用此块。";
+/** @export */ Blockly.Msg.PROCEDURES_MUTATORARG_TITLE = "输入名称:";
+/** @export */ Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP = "添加函数输入。";
+/** @export */ Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE = "输入";
+/** @export */ Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP = "添加、删除或重新排此函数的输入。";
+/** @export */ Blockly.Msg.REDO = "重做";
+/** @export */ Blockly.Msg.REMOVE_COMMENT = "删除注释";
+/** @export */ Blockly.Msg.RENAME_VARIABLE = "重命名变量...";
+/** @export */ Blockly.Msg.RENAME_VARIABLE_TITLE = "将所有“%1”变量重命名为:";
+/** @export */ Blockly.Msg.TEXT_APPEND_HELPURL = "https://github.com/google/blockly/wiki/Text#text-modification";  // untranslated
+/** @export */ Blockly.Msg.TEXT_APPEND_TITLE = "至%1附加文本%2";
+/** @export */ Blockly.Msg.TEXT_APPEND_TOOLTIP = "将一些文本追加到变量“%1”。";
+/** @export */ Blockly.Msg.TEXT_CHANGECASE_HELPURL = "https://github.com/google/blockly/wiki/Text#adjusting-text-case";  // untranslated
+/** @export */ Blockly.Msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE = "转为小写";
+/** @export */ Blockly.Msg.TEXT_CHANGECASE_OPERATOR_TITLECASE = "将首字母大写";
+/** @export */ Blockly.Msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE = "转为大写";
+/** @export */ Blockly.Msg.TEXT_CHANGECASE_TOOLTIP = "在不同大小写下复制并返回这段文字。";
+/** @export */ Blockly.Msg.TEXT_CHARAT_FIRST = "获得第一个字符";
+/** @export */ Blockly.Msg.TEXT_CHARAT_FROM_END = "获得倒数第#个字符";
+/** @export */ Blockly.Msg.TEXT_CHARAT_FROM_START = "获得字符#";
+/** @export */ Blockly.Msg.TEXT_CHARAT_HELPURL = "https://github.com/google/blockly/wiki/Text#extracting-text";  // untranslated
+/** @export */ Blockly.Msg.TEXT_CHARAT_LAST = "获得最后一个字符";
+/** @export */ Blockly.Msg.TEXT_CHARAT_RANDOM = "获取随机的字母";
+/** @export */ Blockly.Msg.TEXT_CHARAT_TAIL = "空白";
+/** @export */ Blockly.Msg.TEXT_CHARAT_TITLE = "在文本%1 %2中";
+/** @export */ Blockly.Msg.TEXT_CHARAT_TOOLTIP = "返回位于指定位置的字母。";
+/** @export */ Blockly.Msg.TEXT_COUNT_HELPURL = "https://github.com/google/blockly/wiki/Text#counting-substrings";
+/** @export */ Blockly.Msg.TEXT_COUNT_MESSAGE0 = "将%1计算在%2之内";
+/** @export */ Blockly.Msg.TEXT_COUNT_TOOLTIP = "计算在一些其他文本中,部分文本重现了多少次。";
+/** @export */ Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TOOLTIP = "将一个项添加到文本中。";
+/** @export */ Blockly.Msg.TEXT_CREATE_JOIN_TITLE_JOIN = "加入";
+/** @export */ Blockly.Msg.TEXT_CREATE_JOIN_TOOLTIP = "添加、移除或重新排列各节来重新配置这个文本块。";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_END = "到倒数第#个字符";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_START = "到字符#";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_END_LAST = "到最后一个字符";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_HELPURL = "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text";  // untranslated
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT = "自文本";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_START_FIRST = "取得一段字串自第一个字符";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_END = "取得一段字串自倒数第#个字符";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_START = "取得一段字串自#";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_TAIL = "空白";
+/** @export */ Blockly.Msg.TEXT_GET_SUBSTRING_TOOLTIP = "返回指定的部分文本。";
+/** @export */ Blockly.Msg.TEXT_INDEXOF_HELPURL = "https://github.com/google/blockly/wiki/Text#finding-text";  // untranslated
+/** @export */ Blockly.Msg.TEXT_INDEXOF_OPERATOR_FIRST = "寻找第一个出现的文本";
+/** @export */ Blockly.Msg.TEXT_INDEXOF_OPERATOR_LAST = "寻找最后一个出现的文本";
+/** @export */ Blockly.Msg.TEXT_INDEXOF_TITLE = "在文本%1 %2 %3中";
+/** @export */ Blockly.Msg.TEXT_INDEXOF_TOOLTIP = "返回在第二个字串中的第一/最后一个匹配项的索引值。如果未找到则返回%1。";
+/** @export */ Blockly.Msg.TEXT_ISEMPTY_HELPURL = "https://github.com/google/blockly/wiki/Text#checking-for-empty-text";  // untranslated
+/** @export */ Blockly.Msg.TEXT_ISEMPTY_TITLE = "%1是空的";
+/** @export */ Blockly.Msg.TEXT_ISEMPTY_TOOLTIP = "如果提供的文本为空,则返回真。";
+/** @export */ Blockly.Msg.TEXT_JOIN_HELPURL = "https://github.com/google/blockly/wiki/Text#text-creation";  // untranslated
+/** @export */ Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH = "建立字串使用";
+/** @export */ Blockly.Msg.TEXT_JOIN_TOOLTIP = "通过串起任意数量的项以建立一段文字。";
+/** @export */ Blockly.Msg.TEXT_LENGTH_HELPURL = "https://github.com/google/blockly/wiki/Text#text-modification";  // untranslated
+/** @export */ Blockly.Msg.TEXT_LENGTH_TITLE = "%1的长度";
+/** @export */ Blockly.Msg.TEXT_LENGTH_TOOLTIP = "返回提供文本的字母数(包括空格)。";
+/** @export */ Blockly.Msg.TEXT_PRINT_HELPURL = "https://github.com/google/blockly/wiki/Text#printing-text";  // untranslated
+/** @export */ Blockly.Msg.TEXT_PRINT_TITLE = "打印%1";
+/** @export */ Blockly.Msg.TEXT_PRINT_TOOLTIP = "打印指定的文字、数字或其他值。";
+/** @export */ Blockly.Msg.TEXT_PROMPT_HELPURL = "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user";  // untranslated
+/** @export */ Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER = "提示用户输入数字。";
+/** @export */ Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT = "提示用户输入一些文本。";
+/** @export */ Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER = "输入数字并显示提示消息";
+/** @export */ Blockly.Msg.TEXT_PROMPT_TYPE_TEXT = "输入数字并显示提示消息";
+/** @export */ Blockly.Msg.TEXT_REPLACE_HELPURL = "https://github.com/google/blockly/wiki/Text#replacing-substrings";
+/** @export */ Blockly.Msg.TEXT_REPLACE_MESSAGE0 = "在%3中,将%1替换为%2";
+/** @export */ Blockly.Msg.TEXT_REPLACE_TOOLTIP = "在某些其他文本中,替换部分文本的所有事件。";
+/** @export */ Blockly.Msg.TEXT_REVERSE_HELPURL = "https://github.com/google/blockly/wiki/Text#reversing-text";
+/** @export */ Blockly.Msg.TEXT_REVERSE_MESSAGE0 = "倒转%1";
+/** @export */ Blockly.Msg.TEXT_REVERSE_TOOLTIP = "倒转文本中字符的排序。";
+/** @export */ Blockly.Msg.TEXT_TEXT_HELPURL = "https://zh.wikipedia.org/wiki/字符串";
+/** @export */ Blockly.Msg.TEXT_TEXT_TOOLTIP = "一个字母、单词或一行文本。";
+/** @export */ Blockly.Msg.TEXT_TRIM_HELPURL = "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces";  // untranslated
+/** @export */ Blockly.Msg.TEXT_TRIM_OPERATOR_BOTH = "消除两侧空格";
+/** @export */ Blockly.Msg.TEXT_TRIM_OPERATOR_LEFT = "消除左侧空格";
+/** @export */ Blockly.Msg.TEXT_TRIM_OPERATOR_RIGHT = "消除右侧空格";
+/** @export */ Blockly.Msg.TEXT_TRIM_TOOLTIP = "复制这段文字的同时删除两端多余的空格。";
+/** @export */ Blockly.Msg.TODAY = "今天";
+/** @export */ Blockly.Msg.UNDO = "撤销";
+/** @export */ Blockly.Msg.VARIABLES_DEFAULT_NAME = "项目";
+/** @export */ Blockly.Msg.VARIABLES_GET_CREATE_SET = "创建“设定%1”";
+/** @export */ Blockly.Msg.VARIABLES_GET_HELPURL = "https://github.com/google/blockly/wiki/Variables#get";  // untranslated
+/** @export */ Blockly.Msg.VARIABLES_GET_TOOLTIP = "返回此变量的值。";
+/** @export */ Blockly.Msg.VARIABLES_SET = "赋值 %1 到 %2";
+/** @export */ Blockly.Msg.VARIABLES_SET_CREATE_GET = "创建“获得%1”";
+/** @export */ Blockly.Msg.VARIABLES_SET_HELPURL = "https://github.com/google/blockly/wiki/Variables#set";  // untranslated
+/** @export */ Blockly.Msg.VARIABLES_SET_TOOLTIP = "设置此变量,以使它和输入值相等。";
+/** @export */ Blockly.Msg.VARIABLE_ALREADY_EXISTS = "已存在名为“%1”的变量。";
+/** @export */ Blockly.Msg.VARIABLE_ALREADY_EXISTS_FOR_ANOTHER_TYPE = "名叫“%1”的变量已存在,但作为另一个变量类型“%2”存在。";
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_TITLE = Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE;
+/** @export */ Blockly.Msg.CONTROLS_IF_IF_TITLE_IF = Blockly.Msg.CONTROLS_IF_MSG_IF;
+/** @export */ Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
+/** @export */ Blockly.Msg.CONTROLS_IF_MSG_THEN = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
+/** @export */ Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_PROCEDURE = Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE;
+/** @export */ Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
+/** @export */ Blockly.Msg.MATH_CHANGE_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_DO = Blockly.Msg.PROCEDURES_DEFNORETURN_DO;
+/** @export */ Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF = Blockly.Msg.CONTROLS_IF_MSG_ELSEIF;
+/** @export */ Blockly.Msg.LISTS_GET_INDEX_HELPURL = Blockly.Msg.LISTS_INDEX_OF_HELPURL;
+/** @export */ Blockly.Msg.CONTROLS_FOREACH_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
+/** @export */ Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
+/** @export */ Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
+/** @export */ Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE = Blockly.Msg.VARIABLES_DEFAULT_NAME;
+/** @export */ Blockly.Msg.TEXT_APPEND_VARIABLE = Blockly.Msg.VARIABLES_DEFAULT_NAME;
+/** @export */ Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
+/** @export */ Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
+/** @export */ Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT = Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT;
+
+/** @export */ Blockly.Msg.MATH_HUE = "230";
+/** @export */ Blockly.Msg.LOOPS_HUE = "120";
+/** @export */ Blockly.Msg.LISTS_HUE = "260";
+/** @export */ Blockly.Msg.LOGIC_HUE = "210";
+/** @export */ Blockly.Msg.VARIABLES_HUE = "330";
+/** @export */ Blockly.Msg.TEXTS_HUE = "160";
+/** @export */ Blockly.Msg.PROCEDURES_HUE = "290";
+/** @export */ Blockly.Msg.COLOUR_HUE = "20";
\ No newline at end of file