From 3d379ff0a0f264f3520db0483b5f79dc08835f59 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Wed, 3 Sep 2025 15:47:44 -0700 Subject: [PATCH 01/53] update hook task --- lib/tasks/hook.rake | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/tasks/hook.rake b/lib/tasks/hook.rake index 9cda2d9a8..ac07a17aa 100644 --- a/lib/tasks/hook.rake +++ b/lib/tasks/hook.rake @@ -7,6 +7,7 @@ COMMIT_SHA = ENV["HEROKU_BUILD_COMMIT"] DESCRIPTION = ENV["HEROKU_BUILD_DESCRIPTION"] WEBHOOK_URL = ENV["RELEASE_WEBHOOK_URL"] ENVIRONMENT = ENV["HEROKU_APP_NAME"] +LAST_DEPLOY_COMMIT_OVERRIDE = ENV["LAST_DEPLOY_COMMIT_OVERRIDE"] def open_json(url) begin @@ -18,6 +19,9 @@ def open_json(url) end def last_deploy_commit + if LAST_DEPLOY_COMMIT_OVERRIDE + return LAST_DEPLOY_COMMIT_OVERRIDE + end data = open_json(DEPLOYS_URL_API) environment = ENVIRONMENT.include?("production") ? "production" : ENVIRONMENT data = data.select { |deploy| deploy["environment"] == environment } @@ -42,17 +46,27 @@ def commits_since_last_deploy commits end -def details(environment) - output = "\n\n" +def intro_block(start_text, environment) + output = start_text + output += "\n\n" if !DESCRIPTION.nil? output += "#{DESCRIPTION}\n\n" end web_compare_url = "#{COMPARE_URL_WEB}#{last_deploy_commit}...#{COMMIT_SHA}" - output += "<#{web_compare_url}|compare>\n" + output += "<#{web_compare_url}|compare>" + output +end + +def commits_block(environment) + output = "" messages = commits_since_last_deploy.reverse.map do |commit| output += "\n + #{commit[0]} | ##{commit[1][0..5]}" end - output += "\n" + output +end + +def links_block(environment) + output = "" pre = environment == "production" ? "my" : environment base = "#{pre}.farm.bot" [ @@ -74,7 +88,6 @@ namespace :hook do if WEBHOOK_URL environment = ENVIRONMENT.include?("staging") ? "staging" : "production" notification_text = "A new release has been deployed to #{environment}." - info = notification_text + details(environment) payload = { "mrkdwn": true, "text": notification_text, @@ -83,15 +96,30 @@ namespace :hook do "type": "section", "text": { "type": "mrkdwn", - "text": info, + "text": intro_block(notification_text, environment), + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": commits_block(environment), + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": links_block(environment), } - } + }, ], "channel": "#software", }.to_json - Faraday.post(WEBHOOK_URL, + response = Faraday.post(WEBHOOK_URL, payload, "Content-Type" => "application/json") + puts "Status: #{response.status} #{response.body}" end end end From 62abb2ee438c3fe57b3aa65d7aac823652ae58c5 Mon Sep 17 00:00:00 2001 From: ncnynl Date: Mon, 8 Sep 2025 13:04:38 +0800 Subject: [PATCH 02/53] Update zh.json --- public/app-resources/languages/zh.json | 3083 ++++++++++++------------ 1 file changed, 1478 insertions(+), 1605 deletions(-) diff --git a/public/app-resources/languages/zh.json b/public/app-resources/languages/zh.json index 33100ab3a..649226cf0 100644 --- a/public/app-resources/languages/zh.json +++ b/public/app-resources/languages/zh.json @@ -1,94 +1,122 @@ { + "untranslated": {}, "translated": { + "": "", " copy ": " 复制 ", - " Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:": " 特此授予获得此软件和相关文档文件(“软件”)副本的任何人免费许可,以无限制方式处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或销售软件副本的权利,并允许向其提供软件的人员这样做,但须遵守以下条件:", + " Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:": "特此免费授予任何获得本软件及相关文档文件(“软件”)的人无限制使用本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可及/或销售本软件副本,并允许向其提供本软件的人如此行事,须符合以下条件:", " request sent to device.": " 请求已发送至设备。", - " The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.": " 上述版权声明和本许可声明均应包含在软件的所有副本或重要部分中。", - " THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.": "软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权性的保证。在任何情况下,作者或版权持有者均不对因软件或使用或其他处理软件而引起的或与之相关的任何索赔、损害或其他责任承担责任,无论是合同行为、侵权行为还是其他行为。", - "? items": "? 项目", - "'Find Axis Length' command": "'查找Axis长度'命令", - "'Find Home' command": "'查找Home'命令", - "'Move To Home' command": "'移至Home'命令", - "'Set Home' command": "'设置Home'命令", - "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers (Genesis kits only).": "'压入'电缆托架,仔细检查皮带张力,仔细检查偏心垫片(仅限 Genesis 套件)。", - "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers.": "'压入'电缆托架,仔细检查皮带张力,并仔细检查偏心垫片。”", - "(No selection)": "(不选择)", - "(resets upon refresh)": "(刷新后重置)", - "(unknown)": "(未知)", + " The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.": "上述版权声明和本许可声明应包含在软件的所有副本或重要部分中。", + " THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.": "本软件按“原样”提供,不附带任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性及非侵权保证。在任何情况下,作者或版权持有人均不对因软件或其使用或其他交易引起的任何索赔、损害或其他责任承担责任。", + ", quietMode = ": ",quietMode = ", + "? items": "?件物品", + ".img\\": ".img\\", + "'Find Axis Length' command": "“查找轴长”命令", + "'Find Home' command": "“查找原点”命令", + "'Move To Home' command": "“移动到原点”命令", + "'Set Home' command": "“设置原点”命令", + "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers (Genesis kits only).": "“磨合”电缆拖链,反复检查皮带张力和偏心垫片(仅限Genesis套件)。", + "\"Break in\" the cable carrier, double check belt tension, and double check the eccentric spacers.": "“磨合”电缆拖链,反复检查皮带张力和偏心垫片。", + "(No selection)": "(未选择)", + "(resets upon refresh)": "(刷新后重置)", + "(unknown)": "(未知)", + "(x, y, z)": "(x,y,z)", "{{ amount }}mm": "{{ amount }}毫米", - "{{ axis }}-axis profile": "{{ axis }}-轴 配置", - "{{ resetMethod }} resetting your FarmBot will not affect any of your data or settings from your web app account, allowing you to do a complete restore to your device once it is back online and paired with your web app account.": "{{ resetMethod }} 重置您的 FarmBot 不会影响您的 Web 应用程序帐户中的任何数据或设置,一旦设备重新上线并与 Web 应用程序帐户配对,您就可以对其进行完全恢复。", - "{{axis}} (mm)": "{{axis}} (毫米)", - "{{axis}}-Offset": "{{axis}}-偏移", - "{{count}} items": "{{count}} 条", - "{{length}} {{name}} selected": "{{length}} {{name}} 被选择", - "{{seconds}} seconds!": "{{seconds}} 秒!", - "# of plants": "# 植物", - "24 hour response time": "24 小时响应", - "72 hour response time": "72小时响应", - "A different axis moved": "移动的轴", - "A microstep value of 1 is recommended for best performance when quiet motor mode is enabled.": "当启用静音电机模式时,建议使用微步值 1 以获得最佳性能。", - "A new version of the FarmBot web app has been released. Refresh page?": "FarmBot 网络应用程序的新版本已发布。刷新页面?", + "{{ axis }}-axis profile": "{{ axis }}轴轮廓", + "{{ name }} Grid": "{{ name }} 网格", + "{{ resetMethod }} resetting your FarmBot will not affect any of your data or settings from your web app account, allowing you to do a complete restore to your device once it is back online and paired with your web app account.": "通过{{ resetMethod }}重置您的FarmBot不会影响您Web应用账户中的任何数据或设置,设备重新上线并与Web应用账户配对后,可以完全恢复。", + "{{axis}} (mm)": "{{axis}}(毫米)", + "{{axis}}-Offset": "{{axis}}偏移", + "{{count}} items": "{{count}}件物品", + "{{length}} {{name}} selected": "已选择{{length}}{{name}}", + "{{seconds}} seconds!": "{{seconds}}秒!", + "**3D Controls** - Pinch to zoom and pan - Touch and drag to rotate": "**3D 控制** - 捏合缩放和平移 - 触摸拖动旋转", + "**3D Controls** - Scroll to zoom - Click and drag to rotate - Right-click and drag to pan": "**3D 控制** - 滚动缩放 - 点击拖动旋转 - 右键拖动平移", + "# of plants": "植物数量", + "% Change": "变化百分比", + "1280 x 960 (1.3MP)": "1280 x 960(130万像素)", + "1600 x 1200 (2MP)": "1600 x 1200(200万像素)", + "24 hour response time": "24小时响应时间", + "2592 x 1944 (5MP)": "2592 x 1944(500万像素)", + "320 x 240 (0.08MP)": "320 x 240(8万像素)", + "3280 x 2464 (8MP)": "3280 x 2464(800万像素)", + "3D Garden": "3D 花园", + "3D Map beta": "3D 地图测试版", + "3D Scene. (default: \"Outdoor\")": "3D 场景。(默认:“户外”)", + "3D Settings": "3D 设置", + "3D View": "3D 视图", + "4056 x 3040 (12.3MP)": "4056 x 3040(1230万像素)", + "640 x 480 (0.3MP)": "640 x 480(30万像素)", + "72 hour response time": "72小时响应时间", + "800 x 600 (0.5MP)": "800 x 600(50万像素)", + "A different axis moved": "移动了其他轴", + "A microstep value of 1 is recommended for best performance when quiet motor mode is enabled.": "启用静音电机模式时,推荐微步值设置为1以获得最佳性能。", + "A new version of the FarmBot web app has been released. Refresh page?": "FarmBot Web 应用有新版本发布,是否刷新页面?", "Abort": "中止", "Abort and recover": "中止并恢复", "Absolute movement": "绝对移动", - "Accelerate for (mm)": "加速 (毫米)", - "Accelerate for toward home (mm)": "朝Home位置加速 (毫米)", - "Account": "账号", - "Account has been reset.": "账号已重置", - "Account Menu": "账号菜单", - "Account Not Verified": "账号未认证", - "Account Settings": "帐户设置", - "Action": "执行", - "Actions": "动作", - "Active": "活动", + "Accelerate for (mm)": "加速距离(毫米)", + "Accelerate for toward home (mm)": "向原点加速距离(毫米)", + "Account": "账户", + "Account has been reset.": "账户已重置。", + "Account Menu": "账户菜单", + "Account Not Verified": "账户未验证", + "Account Settings": "账户设置", + "Action": "操作", + "Action may be required": "可能需要操作", + "Actions": "操作", + "Active": "激活", "add": "添加", - "Add a seed container": "添加一个种子容器", - "Add a tool or seed container": "添加一个工具或种子容器", + "Add a seed container": "添加种子容器", + "Add a tool or seed container": "添加工具或种子容器", "Add event": "添加事件", "Add Event": "添加事件", - "add filter": "添加过滤", + "add filter": "添加筛选条件", "Add garden": "添加花园", + "Add Grid or Row": "添加网格或行", "Add group": "添加分组", "Add more groups": "添加更多分组", "Add more plants": "添加更多植物", - "Add new": "添加", + "Add new": "新增", "Add new garden": "添加新花园", "add new group": "添加新分组", + "add new height curve": "添加新高度曲线", "Add new pin binding": "添加新引脚绑定", "add new regimen": "添加新方案", - "add new saved garden": "添加新的已保存的花园", - "add new sequence": "添加序列", - "Add new slot": "添加新槽", - "Add new zone": "添加新区", - "add number filter": "添加号码过滤器", - "add peripheral": "添加外围设备", + "add new saved garden": "添加新保存的花园", + "add new sequence": "添加新序列", + "Add new slot": "添加新槽位", + "add new spread curve": "添加新展开曲线", + "Add new tool": "添加新工具", + "add new water curve": "添加新浇水曲线", + "Add new zone": "添加新区块", + "add number filter": "添加数字筛选", + "add peripheral": "添加外设", "add plant": "添加植物", "Add Plant": "添加植物", - "Add plant at current FarmBot location {{coordinate}}": "在当前 FarmBot 位置添加植物 {{coordinate}}", + "Add plant at current FarmBot location {{coordinate}}": "在当前FarmBot位置{{coordinate}}添加植物", "Add plant at current location": "在当前位置添加植物", - "Add plants to map": "添加植物到地图", + "Add plants to map": "将植物添加到地图", "add point": "添加点", - "Add point at this location": "添加点在此位置", - "Add pre-made resources upon selection": "根据选择添加预制资源", - "Add selected": "添加选定", + "Add point at this location": "在此位置添加点", + "Add pre-made resources upon selection": "选择时添加预制资源", + "Add selected": "添加所选项", "add sensor reading": "添加传感器读数", "add sensors": "添加传感器", - "Add sensors here to monitor FarmBot's sensors. To edit and create new sensors, press the EDIT button.": "在此处添加传感器以监控 FarmBot 的传感器。要编辑和创建新的传感器,请按“编辑”按钮。", + "Add sensors here to monitor FarmBot's sensors. To edit and create new sensors, press the EDIT button.": "在此添加传感器以监控FarmBot的传感器。要编辑或创建新传感器,请按编辑按钮。", "add sequence step": "添加序列步骤", - "Add slot": "添加槽", - "add stock peripherals": "添加stock外设", - "add stock pin bindings": "添加stock引脚绑定", - "add stock sensors": "添加stock传感器", - "add this crop on OpenFarm?": "在 OpenFarm 上添加这种作物?", + "Add slot": "添加槽位", + "add stock peripherals": "添加默认外设", + "add stock pin bindings": "添加默认引脚绑定", + "add stock sensors": "添加默认传感器", "Add variable": "添加变量", + "Add watering nozzle": "添加浇水喷嘴", "Add webcam": "添加网络摄像头", "add weed": "添加杂草", "Add weed": "添加杂草", "add week": "添加周数", "Add zone": "添加区域", - "Adjust one or both camera offset values and check again.": "调整一个或两个相机偏移值,然后再次检查。", - "advance": "高级", + "Adjust one or both camera offset values and check again.": "调整一个或两个摄像头偏移值后再次检查。", + "advance": "前进", "Advanced": "高级", "advanced mode": "高级模式", "age": "年龄", @@ -96,58 +124,74 @@ "age selection empty": "年龄选择为空", "agree": "同意", "Agree to Terms of Service": "同意服务条款", - "all": "所有", - "All": "所有", - "All items scheduled before the start time. Nothing to run.": "所有项目均在开始时间之前安排好。没有要运行的项目。", - "All of the plants you added to your garden are listed here in the plants panel. Mousing over a plant will highlight it in the map and vice versa. Go ahead and click a plant and then advance the tour.": "您添加到花园的所有植物都列在植物面板中。将鼠标悬停在植物上会在地图上突出显示该植物,反之亦然。继续单击植物,然后继续游览。", + "all": "全部", + "All": "全部", + "ALL": "全部", + "All at once": "全部同时", + "All items scheduled before the start time. Nothing to run.": "所有项目均安排在开始时间之前,无需执行。", + "All of the plants you added to your garden are listed here in the plants panel. Mousing over a plant will highlight it in the map and vice versa. Go ahead and click a plant and then advance the tour.": "您添加到花园的所有植物都会显示在植物面板中。鼠标悬停植物时,地图中对应位置会高亮,反之亦然。请点击一个植物,然后继续浏览。", "All Soil Height": "所有土壤高度", - "All systems nominal.": "所有系统均正常。", - "Already added.": "已经添加", - "Always": "总是", - "always highlight current photo in map": "始终在地图上突出显示当前照片", - "Always Power Motors": "总是使能电机", - "Amount of time to wait for a command to execute before stopping. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} seconds)": "停止之前等待命令执行的时间。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }} 秒)", + "All systems nominal.": "所有系统正常。", + "alpha": "阿尔法", + "Already added.": "已添加。", + "Alternatively, revert to the previous resolution": "或者,恢复到之前的分辨率", + "Always": "始终", + "always highlight current photo in map": "始终在地图中高亮当前照片", + "Always Power Motors": "始终为电机供电", + "Always review and test auto-generated code": "始终检查并测试自动生成的代码", + "Amount of time to wait for a command to execute before stopping. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} seconds)": "等待命令执行的时间(超时前)。默认:x: {{ x }}秒,y: {{ y }}秒,z: {{ z }}秒", "analog": "模拟", "Analog": "模拟", "and": "和", - "Angle (0-180)": "角度 (0-180)", - "any": "任意", - "App could not be fully loaded, we recommend you try refreshing the page.": "应用程序无法完全加载,我们建议您尝试刷新页面。", - "APP VERSION": "应用程序版本", - "apply": "申请", - "apply garden": "申请花园", - "Are all configurator steps complete?": "所有配置器步骤是否完成?", - "Are FarmBot's motors unpowered? (Try moving the Y-axis by hand)": "FarmBot 的电机是否没有动力?(尝试手动移动 Y 轴)", + "Angle (0-180)": "角度(0-180)", + "any": "任何", + "App could not be fully loaded, we recommend you try refreshing the page.": "应用未能完全加载,建议刷新页面重试。", + "APP VERSION": "应用版本", + "apply": "应用", + "apply garden": "应用花园", + "Arduino/Farmduino": "Arduino/Farmduino", + "Are all configurator steps complete?": "所有配置步骤完成了吗?", + "Are FarmBot's motors unpowered? (Try moving the Y-axis by hand)": "FarmBot的电机是否断电?(试着用手移动Y轴)", "Are they in use by sequences?": "它们是否被序列使用?", - "Are you finished customizing the buttons?": "按钮自定义完成了吗?", - "Are you planning on using WiFi or have you connected the ethernet cable?": "您打算使用 WiFi 还是已连接以太网电缆?", - "Are you sure you want to delete {{length}} plants?": "您确定要删除 {{length}} 株植物吗?", - "Are you sure you want to delete all items?": "您确实要删除所有项目吗?", - "Are you sure you want to delete all logs? A page refresh will be required.": "您确定要删除所有日志吗?需要刷新页面。", - "Are you sure you want to delete all setup progress?": "您确实要删除所有安装进度吗?", - "Are you sure you want to delete this first party farmware? Doing so will limit the functionality of your FarmBot and may cause unexpected behavior.": "您确定要删除此第一方农场软件吗?这样做会限制 FarmBot 的功能,并可能导致意外行为。", - "Are you sure you want to delete this item?": "你确定要删除这个项目吗?", - "Are you sure you want to delete this step?": "您确实要删除此步骤吗?", - "Are you sure you want to unlock the device?": "您确定要解锁该设备吗?", + "Are you finished customizing the buttons?": "您完成按钮自定义了吗?", + "Are you planning on using WiFi or have you connected the ethernet cable?": "您打算使用WiFi还是已连接以太网线?", + "Are you sure you want to delete {{length}} plants?": "确定要删除{{length}}个植物吗?", + "Are you sure you want to delete all items?": "确定要删除所有项目吗?", + "Are you sure you want to delete all logs? A page refresh will be required.": "确定要删除所有日志吗?需要刷新页面。", + "Are you sure you want to delete all setup progress?": "确定要删除所有设置进度吗?", + "Are you sure you want to delete this first party farmware? Doing so will limit the functionality of your FarmBot and may cause unexpected behavior.": "确定要删除此官方农件吗?删除后FarmBot功能可能受限,且可能导致异常行为。", + "Are you sure you want to delete this item?": "确定要删除此项目吗?", + "Are you sure you want to delete this step?": "确定要删除此步骤吗?", + "Are you sure you want to unlock the device?": "确定要解锁设备吗?", "Areas": "区域", - "as": "如", - "as described in the software documentation.": "如软件文档中所述。", - "As soon as possible": "尽快地", - "Assemble your FarmBot.": "组装你的 FarmBot。", + "as": "作为", + "as described in the software documentation.": "如软件文档中描述。", + "As soon as possible": "尽快", + "Assemble your FarmBot.": "组装您的FarmBot。", "Assembly": "组装", "Assembly documentation": "组装文档", - "Assign an action or sequence to execute when a Raspberry Pi GPIO pin is activated.": "分配在 Raspberry Pi GPIO 引脚激活时执行的操作或序列", - "Attach the rotary tool to the UTM and press VERIFY.": "将旋转工具连接到 UTM 并按 VERIFY(验证)。", - "Attach the seeder tool to the UTM and press VERIFY.": "将播种机工具连接到 UTM 并按 VERIFY。", - "Attach the soil sensor tool to the UTM and press the READ SENSOR for the SOIL MOISTURE sensor.": "将土壤传感器工具连接到 UTM,然后按下土壤湿度传感器的读取传感器。", - "Attach the soil sensor tool to the UTM and press VERIFY.": "将土壤传感器工具连接到 UTM 并按 VERIFY。", - "Attach the watering nozzle tool to the UTM and press VERIFY.": "将浇水喷嘴工具安装到 UTM 上并按 VERIFY(验证)。", - "Attach the weeder tool to the UTM and press VERIFY.": "将除草工具安装到 UTM 并按 VERIFY(验证)。", + "Assertion": "断言", + "Assign an action or sequence to execute when a Raspberry Pi GPIO pin is activated.": "为树莓派GPIO引脚激活时分配动作或序列执行。", + "at soil level": "在土壤水平", + "Attach the rotary tool to the UTM and press VERIFY.": "将旋转工具安装到UTM并点击验证。", + "Attach the seeder tool to the UTM and press VERIFY.": "将播种工具安装到UTM并点击验证。", + "Attach the soil sensor tool to the UTM and press the READ SENSOR for the SOIL MOISTURE sensor.": "将土壤传感器安装到UTM并点击读取土壤湿度传感器。", + "Attach the soil sensor tool to the UTM and press VERIFY.": "将土壤传感器安装到UTM并点击验证。", + "Attach the watering nozzle tool to the UTM and press VERIFY.": "将浇水喷嘴安装到UTM并点击验证。", + "Attach the weeder tool to the UTM and press VERIFY.": "将除草工具安装到UTM并点击验证。", "Attempting to reconnect to the message broker": "尝试重新连接消息代理", "Author": "作者", "auto update": "自动更新", - "Automatic": "自动的", - "Average": "平均的", + "Auto update": "自动更新", + "auto-generate Lua code": "自动生成Lua代码", + "auto-generate sequence description": "自动生成序列描述", + "auto-generate sequence title and color": "自动生成序列标题和颜色", + "auto-update preview": "自动更新预览", + "Automatic": "自动", + "Automatically finding the Z-axis home position is not enabled by default for Express FarmBots. To manually set the Z home position, use the manual controls to move the Z-axis to the fully raised position. If the Z-axis is not fully raised when the FarmBot reaches the Z=0 coordinate, press the E-stop button, rotate the leadscrew by hand to fully raise the Z-axis, and then Unlock the FarmBot. With the Z-axis fully raised, open the ... menu for the Z-axis and click **SET HOME**.": "Express FarmBots默认未启用自动寻找Z轴原点。请使用手动控制将Z轴移至最高位置以手动设置原点。如果到达Z=0坐标时Z轴未升至最高,按急停按钮,手动旋转丝杆升至最高,再解锁FarmBot。Z轴最高后,打开Z轴菜单点击**设置原点**。", + "Automatically finding the Z-axis length is not enabled by default for Express FarmBots. To manually set the Z length, use the manual controls to move the Z-axis to the fully lowered position. With the Z-axis fully lowered, open the ... menu for the Z-axis and click **SET LENGTH**. Then open the ... menu again and click **MOVE TO HOME**.": "Express FarmBots默认未启用自动寻找Z轴长度。请使用手动控制将Z轴移至最低位置以手动设置长度。Z轴最低后,打开Z轴菜单点击**设置长度**,再打开菜单点击**移动到原点**。", + "automatically update preview": "自动更新预览", + "Average": "平均值", "Average time": "平均时间", "away": "离开", "Axes": "轴", @@ -155,198 +199,226 @@ "Axis is already at maximum position": "轴已处于最大位置", "Axis is already at minimum position": "轴已处于最小位置", "AXIS LENGTH": "轴长", - "Axis Length (mm)": "轴长 (mm)", - "back": "后退", - "Back": "后退", - "BACK": "后退", - "Back to plant overview": "返回工厂概览", + "Axis Length (mm)": "轴长(毫米)", + "back": "返回", + "Back": "返回", + "BACK": "返回", "back to sequence": "返回序列", - "back to sequences": "返回序列", + "back to sequences": "返回序列列表", "Bad username or password": "用户名或密码错误", - "Before attaching the rotary tool or turning it on, ensure that all hands, feet, hair, and other body parts will be kept away from the tool and a safe distance will be maintained while the rotary tool is attached. Be mindful of debris that may be projected and use appropriate protective equipment. Disconnect the rotary tool when not in use.": "在安装或打开旋转工具之前,请确保所有手、脚、头发和其他身体部位都远离工具,并在安装旋转工具时保持安全距离。注意可能抛出的碎屑并使用适当的防护设备。不使用时请断开旋转工具的连接。", - "before troubleshooting.": "进行故障排除之前。", + "Beam Length": "梁长", + "Bed Height": "床高", + "Bed height. (default: {{ defaultConfigValue }}mm)": "床高。(默认:{{ defaultConfigValue }}毫米)", + "Bed Wall Thickness": "床壁厚度", + "Bed wood thickness. (default: {{ defaultConfigValue }}mm)": "床木材厚度。(默认:{{ defaultConfigValue }}毫米)", + "Bed X Offset": "床X偏移", + "Bed X offset. (default: {{ defaultConfigValue }}mm)": "床X偏移。(默认:{{ defaultConfigValue }}毫米)", + "Bed Y Offset": "床Y偏移", + "Bed Y offset. (default: {{ defaultConfigValue }}mm)": "床Y偏移。(默认:{{ defaultConfigValue }}毫米)", + "Bed Z Offset": "床Z偏移", + "Bed Z offset. (default: {{ defaultConfigValue }}mm)": "床Z偏移。(默认:{{ defaultConfigValue }}毫米)", + "Before attaching the rotary tool or turning it on, ensure that all hands, feet, hair, and other body parts will be kept away from the tool and a safe distance will be maintained while the rotary tool is attached. Be mindful of debris that may be projected and use appropriate protective equipment. Disconnect the rotary tool when not in use.": "安装或启动旋转工具前,确保手、脚、头发及其他身体部位远离工具并保持安全距离。注意可能飞溅的碎片,使用合适的防护装备。未使用时断开旋转工具。", + "before troubleshooting.": "故障排除前。", "Begin": "开始", - "Begin?": "开始?", - "Best time": "最好的时间", + "Begin?": "开始吗?", + "Best time": "最佳时间", "beta": "测试版", - "Black": "黑色的", - "Blue": "蓝色的", + "BIND": "绑定", + "Binomial Name": "双名法名称", + "Black": "黑色", + "Blue": "蓝色", "BLUR": "模糊", - "Boot sequence": "启动顺序", - "Boot Sequence": "启动顺序e", - "BOOT SEQUENCE": "启动顺序", + "Boot sequence": "启动序列", + "Boot Sequence": "启动序列", + "BOOT SEQUENCE": "启动序列", "bot is online": "机器人在线", - "Bottom Left": "左下方", + "Bottom Left": "左下角", "Bottom Right": "右下角", - "Box LED 3": "盒子3号灯", - "Box LED 4": "盒子4号灯", - "Box LEDs": "盒子灯", - "Browser FarmBot activity beep": "浏览器 FarmBot 活动蜂鸣", - "Business Documentation": "商业文件", - "Busy": "忙碌的", + "Bounds": "边界", + "Box LED 3": "盒子LED 3", + "Box LED 4": "盒子LED 4", + "Box LEDs": "盒子LED灯", + "Browser FarmBot activity beep": "浏览器FarmBot活动提示音", + "Business Documentation": "业务文档", + "Busy": "忙碌", "Button {{ num }}": "按钮 {{ num }}", - "Button {{ num }}: E-STOP": "按钮 {{ num }}: E-STOP", - "Button {{ num }}: UNLOCK": "按钮 {{ num }}: UNLOCK", + "Button {{ num }}: E-STOP": "按钮 {{ num }}:急停", + "Button {{ num }}: UNLOCK": "按钮 {{ num }}:解锁", "Button 1": "按钮 1", "Button 2": "按钮 2", "Button 3": "按钮 3", "Button 4": "按钮 4", "Button 5": "按钮 5", + "Cable Carrier Support Size": "电缆拖链支撑尺寸", + "Cable carrier support size. (default: {{ defaultConfigValue }}mm)": "电缆拖链支撑尺寸。(默认:{{ defaultConfigValue }}毫米)", "Calibrate": "校准", - "Calibrate camera first": "首先校准相机", + "Calibrate camera first": "先校准相机", "Calibrate FarmBot's camera for use in the weed detection software.": "校准 FarmBot 的相机以用于杂草检测软件。", - "Calibrate your camera in the Photos panel before detecting weeds.": "在检测杂草之前,请在照片面板中校准相机。", + "Calibrate the camera again for the selected resolution.": "针对所选分辨率重新校准相机。", + "Calibrate your camera in the Photos panel before detecting weeds.": "在“照片”面板中校准相机后再进行杂草检测。", "Calibration": "校准", - "calibration blur": "校准模糊", + "calibration blur": "校准模糊度", "Calibration card": "校准卡", - "calibration hue": "校准色调", - "calibration iterations": "校准迭代", - "calibration morph": "校准形态", - "calibration object separation": "校准物体分离", - "calibration object separation along axis": "校准物体沿轴线分离", + "calibration hue": "校准色相", + "calibration iterations": "校准迭代次数", + "calibration morph": "校准形态学处理", + "calibration object separation": "校准对象分离", + "calibration object separation along axis": "沿轴的校准对象分离", "Calibration preparation": "校准准备", "Calibration retries": "校准重试次数", - "Calibration retry reset distance (mm)": "校准重试重置距离 (mm)", + "Calibration retry reset distance (mm)": "校准重试重置距离(毫米)", "calibration saturation": "校准饱和度", "Calibration total retries": "校准总重试次数", "calibration value": "校准值", "camera": "相机", - "Camera": "照相机", + "Camera": "相机", "CAMERA": "相机", - "Camera calibrated at z-axis height": "在 z 轴高度校准的相机", + "Camera calibrated at z-axis height": "相机已在 Z 轴高度处校准", "Camera calibration": "相机校准", "Camera Calibration": "相机校准", - "Camera calibration allows correct photo rotation and placement in the Farm Designer map. Place the camera calibration card on the soil underneath the camera with the side shown below face up. The card must be fully visible to the camera.": "相机校准可确保照片在 Farm Designer 地图中正确旋转和放置。将相机校准卡放在相机下方的土壤上,下图所示的一面朝上。该卡必须完全在相机中可见。", - "Camera calibration cards are available in the shop and can be used with any FarmBot version.": "商店有售相机校准卡,可以与任何 FarmBot 版本一起使用。", - "Camera calibration required": "需要校准相机", + "Camera calibration allows correct photo rotation and placement in the Farm Designer map. Place the camera calibration card on the soil underneath the camera with the side shown below face up. The card must be fully visible to the camera.": "相机校准可确保照片正确旋转并在 Farm Designer 地图中正确定位。请将相机校准卡放在相机下方的土壤上,校准卡的正面朝上,确保相机能完整拍到校准卡。", + "Camera calibration cards are available in the shop and can be used with any FarmBot version.": "校准卡可在商店购买并适用于任意版本的 FarmBot。", + "Camera calibration required": "需要进行相机校准", "Camera not yet calibrated.": "相机尚未校准。", - "Camera offset from the UTM position in millimeters. Once calibrated, use these values to align photos to the Farm Designer grid by matching the grid and locations in photos to the grid and locations in the Farm Designer. (default: (x: {{ defaultX }}, y: {{ defaultY }}))": "相机与 UTM 位置的偏移量(以毫米为单位)。校准后,使用这些值将照片与 Farm Designer 网格对齐,方法是将照片中的网格和位置与 Farm Designer 中的网格和位置进行匹配。 (default: (x: {{ defaultX }}, y: {{ defaultY }}))", - "camera offset x": "相机x偏移 ", - "camera offset y": "相机y偏移 ", + "Camera offset from the UTM position in millimeters. Once calibrated, use these values to align photos to the Farm Designer grid by matching the grid and locations in photos to the grid and locations in the Farm Designer. (default: (x: {{ defaultX }}, y: {{ defaultY }}))": "相机相对于 UTM 位置的偏移(单位:毫米)。校准后使用这些数值将照片与 Farm Designer 网格对齐。(默认:(x: {{ defaultX }}, y: {{ defaultY }}))", + "camera offset x": "相机 X 偏移", + "camera offset y": "相机 Y 偏移", "camera rotation": "相机旋转", - "Camera rotation in degrees. This value should be minimized (to near zero) by rotating the camera in its mount until it is aligned with FarmBot's axes. (default: {{ defaultAngle }})": "相机旋转度数。应通过旋转支架上的相机直到其与 FarmBot 的轴对齐来最小化此值(接近零)。 (default: {{ defaultAngle }})", + "Camera rotation in degrees. This value should be minimized (to near zero) by rotating the camera in its mount until it is aligned with FarmBot's axes. (default: {{ defaultAngle }})": "相机旋转角度(度)。通过旋转相机支架将该值尽量减小(接近 0),使相机与 FarmBot 轴线对齐。(默认:{{ defaultAngle }})", "Camera settings": "相机设置", "Camera view": "相机视图", "camera view area": "相机视野区域", - "Camera voltage is low": "摄像头电压低", - "Camera voltage may be low. Try a different Raspberry Pi USB power cable.": "相机电压可能较低。请尝试使用其他 Raspberry Pi USB 电源线。", - "Cameras": "相机", - "Can't connect to bot": "无法连接到机器人", - "Can't edit variable name while in use.": "使用时无法编辑变量名称。", + "Camera voltage is low": "相机电压过低", + "Camera voltage may be low. Try a different Raspberry Pi USB power cable.": "相机电压可能过低,尝试更换树莓派 USB 电源线。", + "Cameras": "相机(复数)", + "Can't connect to bot": "无法连接到设备", + "Can't edit variable name while in use.": "变量正在使用中,无法编辑名称。", "Can't execute unsaved sequences": "无法执行未保存的序列", "cancel": "取消", "Cancel": "取消", - "Cannot change between Sequences and Regimens.": "无法在序列和方案之间切换。", - "Cannot create a group with these plants. Try leaving the saved garden first.": "无法使用这些植物创建组。请先尝试离开已保存的花园。", - "Cannot delete built-in pin binding.": "无法删除内置密码绑定。", - "Cannot delete while in a slot.": "在插槽中时无法删除。", - "Cannot delete while mounted.": "安装时无法删除。", - "Cannot remove points selected by filters.": "无法删除通过过滤器选择的点。", - "Caution: Changing these settings to extreme values can cause hardware malfunction. Make sure to test any new settings to verify that everything works as expected before letting your FarmBot use them unsupervised.": "警告:将这些设置更改为极端值可能会导致硬件故障。在让 FarmBot 无人监督地使用任何新设置之前,请务必测试它们以验证一切是否按预期运行。", - "Change color to {{ color }} for {{ num }} items?": "将 {{ num }} 个项目的颜色更改为 {{ color }} ?", - "Change depth to {{ depth }}mm for {{ num }} items?": "将 {{ num }} 个项目的深度更改为 {{depth }}mm?", - "Change firmware path to...": "将固件路径更改为...", - "Change Ownership": "更改所有权", + "Cannot change between Sequences and Regimens.": "无法在序列与计划之间切换。", + "Cannot create a group with these plants. Try leaving the saved garden first.": "无法使用这些植物创建分组。请先退出已保存的花园,然后重试。", + "Cannot delete built-in pin binding.": "无法删除内置引脚绑定。", + "Cannot delete while in a slot.": "在槽位内时无法删除。", + "Cannot delete while mounted.": "挂载时无法删除。", + "Cannot remove points selected by filters.": "无法移除由筛选器选中的点。", + "Caution: Changing these settings to extreme values can cause hardware malfunction. Make sure to test any new settings to verify that everything works as expected before letting your FarmBot use them unsupervised.": "注意:将这些设置改为极端值可能导致硬件故障。请务必先测试新设置以确认一切正常再让 FarmBot 在无人看管情况下运行。", + "Change {{ curveName }} curve for {{ num }} items?": "要为 {{ num }} 项更改 {{ curveName }} 曲线吗?", + "Change color to {{ color }} for {{ num }} items?": "要将 {{ num }} 项的颜色改为 {{ color }} 吗?", + "Change depth to {{ depth }}mm for {{ num }} items?": "要将 {{ num }} 项的深度改为 {{ depth }} 毫米吗?", + "Change firmware path to...": "更改固件路径为…", + "Change Ownership": "更改所有者", "Change password": "更改密码", - "Change radius to {{ radius }}mm for {{ num }} items?": "将 {{ num }} 个项目的半径更改为 {{ radius }}mm?", - "Change status to '{{ status }}' for {{ num }} items?": "将 {{ num }} 个项目的状态更改为“{{ status }}”?", - "Change the account FarmBot is connected to.": "更改 FarmBot 所连接的帐户。", - "Change the garden map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget. Overrides MAP SIZE values.": "根据轴长更改花园地图大小。必须在轴长中输入一个值,并且必须在硬件小部件中启用“在最大时停止”。覆盖地图大小值。", - "Change the image origin and check again.": "更改图像来源并再次检查。", - "Check for the FarmBot WiFi network. If it is present,": "检查 FarmBot WiFi 网络。如果存在,", + "Change radius to {{ radius }}mm for {{ num }} items?": "要将 {{ num }} 项的半径改为 {{ radius }} 毫米吗?", + "Change status to '{{ status }}' for {{ num }} items?": "要将 {{ num }} 项的状态更改为“{{ status }}”吗?", + "Change the account FarmBot is connected to.": "更改 FarmBot 所连接的账号。", + "Change the garden map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget. Overrides MAP SIZE values.": "根据轴长更改花园地图大小。须在“轴长”中输入数值,并在“硬件”控件中启用“到达最大时停止”。此设置会覆盖地图大小(MAP SIZE)值。", + "Change the image origin and check again.": "更改图像原点后再检查。", + "Check for the FarmBot WiFi network. If it is present,": "检查是否存在 FarmBot 的 WiFi 网络。如果存在,", "Check for Updates": "检查更新", - "Check hardware for resistance.": "检查硬件的阻力。", - "Check motor cable connections. Try again while observing electronics box LED activity.": "检查电机电缆连接。观察电子箱 LED 活动,然后重试。", + "Check hardware for resistance.": "检查硬件电阻情况。", + "Check motor cable connections. Try again while observing electronics box LED activity.": "检查电机线缆连接。重试时观察电子盒 LED 指示灯的状态。", "Check power cable connections.": "检查电源线连接。", - "Check the E-STOP button wiring.": "检查紧急停止按钮接线。", - "Check the LED light strip power cable connections.": "检查LED灯带电源线连接。", - "Check the side of the box your FarmBot came in. What is the labeled version?": "检查 FarmBot 所装盒子的侧面。标签上的版本是什么?", + "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1+ kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "检查相机是否正确插入树莓派的 USB 端口(Express v1.0 与所有 Genesis 套件)或 Farmduino 的垂直 USB 端口(Express v1.1+ 套件)。对于在横滑块处使用 90° 中间接头的相机,确保连接器已完全插紧。", + "Check the E-STOP button wiring.": "检查急停(E-STOP)按钮接线。", + "Check the LED light strip power cable connections.": "检查 LED 灯带电源线连接。", + "Check the side of the box your FarmBot came in. What is the labeled version?": "检查 FarmBot 外包装侧面,上面标注的版本是什么?", "Check the solenoid valve power cable connections.": "检查电磁阀电源线连接。", "Check the tube connections.": "检查管道连接。", - "Check the UNLOCK button wiring.": "检查 UNLOCK 按钮接线。", - "Check the UTM to tool electrical connections. Ensure pin jumpers are installed across the Farmduino UTM pins. Brush the top of the tool electrical connection screws and UTM pogo pins with a cloth to clean the surface and ensure good electrical conductivity. If a connection still cannot be made, try loosening and tightening the tool electrical connection M3 screws.": "检查 UTM 到工具的电气连接。确保跨 Farmduino UTM 引脚安装了引脚跳线。用布擦拭工具电气连接螺钉和 UTM 弹簧针的顶部,以清洁表面并确保良好的导电性。如果仍然无法连接,请尝试松开并拧紧工具电气连接 M3 螺钉。", - "Check the UTM top and Farmduino connections.": "检查 UTM 顶部和 Farmduino 连接。", + "Check the UNLOCK button wiring.": "检查解锁(UNLOCK)按钮接线。", + "Check the UTM to tool electrical connections. Ensure pin jumpers are installed across the Farmduino UTM pins. Brush the top of the tool electrical connection screws and UTM pogo pins with a cloth to clean the surface and ensure good electrical conductivity. If a connection still cannot be made, try loosening and tightening the tool electrical connection M3 screws.": "检查 UTM 与工具之间的电气连接。确保 Farmduino UTM 引脚上安装了跳线。用布清洁工具电气连接螺丝和 UTM 弹簧针顶部,确保良好接触。如仍无法建立连接,可尝试松开再拧紧工具电气连接的 M3 螺丝。", + "Check the UTM top and Farmduino connections.": "检查 UTM 顶部与 Farmduino 的连接。", "Check the vacuum pump power cable connections.": "检查真空泵电源线连接。", - "Check your garden hose connection and try again.": "检查您的花园软管连接并重试。", - "Check your purchase confirmation email.": "检查您的购买确认电子邮件。", + "Check your garden hose connection and try again.": "检查园艺水管连接后重试。", + "Check your purchase confirmation email.": "检查您的购买确认邮件。", "Choose a crop": "选择作物", "Choose Firmware": "选择固件", "Choose location": "选择位置", - "Choose the starting page that loads after logging in.": "选择登录后加载的起始页面。", - "Choose whether advanced step options are open or closed by default.": "选择高级步骤选项默认打开还是关闭。", - "Choose your FarmBot": "选择你的 FarmBot", + "CHOOSE STORAGE\\": "选择存储\\", + "Choose the starting page that loads after logging in.": "选择登录后显示的起始页面。", + "Choose whether advanced step options are open or closed by default.": "选择高级步骤选项默认是展开还是收起。", + "Choose your FarmBot": "选择您的 FarmBot", "clear": "清除", "clear age selection": "清除年龄选择", "clear all config data": "清除所有配置数据", "clear all filters": "清除所有筛选条件", - "Clear all group filters?": "清除所有群组过滤器?", + "Clear all group filters?": "清除所有分组筛选?", "clear filters": "清除筛选条件", "clear manual selections": "清除手动选择", "clear selections": "清除选择", "clear weeds": "清除杂草", "CLEAR WEEDS": "清除杂草", "Click": "点击", - "Click \"+\" to create a new regimen.": "单击“+”可创建新的方案。", - "Click \"+\" to create a new sequence.": "单击“+”创建一个新的序列。", - "Click and drag or use the inputs to draw a point.": "单击并拖动或使用输入来绘制一个点。", - "Click and drag or use the inputs to draw a weed.": "单击并拖动或使用输入来绘制杂草。", - "Click any location in the map to choose a profile.": "单击地图中的任意位置即可选择配置文件。", - "Click anywhere in the map to add an individual plant. If you are on a desktop or laptop computer, you may also drag and drop the crop icon into the map. If you want to make any location adjustments or delete plants, you can do that in a few steps from now. Ready to add a lot of plants at once? Go to the next step of the tour!": "单击地图上的任意位置即可添加单个植物。如果您使用的是台式机或笔记本电脑,您也可以将裁剪图标拖放到地图中。如果您想进行任何位置调整或删除植物,只需几个步骤即可完成。准备好一次添加大量植物了吗?进入游览的下一步!", - "CLICK anywhere within the grid": "点击网格内的任意位置", - "Click here for document to show to your IT department.": "单击此处获取可向 IT 部门展示的文档。", - "Click here to learn more about connectivity codes.": "单击此处了解有关连接代码的更多信息。", - "Click one in the Regimens panel to edit, or click \"+\" to create a new one.": "单击方案面板中的一个方案进行编辑,或单击“+”创建一个新的方案。", - "Click one in the Sequences panel to edit, or click \"+\" to create a new one.": "单击“序列”面板中的一个序列进行编辑,或单击“+”创建一个新的序列。", - "Click the button below to start the tour": "点击下面的按钮开始游览", - "Click the edit button to add or edit a feed URL.": "单击编辑按钮可以添加或编辑来源URL。", - "Click to add": "点击添加", - "click to edit": "点击编辑", - "click to open power and reset menu": "单击打开电源和重置菜单", - "Clip photos out of bounds": "剪辑超出范围的照片", + "Click \"+\" to create a new regimen.": "点击“+”创建新计划。", + "Click \"+\" to create a new sequence.": "点击“+”创建新序列。", + "Click and drag or use the inputs to draw a point.": "点击并拖动或使用输入框绘制一个点。", + "Click and drag or use the inputs to draw a weed.": "点击并拖动或使用输入框绘制一个杂草区域。", + "Click any location in the map to choose a profile.": "在地图上任意点击选择配置文件。", + "Click anywhere in the map to add an individual plant. If you are on a desktop or laptop computer, you may also drag and drop the crop icon into the map. If you want to make any location adjustments or delete plants, you can do that in a few steps from now. Ready to add a lot of plants at once? Go to the next step of the tour!": "在地图上任意点击以添加单个植物。在桌面或笔记本上,你也可以拖放作物图标到地图。如果需要调整位置或删除植物,可在接下来的步骤中进行。准备一次添加大量植物?继续下一步!", + "CLICK anywhere within the grid": "在网格内任意处点击", + "Click here for document to show to your IT department.": "点击此处获取给 IT 部门的文档。", + "Click here to learn more about connectivity codes.": "点击此处了解更多连接码信息。", + "Click one in the Regimens panel to edit, or click \"+\" to create a new one.": "在计划面板中点击一个以编辑,或点击“+”创建新计划。", + "Click one in the Sequences panel to edit, or click \"+\" to create a new one.": "在序列面板中点击一个以编辑,或点击“+”创建新序列。", + "Click the button below to start the tour": "点击下方按钮开始导览", + "Click the edit button to add or edit a feed URL.": "点击编辑按钮以添加或编辑订阅 URL。", + "Click to add": "点击以添加", + "click to edit": "点击以编辑", + "click to open power and reset menu": "点击打开电源与重置菜单", + "Clip photos out of bounds": "裁剪超出边界的照片", "Close": "关闭", - "close profile viewer": "关闭个人资料查看器", + "Close panel": "关闭面板", + "close profile viewer": "关闭配置查看器", "close saved garden": "关闭已保存的花园", + "Closed": "已关闭", + "collage": "拼贴", + "collapse": "折叠", "Color": "颜色", - "Color Range": "颜色范围", - "Color range. (default: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))": "颜色范围 (默认值: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))", - "Color saturation, 0 (white) to 255 (color). (default: {{ defaultLow }} - {{ defaultHigh }})": "色彩饱和度,0(白色)至 255(彩色)。 (默认值: {{ defaultLow }} - {{ defaultHigh }})", - "Color value, 0 (black) to 255 (color) (default: {{ defaultLow }} - {{ defaultHigh }})": "颜色值,0(黑色)至 255(彩色)(默认值: {{ defaultLow }} - {{ defaultHigh }})", + "Color range. (default: {{ defaultLow }} - {{ defaultHigh }} ({{ defaultColor }}))": "颜色范围。(默认:{{ defaultLow }} - {{ defaultHigh }}({{ defaultColor }}))", + "Color saturation, 0 (white) to 255 (color). (default: {{ defaultLow }} - {{ defaultHigh }})": "颜色饱和度,0(白)到 255(有颜色)。(默认:{{ defaultLow }} - {{ defaultHigh }})", + "Color value, 0 (black) to 255 (color) (default: {{ defaultLow }} - {{ defaultHigh }})": "颜色值,0(黑)到 255(有色)。(默认:{{ defaultLow }} - {{ defaultHigh }})", "colorized depth": "彩色深度", - "Command not available while locked.": "锁定时命令不可用。", + "Column Length": "列长度", + "Command not available while locked.": "锁定状态下命令不可用。", "Commands": "命令", "Commit": "提交", - "Common Names": "常用名称", + "Common Names": "俗名", "Community help": "社区帮助", - "Companions": "公司", + "Companions": "伴生植物", "complete": "完成", "Complete": "完成", - "Complete setup wizard": "完成安装向导", + "Complete setup wizard": "完成设置向导", "Complete the configurator steps.": "完成配置器步骤。", - "Completed": "完成的", - "computer": "电脑", + "Completed": "已完成", "Config data successfully deleted.": "配置数据已成功删除。", "Config editor": "配置编辑器", "Configurator": "配置器", "Configurator network": "配置器网络", - "Configurator steps": "配置器步骤", + "Configurator steps": "配置步骤", "Confirm emergency unlock": "确认紧急解锁", "Confirm New Password": "确认新密码", - "Confirm plant deletion": "确认植物删除", - "Confirm sequence deletion": "确认序列删除", - "Confirm step deletion": "确认步骤删除", + "Confirm plant deletion": "确认删除植物", + "Confirm sequence deletion": "确认删除序列", + "Confirm step deletion": "确认删除步骤", "Confirm when unlocking FarmBot after an emergency stop.": "紧急停止后解锁 FarmBot 时确认。", - "Connect the UTM cable.": "连接UTM电缆。", + "Connect the microSD card to your computer": "将 microSD 卡连接到电脑", + "Connect the UTM cable.": "连接 UTM 电缆。", "connect to Configurator": "连接到配置器", "connected": "已连接", - "Connected.": "已连接.", + "Connected": "已连接", + "Connected.": "已连接。", "Connecting FarmBot to the Internet": "将 FarmBot 连接到互联网", "Connection": "连接", + "Connection Quality": "连接质量", + "Connection type": "连接类型", "Connectivity": "连接", "CONNECTIVITY": "连接", - "Connectivity code": "连接代码", + "Connectivity code": "连接码", + "Consider moving steps into subsequences.": "考虑将步骤移动到子序列中。", + "Constant Value": "常量值", "Continue": "继续", - "Continue setup": "继续安装", - "Continue?": "是否继续?", + "Continue setup": "继续设置", + "Continue?": "继续?", "Control peripheral": "控制外设", "Control Peripheral": "控制外设", "Control servo": "控制伺服", @@ -354,88 +426,104 @@ "Controls": "控制", "Coordinate": "坐标", "copy": "复制", + "Copy curve": "复制曲线", "copy sequence": "复制序列", "copyright holders": "版权所有者", - "Could not delete image.": "无法删除图像", + "Could not delete image.": "无法删除图片。", "Could not download FarmBot OS update information.": "无法下载 FarmBot OS 更新信息。", - "Could not fetch package name": "无法获取包名称", - "Could not get release notes.": "无法获取发行说明。", + "Could not fetch package name": "无法获取软件包名称", + "Could not get release notes.": "无法获取发布说明。", + "CPU": "CPU", "CPU temperature": "CPU 温度", - "CPU usage": "CPU使用率", - "Create a new garden from scratch or by copying plants from the current garden.": "从头开始创建一个新花园或从现有花园复制植物。", - "Create a new sequence and add the FIND HOME command.": "创建一个新序列并添加 FIND HOME 命令。", - "Create Account": "创建帐户", - "Create An Account": "申请新帐号", - "Create group": "创建组", + "CPU usage": "CPU 使用率", + "Create a new garden from scratch or by copying plants from the current garden.": "新建花园,或复制当前花园中的植物。", + "Create a new sequence and add the FIND HOME command.": "创建新序列并添加“寻找原点”命令。", + "Create Account": "创建账户", + "Create An Account": "创建账户", + "Create group": "创建分组", "create subfolder": "创建子文件夹", "Create subfolder": "创建子文件夹", - "Created Point": "创建点", - "Created Weed": "创造杂草", - "Crop images displayed in the garden map to remove black borders from image rotation. Crop amount determined by CAMERA ROTATION value.": "裁剪花园地图中显示的图像,以消除图像旋转产生的黑色边框。裁剪量由相机旋转值决定。", + "Created Point": "已创建点", + "Created Weed": "已创建杂草", + "Crop images displayed in the garden map to remove black borders from image rotation. Crop amount determined by CAMERA ROTATION value.": "裁剪花园地图中显示的图像,去除旋转产生的黑边。裁剪量由相机旋转值决定。", "Crop map images": "裁剪地图图像", - "Crop search": "作物搜索", - "Position (mm)": "当前位置 (mm)", - "Current version only": "仅限当前版本", + "Crop search": "裁剪搜索", + "Current version only": "仅当前版本", + "Currently used with this crop": "当前用于此作物", + "curve": "曲线", + "Curve already has the maximum number of control points.": "曲线已达到最大控制点数。", + "Curve in use.": "曲线正在使用中。", + "Curves": "曲线", "Custom": "自定义", "Custom buttons": "自定义按钮", "Custom coordinate": "自定义坐标", "Custom coordinates": "自定义坐标", "Custom field": "自定义字段", - "Custom number": "自定义数量", + "Custom number": "自定义数字", "Custom Settings": "自定义设置", - "Custom settings can be added here and accessed via the Lua env() function.": "可以在这里添加自定义设置并通过 Lua env() 函数访问。", + "Custom settings can be added here and accessed via the Lua env() function.": "可以在此添加自定义设置,并通过 Lua 的 env() 函数访问。", "Custom text": "自定义文本", "custom tool graphics": "自定义工具图形", "Custom tools": "自定义工具", - "Data Label": "数据记录单", + "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls pop-up.": "自定义在按下电子盒上的按钮 3、4 或 5 时 FarmBot 执行的动作或序列。建议初始将按钮 5 设置为“寻找原点”序列,后续可通过控制弹窗修改。", + "Dark Mode": "深色模式", + "Data Label": "数据标签", "Date": "日期", "Date Planted": "种植日期", "Day": "天", - "Day {{day}}": "时期 {{day}}", - "day old": "日龄", - "days": "天", - "Days": "天", - "days old": "21日龄", + "DAY": "天", + "Day {{ num }}": "第 {{ num }} 天", + "Day {{day}}": "第 {{day}} 天", + "day old": "天龄", + "days": "天数", + "Days": "天数", + "days old": "天龄", + "Debug": "调试", "debug log stream": "调试日志流", "debug logs": "调试日志", "default": "默认", + "Default Axis Order": "默认轴顺序", + "Default axis order for movement. (default: X and Y together)": "默认移动轴顺序。(默认:X 和 Y 一起)", + "Default plant depth (mm)": "默认种植深度(毫米)", "Default value": "默认值", "Default Value": "默认值", "delete": "删除", "Delete": "删除", - "Delete account": "删除帐户", - "delete all": "删除所有", - "Delete all {{ count }} plants in your main garden?": "删除主花园里的所有 {{ count }} 株植物?", - "Delete all {{ count }} points in section?": "删除部分中的所有 {{ count }} 点?", + "Delete account": "删除账户", + "delete all": "全部删除", + "Delete all {{ count }} {{points}} in section?": "是否删除该区域所有 {{ count }} 个 {{points}}?", + "Delete all {{ count }} plants in your main garden?": "是否删除主花园中所有 {{ count }} 个植物?", + "Delete all {{ count }} points in section?": "是否删除该区域所有 {{ count }} 个点?", "delete all data": "删除所有数据", "Delete all logs": "删除所有日志", - "delete all plants in garden": "删除花园中的所有植物", + "delete all plants in garden": "删除花园中所有植物", + "Delete curve": "删除曲线", "delete folder": "删除文件夹", "delete garden": "删除花园", - "Delete group": "删除组", + "Delete group": "删除分组", "delete log": "删除日志", "Delete Photo": "删除照片", - "delete regimen": "删除方案", + "delete regimen": "删除计划", "delete sequence": "删除序列", "delete step": "删除步骤", "Deleted event.": "事件已删除。", - "Deleting...": "正在删除...", - "demo the app": "演示应用程序", - "DEMO THE APP": "演示应用程序", - "Deprecated Mark As": "弃用标记为", + "Deleting...": "删除中...", + "demo the app": "演示应用", + "DEMO THE APP": "演示应用", + "Deprecated Mark As": "标记为弃用", "depth (mm)": "深度(毫米)", "Description": "描述", - "Deselect all": "取消全选", - "deselect all days": "取消选择所有天", - "Detect soil height using FarmBot's camera and display the results on the Farm Designer map.": "使用 FarmBot 的相机检测土壤高度,并在 Farm Designer 地图上显示结果。", + "Deselect all": "全不选", + "deselect all days": "取消选择所有天数", + "Detect soil height using FarmBot's camera and display the results on the Farm Designer map.": "使用 FarmBot 相机检测土壤高度,并在花园设计器地图上显示结果。", "detect weeds": "检测杂草", "Detect weeds": "检测杂草", "DETECT WEEDS": "检测杂草", - "Detect weeds using FarmBot's camera and display them on the Farm Designer map.": "使用 FarmBot 的相机检测杂草,并在 Farm Designer 地图上显示。", + "Detect weeds using FarmBot's camera and display them on the Farm Designer map.": "使用 FarmBot 相机检测杂草,并显示在花园设计器地图上。", "detection blur": "检测模糊", "detection hue": "检测色调", - "detection iterations": "检测迭代", - "detection morph": "检测形态", + "detection iterations": "检测迭代次数", + "detection morph": "检测形态学", "detection saturation": "检测饱和度", "detection value": "检测值", "developer documentation": "开发者文档", @@ -444,214 +532,230 @@ "Device": "设备", "Device ID": "设备 ID", "Diagnosis": "诊断", - "Did any lights in the electronics box light up?": "电子盒中的任何灯亮了吗?", - "Did calibration complete without error logs?": "校准是否在没有错误日志的情况下完成?", - "Did FarmBot move to the end of the axis and then move back to the home position for this axis?": "FarmBot 是否移动到轴的末端,然后移动回该轴的原点位置?", - "Did FarmBot reach the home position (touching the hardstop) for this axis and set the coordinate to 0? Note: sometimes after a movement, FarmBot will settle into place and coordinates may change by +/-0.5mm from the desired value. If the coordinates are within 1mm of 0, that is acceptable.": "FarmBot 是否到达该轴的原点位置(触碰硬停止),并将坐标设置为 0?注意:有时在移动后,FarmBot 会就位,坐标可能会从所需值改变 +/-0.5mm。如果坐标在 0 的 1mm 以内,那是可以接受的。", - "Did FarmBot's {{ axis }}-axis move? (Don't worry about the direction right now)": "FarmBot 的 {{ axis }} 轴是否移动?(暂时不用担心方向)", - "Did the lights turn on?": "灯是否亮了?", - "Did the rotary tool rotate?": "旋转工具是否旋转了?", - "Did the sensor return a value?": "传感器是否返回了一个值?", - "Did the vacuum pump run?": "真空泵是否运行了?", - "Did water flow?": "水是否流动了?", - "Did you finish the tour?": "您完成导览了吗?", - "Did you know?": "您知道吗?", - "Did you mean meta.{{field}}?": "您的意思是 meta.{{field}} 吗?", - "Did you watch the video?": "您看了视频吗?", + "Did any lights in the electronics box light up?": "电子盒中的指示灯亮了吗?", + "Did calibration complete without error logs?": "校准是否无错误日志完成?", + "Did FarmBot move to the end of the axis and then move back to the home position for this axis?": "FarmBot 是否移动到轴的末端,然后返回该轴的原点位置?", + "Did FarmBot reach the home position (touching the hardstop) for this axis and set the coordinate to 0? Note: sometimes after a movement, FarmBot will settle into place and coordinates may change by +/-0.5mm from the desired value. If the coordinates are within 1mm of 0, that is acceptable.": "FarmBot 是否达到该轴的原点位置(触碰限位),并将坐标设为 0?注意:有时移动后 FarmBot 会稍作调整,坐标可能偏差 ±0.5mm,若坐标在 1mm 范围内视为合格。", + "Did FarmBot unlock? (Check the logs or try sending a movement command)": "FarmBot 是否解锁?(查看日志或尝试发送移动命令)", + "Did FarmBot's {{ axis }}-axis move? (Don't worry about the direction right now)": "FarmBot 的 {{ axis }} 轴是否移动?(当前不必担心方向)", + "Did the lights turn on?": "灯是否打开?", + "Did the rotary tool rotate?": "旋转工具是否旋转?", + "Did the sensor return a value?": "传感器是否返回数值?", + "Did the vacuum pump run?": "真空泵是否运行?", + "Did the writing process complete?": "写入过程是否完成?", + "Did water flow?": "水是否流动?", + "Did you finish the tour?": "你完成了导览吗?", + "Did you know?": "你知道吗?", + "Did you mean meta.{{field}}?": "你是否想表达 meta.{{field}}?", + "Did you select a time when you will not need to use your FarmBot?": "你是否选择了不需要使用 FarmBot 的时间?", + "Did you watch the video?": "你看过视频吗?", "digital": "数字", "Digital": "数字", "Direction": "方向", + "Direction your device is facing, as an offset in degrees from north. (default: 0)": "设备朝向方向,相对于正北的偏移角度(默认:0)", "Disable axis": "禁用轴", - "disabled": "禁用", - "Disallow account data changes. This does not prevent Farmwares or FarmBot OS from changing settings.": "不允许更改帐户数据。这不会阻止 Farmwares 或 FarmBot OS 更改设置。", + "disabled": "已禁用", + "Disallow account data changes. This does not prevent Farmwares or FarmBot OS from changing settings.": "禁止账户数据变更,但不影响 Farmwares 或 FarmBot OS 修改设置。", "Discard Unsaved Changes": "放弃未保存的更改", "Discard unsaved sequence changes": "放弃未保存的序列更改", "disconnected": "断开连接", - "Disconnected": "已断开连接", + "Disconnected": "断开连接", "Disk": "磁盘", - "Disk usage": "磁盘使用情况", - "Display a virtual trail for FarmBot in the garden map to show movement and watering history while the map is open. Toggling this setting will clear data for the current trail.": "在花园地图上显示 FarmBot 的虚拟轨迹,以显示在地图打开时的移动和浇水历史。切换此设置将清除当前轨迹的数据。", + "Disk usage": "磁盘使用率", + "Display a virtual trail for FarmBot in the garden map to show movement and watering history while the map is open. Toggling this setting will clear data for the current trail.": "在花园地图中显示 FarmBot 的虚拟轨迹,以展示移动和浇水历史。切换此设置将清除当前轨迹数据。", + "Display bounds. (default: 0)": "显示边界。(默认:0)", "Display Encoder Data": "显示编码器数据", - "Display high motor load warning indicators in map. Requires TRAIL and stall detection to be enabled.": "在地图上显示高电机负载警告指示器。需要启用 TRAIL 和停滞检测。", + "Display grid. (default: 0)": "显示网格。(默认:0)", + "Display high motor load warning indicators in map. Requires TRAIL and stall detection to be enabled.": "在地图中显示高电机负载警告。需启用轨迹和堵转检测。", "Display raw": "显示原始数据", - "Display seconds in time, i.e., 10:00:00am instead of 10:00am": "显示时间中的秒,例如,10:00:00 而不是 10:00", - "Display time using the 24-hour notation, i.e., 23:00 instead of 11:00pm": "使用 24 小时计时法显示时间,例如,23:00 而不是 11:00pm", + "Display seconds in time, i.e., 10:00:00am instead of 10:00am": "时间显示秒数,例如 10:00:00 上午而非 10:00 上午", + "Display time using the 24-hour notation, i.e., 23:00 instead of 11:00pm": "使用 24 小时制显示时间,如 23:00 而非 11:00pm", "Distance": "距离", - "Distance between calibration objects in millimeters. The distance between the objects on the camera calibration card is 100mm. (default: {{ defaultSeparation }})": "校准对象之间的距离,以毫米为单位。相机校准卡上的对象之间的距离为 100 毫米。(默认:{{ defaultSeparation }})", - "Distance in millimeters to group calibration retries. If the distance traveled while detecting the axis end location exceeds this value, the calibration retry counter is reset. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "按组校准重试的距离(毫米)。如果在检测轴端位置时行进的距离超过此值,则校准重试计数器将重置。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Do you want to": "您想要", + "Distance between calibration objects in millimeters. The distance between the objects on the camera calibration card is 100mm. (default: {{ defaultSeparation }})": "校准物体间距离,单位毫米。相机校准卡上物体距离为 100mm。(默认:{{ defaultSeparation }})", + "Distance in millimeters to group calibration retries. If the distance traveled while detecting the axis end location exceeds this value, the calibration retry counter is reset. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "以毫米为单位,分组校准重试距离。检测轴端位置移动距离超过该值时,重试计数器重置。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Do you want to": "你想要", "Documentation": "文档", - "documentation page for adjustment suggestions.": "调整建议的文档页面。", + "documentation page for adjustment suggestions.": "调整建议文档页面。", "Does the image include red and green highlighted regions?": "图像是否包含红色和绿色高亮区域?", - "Does the image look OK?": "图像看起来正常吗?", - "Does the toggle indicate ON?": "开关是否显示为开启?", - "Does the virtual FarmBot match your real life FarmBot?": "虚拟 FarmBot 是否与您现实中的 FarmBot 匹配?", - "Don't allow movement past the maximum value provided in AXIS LENGTH (for AXIS LENGTH values other than '0'). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "不允许超过 AXIS LENGTH 提供的最大值(对于 AXIS LENGTH 值不为 '0' 的情况)。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Don't ask about saving sequence work before closing browser tab. Warning: may cause loss of data.": "在关闭浏览器标签之前不要询问是否保存序列工作。警告:可能导致数据丢失。", - "Don't ask about saving work before closing browser tab. Warning: may cause loss of data.": "在关闭浏览器标签之前不要询问是否保存工作。警告:可能导致数据丢失。", - "Don't save weeds detected outside of garden bed. (default: {{ defaultUseBounds }})": "不要保存花坛外检测到的杂草。(默认:{{ defaultUseBounds }})", + "Does the image look OK?": "图像是否正常?", + "Does the toggle indicate ON?": "切换开关是否显示开启?", + "Does the virtual FarmBot match your real life FarmBot?": "虚拟 FarmBot 是否与真实 FarmBot 匹配?", + "Don't allow movement past the maximum value provided in AXIS LENGTH (for AXIS LENGTH values other than '0'). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "不允许超过轴长度(AXIS LENGTH)中设定的最大值移动(非 0 时)。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Don't ask about saving sequence work before closing browser tab. Warning: may cause loss of data.": "关闭浏览器标签前不询问是否保存序列。警告:可能导致数据丢失。", + "Don't ask about saving work before closing browser tab. Warning: may cause loss of data.": "关闭浏览器标签前不询问是否保存工作。警告:可能导致数据丢失。", + "Don't save weeds detected outside of garden bed. (default: {{ defaultUseBounds }})": "不保存检测到的花坛外杂草。(默认:{{ defaultUseBounds }})", + "Double-check the URL or explore the navigation bar.": "请再次确认 URL,或浏览导航栏。", "DOWNGRADE TO": "降级到", + "Download": "下载", "DOWNLOAD": "下载", "Download FarmBot OS": "下载 FarmBot OS", "Download Link": "下载链接", "Download Photo": "下载照片", - "Download the version of FarmBot OS that corresponds to your FarmBot kit and its internal computer.": "下载与您的 FarmBot 套件及其内部计算机相对应的 FarmBot OS 版本。", - "Drag a box around the items you would like to select.": "拖动一个框选择你想要的项目。", - "Drag and drop": "拖放", - "DRAG COMMAND HERE": "在此拖动命令", - "duplicate step": "重复步骤", + "Download Raspberry Pi Imager": "下载树莓派映像写入工具", + "Download the version of FarmBot OS that corresponds to your FarmBot kit and its internal computer.": "下载与你的 FarmBot 套件及其内部计算机对应的 FarmBot OS 版本。", + "Drag a box around the items you would like to select.": "拖动框选中你想选择的项目。", + "Drag and drop": "拖拽", + "DRAG COMMAND HERE": "将命令拖到这里", + "duplicate step": "复制步骤", + "duration": "持续时间", "Dynamic map size": "动态地图大小", "E-STOP": "紧急停止", "E-stop button": "紧急停止按钮", "E-STOP Button": "紧急停止按钮", - "E-Stop on Movement Error": "运动错误时紧急停止", - "Edit": "编辑工作", + "E-Stop on Movement Error": "移动错误时紧急停止", + "Edit": "编辑", + "edit curve": "编辑曲线", "Edit event": "编辑事件", - "edit filter settings": "编辑过滤设置", + "edit filter settings": "编辑滤波设置", "edit folder": "编辑文件夹", "Edit garden": "编辑花园", - "Edit group": "编辑组", - "edit in map": "在地图中编辑", - "Edit on": "编辑开启", - "Edit plant group": "编辑植物组", - "Edit point group": "编辑点组", - "Edit slot": "编辑插槽", - "Edit slot coordinates": "编辑插槽坐标", - "Edit slot coordinates setup": "编辑插槽坐标设置", - "Edit slot group": "编辑插槽组", - "Edit slot panel": "编辑插槽面板", + "Edit group": "编辑分组", + "edit in map": "地图中编辑", + "Edit plant group": "编辑植物分组", + "Edit point group": "编辑点分组", + "Edit slot": "编辑槽位", + "Edit slot coordinates": "编辑槽位坐标", + "Edit slot coordinates setup": "编辑槽位坐标设置", + "Edit slot group": "编辑槽位分组", + "Edit slot panel": "编辑槽位面板", "Edit tool": "编辑工具", "Edit weed": "编辑杂草", - "Edit weed group": "编辑杂草组", + "Edit weed group": "编辑杂草分组", "Education Documentation": "教育文档", "Electronics Board": "电子板", "Else Execute": "否则执行", - "email": "电子邮件", - "Email": "电子邮件", - "Email has been sent.": "电子邮件已发送。", + "email": "邮箱", + "Email": "邮箱", + "Email has been sent.": "邮件已发送。", "emergency stop": "紧急停止", "Emergency stop": "紧急停止", "Emergency stop active": "紧急停止激活", - "Emergency stop if movement is not complete after the maximum number of retries. (default: {{ eStopOnError }})": "如果运动在最大重试次数后未完成,则紧急停止。 (默认: {{ eStopOnError }})", + "Emergency stop if movement is not complete after the maximum number of retries. (default: {{ eStopOnError }})": "如果达到最大重试次数仍未完成移动,则紧急停止。(默认:{{ eStopOnError }})", "Emergency unlock": "紧急解锁", "Empty": "空", - "Enable 2nd X Motor": "启用第二个X电机", + "Enable 2nd X Motor": "启用第二个 X 轴电机", + "Enable 3D electronics box": "启用 3D 电子盒", + "Enable a dark interface theme.": "启用深色界面主题。", "Enable Encoders": "启用编码器", "Enable limit switches": "启用限位开关", "Enable plant animations in the garden map.": "在花园地图中启用植物动画。", - "Enable quiet motors. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用安静电机。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable quiet motors. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用静音电机。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "Enable sequence begin logs": "启用序列开始日志", "Enable sequence complete logs": "启用序列完成日志", "Enable sequence step logs": "启用序列步骤日志", - "Enable Stall Detection": "启用卡住检测", - "Enable use of a second x-axis motor. Connects to E0 on RAMPS. (default: {{ x2Motor }})": "启用使用第二个X轴电机。连接到RAMPS上的E0。 (默认: {{ x2Motor }})", - "Enable use of electronic limit switches for end detection, finding axis length, and homing. Limit switches are contact switches or momentary push buttons that can be added to the end of each axis to be engaged when an axis reaches the end. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用使用电子限位开关进行末端检测、轴长度测量和归位。限位开关是接触开关或瞬时按钮,可添加到每个轴的末端,当轴到达末端时触发。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Enable use of motor stall detection for detecting missed steps, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用电机卡住检测,用于检测错过的步骤、轴长度测量和归位。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Enable use of rotary encoders for stall detection, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用使用旋转编码器进行卡住检测、轴长度测量和归位。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable Stall Detection": "启用堵转检测", + "Enable use of a second x-axis motor. Connects to E0 on RAMPS. (default: {{ x2Motor }})": "启用第二个 X 轴电机,连接至 RAMPS 的 E0 端口。(默认:{{ x2Motor }})", + "Enable use of electronic limit switches for end detection, finding axis length, and homing. Limit switches are contact switches or momentary push buttons that can be added to the end of each axis to be engaged when an axis reaches the end. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用电子限位开关,用于末端检测、测量轴长和回原点。限位开关是接触式开关或瞬时按钮,可安装在轴末端,在轴达到末端时触发。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable use of motor stall detection for detecting missed steps, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用电机堵转检测,用于检测丢步、测量轴长和回原点。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Enable use of rotary encoders for stall detection, finding axis length, and homing. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "启用旋转编码器,用于堵转检测、测量轴长和回原点。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "enabled": "已启用", + "Encoder (mm)": "编码器(毫米)", + "Encoder (raw)": "编码器(原始值)", "Encoder Scaling": "编码器缩放", - "encoder scaling factor = 10000 * (motor resolution) / (encoder resolution). (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))": "编码器缩放因子 = 10000 * (电机分辨率) / (编码器分辨率)。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))", + "encoder scaling factor = 10000 * (motor resolution) / (encoder resolution). (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (10000*200/360))": "编码器缩放因子 = 10000 *(电机分辨率)/(编码器分辨率)。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }}(10000*200/360))", "ENCODER TYPE": "编码器类型", "Encoders": "编码器", - "End date must not be before start date.": "结束日期不得早于开始日期。", - "End time must be after start time.": "结束时间必须在开始时间之后。", - "Ensure that the camera lens is not covered and there is adequate lighting. Try unplugging the camera and plugging it back in.": "确保摄像头镜头没有被遮盖并且有足够的光线。尝试拔下摄像头然后重新插入。", - "Enter Email": "输入电子邮件", + "End date must not be before start date.": "结束日期不能早于开始日期。", + "End time must be after start time.": "结束时间必须晚于开始时间。", + "Ensure that the camera lens is not covered and there is adequate lighting. Try unplugging the camera and plugging it back in.": "确保相机镜头未被遮挡且光线充足。尝试拔掉相机再重新连接。", + "Enter Email": "输入邮箱", "Enter Password": "输入密码", "Entire system": "整个系统", "ENV Editor": "环境变量编辑器", "Environment": "环境", - "Environment variables added here can be accessed via the LUA sequence step 'env()' function.": "在此添加的环境变量可以通过LUA序列步骤 'env()' 函数访问。", + "Environment variables added here can be accessed via the LUA sequence step 'env()' function.": "在此添加的环境变量可通过 LUA 序列步骤中的 'env()' 函数访问。", "error": "错误", "Error": "错误", "Error deleting config data": "删除配置数据时出错", "Error Handling": "错误处理", - "Error taking photo": "拍照错误", + "Error taking photo": "拍照出错", "Error: tour step does not exist": "错误:导览步骤不存在", "Ethernet connection (optional)": "以太网连接(可选)", - "Evaluate Lua commands. For power users and software developers.": "评估Lua命令。适用于高级用户和软件开发人员。", - "Event start time needs to be in the future, not the past.": "事件开始时间需要是将来,而不是过去。", + "Evaluate Lua commands. For power users and software developers.": "执行 Lua 命令,适用于高级用户和软件开发者。", + "Event start time needs to be in the future, not the past.": "事件开始时间必须是未来时间,不能是过去时间。", "Events": "事件", "Every": "每", - "Execute a sequence if a condition is satisfied. If the condition is not satisfied, chose to do nothing or execute a different sequence.": "如果满足条件则执行序列。如果不满足条件,可以选择不执行或执行不同的序列。", - "Execute Lua commands. For power users and software developers.": "执行Lua命令。适用于高级用户和软件开发人员。", + "Execute a sequence if a condition is satisfied. If the condition is not satisfied, chose to do nothing or execute a different sequence.": "条件满足时执行序列,条件不满足时可选择不执行或执行其他序列。", + "Execute Lua commands. For power users and software developers.": "执行 Lua 命令,适用于高级用户和软件开发者。", "Execute sequence": "执行序列", "Execute Sequence": "执行序列", "exit": "退出", "Exit": "退出", + "Expected height (mm)": "期望高度(毫米)", + "Expected spread (mm)": "期望扩展范围(毫米)", "Export": "导出", - "Export all data related to this device. Exports are delivered via email as JSON file attachments.": "导出与此设备相关的所有数据。导出内容通过电子邮件作为JSON文件附件发送。", + "Export all data related to this device. Exports are delivered via email as JSON file attachments.": "导出所有与此设备相关的数据。导出文件将以 JSON 附件通过邮件发送。", "Export data": "导出数据", "Export parameters": "导出参数", - "Export request received. Please allow up to 10 minutes for delivery.": "已收到导出请求。请等待最多10分钟以完成交付。", + "Export request received. Please allow up to 10 minutes for delivery.": "已收到导出请求,请等待最多10分钟送达。", "Express Documentation": "快速文档", "ext": "扩展名", "Externally defined": "外部定义", - "extras": "额外", + "extras": "附加内容", "Factory reset": "恢复出厂设置", "Fallback Soil Height": "备用土壤高度", "false": "假", - "Farm Designer": "农场设计器", - "FarmBot": "农场机器人", - "FarmBot and the browser are both connected to the internet (or have been recently). Try rebooting FarmBot and refreshing the browser. If the issue persists, something may be preventing FarmBot from accessing the message broker (used to communicate with your web browser in real-time). If you are on a company or school network, a firewall may be blocking port 5672 or port 8883. Ensure that the blue LED communications light on the FarmBot electronics box is illuminated.": "FarmBot和浏览器都连接到互联网(或最近连接过)。尝试重启FarmBot并刷新浏览器。如果问题仍然存在,可能是FarmBot无法访问消息代理(用于与您的网络浏览器实时通信)。如果您在公司或学校网络上,防火墙可能会阻止端口5672或端口8883。确保FarmBot电子箱上的蓝色LED通信灯亮着。", - "FarmBot and the browser both have internet connectivity, but we haven't seen any activity from FarmBot on the Web App in a while. This could mean that FarmBot has not synced in a while, which might not be a problem. If you are experiencing usability issues, however, it could be a sign of HTTP blockage on FarmBot's local internet connection.": "FarmBot和浏览器都连接到互联网,但我们已经有一段时间没有在Web应用程序上看到FarmBot的任何活动了。这可能意味着FarmBot有一段时间没有同步了,这可能不是问题。但是,如果您遇到可用性问题,这可能是FarmBot本地互联网连接上的HTTP阻塞的迹象。", - "FarmBot forum": "FarmBot论坛", - "FarmBot forum.": "FarmBot论坛。", - "FarmBot Info": "FarmBot信息", - "FarmBot is already at the home position": "FarmBot已经在原位", - "FarmBot is at position ": "FarmBot当前位置为", - "FarmBot is busy": "FarmBot正在忙碌", - "FarmBot is locked": "FarmBot已锁定", - "FarmBot is not connected.": "FarmBot未连接", - "FarmBot is offline": "FarmBot离线", - "FarmBot Kit": "FarmBot套件", - "FarmBot model": "FarmBot型号", - "FarmBot motor load": "FarmBot电机负载", - "FarmBot Network Requirements": "FarmBot网络要求", - "FarmBot origin (home) location in images. If the origin does not correspond to an image corner, rotate the camera until one does. (default: {{ defaultOrigin }})": "FarmBot在图像中的原点(原位)位置。如果原点不对应图像的一个角落,请旋转相机直到原点对应。(默认值:{{ defaultOrigin }})", - "Farmbot OS": "Farmbot操作系统", - "FarmBot OS": "FarmBot操作系统", - "FarmBot OS action.": "FarmBot操作系统操作。", - "FarmBot OS or micro-controller firmware action.": "FarmBot操作系统或微控制器固件操作。", - "FarmBot OS update": "FarmBot操作系统更新", - "FarmBot OS will automatically download and install software updates at the chosen time.": "FarmBot操作系统将在选定的时间自动下载并安装软件更新。", - "FarmBot position (X, Y, Z)": "FarmBot位置(X, Y, Z)", - "FarmBot position unknown.": "FarmBot位置未知。", - "FarmBot sent a malformed message. You may need to upgrade FarmBot OS. Please upgrade FarmBot OS and log back in.": "FarmBot发送了格式错误的消息。您可能需要升级FarmBot操作系统。请升级FarmBot操作系统并重新登录。", - "FarmBot soil z": "FarmBot土壤z", - "FarmBot Version": "FarmBot版本", - "FarmBot Web App": "FarmBot Web应用程序", - "FarmBot's current position": "FarmBot的当前位置", - "FarmBot's motors are still powered": "FarmBot的电机仍然通电", - "FarmBot's motors are still unpowered": "FarmBot的电机仍然未通电", - "Farmduino firmware is missing. Press the yellow FLASH FIRMWARE button to flash the firmware to your FarmBot. Verify FIRMWARE selection matches FarmBot kit version and check the USB cable between the Raspberry Pi and the Farmduino. Reboot FarmBot after a reconnection. If the issue persists, reconfiguration of FarmBot OS may be necessary.": "Farmduino固件丢失。按下黄色的闪存固件按钮将固件刷新到您的FarmBot上。确认固件选择与FarmBot套件版本匹配,并检查Raspberry Pi和Farmduino之间的USB电缆。重新连接后重启FarmBot。如果问题仍然存在,可能需要重新配置FarmBot操作系统。", - "Farmware execution": "Farmware执行", - "Farmware manifest URL": "Farmware清单URL", - "Farmware not found.": "找不到Farmware。", - "Farmware Tools version": "Farmware工具版本", - "Featured Sequences": "特色序列", - "Featured Shared Sequences": "特色共享序列", - "Featured shared sequences published by FarmBot Inc.": "由FarmBot公司发布的特色共享序列。", - "Feed Name": "Feed名称", + "Farm Designer": "花园设计器", + "FarmBot": "FarmBot", + "FarmBot and the browser are both connected to the internet (or have been recently). Try rebooting FarmBot and refreshing the browser. If the issue persists, something may be preventing FarmBot from accessing the message broker (used to communicate with your web browser in real-time). If you are on a company or school network, a firewall may be blocking port 5672 or port 8883. Ensure that the blue LED communications light on the FarmBot electronics box is illuminated.": "FarmBot 和浏览器均已连接互联网(或最近连接过)。尝试重启 FarmBot 并刷新浏览器。如果问题依旧,可能有东西阻止 FarmBot 访问消息代理(用于实时通信)。如果你在公司或学校网络,防火墙可能屏蔽了端口 5672 或 8883。确认 FarmBot 电子盒上的蓝色通信指示灯已点亮。", + "FarmBot and the browser both have internet connectivity, but we haven't seen any activity from FarmBot on the Web App in a while. This could mean that FarmBot has not synced in a while, which might not be a problem. If you are experiencing usability issues, however, it could be a sign of HTTP blockage on FarmBot's local internet connection.": "FarmBot 和浏览器均有网络连接,但 Web 应用长时间未见 FarmBot 活动。这可能意味着 FarmBot 长时间未同步,通常没问题。但若遇到使用问题,可能是 FarmBot 本地网络 HTTP 被阻断的迹象。", + "FarmBot Connection": "FarmBot 连接", + "FarmBot forum": "FarmBot 论坛", + "FarmBot forum.": "FarmBot 论坛。", + "FarmBot Info": "FarmBot 信息", + "FarmBot is already at the home position": "FarmBot 已在原点位置", + "FarmBot is at position ": "FarmBot 当前位置:", + "FarmBot is busy": "FarmBot 正忙", + "FarmBot is locked": "FarmBot 已锁定", + "FarmBot is not connected.": "FarmBot 未连接。", + "FarmBot is offline": "FarmBot 离线", + "FarmBot Kit": "FarmBot 套件", + "FarmBot model": "FarmBot 型号", + "FarmBot motor load": "FarmBot 电机负载", + "FarmBot Network Requirements": "FarmBot 网络需求", + "FarmBot origin (home) location in images. If the origin does not correspond to an image corner, rotate the camera until one does. (default: {{ defaultOrigin }})": "FarmBot 原点(家点)在图像中的位置。如果原点不对应图像角落,请旋转相机直到对应。(默认:{{ defaultOrigin }})", + "Farmbot OS": "Farmbot 操作系统", + "FarmBot OS": "FarmBot 操作系统", + "FarmBot OS action.": "FarmBot OS 动作。", + "FarmBot OS or micro-controller firmware action.": "FarmBot OS 或微控制器固件动作。", + "FarmBot OS update": "FarmBot OS 更新", + "FarmBot OS will automatically download and install software updates at the chosen time.": "FarmBot OS 会在指定时间自动下载并安装软件更新。", + "FarmBot position (X, Y, Z)": "FarmBot 位置(X, Y, Z)", + "FarmBot position unknown.": "FarmBot 位置未知。", + "FarmBot sent a malformed message. You may need to upgrade FarmBot OS. Please upgrade FarmBot OS and log back in.": "FarmBot 发送了格式错误的消息。可能需要升级 FarmBot OS。请升级后重新登录。", + "FarmBot soil z": "FarmBot 土壤 Z 轴高度", + "FarmBot Version": "FarmBot 版本", + "FarmBot's current position": "FarmBot 当前的位置", + "FarmBot's motors are still powered": "FarmBot 的电机仍然通电", + "FarmBot's motors are still unpowered": "FarmBot 的电机未通电", + "Farmduino firmware is missing. Press the yellow FLASH FIRMWARE button to flash the firmware to your FarmBot. Verify FIRMWARE selection matches FarmBot kit version and check the USB cable between the Raspberry Pi and the Farmduino. Reboot FarmBot after a reconnection. If the issue persists, reconfiguration of FarmBot OS may be necessary.": "缺少 Farmduino 固件。请按黄色“刷写固件”按钮刷写固件。确认固件选择匹配你的 FarmBot 套件版本,并检查树莓派与 Farmduino 之间的 USB 线。重新连接后重启 FarmBot。如果问题依旧,可能需重新配置 FarmBot OS。", + "Farmware": "Farmware", + "Farmware execution": "Farmware 执行", + "Farmware manifest URL": "Farmware 清单 URL", + "Farmware not found.": "未找到 Farmware。", + "Farmware Tools version": "Farmware 工具版本", + "Featured Sequences": "精选序列", + "Featured shared sequences published by FarmBot Inc.": "FarmBot 公司发布的精选共享序列。", + "Feed Name": "数据源名称", "Feedback already sent.": "反馈已发送。", "Feedback sent.": "反馈已发送。", - "Feedback submitted through this form will be linked to your user account and email so that we may follow up when necessary. If your account email is not the best way for us to reach you, please include your phone number or preferred means of contact.": "通过此表单提交的反馈将链接到您的用户账户和电子邮件,以便我们在必要时跟进。如果您的账户电子邮件不是我们联系您的最佳方式,请包括您的电话号码或首选联系方式。", + "Feedback submitted through this form will be linked to your user account and email so that we may follow up when necessary. If your account email is not the best way for us to reach you, please include your phone number or preferred means of contact.": "通过此表单提交的反馈将关联您的用户账户和邮箱,以便我们在必要时跟进。如果您的账户邮箱不是最佳联系方式,请提供电话号码或首选联系方式。", "field": "字段", "filter": "过滤器", "Filter map photos": "过滤地图照片", "filters": "过滤器", - "Find a detail in the image at the soil level where the coordinates are known (for example, a spot watered by FarmBot), and compare the known coordinates against the location for the detail shown in the map.": "在图像中找到土壤水平上坐标已知的细节(例如,FarmBot浇水的地点),并将已知坐标与地图中显示的细节位置进行比较。", - "Find axis length": "查找轴长度", - "find home": "查找原点", - "Find home": "查找原点", - "Find Home": "查找原点", - "FIND HOME": "查找原点", - "FIND HOME {{ axis }}": "查找原点 {{ axis }}", - "Find Home on Boot": "在启动时查找原点", - "FIND LENGTH": "查找长度", + "Find a detail in the image at the soil level where the coordinates are known (for example, a spot watered by FarmBot), and compare the known coordinates against the location for the detail shown in the map.": "在土壤层图像中找到已知坐标的细节(例如 FarmBot 浇水点),并将已知坐标与地图上细节位置进行比较。", + "Find axis length": "测量轴长度", + "find home": "寻找原点", + "Find home": "寻找原点", + "Find Home": "寻找原点", + "FIND HOME": "寻找原点", + "FIND HOME {{ axis }}": "寻找原点 {{ axis }} 轴", + "Find Home on Boot": "启动时寻找原点", + "FIND LENGTH": "测量长度", "Find out more": "了解更多", - "Finish creating the group": "完成创建组", - "Finish setting up your account and FarmBot using our setup wizard. To open the setup wizard, click the **Setup: {{ percentComplete }}** button in the main navigation bar.": "使用我们的设置向导完成账户和FarmBot的设置。要打开设置向导,请点击主导航栏中的**设置: {{ percentComplete }}**按钮。", + "Finish creating the group": "完成创建分组", + "Finish setting up your account and FarmBot using our setup wizard. To open the setup wizard, click the **Setup: {{ percentComplete }}** button in the main navigation bar.": "使用设置向导完成账户和 FarmBot 的设置。点击主导航栏的 **Setup: {{ percentComplete }}** 按钮打开设置向导。", "Finish setup": "完成设置", "Firmware": "固件", "FIRMWARE": "固件", @@ -659,278 +763,322 @@ "Firmware commit": "固件提交", "Firmware Name": "固件名称", "Firmware path": "固件路径", - "Firmware value reported from the firmware, as understood by FarmBot OS.": "FarmBot操作系统理解的由固件报告的固件值。", + "Firmware value from your choice in the dropdown to the right, as understood by the Web App.": "固件值,来源于右侧下拉选择,由 Web 应用识别。", + "Firmware value reported from the firmware, as understood by FarmBot OS.": "固件报告的固件值,由 FarmBot OS 识别。", "Firmware value reported from the firmware.": "固件报告的固件值。", - "Fix issues above to continue.": "修复上述问题以继续。", - "flash": "闪存", - "flash firmware": "刷新固件", - "Flash firmware": "刷新固件", - "Flash Firmware": "刷新固件", - "follow": "跟随", - "for help, please provide a detailed description of what you need help with and we'll get in touch.": "如需帮助,请提供详细描述我们需要帮助的内容,我们将与您联系。", - "For IT Security Professionals": "为IT安全专业人士提供", + "Fix issues above to continue.": "修复以上问题以继续。", + "flash": "刷写", + "flash firmware": "刷写固件", + "Flash firmware": "刷写固件", + "Flash Firmware": "刷写固件", + "follow": "关注", + "For a profile view of FarmBot's current location in the virtual garden, open the profile viewer.": "要查看 FarmBot 在虚拟花园中的当前位置侧视图,请打开侧视图查看器。", + "for help, please provide a detailed description of what you need help with and we'll get in touch.": "需要帮助时,请详细描述您的问题,我们会与您联系。", + "For IT Security Professionals": "针对 IT 安全专业人员", "for more information.": "了解更多信息。", "Forgot password?": "忘记密码?", "Formula": "公式", "from": "来自", - "front": "前方", - "Fun": "乐趣", + "front": "前面", + "fullscreen": "全屏", + "Fully raised tool head": "工具头完全抬起", + "Fun": "趣味", "FYI": "供参考", "Gantry": "龙门架", + "Gantry beam extrusion length. (default: {{ defaultConfigValue }}mm)": "龙门梁挤出长度。(默认:{{ defaultConfigValue }}毫米)", + "Gantry column extrusion length. (default: {{ defaultConfigValue }}mm)": "龙门柱挤出长度。(默认:{{ defaultConfigValue }}毫米)", "Gantry Height": "龙门架高度", - "Gantry-mounted": "龙门架安装", + "Gantry main beam": "龙门主梁", + "Gantry-mounted": "安装在龙门架上", "Garden": "花园", "Garden not found.": "未找到花园。", "Garden Saved.": "花园已保存。", "Gardens": "花园", - "Genesis Documentation": "Genesis文档", - "Genesis v1.2 through v1.4 bots did not include the camera calibration card. Instead, these kits included red calibration objects and must be calibrated using an alternative method": "Genesis v1.2至v1.4的机器人未包含相机校准卡。相反,这些套件包含红色校准物体,必须使用其他方法进行校准", - "Get growing!": "开始种植!", + "generate code": "生成代码", + "generating": "生成中", + "Genesis Documentation": "Genesis 文档", + "Genesis v1.2 through v1.4 bots did not include the camera calibration card. Instead, these kits included red calibration objects and must be calibrated using an alternative method": "Genesis v1.2 到 v1.4 版本的机器人未包含相机校准卡。这些套件包含红色校准物体,需使用替代方法进行校准。", + "Get growing!": "开始种植吧!", "Get Help": "获取帮助", - "Get in touch with our support staff. Only available to customers who have purchased a full FarmBot kit from FarmBot Inc.": "与我们的支持人员联系。仅适用于从FarmBot公司购买了完整FarmBot套件的客户。", - "Get in touch with our support staff. Only available to customers with a": "与我们的支持人员联系。仅适用于拥有", - "Get Started": "开始", - "Getting started": "入门", - "Getting Started": "入门", - "Give your group a descriptive name such as \"All Spinach Plants\". When you are finished editing your group press the back button and advance the tour.": "为您的组提供一个描述性名称,例如“所有菠菜植物”。完成编辑组后,按返回按钮继续导览。", - "GO": "走", - "Go ahead and add more groups. It is best to have a group for every set of plants where you wish to perform the same operation (such as watering) on each member of the group. Once you have added additional groups, you are finished with this tour!": "继续添加更多组。最好为每组植物分配一个组,您希望对组中的每个成员执行相同的操作(例如浇水)。添加更多组后,您就完成了这次导览!", - "Go ahead and add more plants to your garden. Once you have added at least two crop types, advance the tour.": "继续在您的花园中添加更多植物。一旦您添加了至少两种作物类型,请继续导览。", + "Get in touch with our support staff. Only available to customers who have purchased a full FarmBot kit from FarmBot Inc.": "联系我们的支持团队。仅限已购买完整FarmBot套件的客户使用。", + "Get in touch with our support staff. Only available to customers with a": "联系我们的支持团队。仅限拥有…的客户使用", + "Get Started": "开始使用", + "Getting started": "入门指南", + "Getting Started": "入门指南", + "Give your group a descriptive name such as \"All Spinach Plants\". When you are finished editing your group press the back button and advance the tour.": "给你的分组取一个描述性名称,例如“所有菠菜植物”。编辑完成后,按返回键并继续导览。", + "GO": "开始", + "Go ahead and add more groups. It is best to have a group for every set of plants where you wish to perform the same operation (such as watering) on each member of the group. Once you have added additional groups, you are finished with this tour!": "继续添加更多分组。最好为每一组想要执行相同操作(例如浇水)的植物建立分组。添加完成后,此导览即结束!", + "Go ahead and add more plants to your garden. Once you have added at least two crop types, advance the tour.": "继续向你的花园添加更多植物。添加至少两种作物后,继续导览。", "go back": "返回", - "good": "好", + "good": "良好", + "Good": "良好", "Grace Period": "宽限期", "Gray": "灰色", "grayscale depth": "灰度深度", "Greater than": "大于", "Green": "绿色", - "Grid and row planting": "网格和行种植", - "Grid point": "网格点", - "Group": "组", - "Group Filters": "组过滤器", - "GROUP MEMBERS ({{count}})": "组成员 ({{count}})", - "Groups": "组", - "Groups of plants are listed in the groups section. Once you create some groups, they will be listed here for you to view and manage. To make your first group, press the group + button and then advance the tour.": "植物组列在组部分。一旦您创建了一些组,它们将列在这里供您查看和管理。要创建您的第一个组,请按组 + 按钮,然后继续导览。", - "Growing Degree Days": "生长度日", + "grid": "网格", + "Grid": "网格", + "Grid and row planting": "网格和行植法", + "Group": "分组", + "Group Filters": "分组过滤器", + "GROUP MEMBERS ({{count}})": "分组成员({{count}})", + "Groups": "分组", + "Groups of plants are listed in the groups section. Once you create some groups, they will be listed here for you to view and manage. To make your first group, press the group + button and then advance the tour.": "植物分组会列在分组部分。创建后,这里会显示分组以便查看和管理。创建第一个分组,点击分组“+”按钮,然后继续导览。", + "Growing Degree Days": "生长积温", "Hard": "硬", "Hard Reset": "硬重置", "HARD RESET": "硬重置", - "Hard reset your FarmBot by reflashing the latest version of FarmBot OS onto the microSD card. This will erase all data from the device and allow you to start from a clean slate. This is recommended if you are experiencing problems with your setup. Upon hard resetting, your device will go into Configurator mode.": "通过将FarmBot操作系统的最新版本刷新到microSD卡来硬重置您的FarmBot。这将擦除设备上的所有数据,并允许您从头开始。如果您在设置中遇到问题,建议这样做。硬重置后,您的设备将进入配置模式。", + "Hard reset your FarmBot by reflashing the latest version of FarmBot OS onto the microSD card. This will erase all data from the device and allow you to start from a clean slate. This is recommended if you are experiencing problems with your setup. Upon hard resetting, your device will go into Configurator mode.": "通过将最新版本的 FarmBot OS 重新刷写到 microSD 卡上,对 FarmBot 进行硬重置。这将清除设备上所有数据,使你可以重新开始。如果你的设备有问题,建议使用此方法。硬重置后,设备将进入配置模式。", "hardware and software documentation hubs": "硬件和软件文档中心", "Hardware parameter import error.": "硬件参数导入错误。", "Hardware setting conflict": "硬件设置冲突", "Harvested": "已收获", - "Has the value been entered?": "值是否已输入?", - "Has your IT department confirmed that the necessary ports are opened or are you installing FarmBot at home?": "您的IT部门是否确认已打开必要的端口,或者您是在家里安装FarmBot?", - "Have a question for the greater FarmBot community? Get help by asking our global community of users on the": "对更大的FarmBot社区有疑问吗?通过向我们的全球用户社区提问来获得帮助", - "Have the browser also read aloud log messages on the \"Speak\" channel that are spoken by FarmBot.": "让浏览器在“Speak”频道上大声朗读由FarmBot发出的日志消息。", - "Have you selected your FarmBot model?": "您选择了您的FarmBot型号吗?", + "Has the download finished?": "下载完成了吗?", + "Has the value been entered?": "数值已输入吗?", + "Has your IT department confirmed that the necessary ports are opened or are you installing FarmBot at home?": "你的IT部门确认必要端口已开放了吗?还是你在家安装FarmBot?", + "Have a question for the greater FarmBot community? Get help by asking our global community of users on the": "有问题想问FarmBot社区?在全球用户社区寻求帮助:", + "Have the browser also read aloud log messages on the \"Speak\" channel that are spoken by FarmBot.": "让浏览器朗读 FarmBot 在“Speak”频道的日志消息。", + "Have you identified which Raspberry Pi is in your FarmBot?": "你确认过你的 FarmBot 中使用的是哪款 Raspberry Pi 吗?", + "Have you inserted the microSD card into the Raspberry Pi?": "你已将 microSD 卡插入 Raspberry Pi 吗?", + "Have you manually set the Z-axis home position with the Z-axis fully raised?": "你是否已手动将 Z 轴抬至最高并设置了回原点位置?", + "Have you manually set the Z-axis length with the Z-axis fully lowered and then returned the Z-axis to the home position?": "你是否已手动将 Z 轴降低至最低,设置长度后再回到回原点位置?", + "Have you selected your FarmBot model?": "你是否选择了你的 FarmBot 型号?", "Head over to": "前往", + "Heading": "航向", "height": "高度", "Height": "高度", + "height curves": "高度曲线", "help": "帮助", "Help": "帮助", "here": "这里", - "Here you'll find important information about your account, your FarmBot, and news such as new feature announcements. Look for the blue badge in the main menu to see when new messages are available.": "在这里您会找到有关您的帐户、您的FarmBot的重要信息以及新功能公告等新闻。查看主菜单中的蓝色徽章,查看新消息何时可用。", - "hexagonal packing": "六角形包装", + "Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "你可以在这里通过点击方向箭头按钮实时控制 FarmBot,切换外设,执行固定序列。还能查看 FarmBot 当前状态,包括位置和可选的网络摄像头画面。", + "Here you can view running and completed jobs as well as log messages.": "你可以在这里查看正在运行和已完成的任务以及日志消息。", + "Here you'll find important information about your account, your FarmBot, and news such as new feature announcements. Look for the blue badge in the main menu to see when new messages are available.": "这里显示关于你的账户、FarmBot 以及新功能公告等重要信息。主菜单中蓝色徽章提示有新消息。", + "hexagonal packing": "六角形排列", "hide": "隐藏", "hide icons": "隐藏图标", "Hide Sensors panel": "隐藏传感器面板", - "Hide Webcam widget": "隐藏摄像头小部件", - "hide z display": "隐藏z显示", - "Highlight modified settings": "突出显示修改的设置", + "Hide Webcam widget": "隐藏摄像头组件", + "hide z display": "隐藏Z轴显示", + "Highlight modified settings": "高亮已修改设置", "history": "历史", - "HOME POSITION": "原位", - "Home position adjustment travel speed (homing and finding axis length) in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "原位调整行进速度(归位和查找轴长度)以毫米每秒为单位。(默认:x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", - "Home X": "归位X", - "Home Y": "归位Y", - "Home Z": "归位Z", - "Homing Speed (mm/s)": "归位速度 (mm/s)", + "History": "历史", + "HOME POSITION": "回原点位置", + "Home position adjustment travel speed (homing and finding axis length) in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "回原点调整速度(回原点及测轴长),单位毫米/秒。(默认:x: {{ x }}mm/s,y: {{ y }}mm/s,z: {{ z }}mm/s)", + "Home X": "X轴回原点", + "Home Y": "Y轴回原点", + "Home Z": "Z轴回原点", + "Homing Speed (mm/s)": "回原点速度(毫米/秒)", "Hotkeys": "快捷键", "hours": "小时", "Hours": "小时", - "hours prior to most recent record": "最近记录前的小时数", - "HUE": "色调", + "hours prior to most recent record": "距最近记录之前的小时数", + "HUE": "色相", "I agree to the": "我同意", "I Agree to the Terms of Service": "我同意服务条款", - "I can see the farmbot-xxxx network but my device will not connect": "我可以看到farmbot-xxxx网络,但我的设备无法连接", - "I can't find the calibration card": "我找不到校准卡", - "I do not know my FarmBot model": "我不知道我的FarmBot型号", + "I can see the farmbot-xxxx network but my device will not connect": "我能看到 farmbot-xxxx 网络,但设备无法连接", + "I can't find the calibration card": "找不到校准卡", + "I do not know my FarmBot model": "我不知道我的 FarmBot 型号", "I do not know my order number": "我不知道我的订单号", - "I do not know where to connect the ethernet cable": "我不知道在哪里连接以太网电缆", + "I do not know where to connect the ethernet cable": "我不知道以太网线该插哪里", "I do not wish to continue yet": "我还不想继续", - "I pressed the wrong button": "我按错了按钮", - "I still need to assemble FarmBot": "我还需要组装FarmBot", - "I was redirected to a farm.bot page": "我被重定向到一个farm.bot页面", + "I pressed the wrong button": "我按错按钮了", + "I still need to assemble FarmBot": "我还需要组装 FarmBot", + "I was redirected to a farm.bot page": "我被重定向到了 farm.bot 页面", "I'm not sure": "我不确定", - "icon in the main navigation bar to open up the documentation in-app": "主导航栏中的图标打开应用内文档", - "If ...": "如果 ...", - "If enabled, FarmBot will: (1) Move Z to the Safe Z height, (2) Move X and Y to the new location, and (3) Move Z to the new location": "如果启用,FarmBot将:(1)将Z移动到安全Z高度,(2)将X和Y移动到新位置,并(3)将Z移动到新位置", - "If encoders or limit switches are enabled, find home for an axis (set zero position).": "如果编码器或限位开关已启用,查找轴的原位(设置零点位置)。", - "If encoders or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Encoders or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果编码器或限位开关已启用,在设备开机时查找原位。警告!这将在设备开机时对所有轴执行归位。必须启用编码器或限位开关。建议在启用此功能之前确保归位正常工作。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "If encoders or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果编码器或限位开关已启用,归位轴并确定最大值。将设置轴长度值。", - "If encoders, stall detection, or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果编码器、堵转检测或限位开关已启用,归位轴并确定最大值。将设置轴长度值。", - "If not using sensors, use this setting to remove the panel from the Farm Designer.": "如果不使用传感器,请使用此设置从农场设计师中移除面板。", - "If stall detection or limit switches are enabled, find home for an axis (set zero position).": "如果启用了堵转检测或限位开关,请为轴查找原位(设置零点位置)。", - "If stall detection or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Stall detection or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果启用了堵转检测或限位开关,在设备开机时查找原位。警告!这将在设备开机时对所有轴执行归位。必须启用堵转检测或限位开关。建议在启用此功能之前确保归位正常工作。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "If stall detection or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果启用了堵转检测或限位开关,归位轴并确定最大值。将设置轴长度值。", - "If statement": "如果语句", + "icon in the main navigation bar to open up the documentation in-app": "主导航栏中的图标,用于在应用内打开文档", + "idle": "空闲", + "If ...": "如果...", + "If \"Safe Z\" is chosen, FarmBot will: (1) Move Z to the Safe Z height, (2) Move X and Y to the new location, and (3) Move Z to the new location.": "如果选择“安全Z”,FarmBot 将:(1) 把Z轴移到安全Z高度,(2) 将X和Y移动到新位置,(3) 把Z轴移动到新位置。", + "If encoders or limit switches are enabled, find home for an axis (set zero position).": "如果启用了编码器或限位开关,则寻找轴的原点(设置零点)。", + "If encoders or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Encoders or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果启用了编码器或限位开关,设备开机时自动回原点。警告!此操作会对所有轴执行回原点。必须启用编码器或限位开关。建议开启前确保回原点功能正常。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "If encoders or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果启用了编码器或限位开关,回原点并确定最大值,会设置轴长参数。", + "If encoders, stall detection, or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果启用了编码器、堵转检测或限位开关,回原点并确定最大值,会设置轴长参数。", + "If not using sensors, use this setting to remove the panel from the Farm Designer.": "如果不使用传感器,使用此设置从农场设计器中移除面板。", + "If stall detection or limit switches are enabled, find home for an axis (set zero position).": "如果启用了堵转检测或限位开关,则寻找轴的原点(设置零点)。", + "If stall detection or limit switches are enabled, find the home position when the device powers on. Warning! This will perform homing on all axes when the device powers on. Stall detection or limit switches must be enabled. It is recommended to make sure homing works properly before enabling this feature. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "如果启用了堵转检测或限位开关,设备开机时自动回原点。警告!此操作会对所有轴执行回原点。必须启用堵转检测或限位开关。建议开启前确保回原点功能正常。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "If stall detection or limit switches are enabled, home axis and determine maximum. Will set axis length value.": "如果启用了堵转检测或限位开关,回原点并确定最大值。将设置轴长值。", + "If statement": "If 语句", "If Test Fails": "如果测试失败", - "If the problem persists after performing the recommendations above, you may have a defective camera. You can request a free replacement": "如果在执行上述建议后问题仍然存在,您可能有一个有缺陷的摄像头。您可以请求免费更换", - "If using a phone, disable cellular data and try again.": "如果使用手机,禁用蜂窝数据并重试。", - "If you already tried the troubleshooting tips above and looked through the": "如果您已经尝试了上述故障排除提示并查看了", - "If you are installing FarmBot at a school or enterprise where the internet network is managed by an IT department, you must ensure that certain ports are opened to allow FarmBot to fully connect to the web app. If you are installing FarmBot in one of these locations, have your IT department review the following help page to ensure FarmBot will be able to fully connect once configured.": "如果您在学校或企业安装FarmBot,且互联网网络由IT部门管理,则必须确保打开某些端口以允许FarmBot完全连接到Web应用程序。如果您在这些位置之一安装FarmBot,请让您的IT部门查看以下帮助页面,以确保FarmBot配置后能够完全连接。", - "If you are sure you want to delete your account, type in your password below to continue.": "如果您确定要删除您的帐户,请在下方输入您的密码以继续。", - "If you are sure you want to reset your account, type in your password below to continue.": "如果您确定要重置您的帐户,请在下方输入您的密码以继续。", - "If you ever purchase new tools or make your own, add them to the app by clicking the + tool button. Once the tool has been added, load it into an available slot to begin using it in your sequences!": "如果您购买了新工具或自己制作了工具,请点击+工具按钮将其添加到应用程序中。一旦工具被添加,将其装入可用的插槽中,以便在您的序列中使用!", - "If you have a webcam, you can view the video stream in this widget. Press the edit button to update and save your webcam URL. Note: Some webcam services do not allow webcam feeds to be embedded in other sites. If you see a web browser error after adding a webcam feed, there is unfortunately nothing FarmBot can do to fix the problem. Please contact your webcam's customer support to see if the security policy for embedding feeds into other sites can be changed.": "如果您有摄像头,您可以在此小部件中查看视频流。按下编辑按钮更新并保存您的摄像头URL。注意:某些摄像头服务不允许将摄像头反馈嵌入其他站点。如果在添加摄像头反馈后看到网页浏览器错误,遗憾的是FarmBot无法解决此问题。请联系您的摄像头客户支持,查看嵌入其他站点的反馈的安全策略是否可以更改。", - "If you want to play around and keep your data, feel free to make a real account at": "如果您想随便玩玩并保留数据,请随时在以下网站创建一个真实帐户", - "ignore detections out of bounds": "忽略超出范围的检测", - "Image blur kernel size. Must be an odd number greater than 1. (default: {{ defaultBlur }})": "图像模糊核大小。必须是大于1的奇数。(默认:{{ defaultBlur }})", - "Image Deleted.": "图像已删除。", - "Image pixel to FarmBot coordinate scale. Typically between 0.1 and 2, this value matches image scale with the FarmBot coordinate system. (default: {{ defaultScale }} (uncalibrated))": "图像像素到FarmBot坐标的比例。通常在0.1到2之间,此值将图像比例与FarmBot坐标系匹配。(默认:{{ defaultScale }}(未校准))", + "If the problem persists after performing the recommendations above, you may have a defective camera. You can request a free replacement": "如果按上述建议操作后问题仍然存在,可能是相机故障。您可以申请免费更换。", + "If using a phone, disable cellular data and try again.": "如果使用手机,请关闭蜂窝移动数据后重试。", + "If you already tried the troubleshooting tips above and looked through the": "如果您已经尝试了上述故障排除建议并查看了…", + "If you are installing FarmBot at a school or enterprise where the internet network is managed by an IT department, you must ensure that certain ports are opened to allow FarmBot to fully connect to the web app. If you are installing FarmBot in one of these locations, have your IT department review the following help page to ensure FarmBot will be able to fully connect once configured.": "如果在由 IT 部门管理网络的学校或企业安装 FarmBot,必须确保打开某些端口以允许 FarmBot 完全连接到 Web 应用。若在此类环境安装,请让贵公司的 IT 部门查看下列帮助页面,以确保 FarmBot 配置完成后能够正常连接。", + "If you are sure you want to delete your account, type in your password below to continue.": "如果您确定要删除账户,请在下方输入密码以继续。", + "If you are sure you want to reset your account, type in your password below to continue.": "如果您确定要重置账户,请在下方输入密码以继续。", + "If you are upgrading your FarmBot, you may need to manually add any new peripherals, sensors, and tools that your new electronics board supports.": "如果升级 FarmBot,可能需要手动添加新电子板支持的外设、传感器和工具。", + "If you ever purchase new tools or make your own, add them to the app by clicking the + tool button. Once the tool has been added, load it into an available slot to begin using it in your sequences!": "若购买或自制新工具,请点击“+ 工具”按钮将其添加到应用。工具添加后,将其加载到可用槽位,即可在序列中使用!", + "If you have a webcam, you can view the video stream in this widget. Press the edit button to update and save your webcam URL. Note: Some webcam services do not allow webcam feeds to be embedded in other sites. If you see a web browser error after adding a webcam feed, there is unfortunately nothing FarmBot can do to fix the problem. Please contact your webcam's customer support to see if the security policy for embedding feeds into other sites can be changed.": "如果您有网络摄像头,可在此组件中查看视频流。点击编辑按钮更新并保存摄像头 URL。注意:部分摄像头服务不允许将视频嵌入到其他网站。如果添加摄像头后出现浏览器错误,FarmBot 无法修复此类问题,请联系摄像头服务商客服,询问是否可修改嵌入安全策略。", + "If you want to play around and keep your data, feel free to make a real account at": "如果您想试用并保留数据,可在此注册真实账户:", + "ignore detections out of bounds": "忽略超出边界的检测", + "Image blur kernel size. Must be an odd number greater than 1. (default: {{ defaultBlur }})": "图像模糊内核大小。必须为大于 1 的奇数。(默认:{{ defaultBlur }})", + "Image Deleted.": "图片已删除。", + "Image pixel to FarmBot coordinate scale. Typically between 0.1 and 2, this value matches image scale with the FarmBot coordinate system. (default: {{ defaultScale }} (uncalibrated))": "图像像素到 FarmBot 坐标的缩放比例。通常在 0.1 到 2 之间,该值用于将图像尺度与 FarmBot 坐标系匹配。(默认:{{ defaultScale }}(未校准))", "image resolution": "图像分辨率", "Images": "图像", - "Images may take up to 3 minutes to appear.": "图像可能需要最多3分钟才能显示。", - "Images may take up to 30 seconds to appear.": "图像可能需要最多30秒才能显示。", + "Images may take up to 3 minutes to appear.": "图像可能最多需要 3 分钟才会出现。", + "Images may take up to 30 seconds to appear.": "图像可能最多需要 30 秒才会出现。", "IMPORT": "导入", "Import parameters": "导入参数", "import this sequence": "导入此序列", - "Imported and edited publicly shared sequence.": "导入并编辑了公开共享的序列。", - "Imported publicly shared sequence.": "导入了公开共享的序列。", - "importing": "正在导入", - "Importing the sequence into their FarmBot account to view and use it as they deem fit": "将序列导入到他们的FarmBot帐户中,以便查看和使用他们认为合适的内容", - "Importing this sequence will allow you to use it with your FarmBot and make changes. If the original author of the sequence publishes a new version, you will have the option to upgrade your copy.": "导入此序列将允许您与您的FarmBot一起使用并进行更改。如果序列的原作者发布了新版本,您将可以选择升级您的副本。", + "Imported and edited publicly shared sequence.": "已导入并编辑公开共享序列。", + "Imported publicly shared sequence.": "已导入公开共享序列。", + "importing": "导入中", + "Importing the sequence into their FarmBot account to view and use it as they deem fit": "将序列导入其 FarmBot 账户,以便按需查看和使用", + "Importing this sequence will allow you to use it with your FarmBot and make changes. If the original author of the sequence publishes a new version, you will have the option to upgrade your copy.": "导入此序列后可在您的 FarmBot 上使用并进行修改。如果原作者发布新版本,您可选择升级您的副本。", "in map": "在地图中", - "In real life, load one of FarmBot's tools (such as the watering nozzle) into a toolbay slot. Then, using the controls popup, instruct FarmBot to find the home position.": "在现实生活中,将FarmBot的工具之一(例如浇水喷嘴)加载到工具库插槽中。然后,使用控制弹出窗口,指示FarmBot找到原位。", - "in slot": "在插槽中", - "In this tour you'll learn how to add plants to your garden, create filter-based groups of those plants, and snapshot your garden layout for future growing seasons. Let's get started!": "在此导览中,您将学习如何将植物添加到您的花园,创建基于过滤器的植物组,并为未来的生长季节快照您的花园布局。让我们开始吧!", + "In real life, load one of FarmBot's tools (such as the watering nozzle) into a toolbay slot. Then, using the controls popup, instruct FarmBot to find the home position.": "在实际操作中,将 FarmBot 的某个工具(例如浇水喷嘴)装入工具位槽位。然后在控制弹窗中指示 FarmBot 执行回原点操作。", + "in slot": "在槽位中", + "In this tour you'll learn how to add plants to your garden, create filter-based groups of those plants, and snapshot your garden layout for future growing seasons. Let's get started!": "在本次导览中,您将学习如何向花园添加植物、基于筛选创建植物分组,以及为未来生长季节保存花园布局快照。现在开始吧!", "IN USE": "正在使用", - "inactive": "不活跃", + "inactive": "未激活", "incompatible": "不兼容", "indoor": "室内", "Info": "信息", - "Input is not needed for this Farmware.": "此Farmware不需要输入。", + "Input is not needed for this Farmware.": "此 Farmware 无需输入。", "Input required": "需要输入", - "Insert a luer lock needle into the 3-in-1 tool head and place a seed trough into the gantry-mounted seed trough holder. Then, using the controls popup, instruct FarmBot to find the home position.": "将路尔锁针插入3合1工具头中,并将种子槽放入龙门安装的种子槽托架中。然后,使用控制弹出窗口,指示FarmBot找到原位。", + "Insert a luer lock needle into the 3-in-1 tool head and place a seed trough into the gantry-mounted seed trough holder. Then, using the controls popup, instruct FarmBot to find the home position.": "将 luer lock(路亚锁)针头插入 3 合 1 工具头,并将种子槽放入安装在龙门架上的种子槽架中。然后通过控制弹窗指示 FarmBot 执行回原点操作。", + "Insert the microSD card into FarmBot": "将 microSD 卡插入 FarmBot", + "Inspect the ports on the top edge of the Raspberry Pi and select which Raspberry Pi model is in your FarmBot.": "检查 Raspberry Pi 顶部边缘的端口,并选择您 FarmBot 中使用的 Raspberry Pi 型号。", + "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections. Check the cable carrier for any snap-in tabs that are not fully snapped into place. Tabs may be catching on the cable carrier supports or other parts of the cable carrier.": "检查木制高床(Express 套件)或导轨挤出件(Genesis 套件)是否有凸起。用砂纸打磨瑕疵。检查电缆拖链是否有未完全扣入的卡扣,这些卡扣可能卡在拖链支撑或拖链的其他部分上。", "Install": "安装", "Install error": "安装错误", - "install Farmware": "安装Farmware", - "Install Farmware": "安装Farmware", - "Install first-party Farmware": "安装第一方Farmware", - "Install new Farmware": "安装新Farmware", - "installation pending": "正在安装", - "Installing FarmBot OS": "安装FarmBot操作系统", + "INSTALL FARMBOT OS": "安装 FarmBot OS", + "Install FarmBot OS onto the microSD card": "将 FarmBot OS 安装到 microSD 卡上", + "install Farmware": "安装 Farmware", + "Install Farmware": "安装 Farmware", + "Install first-party Farmware": "安装官方 Farmware", + "Install new Farmware": "安装新 Farmware", + "installation pending": "安装待处理", + "Installing FarmBot OS": "正在安装 FarmBot OS", "Internal Computer": "内部计算机", - "internal envs": "内部环境", - "Internationalize Web App": "国际化Web应用程序", + "internal envs": "内部环境变量", + "Internationalize Web App": "国际化 Web 应用", "Internet": "互联网", - "Interpolated Soil Z at": "插值土壤Z在", - "Interpolation step size": "插值步长", - "Interpolation use nearest": "插值使用最近", - "Interpolation weight": "插值权重", - "INTRO": "简介", + "Interpolated Soil Z at": "内插土壤 Z 于", + "Interpolation step size": "内插步长", + "Interpolation use nearest": "内插使用最近邻", + "Interpolation weight": "内插权重", + "INTRO": "介绍", "Introduction": "介绍", "Invalid date": "无效日期", "Invalid property for resource.": "资源属性无效。", - "Invalid Raspberry Pi GPIO pin number.": "无效的Raspberry Pi GPIO针脚编号。", - "Invalid selection.": "无效选择。", - "Invert {{ axis }}-axis Jog Buttons": "反转{{ axis }}轴操作按钮", - "Invert 2nd X Motor": "反转第二个X电机", - "Invert axis limit switches. Enable for normally closed (NC), disable for normally open (NO). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "反转轴限位开关。正常闭合(NC)启用,正常打开(NO)禁用。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Invert direction of motor while finding axis length. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在查找轴长度时反转电机方向。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Invert direction of motor. (default: {{ x }})": "反转电机方向。(默认:{{ x }})", + "Invalid Raspberry Pi GPIO pin number.": "无效的 Raspberry Pi GPIO 引脚编号。", + "Invalid selection.": "选择无效。", + "Invert {{ axis }}-axis Jog Buttons": "反转 {{ axis }} 轴微调按钮", + "Invert 2nd X Motor": "反转第二个 X 电机", + "Invert axis limit switches. Enable for normally closed (NC), disable for normally open (NO). (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "反转轴限位开关。常闭(NC)时启用,常开(NO)时禁用。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Invert direction of motor while finding axis length. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在测量轴长时反转电机方向。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Invert direction of motor. (default: {{ x }})": "反转电机方向。(默认:{{ x }})", "Invert Encoders": "反转编码器", - "invert hue range selection": "反转色调范围选择", - "Invert Jog Buttons": "反转操作按钮", + "invert hue range selection": "反转色相范围选择", + "Invert Jog Buttons": "反转微调按钮", "Invert limit switches": "反转限位开关", "Invert Motors": "反转电机", - "Invert the range of hues selected. Typically used to select the full range of reds. (default: {{ defaultInvertState }})": "反转所选色调范围。通常用于选择全部红色范围。(默认:{{ defaultInvertState }})", - "Invert X Axis Jog Button": "反转X轴操作按钮", - "Invert Y Axis Jog Button": "反转Y轴操作按钮", - "Invert Z Axis Jog Button": "反转Z轴操作按钮", + "Invert the range of hues selected. Typically used to select the full range of reds. (default: {{ defaultInvertState }})": "反转所选色相范围,通常用于选择完整的红色范围。(默认:{{ defaultInvertState }})", + "Invert X Axis Jog Button": "反转 X 轴微调按钮", + "Invert Y Axis Jog Button": "反转 Y 轴微调按钮", + "Invert Z Axis Jog Button": "反转 Z 轴微调按钮", "is": "是", "is equal to": "等于", - "Is FarmBot assembled and ready to power on?": "FarmBot是否已组装并准备开机?", - "Is FarmBot online?": "FarmBot是否在线?", - "Is FarmBot positioned away from the hardstops?": "FarmBot是否远离限位器?", + "Is FarmBot assembled and ready to power on?": "FarmBot 是否已组装并准备通电?", + "Is FarmBot online?": "FarmBot 是否在线?", + "Is FarmBot positioned away from the hardstops?": "FarmBot 是否已移离限位位置?", + "Is FarmBot positioned?": "FarmBot 是否已定位?", "is greater than": "大于", "is less than": "小于", "is not": "不是", "is not equal to": "不等于", - "Is the 'Find Home' sequence selected?": "是否选择了“查找原位”序列?", - "Is the calibration card on the soil underneath the camera?": "校准卡是否在摄像头下方的土壤上?", + "Is Raspberry Pi Imager installed?": "是否已安装 Raspberry Pi Imager?", + "Is the 'Find Home' sequence selected?": "是否选中了“寻找原点”序列?", + "Is the calibration card on the soil underneath the camera?": "校准卡是否放在相机下方的土壤上?", + "Is the card connected?": "卡是否已连接?", "Is the configurator loaded?": "配置器是否已加载?", - "Is the FarmBot able to move reliably along the full length of the X-axis in both directions?": "FarmBot是否能够可靠地沿X轴的全长双向移动?", - "Is the FarmBot able to move reliably along the full length of the Y-axis in both directions?": "FarmBot是否能够可靠地沿Y轴的全长双向移动?", - "Is the FarmBot able to move reliably along the full length of the Z-axis in both directions?": "FarmBot是否能够可靠地沿Z轴的全长双向移动?", - "Is the location in the image aligned with the map location?": "图像中的位置是否与地图位置对齐?", - "Is the status 'connected'?": "状态是否为“已连接”?", - "Is the UTM cable plugged in?": "UTM电缆是否已插入?", - "Is the z-axis as high as it will go?": "Z轴是否达到最高点?", + "Is the FarmBot able to move reliably along the full length of the X-axis in both directions?": "FarmBot 是否能在 X 轴整个长度上双向可靠移动?", + "Is the FarmBot able to move reliably along the full length of the Y-axis in both directions?": "FarmBot 是否能在 Y 轴整个长度上双向可靠移动?", + "Is the FarmBot able to move reliably along the full length of the Z-axis in both directions?": "FarmBot 是否能在 Z 轴整个长度上双向可靠移动?", + "Is the location in the image aligned with the map location?": "图像中的位置是否与地图上的位置一致?", + "Is the status 'connected'?": "状态是否显示为“已连接”?", + "Is the UTM cable plugged in?": "UTM 电缆是否已插入?", + "Is the z-axis as high as it will go?": "Z 轴是否已经升到了最高点?", "is unknown": "未知", - "Is your phone or computer connected to the FarmBot WiFi network?": "您的手机或电脑是否连接到FarmBot WiFi网络?", + "Is your phone or computer connected to the FarmBot WiFi network?": "你的手机或电脑是否连接到了 FarmBot 的 WiFi 网络?", "It does not line up": "它没有对齐", - "It made sounds like it was trying to move, but didn't move": "它发出尝试移动的声音,但没有移动", + "It made sounds like it was trying to move, but didn't move": "听起来像是在尝试移动,但实际上没有移动", "It moved in a different direction": "它移动到了不同的方向", - "It moved the opposite direction": "它移动到了相反的方向", + "It moved the opposite direction": "它向相反的方向移动了", "It moved up": "它向上移动了", - "It seems like it is trying to move too fast, or doesn't have enough torque": "它似乎移动得太快,或没有足够的扭矩", + "It seems like it is trying to move too fast, or doesn't have enough torque": "看起来它试图移动得太快,或者扭矩不足", "It stalls or has trouble at certain locations": "它在某些位置停滞或有问题", - "It started to move, but stopped early": "它开始移动,但很快停止", - "It stopped before reaching the axis end": "它在到达轴端之前停止", - "It struggles to move along the whole length of the axis": "它在沿轴全长移动时困难重重", + "It started to move, but stopped early": "它开始移动了,但提前停止了", + "It stopped before reaching the axis end": "它在达到轴端之前停止了", + "It struggles to move along the whole length of the axis": "它难以沿轴的整个长度移动", "item": "项目", "Item(s) added.": "项目已添加。", - "ITERATIONS": "迭代", - "Job": "工作", - "Job count": "工作计数", - "Just the Arduino": "仅Arduino", - "Keep power applied to motors. Prevents slipping from gravity in certain situations. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "保持电机通电。在某些情况下防止重力导致的滑动。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "ITERATIONS": "迭代次数", + "Job": "任务", + "Job count": "任务计数", + "jobs": "任务", + "Jobs and Logs": "任务与日志", + "Just the Arduino": "仅限 Arduino", + "Keep power applied to motors. Prevents slipping from gravity in certain situations. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "保持电机通电。在某些情况下防止因重力导致的滑动。(默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", "Key cannot be blank.": "键不能为空。", - "Key has already been taken.": "该键已被使用。", - "Landing page": "着陆页面", + "Key has already been taken.": "键已被使用。", + "Landing page": "登陆页面", "Language": "语言", - "last message seen ": "上次看到的消息", - "Last seen": "上次查看", - "Last updated": "上次更新", - "Latest": "最新的", + "last message seen ": "上次看到消息 ", + "Last seen": "最后在线", + "Last updated": "最后更新", + "Latest": "最新", "latitude": "纬度", "Learn more": "了解更多", - "Learn more about the app": "了解更多关于应用的信息", - "LED light strip": "LED灯带", - "Less": "更少", + "Learn more about connecting": "了解更多关于连接的信息", + "Learn more about ports": "了解更多关于端口的信息", + "Learn more about the app": "了解更多关于应用程序的信息", + "LED 3": "LED 3", + "LED 4": "LED 4", + "LED light strip": "LED 灯条", + "Leg Size": "支腿尺寸", + "Leg size. (default: {{ defaultConfigValue }}mm)": "支腿尺寸。(默认:{{ defaultConfigValue }}毫米)", "Less than": "小于", - "Let's get you familiar with the app and finish setting everything up.": "让我们让您熟悉应用程序并完成所有设置。", - "License": "许可证", + "Let's get you familiar with the app and finish setting everything up.": "让我们帮你熟悉应用程序并完成所有设置。", + "License": "许可协议", "Lighting": "照明", "LIGHTING": "照明", "Limit Switches": "限位开关", "Limit switches warning": "限位开关警告", - "Link": "链接", + "Linear Ramp": "线性斜坡", "live chat": "在线聊天", + "Load (%)": "负载 (%)", "Loading": "加载中", - "Loading slots": "加载插槽", + "Loading interactive 3D FarmBot...": "正在加载交互式3D FarmBot...", + "Loading slots": "加载槽位", "Loading...": "加载中...", - "Local IP": "本地IP", + "Local IP": "本地 IP", "location": "位置", "Location": "位置", "Location {{ num }}": "位置 {{ num }}", "Location info": "位置信息", - "Log not sent by current version of FarmBot OS.": "日志未由当前版本的FarmBot OS发送。", + "Location Point": "位置点", + "Log not sent by current version of FarmBot OS.": "日志未由当前版本的 FarmBot OS 发送。", "Login": "登录", "logout": "登出", - "Logout": "注销", + "Logout": "登出", "Logout and destroy token": "登出并销毁令牌", + "logs": "日志", "Logs": "日志", "longitude": "经度", - "Look for the 'Available UART devices' log message.": "查找“可用UART设备”的日志消息。", - "Look inside the electronics box. What color cable is plugged into the top of the Raspberry Pi (the green circuit board)?": "查看电子盒内部。哪种颜色的电缆插入了树莓派的顶部(绿色电路板)?", - "M-F 9-5 PST": "周一至周五 上午9点至下午5点 太平洋标准时间", - "MAC address": "MAC地址", - "Make a real account": "创建一个真实的账户", - "Make sure the calibration card has been placed flat on the soil surface and is fully and clearly visible to the camera. The card must not be warped, bent, overexposed, or obscured in the above image. Lighting may be improved by shading the card from direct sunlight, trying a different time of day, or using FarmBot's lights in the evening or at night. There must be good contrast between the white dots and black calibration card background for calibration to complete successfully. Trying calibration in a different location with fewer distractions in the area surrounding the card may also help.": "确保校准卡平放在土壤表面,并且对摄像头完全清晰可见。卡片不能翘曲、弯曲、过度曝光或在上述图像中遮挡。可以通过遮蔽阳光、尝试不同的时间、或在晚上或夜间使用FarmBot的灯光来改善照明。白点与黑色校准卡背景之间必须有良好的对比度,以便成功完成校准。尝试在周围环境干扰较少的不同位置进行校准可能也会有所帮助。", - "Make sure the motors are working properly. Return to the": "确保电机工作正常。返回到", - "Making changes to their copy": "对副本进行更改", + "Look for the 'Available UART devices' log message.": "查找‘可用 UART 设备’的日志信息。", + "Look inside the electronics box. What color cable is plugged into the top of the Raspberry Pi (the green circuit board)?": "查看电子盒内,插入树莓派顶部(绿色电路板)的电缆是什么颜色?", + "Low": "低", + "Lua": "Lua", + "M-F 9-5 PST": "周一至周五 9点至17点(太平洋时间)", + "MAC address": "MAC 地址", + "Make a real account": "创建正式账户", + "Make sure the calibration card has been placed flat on the soil surface and is fully and clearly visible to the camera. The card must not be warped, bent, overexposed, or obscured in the above image. Lighting may be improved by shading the card from direct sunlight, trying a different time of day, or using FarmBot's lights in the evening or at night. There must be good contrast between the white dots and black calibration card background for calibration to complete successfully. Trying calibration in a different location with fewer distractions in the area surrounding the card may also help.": "确保校准卡平放在土壤表面,并且摄像头能够完整且清晰地看到它。卡片不能弯曲、折叠、过曝或遮挡。通过遮挡直射阳光、选择不同时间段或使用 FarmBot 的灯光(傍晚或夜间)可以改善光照。白点与黑色校准卡背景必须有良好对比,以便校准成功。尝试在周围干扰较少的其他位置进行校准也可能有帮助。", + "Make sure the motors are working properly. Return to the": "确保电机正常工作。返回到", + "Making changes to their copy": "正在修改他们的副本", "Manage": "管理", "Manage data": "管理数据", "Manual": "手动", @@ -938,87 +1086,94 @@ "Manual controls video": "手动控制视频", "Manual input": "手动输入", "Manual Input": "手动输入", - "Manually add group members by clicking in the map. Group members selected by filters can only be removed by changing the filters. Filters will be applied at the time of sequence execution. Group members at that time may differ from those currently displayed.": "通过在地图中单击来手动添加组成员。通过筛选器选择的组成员只能通过更改筛选器来移除。筛选器将在序列执行时应用。那时的组成员可能与当前显示的组成员不同。", - "Manually enter a value by measuring the usable distance FarmBot can travel along the axis.": "通过测量FarmBot沿轴行进的可用距离,手动输入一个值。", + "Manually add group members by clicking in the map. Group members selected by filters can only be removed by changing the filters. Filters will be applied at the time of sequence execution. Group members at that time may differ from those currently displayed.": "通过点击地图手动添加组成员。通过筛选器选择的组成员只能通过更改筛选器移除。筛选器将在序列执行时应用,执行时的组成员可能与当前显示的不同。", + "Manually enter a value by measuring the usable distance FarmBot can travel along the axis.": "通过测量 FarmBot 在轴上可移动的有效距离,手动输入数值。", + "Manually position the FarmBot": "手动定位 FarmBot", "manually selected": "手动选择", "Map": "地图", "MAP": "地图", - "map boxes will change location filter": "地图框将更改位置筛选器", + "map boxes will change location filter": "地图框将更改位置筛选", "map boxes will manually add plants": "地图框将手动添加植物", - "Map filters enabled.": "启用地图筛选器。", + "Map filters enabled.": "地图筛选已启用。", "Map orientation": "地图方向", "Map origin": "地图原点", - "Map photo layer off": "关闭地图照片图层", - "Map photo layer on": "打开地图照片图层", + "Map photo layer off": "地图照片图层关闭", + "Map photo layer on": "地图照片图层开启", "Map Points": "地图点", "map settings": "地图设置", - "Map size": "地图大小", + "Map size": "地图尺寸", "Mark": "标记", "Mark As": "标记为", "Mark as...": "标记为...", "max": "最大", "Max": "最大", - "Max Missed Steps": "最大错过的步数", + "Max Missed Steps": "最大遗漏步数", "Max Motor Load": "最大电机负载", "Max Retries": "最大重试次数", "Max Speed (mm/s)": "最大速度(毫米/秒)", - "Max Speed toward home (mm/s)": "最大速度朝向家(毫米/秒)", + "Max Speed toward home (mm/s)": "回归主点最大速度(毫米/秒)", + "max value": "最大值", "Maximum": "最大", - "Maximum motor load (determined by stepper driver) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机被认为已停滞之前的最大电机负载(由步进电机驱动器确定)。 (默认值:x:{{ x }}, y:{{ y }}, z:{{ z }})", - "Maximum travel speed after acceleration in millimeters per second. (default: {{ z }}mm/s)": "加速后的最大行进速度,以毫米/秒为单位。 (默认值:{{ z }}mm/s)", - "Maximum travel speed after acceleration in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "加速后的最大行进速度,以毫米/秒为单位。 (默认值:x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", + "Maximum motor load (determined by stepper driver) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机被认为停转前的最大负载(由步进驱动器检测)。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Maximum number of control points reached.": "已达到最大控制点数。", + "Maximum travel speed after acceleration in millimeters per second. (default: {{ z }}mm/s)": "加速后最大行进速度,单位毫米每秒。(默认: {{ z }}毫米/秒)", + "Maximum travel speed after acceleration in millimeters per second. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "加速后最大行进速度,单位毫米每秒。(默认: x: {{ x }}毫米/秒, y: {{ y }}毫米/秒, z: {{ z }}毫米/秒)", "maximum weed size": "最大杂草尺寸", - "Maximum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMaxDiameter }})": "最大杂草尺寸(直径),以毫米为单位。 设置为0以禁用限制。 (默认值:{{ defaultMaxDiameter }})", + "Maximum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMaxDiameter }})": "最大杂草尺寸(直径),单位毫米。设为0表示关闭限制。(默认: {{ defaultMaxDiameter }})", "measure": "测量", "Measure": "测量", "Measure soil height": "测量土壤高度", "MEASURE SOIL HEIGHT": "测量土壤高度", "Memory": "内存", - "Memory usage": "内存使用情况", + "Memory usage": "内存使用", "Menu": "菜单", "Message": "消息", "Message Broker": "消息代理", "Messages": "消息", - "Microsteps per step": "每步微步", + "Microsteps per step": "每步微步数", "min": "最小", - "Min OS version required": "所需的最低OS版本", - "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: {{ z }}mm/s)": "每秒的最小运动速度,以毫米为单位。 也用于归位和查找轴长度。 (默认值:{{ z }}mm/s)", - "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "每秒的最小运动速度,以毫米为单位。 也用于归位和查找轴长度。 (默认值:x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)", + "Min OS version required": "最低操作系统版本要求", + "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: {{ z }}mm/s)": "最小移动速度,单位毫米每秒。也用于归位和测量轴长度。(默认: {{ z }}毫米/秒)", + "Minimum movement speed in millimeters per second. Also used for homing and finding axis length. (default: x: {{ x }}mm/s, y: {{ y }}mm/s, z: {{ z }}mm/s)": "最小移动速度,单位毫米每秒。也用于归位和测量轴长度。(默认: x: {{ x }}毫米/秒, y: {{ y }}毫米/秒, z: {{ z }}毫米/秒)", "Minimum Speed (mm/s)": "最小速度(毫米/秒)", - "Minimum Speed toward home (mm/s)": "最小速度朝向家(毫米/秒)", + "Minimum Speed toward home (mm/s)": "回归主点最小速度(毫米/秒)", "minimum weed size": "最小杂草尺寸", - "Minimum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMinDiameter }})": "最小杂草尺寸(直径),以毫米为单位。 设置为0以禁用限制。 (默认值:{{ defaultMinDiameter }})", - "Minor adjustments": "微调", + "Minimum weed size (diameter) in millimeters. Set to 0 to disable limit. (default: {{ defaultMinDiameter }})": "最小杂草尺寸(直径),单位毫米。设为0表示关闭限制。(默认: {{ defaultMinDiameter }})", + "Minor adjustments": "细微调整", + "minus hour": "小时差", "Minutes": "分钟", - "minutes of": "分钟的", - "Missed Step Decay": "丢步衰减", + "minutes of": "分钟", + "Missed Step Decay": "遗漏步数衰减", "Missing dependency": "缺少依赖", - "MIT License": "MIT许可证", + "MIT License": "MIT 许可证", + "mL": "毫升", "mm": "毫米", "Mode": "模式", - "Model": "型号", + "Model": "模型", "Moisture": "湿度", "Month": "月", "Months": "月", "more": "更多", - "More": "更多", "more bugs!": "更多错误!", "More options": "更多选项", - "MORPH": "形态", - "Most people connect their FarmBot to the internet over WiFi, though you may optionally use a hardwired ethernet connection. If you would like to use an ethernet connection, simply connect an ethernet cable between your WiFi router and the Raspberry Pi.": "大多数人将其FarmBot连接到WiFi上的互联网,尽管您可以选择使用有线以太网连接。如果您想要使用以太网连接,只需在WiFi路由器和树莓派之间连接以太网电缆即可。", + "MORPH": "MORPH", + "Most people connect their FarmBot to the internet over WiFi, though you may optionally use a hardwired ethernet connection. If you would like to use an ethernet connection, simply connect an ethernet cable between your WiFi router and the Raspberry Pi.": "大多数人通过 WiFi 将 FarmBot 连接到互联网,你也可以选择使用有线以太网连接。如果想使用以太网,只需将以太网线连接到 WiFi 路由器和树莓派之间。", + "motor load": "电机负载", "Motor Load": "电机负载", - "Motor stall sensitivity. Most sensitive: -63. Least sensitive: +63. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机堵转灵敏度。 最敏感:-63。 最不敏感:+63。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "motor position": "电机位置", + "Motor stall sensitivity. Most sensitive: -63. Least sensitive: +63. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机停转灵敏度。最灵敏: -63,最不灵敏: +63。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", "Motors": "电机", "MOTORS": "电机", "mounted": "已安装", "mounted tool": "已安装工具", "Mounted Tool": "已安装工具", + "move": "移动", "Move": "移动", "move {{axis}} axis": "移动 {{axis}} 轴", - "Move a servo to the provided angle. An angle of 90 degrees corresponds to the servo midpoint (or, for a continuous rotation servo, no movement). Tip: follow with a WAIT command to allow the servo to reach the target position.": "将舵机移动到提供的角度。 90度的角度对应于舵机的中间位置(或者,对于连续旋转舵机,不移动)。 提示:跟随WAIT命令以使舵机达到目标位置。", - "Move FarmBot away from the hardstops": "将FarmBot移出硬停止位置", - "Move FarmBot to a different location and try again.": "将FarmBot移动到其他位置,然后重试。", - "Move FarmBot to home for the provided axis.": "将FarmBot移动到所提供的轴的原点。", + "Move a servo to the provided angle. An angle of 90 degrees corresponds to the servo midpoint (or, for a continuous rotation servo, no movement). Tip: follow with a WAIT command to allow the servo to reach the target position.": "将舵机移动到指定角度。90度对应舵机中点(连续旋转舵机则为不动)。提示:后接 WAIT 命令,等待舵机到达目标位置。", + "Move FarmBot away from the hardstops": "将 FarmBot 移离限位开关", + "Move FarmBot to a different location and try again.": "将 FarmBot 移动到其他位置再试。", + "Move FarmBot to home for the provided axis.": "将 FarmBot 移动到指定轴的原点。", "Move into": "移动到", "move mode": "移动模式", "Move out of folders": "移出文件夹", @@ -1026,190 +1181,205 @@ "move sequence": "移动序列", "move step": "移动步骤", "Move To": "移动到", - "Move to chosen location": "移动到选择的位置", + "Move to chosen location": "移动到选定位置", "move to home": "移动到原点", "Move to Home": "移动到原点", "MOVE TO HOME": "移动到原点", - "Move to this coordinate": "移动到这个坐标", + "Move to this coordinate": "移动到该坐标", "Movement": "移动", - "Movement out of bounds for: ": "移动超出边界:", + "Movement out of bounds for: ": "超出范围移动:", "MOVEMENTS": "移动", "Movements video": "移动视频", "My Sequences": "我的序列", "name": "名称", "Name": "名称", - "Name already taken.": "名称已被使用。", + "Name already taken.": "名称已被占用。", "Navigate Left": "向左导航", "Navigate Right": "向右导航", "Nearby": "附近", - "Negative Coordinates Only": "仅负坐标", - "Negative X": "负X", - "Negative Y": "负Y", + "Negative Coordinates Only": "仅允许负坐标", + "Negative X": "负 X", + "Negative Y": "负 Y", + "network": "网络", "Never": "从不", - "New Folder": "新文件夹", + "New Folder": "新建文件夹", "New message from bot": "来自机器人的新消息", - "New Password": "新口令", + "New Password": "新密码", "New password and confirmation do not match.": "新密码与确认密码不匹配。", "New password must be at least 8 characters.": "新密码必须至少8个字符。", - "New Peripheral": "新外设", - "New Sensor": "新传感器", - "New Terms of Service": "新服务条款", - "newer": "更新", + "New Peripheral": "新增外设", + "New Regimen ": "新计划 ", + "New Sensor": "新增传感器", + "New Sequence {{ num }}": "新序列 {{ num }}", + "New Terms of Service": "新的服务条款", + "newer": "更新的", "Newer than": "更新于", - "newest": "最新", - "Next": "下一个", + "newest": "最新的", + "Next": "下一步", "next image": "下一张图片", "Next image": "下一张图片", "no": "否", - "No active weeds.": "没有活动杂草。", + "No active weeds.": "无活跃杂草。", "No camera selected": "未选择摄像头", + "No Curve selected": "未选择曲线", + "No curves yet.": "暂无曲线。", "No day(s) selected.": "未选择日期。", - "No description provided for this subsequence.": "未提供此子序列的描述。", - "No events scheduled.": "没有计划的事件。", - "No Farmware selected": "未选择Farmware", - "No Farmware yet.": "尚无Farmware。", - "No Group selected": "未选择群组", - "No groups yet.": "尚无群组。", + "No description provided for this subsequence.": "该子序列未提供描述。", + "No events scheduled.": "无计划事件。", + "No Farmware selected": "未选择农件", + "No Farmware yet.": "暂无农件。", + "No Group selected": "未选择分组", + "No groups yet.": "暂无分组。", "No inputs provided.": "未提供输入。", "No location chosen.": "未选择位置。", - "No location selected. Using default value.": "未选择位置。使用默认值。", - "No logs to display. Visit Logs page to view filters.": "没有日志可显示。访问日志页面以查看筛选器。", - "No logs yet.": "尚无日志。", - "No messages seen yet.": "尚未看到消息。", - "No messages.": "没有消息。", - "No more messages.": "没有更多消息。", - "No pending weeds.": "没有待处理的杂草。", - "No Peripherals yet.": "尚无外设。", - "No points yet.": "尚无点。", - "No recent messages.": "没有最近的消息。", - "No Regimen selected": "未选择日程", - "No Regimen selected.": "未选择日程。", - "No Regimens.": "无日程。", - "No removed weeds.": "没有已移除的杂草。", - "No results in your garden": "您的花园中没有结果", - "No results.": "没有结果。", - "No saved gardens yet.": "尚未保存花园。", - "No search results": "没有搜索结果", - "No Sensors yet.": "尚无传感器。", + "No location selected. Using default value.": "未选择位置,使用默认值。", + "No logs to display. Visit Logs page to view filters.": "无日志可显示。请访问日志页面查看筛选条件。", + "No logs yet.": "暂无日志。", + "No messages seen yet.": "暂无消息记录。", + "No messages.": "无消息。", + "No more messages.": "无更多消息。", + "No pending weeds.": "无待处理杂草。", + "No Peripherals yet.": "暂无外设。", + "No points yet.": "暂无点位。", + "No recent messages.": "暂无近期消息。", + "No Regimen selected": "未选择计划", + "No Regimen selected.": "未选择计划。", + "No Regimens.": "暂无计划。", + "No removed weeds.": "无已清除杂草。", + "No results in your garden": "您的花园中无结果", + "No results.": "无结果。", + "No saved gardens yet.": "暂无已保存的花园。", + "No search results": "无搜索结果", + "No Sensors yet.": "暂无传感器。", "No Sequence selected": "未选择序列", "No Sequence selected.": "未选择序列。", - "No Sequences.": "没有序列。", + "No Sequences.": "暂无序列。", "NO TOOL": "无工具", - "No webcams yet. Click the edit button to add a feed URL.": "尚无网络摄像头。单击编辑按钮以添加一个馈送URL。", - "No weeds yet.": "尚无杂草。", - "No zones yet.": "尚无区域。", + "No webcams yet. Click the edit button to add a feed URL.": "暂无摄像头。点击编辑按钮添加视频源链接。", + "No weeds yet.": "暂无杂草。", + "No zones yet.": "暂无区域。", "Node name": "节点名称", "none": "无", "None": "无", - "not all features of the app will work because there is not a real FarmBot connected to this account. Additionally, keep in mind that when you leave this web page, the demo account and all data will be deleted.": "应用程序的所有功能都无法使用,因为此账户未连接实际的FarmBot。另外,请注意,当您离开此网页时,演示账户和所有数据将被删除。", + "normal z": "正常 Z", + "not all features of the app will work because there is not a real FarmBot connected to this account. Additionally, keep in mind that when you leave this web page, the demo account and all data will be deleted.": "由于该账户未连接真实 FarmBot,应用部分功能不可用。请注意,离开此网页后,演示账户及所有数据将被删除。", "Not available": "不可用", "Not available when device is offline.": "设备离线时不可用。", "Not found": "未找到", + "Not Found": "未找到", "Not hidden": "未隐藏", "not mirrored": "未镜像", "not set": "未设置", - "not shown in map": "不在地图中显示", - "Note: The selected timezone for your FarmBot is different than your local browser time.": "注意:您FarmBot选择的时区与您本地浏览器的时间不同。", - "Note: Times displayed according to FarmBot's local time, which is currently different from your browser's time. Timezone data is configurable in the Settings panel).": "注意:显示的时间根据FarmBot的本地时间,目前与您浏览器的时间不同。时区数据可在设置面板中配置。", + "not shown in map": "地图中未显示", + "Note: The selected timezone for your FarmBot is different than your local browser time.": "注意:FarmBot 所选时区与您本地浏览器时间不同。", + "Note: Times displayed according to FarmBot's local time, which is currently different from your browser's time. Timezone data is configurable in the Settings panel).": "注意:显示时间为 FarmBot 本地时间,当前与浏览器时间不同。时区可在设置面板调整。", "notes": "笔记", - "Nothing happened": "没有发生任何事情", + "Nothing happened": "无任何变化", "Now": "现在", - "Now that you have a garden with a few crops in it. Let's create groups of plants, where each group contains all of the plants of one crop type. Advance the tour when you're ready.": "现在您有了一个种植了一些作物的花园。让我们创建植物组,每个组包含一种作物类型的所有植物。准备好后继续导览。", - "number": "数字", - "Number": "数字", - "Number {{ num }}": "数字 {{ num }}", - "Number of erosion and dilation morphological transformation cycles. (default: {{ defaultIteration }})": "侵蚀和膨胀形态变换周期的次数。(默认值:{{ defaultIteration }})", - "Number of millimeters used for acceleration and deceleration. (default: {{ z }}mm)": "用于加速和减速的毫米数。(默认值:{{ z }}毫米)", - "Number of millimeters used for acceleration and deceleration. (default: x: {{ x }}mm, y: {{ y }}mm, z: {{ z }}mm)": "用于加速和减速的毫米数。(默认值:x: {{ x }}毫米, y: {{ y }}毫米, z: {{ z }}毫米)", - "Number of steps missed (determined by encoder) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在电机被认为堵转之前(由编码器确定)漏过的步数。(默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Number of times to retry a movement before stopping. (default: {{ retries }})": "在停止之前重试移动的次数。(默认值:{{ retries }})", - "Number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "重试校准的次数。(默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Now that you have a garden with a few crops in it. Let's create groups of plants, where each group contains all of the plants of one crop type. Advance the tour when you're ready.": "既然您已有包含部分作物的花园,让我们创建植物分组,每组包含同一作物类型的所有植物。准备好后继续教程。", + "number": "编号", + "Number": "编号", + "Number {{ num }}": "编号 {{ num }}", + "Number of erosion and dilation morphological transformation cycles. (default: {{ defaultIteration }})": "腐蚀和膨胀形态学变换的循环次数。(默认:{{ defaultIteration }})", + "Number of millimeters used for acceleration and deceleration. (default: {{ z }}mm)": "加速和减速所用的毫米数。(默认:{{ z }}毫米)", + "Number of millimeters used for acceleration and deceleration. (default: x: {{ x }}mm, y: {{ y }}mm, z: {{ z }}mm)": "加速和减速所用的毫米数。(默认:x: {{ x }}毫米, y: {{ y }}毫米, z: {{ z }}毫米)", + "Number of steps missed (determined by encoder) before motor is considered to have stalled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机被认为停转前,编码器检测的遗漏步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Number of times to retry a movement before stopping. (default: {{ retries }})": "停止前重试移动的次数。(默认:{{ retries }})", + "Number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "校准重试次数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "numbers": "数字", + "Occurred": "发生于", "off": "关闭", "OFF": "关闭", "offline": "离线", "Offline": "离线", "offset": "偏移", "Offset adjustment": "偏移调整", - "Offset from current location": "从当前位置偏移", - "ok": "好", - "Ok": "好", - "Old Password": "原口令", - "older": "更旧", + "Offset from current location": "相对于当前位置的偏移", + "ok": "确定", + "Ok": "确定", + "Old Password": "旧密码", + "older": "更旧的", "Older than": "早于", - "oldest": "最旧", - "on": "打开", - "ON": "打开", - "Once published, anyone may find and use the sequence free of charge for tasks including but not limited to:": "一旦发布,任何人都可以免费找到并使用该序列,用于包括但不限于以下任务:", - "Once you have input the coordinate locations for every slot, choose which tool or seed container is loaded into each slot. Remember: the virtual configuration must always match your real-life configuration.": "一旦输入每个插槽的坐标位置,选择每个插槽中加载的工具或种子容器。请记住:虚拟配置必须始终与实际配置匹配。", - "Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster.": "一旦您做出选择,我们将自动添加一些工具、传感器、外设、序列等,以便您更快地启动和运行。", + "oldest": "最旧的", + "on": "开启", + "ON": "开启", + "Once published, anyone may find and use the sequence free of charge for tasks including but not limited to:": "一经发布,任何人均可免费查找并使用该序列,任务包括但不限于:", + "Once you have input the coordinate locations for every slot, choose which tool or seed container is loaded into each slot. Remember: the virtual configuration must always match your real-life configuration.": "输入每个槽位坐标后,选择对应装载的工具或种子容器。请确保虚拟配置始终与实际配置一致。", + "Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster.": "选择后,我们会自动添加一些工具、传感器、外设、序列等,帮助您更快启动。", + "One at a time": "一次一个", "Online": "在线", - "only show current photo in map": "仅在地图中显示当前照片", - "Only show logs sent from current FarmBot OS version.": "仅显示当前FarmBot OS版本发送的日志。", - "Open a browser and navigate to ": "打开浏览器并导航到 ", - "Open documentation in a new tab": "在新标签页中打开文档", + "only show current photo in map": "仅在地图显示当前照片", + "Only show logs sent from current FarmBot OS version.": "仅显示来自当前 FarmBot OS 版本的日志。", + "Open": "打开", + "Open a browser and navigate to ": "打开浏览器并访问 ", + "Open documentation in a new tab": "在新标签页打开文档", "open full-page editor": "打开全页编辑器", "Open Guide": "打开指南", - "Open link in a new tab": "在新标签页中打开链接", - "open linked sequence": "打开链接的序列", + "Open link in a new tab": "在新标签页打开链接", + "open linked sequence": "打开关联序列", "open map settings menu": "打开地图设置菜单", "open move mode panel": "打开移动模式面板", "Open network ports": "打开网络端口", - "Open OpenFarm.cc in a new tab": "在新标签页中打开 OpenFarm.cc", - "Open options by default": "默认打开选项", + "Open options by default": "默认展开选项", "open plants panel": "打开植物面板", "open point select panel": "打开点选择面板", - "open regimen": "打开日程", - "open scheduler panel": "打开调度器面板", - "Open the ... menu for the {{ axis }} axis and click **FIND HOME**.": "打开 {{ axis }} 轴的 ... 菜单并单击 **查找原点**。", - "Open the ... menu for the {{ axis }} axis and click **FIND LENGTH**.": "打开 {{ axis }} 轴的 ... 菜单并单击 **查找长度**。", + "open regimen": "打开计划", + "open scheduler panel": "打开调度面板", + "Open the ... menu for the {{ axis }} axis and click **FIND HOME**.": "打开 {{ axis }} 轴的 ... 菜单并点击 **寻找原点**。", + "Open the ... menu for the {{ axis }} axis and click **FIND LENGTH**.": "打开 {{ axis }} 轴的 ... 菜单并点击 **寻找长度**。", + "Open up the Raspberry Pi Imager program and click \\": "打开 Raspberry Pi Imager 程序并点击 \\", "Operator": "操作员", "Optimized": "优化", "options": "选项", "Options": "选项", "or": "或", - "Or view FarmBot's current location in the virtual garden.": "或在虚拟花园中查看FarmBot的当前位置。", + "OR": "或", + "Or view FarmBot's current location in the virtual garden.": "或查看 FarmBot 在虚拟花园中的当前位置。", "Orange": "橙色", + "Order": "顺序", "Order info": "订单信息", "Order number": "订单号", "Order Number": "订单号", - "Origin": "起点", - "origin location in image": "图像中的起点位置", - "OS release channel": "OS 发布渠道", + "Origin": "原点", + "origin location in image": "图像中的原点位置", + "OS release channel": "操作系统发布通道", "Other": "其他", + "Other curves": "其他曲线", "Outside of filter range": "超出筛选范围", - "Outside of planting area. Plants must be placed within the grid.": "在种植区外。植物必须放置在网格内。", - "Over time you may need to make minor adjustments to the coordinates of your slots. At any time you can come back to the edit slot panel and manually adjust the X, Y, and Z input fields.": "随着时间的推移,您可能需要对插槽的坐标进行小幅调整。随时可以返回编辑插槽面板,手动调整X、Y和Z输入字段。", + "Outside of planting area. Plants must be placed within the grid.": "超出种植区域。植物必须放置在网格内。", + "Over time you may need to make minor adjustments to the coordinates of your slots. At any time you can come back to the edit slot panel and manually adjust the X, Y, and Z input fields.": "随着时间推移,您可能需要对槽位坐标做细微调整。随时可返回编辑槽位面板,手动修改 X、Y、Z 输入框。", "override": "覆盖", - "Package Name": "类名", + "Package Name": "包名", "Parameter load progress": "参数加载进度", "Parameter Management": "参数管理", "Parameters": "参数", - "Password": "口令", - "Password must be 8 or more characters.": "密码必须为8个或更多字符。", - "Paste the output from EXPORT PARAMETERS into the text field and press IMPORT to import new hardware parameters to your FarmBot.": "将导出参数的输出粘贴到文本字段中,然后按导入以将新的硬件参数导入到您的FarmBot。", - "Pending": "待定", + "Password": "密码", + "Password must be 8 or more characters.": "密码必须至少8个字符。", + "Paste the output from EXPORT PARAMETERS into the text field and press IMPORT to import new hardware parameters to your FarmBot.": "将 EXPORT PARAMETERS 导出的内容粘贴到文本框,点击 IMPORT 以导入新的硬件参数到 FarmBot。", + "Pending": "待处理", "pending install": "待安装", - "Pending installation.": "待安装。", - "Percent OK": "百分比正常", - "Perform camera rotation compensation when image is captured instead of in garden map. If enabled, image files will include adjustment for camera rotation (black angled borders may show in viewer). Enabling this setting will slow down photo capture.": "在捕获图像时执行相机旋转补偿,而不是在花园地图中。如果启用,图像文件将包含相机旋转的调整(查看器中可能会显示黑色角边)。启用此设置会减慢照片捕捉速度。", - "Period End Date": "期间结束日期", + "Pending installation.": "等待安装。", + "Percent OK": "合格率", + "Perform camera rotation compensation when image is captured instead of in garden map. If enabled, image files will include adjustment for camera rotation (black angled borders may show in viewer). Enabling this setting will slow down photo capture.": "在拍摄时执行相机旋转补偿,而非在花园地图中进行。启用后,图像文件会包含旋转调整(查看器中可能出现黑色斜边)。启用此设置会降低拍照速度。", + "Perhaps the page has moved?": "页面可能已移动?", + "Period End Date": "周期结束日期", "Peripheral": "外设", "Peripheral ": "外设 ", + "peripherals": "外设", "Peripherals": "外设", "PERIPHERALS": "外设", "phone": "电话", "Photo": "照片", - "photo step": "照片步骤", + "photo step": "拍照步骤", "Photo upload": "照片上传", "Photos": "照片", - "Photos are viewable from the": "照片可从以下查看", - "photos in map": "地图中的照片", + "Photos are viewable from the": "照片可从", + "photos in map": "地图照片", "photos panel": "照片面板", "pin": "引脚", "Pin": "引脚", "Pin ": "引脚 ", - "Pin a sequence in the sequence editor to add it to this list.": "在序列编辑器中固定一个序列以将其添加到此列表中。", + "Pin a sequence in the sequence editor to add it to this list.": "在序列编辑器中固定序列以添加到此列表。", "Pin Bindings": "引脚绑定", "Pin Guard": "引脚保护", "Pin Guard 1": "引脚保护 1", @@ -1222,23 +1392,25 @@ "Pin Reporting": "引脚报告", "Pin Reporting 1": "引脚报告 1", "Pin Reporting 2": "引脚报告 2", - "pin timeout (sec) to state": "引脚超时(秒)到状态", - "Pings received": "收到的Ping", - "Pings sent": "发送的Ping", + "pin timeout (sec) to state": "引脚状态超时时间(秒)", + "Pings received": "收到的 Ping", + "Pings sent": "发送的 Ping", "Pink": "粉色", - "Pinned Sequences": "固定的序列", + "Pinned Sequences": "固定序列", "Pins": "引脚", "pixel coordinate scale": "像素坐标比例", - "Place the camera calibration card face down on the soil underneath the camera, with the grid of white circles facing up. Can be in any orientation but must be fully visible to the camera. Caution: FarmBot will make three small x-axis and y-axis movements during calibration.": "将相机校准卡正面朝下放在相机下方的土壤上,白色圆圈的网格朝上。可以是任何方向,但必须完全可见。注意:FarmBot在校准期间将进行三次小的X轴和Y轴移动。", - "Place the two red calibration objects 100mm apart and aligned with FarmBot's axes on the soil underneath the camera.": "将两个红色校准物体间隔100毫米,并与FarmBot的轴对齐,放在相机下方的土壤上。", - "Planned": "计划", + "Place the camera calibration card face down on the soil underneath the camera, with the grid of white circles facing up. Can be in any orientation but must be fully visible to the camera. Caution: FarmBot will make three small x-axis and y-axis movements during calibration.": "将相机校准卡正面朝下放置在相机下方的土壤上,白色圆圈网格朝上。方向可以任意,但必须完全被相机看到。注意:校准过程中,FarmBot 会在 x 轴和 y 轴上进行三次小幅移动。", + "Place the two red calibration objects 100mm apart and aligned with FarmBot's axes on the soil underneath the camera.": "将两个红色校准物体放置在相机下方的土壤上,间距为 100 毫米,并与 FarmBot 的坐标轴对齐。", + "Planned": "计划中", "plant": "植物", "Plant animations": "植物动画", - "Plant Details": "植物详细信息", - "Plant groups": "植物组", - "Plant Groups": "植物组", + "Plant Details": "植物详情", + "Plant groups": "植物分组", + "Plant Groups": "植物分组", "plant icon": "植物图标", "Plant inventory": "植物库存", + "Plant may exceed the distance between the soil and FarmBot": "植物可能超过土壤与 FarmBot 之间的距离", + "Plant may spread beyond the growing area": "植物可能会蔓延到种植区域之外", "Plant stage": "植物阶段", "Plant Type": "植物类型", "Planted": "已种植", @@ -1246,100 +1418,112 @@ "plants": "植物", "Plants": "植物", "Please agree to the terms.": "请同意条款。", - "Please check your email for the verification link.": "请检查您的电子邮件以获取验证链接。", - "Please check your email to confirm email address changes.": "请检查您的电子邮件以确认电子邮件地址的更改。", - "Please choose a firmware version to install. Your choice should be based on the type of electronics in your FarmBot according to the reference table below.": "请选择要安装的固件版本。您的选择应基于下表中FarmBot的电子类型。", - "Please clear current garden first.": "请先清除当前花园。", - "Please contact the system(s) administrator(s) and ask them to enable HTTPS://": "请联系系统管理员并要求他们启用HTTPS://", + "Please check your email for the verification link.": "请检查您的邮箱以获取验证链接。", + "Please check your email to confirm email address changes.": "请检查您的邮箱以确认邮箱地址更改。", + "Please choose a firmware version to install. Your choice should be based on the type of electronics in your FarmBot according to the reference table below.": "请选择一个固件版本进行安装。您的选择应基于下面参考表中 FarmBot 电子设备的类型。", + "Please clear current garden first.": "请先清空当前花园。", + "Please contact the system(s) administrator(s) and ask them to enable HTTPS://": "请联系系统管理员,要求启用 HTTPS://", "Please enter a number.": "请输入一个数字。", - "Please enter a URL": "请输入一个URL", - "Please enter a URL.": "请输入一个URL。", - "Please enter a value between 0 and {{ max }}": "请输入0和{{ max }}之间的值", - "Please enter a value.": "请输入一个值。", - "Please enter your FarmBot order number.": "请输入您的FarmBot订单号。", - "Please make a grid with less than 100 {{ itemType }}": "请制作一个少于100 {{ itemType }} 的网格", + "Please enter a URL": "请输入一个网址", + "Please enter a URL.": "请输入一个网址。", + "Please enter a value between 0 and {{ max }}": "请输入一个介于 0 和 {{ max }} 之间的值。", + "Please enter a value.": "请输入一个数值。", + "Please enter your FarmBot order number.": "请输入您的 FarmBot 订单号。", + "Please make a grid with less than 100 {{ itemType }}": "请制作一个包含少于 100 个 {{ itemType }} 的网格。", "Please note:": "请注意:", - "Please re-flash your FarmBot's SD card.": "请重新刷新您的FarmBot的SD卡。", + "Please re-flash your FarmBot's SD card.": "请重新刷写 FarmBot 的 SD 卡。", + "Please select a model": "请选择一个型号", "Please select a pin.": "请选择一个引脚。", - "Please select a sensor with a valid pin number.": "请选择一个带有效引脚编号的传感器。", - "Please select a sequence or action.": "请选择一个序列或操作。", - "Please select a sequence or regimen.": "请选择一个序列或日程。", + "Please select a sensor with a valid pin number.": "请选择一个带有效引脚号的传感器。", + "Please select a sequence or action.": "请选择一个序列或动作。", + "Please select a sequence or regimen.": "请选择一个序列或方案。", "Please Update": "请更新", "Please upgrade": "请升级", - "Please wait": "请等待", - "Plug in FarmBot's power.": "插入FarmBot的电源。", + "Please wait": "请稍候", + "Plots": "地块", + "Plug in FarmBot's power.": "为 FarmBot 连接电源。", + "plus hour": "加小时", "point": "点", "Point created.": "点已创建。", - "Point Groups": "点组", + "Point Groups": "点分组", "Point status": "点状态", "Points": "点", "points panel": "点面板", + "Ports": "端口", + "Position (mm)": "位置(毫米)", "Positions": "位置", - "Positive X": "正X", - "Positive Y": "正Y", - "Power and Reset": "电源和重置", - "Power cycle FarmBot's onboard computer.": "重启FarmBot的板载计算机。", - "Power down FarmBot's onboard computer.": "关闭FarmBot的板载计算机。", - "Power Off Bot": "关闭机器人", - "Power up": "启动", - "Press \"+\" to add a Farmware.": "按 \"+\" 添加一个Farmware。", - "Press \"+\" to add a garden.": "按 \"+\" 添加一个花园。", - "Press \"+\" to add a group.": "按 \"+\" 添加一个组。", - "Press \"+\" to add a new tool or seed container.": "按 \"+\" 添加一个新工具或种子容器。", - "Press \"+\" to add a plant to your garden.": "按 \"+\" 添加植物到您的花园。", - "Press \"+\" to add a point to your garden.": "按 \"+\" 添加一个点到您的花园。", - "Press \"+\" to add a seed container.": "按 \"+\" 添加一个种子容器。", - "Press \"+\" to add a weed.": "按 \"+\" 添加一个杂草。", - "Press \"+\" to add a zone.": "按 \"+\" 添加一个区域。", - "Press \"+\" to schedule an event.": "按 \"+\" 安排一个事件。", - "Press \"edit\" to add a peripheral.": "按 \"编辑\" 添加一个外设。", - "Press \"edit\" to add a sensor.": "按 \"编辑\" 添加一个传感器。", - "Press the **{{ toggle }}** toggle, wait a few seconds, and then press the toggle again.": "按 **{{ toggle }}** 开关,等待几秒钟,然后再次按开关。", - "Press the button below to calibrate the camera.": "按下面的按钮校准相机。", - "Press the button below to take a photo.": "按下面的按钮拍照。", - "Press the button to install your device's firmware.": "按按钮安装设备的固件。", - "Press the down arrow.": "按下箭头。", - "Press the physical E-Stop button on top of the electronics box.": "按电子盒顶部的物理急停按钮。", - "Press the physical Unlock button on top of the electronics box.": "按电子盒顶部的物理解锁按钮。", - "Press the right arrow.": "按右箭头。", - "Press the toggle button to enable dynamic map size.": "按切换按钮启用动态地图大小。", + "Positive X": "正 X 轴", + "Positive Y": "正 Y 轴", + "Power and Reset": "电源与重置", + "Power cycle FarmBot's onboard computer.": "为 FarmBot 的主控计算机断电重启。", + "Power down FarmBot's onboard computer.": "关闭 FarmBot 的主控计算机电源。", + "Power Off Bot": "关闭机器人电源", + "Power up": "开机", + "Press \"edit\" to add a peripheral.": "点击“编辑”以添加外围设备。", + "Press \"edit\" to add a sensor.": "点击“编辑”以添加传感器。", + "Press + to add a curve": "点击 + 以添加曲线", + "Press + to add a Farmware": "点击 + 以添加 Farmware", + "Press + to add a garden": "点击 + 以添加花园", + "Press + to add a group": "点击 + 以添加分组", + "Press + to add a new tool or seed container": "点击 + 以添加新工具或种子容器", + "Press + to add a plant to your garden": "点击 + 以向花园添加植物", + "Press + to add a point to your garden": "点击 + 以向花园添加点", + "Press + to add a seed container": "点击 + 以添加种子容器", + "Press + to add a weed": "点击 + 以添加杂草", + "Press + to add a zone": "点击 + 以添加区域", + "Press + to schedule an event": "点击 + 以安排事件", + "Press the **{{ toggle }}** toggle, wait a few seconds, and then press the toggle again.": "按下 **{{ toggle }}** 开关,等待几秒钟,然后再次按下开关。", + "Press the button below to calibrate the camera.": "按下下面的按钮以校准相机。", + "Press the button below to take a photo.": "按下下面的按钮以拍照。", + "Press the button to install your device's firmware.": "按下按钮安装设备固件。", + "Press the down arrow.": "按下向下箭头。", + "Press the physical E-Stop button on top of the electronics box.": "按下电子盒顶部的紧急停止按钮。", + "Press the physical Unlock button on top of the electronics box.": "按下电子盒顶部的解锁按钮。", + "Press the right arrow.": "按下向右箭头。", + "Press the toggle button to enable dynamic map size.": "按切换按钮以启用动态地图大小。", "Press the UNLOCK button below.": "按下面的解锁按钮。", - "Press the up arrow.": "按上箭头。", - "Press YES to proceed to camera calibration.": "按 YES 进行相机校准。", - "Press YES when ready.": "准备好时按 YES。", - "Press YES.": "按 YES。", - "Prev": "上一个", + "Press the up arrow.": "按下向上箭头。", + "Press YES to proceed to camera calibration.": "按“是”继续进行相机校准。", + "Press YES when ready.": "准备好时按“是”。", + "Press YES.": "按“是”。", + "Prev": "上一步", "Preview": "预览", "previous image": "上一张图片", "Previous image": "上一张图片", "Priority support": "优先支持", "priority support subscription": "优先支持订阅", "Privacy Policy": "隐私政策", - "Problem Loading Terms of Service": "加载服务条款时出现的问题", - "Processing now. Results usually available in one minute. Check log messages for result status.": "正在处理。结果通常在一分钟内可用。检查日志消息以获取结果状态。", - "Processing Parameters": "处理参数", - "Progress": "进展", + "Problem Loading Terms of Service": "加载服务条款时出错", + "Processing now. Results usually available in one minute. Check log messages for result status.": "正在处理。结果通常在一分钟内可用。请查看日志消息了解状态。", + "Processing Parameters": "参数处理中", + "Progress": "进度", "property": "属性", "Provide feedback": "提供反馈", - "Provided new and old passwords match. Password not changed.": "提供的新旧密码匹配。密码未更改。", + "Provided new and old passwords match. Password not changed.": "提供的新旧密码相同。密码未更改。", "public copy": "公开副本", "public version": "公开版本", "Publish error": "发布错误", - "Published as a publicly shared sequence.": "发布为公开共享的序列。", - "publishing": "正在发布", + "Published as a publicly shared sequence.": "已发布为公开共享序列。", + "publishing": "发布中", "Publishing this sequence will create a": "发布此序列将创建一个", - "Publishing, distributing, and even selling their copy": "发布、分发,甚至销售他们的副本", + "Publishing, distributing, and even selling their copy": "发布、分发甚至出售他们的副本", "Purple": "紫色", + "Quick select": "快速选择", "quit": "退出", "Radius": "半径", "radius (mm)": "半径(毫米)", "Random Order": "随机顺序", - "Raspberry Pi Camera": "Raspberry Pi 摄像头", - "Raspberry Pi GPIO pin already bound or in use.": "Raspberry Pi GPIO 引脚已绑定或正在使用。", - "Raspberry Pi power status since last reboot. If supply voltage drops below the standard operational threshold the indicator will turn red. Once the voltage level recovers the status will turn yellow, indicating that a low voltage event has occurred. Low voltage may adversely affect WiFi and camera functionality.": "自上次重启以来的Raspberry Pi电源状态。如果电源电压降到标准操作阈值以下,指示灯将变红。一旦电压水平恢复,状态将变为黄色,表明发生了低电压事件。低电压可能会对WiFi和相机功能产生不利影响。", - "Encoder (raw)": "原始编码器数据", + "Raspberry Pi": "树莓派", + "Raspberry Pi Camera": "树莓派摄像头", + "Raspberry Pi GPIO pin already bound or in use.": "树莓派 GPIO 引脚已绑定或正在使用。", + "Raspberry Pi model": "树莓派型号", + "Raspberry Pi Model 3": "树莓派 3 型号", + "Raspberry Pi Model 4": "树莓派 4 型号", + "Raspberry Pi model from your choice in the dropdown to the right, as understood by the Web App.": "您在右侧下拉菜单中选择的树莓派型号,Web 应用已识别。", + "Raspberry Pi model reported from your device, as understood by FarmBot OS.": "设备报告的树莓派型号,由 FarmBot OS 识别。", + "Raspberry Pi power status since last reboot. If supply voltage drops below the standard operational threshold the indicator will turn red. Once the voltage level recovers the status will turn yellow, indicating that a low voltage event has occurred. Low voltage may adversely affect WiFi and camera functionality.": "自上次重启以来的树莓派电源状态。如果供电电压低于标准操作阈值,指示灯会变红。一旦电压恢复,状态将变为黄色,表示发生过低压事件。低电压可能会影响 WiFi 和摄像头功能。", "Raw encoder position": "原始编码器位置", - "re-seed account": "重新播种账户", + "re-seed account": "重新种子账户", "Read pin": "读取引脚", "read sensor": "读取传感器", "Read sensor": "读取传感器", @@ -1352,50 +1536,54 @@ "realtime": "实时", "Reboot": "重启", "Reboot Bot": "重启机器人", - "Received change of ownership.": "收到所有权变更。", - "Reconnected to the message broker.": "重新连接到消息代理。", + "Received change of ownership.": "已收到所有权变更。", + "Reconnected to the message broker.": "已重新连接到消息代理。", "Recover and continue": "恢复并继续", "Recovery Sequence": "恢复序列", "Recursive condition.": "递归条件。", "red": "红色", "Red": "红色", - "Redirecting": "正在重定向", - "Reduction to missed step total for every good step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "每走一步减少错过的总步数。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Refer to the": "参考", + "Redirecting": "重定向中", + "Reduction to missed step total for every good step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "每个正常步减少未步计数。 (默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Refer to the": "参见", "Refusing to modify data in read-only mode": "拒绝在只读模式下修改数据", "Regimens": "方案", "Register your ORDER NUMBER": "注册您的订单号", - "Release Notes": "发行说明", - "released under the": "在以下条件下发布", + "Release Notes": "版本说明", + "released under the": "发布于", "Removal method": "移除方法", "Removal Method": "移除方法", "Remove": "移除", "Remove all manual selections?": "移除所有手动选择?", - "remove Farmware": "移除Farmware", - "Remove Farmware": "移除Farmware", + "remove Farmware": "移除 Farmware", + "Remove Farmware": "移除 Farmware", "remove filter": "移除过滤器", - "remove number criteria": "移除数字标准", - "Remove portions of images that extend beyond the garden map boundaries.": "移除超出花园地图边界的图像部分。", + "remove number criteria": "移除数字条件", + "Remove portions of images that extend beyond the garden map boundaries.": "移除超出花园地图边界的图片部分。", + "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the back side of the Raspberry Pi, on the right-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.": "从 FarmBot 的树莓派中取出 microSD 卡。卡槽位于树莓派背面右侧边缘。然后使用读卡器将 microSD 卡连接到您的电脑。可能需要使用套件中附带的 microSD 卡转 SD 卡适配器。", + "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.": "从 FarmBot 的树莓派中取出 microSD 卡。卡槽位于树莓派正面左侧边缘。然后使用读卡器将 microSD 卡连接到您的电脑。可能需要使用套件中附带的 microSD 卡转 SD 卡适配器。", + "Remove the microSD card from your computer and insert it into FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge.": "从电脑中取出 microSD 卡,并插入 FarmBot 的树莓派。卡槽位于树莓派正面左侧边缘。", "remove week": "移除周", "Removed": "已移除", "Repeats?": "重复?", - "Republishing this sequence will prevent you from viewing public copies and upgrading to versions from the current import source.": "重新发布此序列将阻止您查看公共副本并升级到当前导入源的版本。", - "Request sent": "发送请求", + "Republishing this sequence will prevent you from viewing public copies and upgrading to versions from the current import source.": "重新发布此序列将阻止您查看公共副本以及从当前导入源升级版本。", + "Request sent": "请求已发送", "Requires": "需要", "RESEND": "重新发送", "Resend parameters": "重新发送参数", "Resend Verification Email": "重新发送验证邮件", - "Reserved Raspberry Pi pin may not work as expected.": "保留的Raspberry Pi引脚可能无法按预期工作。", + "Reserved Raspberry Pi pin may not work as expected.": "保留的树莓派引脚可能无法正常工作。", "reset": "重置", - "Reset": "重新设定", - "RESET": "重新设定", + "Reset": "重置", + "RESET": "重置", "Reset {{ count }} values?": "重置 {{ count }} 个值?", "Reset account": "重置账户", "Reset all values": "重置所有值", "Reset calibration values": "重置校准值", - "Reset Farmware config values": "重置Farmware配置值", + "Reset Farmware config values": "重置 Farmware 配置值", "Reset filters": "重置过滤器", "Reset hardware parameters": "重置硬件参数", + "reset hour": "重置小时", "Reset password": "重置密码", "Reset Password": "重置密码", "reset to default": "恢复默认", @@ -1405,90 +1593,89 @@ "Resource": "资源", "Resource {{ num }}": "资源 {{ num }}", "Resources added!": "资源已添加!", - "restart": "重新启动", - "RESTART": "重新开始", - "Restart Farmbot": "重新启动Farmbot", - "restart firmware": "重新启动固件", - "Restart Firmware": "重新启动固件", - "Restart setup wizard": "重新启动设置向导", - "Restart the Farmduino or Arduino firmware.": "重新启动Farmduino或Arduino固件。", - "Restoring hardware parameter defaults will destroy the current settings, resetting them to default values.": "恢复硬件参数默认值将销毁当前设置,将其重置为默认值。", - "Restrict travel to negative coordinate locations. Overridden by disabling STOP AT HOME. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "限制行程到负坐标位置。通过禁用在原地停止来覆盖。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "result toast": "结果通知", - "Results are viewable from the": "结果可从以下查看", - "Results are viewable in the": "结果可在以下查看", + "restart": "重启", + "RESTART": "重启", + "Restart Farmbot": "重启 FarmBot", + "restart firmware": "重启固件", + "Restart Firmware": "重启固件", + "Restart setup wizard": "重启安装向导", + "Restart the Farmduino or Arduino firmware.": "重启 Farmduino 或 Arduino 固件。", + "Restoring hardware parameter defaults will destroy the current settings, resetting them to default values.": "恢复硬件参数默认值将清除当前设置,重置为默认值。", + "Restrict travel to negative coordinate locations. Overridden by disabling STOP AT HOME. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "限制移动到负坐标位置。禁用“停止于原点”后此限制失效。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "result toast": "结果提示", + "Results are viewable from the": "结果可从……查看", + "Results are viewable in the": "结果可在……查看", "Retry": "重试", - "retry fetch package name": "重试获取包名称", + "retry fetch package name": "重试获取包名", "Return to the": "返回到", "Return to the wizard": "返回向导", - "Reverse the direction of encoder position reading. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "反转编码器位置读取的方向。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "revert changes": "还原更改", + "Reverse the direction of encoder position reading. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "反转编码器位置读取方向。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "revert changes": "撤销更改", "Rotary tool": "旋转工具", "Rotary Tool": "旋转工具", "ROTARY TOOL": "旋转工具", - "Rotary tool forward": "旋转工具前进", + "Rotary tool forward": "旋转工具正转", "Rotary tool reverse": "旋转工具反转", "Rotary Tool Reverse": "旋转工具反转", "ROTARY TOOL REVERSE": "旋转工具反转", - "rotate during capture": "在捕获过程中旋转", - "Rotate during capture": "在捕获过程中旋转", + "rotate during capture": "拍摄时旋转", + "Rotate during capture": "拍摄时旋转", "Rotate map": "旋转地图", "rotate tool 180 degrees": "旋转工具180度", "Row Spacing": "行间距", "Run": "运行", - "Run Farmware": "运行Farmware", - "run water for 5 seconds": "运行水5秒", + "Run Farmware": "运行 Farmware", + "run water for 5 seconds": "浇水5秒", + "S-Curve": "S 曲线", "safe": "安全", "Safe height": "安全高度", "Safe Height": "安全高度", - "Safe Z": "安全Z", - "same as front": "与前面相同", + "Safe Z": "安全Z轴", + "same as front": "同前面", "SATURATION": "饱和度", "save": "保存", "Save": "保存", - "save as default": "保存为默认", - "Save as default": "保存为默认", + "save as default": "设为默认", + "Save as default": "设为默认", "save detected plants": "保存检测到的植物", - "Save detected plants as map points. (default: {{ defaultSavePlants }})": "将检测到的植物保存为地图点。(默认: {{ defaultSavePlants }})", - "Save error. Click to retry.": "保存错误。点击重试。", + "Save detected plants as map points. (default: {{ defaultSavePlants }})": "将检测到的植物保存为地图点。(默认:{{ defaultSavePlants }})", + "Save error. Click to retry.": "保存出错。点击重试。", "save folder name": "保存文件夹名称", - "Save new slot?": "保存新槽位?", - "Save sequence and sync device before running.": "保存序列并在运行前同步设备。", - "Save sequence first.": "先保存序列。", + "Save new slot?": "保存新槽?", + "Save sequence and sync device before running.": "运行前保存序列并同步设备。", + "Save sequence first.": "请先保存序列。", "Saved": "已保存", - "saved garden": "已保存的花园", - "Saved pin bindings": "已保存的引脚绑定", + "Saved pin bindings": "已保存引脚绑定", "Saving": "保存中", "saving...": "保存中...", - "Encoder (mm)": "缩放编码器(毫米)", - "Scaled encoder position": "缩放编码器位置", - "Scan current image": "扫描当前图像", - "Scan this image": "扫描此图像", - "Schedule item": "计划项目", + "scale": "缩放", + "Scaled encoder position": "缩放后的编码器位置", + "Scan current image": "扫描当前图片", + "Scan this image": "扫描此图片", + "Schedule item": "计划项", "Scheduler": "调度器", "search all crops?": "搜索所有作物?", "Search commands and sequences...": "搜索命令和序列...", + "Search crops...": "搜索作物...", "Search for a crop to add to your garden.": "搜索要添加到花园的作物。", "Search logs...": "搜索日志...", - "Search OpenFarm...": "搜索OpenFarm...", "Search sequences...": "搜索序列...", "Search settings...": "搜索设置...", - "Search term too short": "搜索词太短", - "Search your events...": "搜索您的事件...", - "Search your Farmware...": "搜索您的Farmware...", - "Search your gardens...": "搜索您的花园...", - "Search your groups...": "搜索您的群组...", - "Search your plants...": "搜索您的植物...", - "Search your points...": "搜索您的点...", - "Search your regimens...": "搜索您的方案...", - "Search your seed containers...": "搜索您的种子容器...", - "Search your tools...": "搜索您的工具...", - "Search your weeds...": "搜索您的杂草...", - "Search your zones...": "搜索您的区域...", - "Searching...": "搜索中...", + "Search your curves...": "搜索曲线...", + "Search your events...": "搜索事件...", + "Search your Farmware...": "搜索 Farmware...", + "Search your gardens...": "搜索花园...", + "Search your groups...": "搜索分组...", + "Search your plants...": "搜索植物...", + "Search your points...": "搜索点位...", + "Search your regimens...": "搜索方案...", + "Search your seed containers...": "搜索种子容器...", + "Search your tools...": "搜索工具...", + "Search your weeds...": "搜索杂草...", + "Search your zones...": "搜索区域...", "sec": "秒", - "seconds ago": "秒前", - "See what FarmBot is doing": "查看FarmBot的操作", + "seconds ago": "几秒前", + "See what FarmBot is doing": "查看 FarmBot 状态", "Seed Bin": "种子箱", "Seed Container": "种子容器", "seed containers": "种子容器", @@ -1496,47 +1683,48 @@ "Seed Trough 1": "种子槽 1", "Seed Trough 2": "种子槽 2", "Seeder": "播种机", - "Seeding in progress.": "播种进行中。", - "Seeding your account without resetting it first may result in duplicate resources. Continue?": "在不先重置账户的情况下播种可能会导致资源重复。继续?", + "Seeder Tip Z Offset (mm)": "播种机尖端Z轴偏移(毫米)", + "Seeding in progress.": "正在播种。", + "Seeding your account without resetting it first may result in duplicate resources. Continue?": "未重置账户直接播种可能导致资源重复。是否继续?", "select": "选择", - "Select a camera on the Settings panel to take photos.": "在设置面板上选择一个相机来拍照。", - "Select a default value for this variable. If the sequence is ever run without the variable explicitly set to another value, the default value will be used.": "选择此变量的默认值。如果运行序列时没有显式设置变量的值,则使用默认值。", - "Select a group": "选择一个组", - "Select a location": "选择一个位置", - "Select a location in the map.": "在地图中选择一个位置。", - "Select a map origin by clicking on one of the four quadrants to adjust the garden map to your viewing angle.": "通过点击四个象限之一选择地图原点,以调整花园地图到您的视角。", - "Select a model": "选择一个模型", - "Select a peripheral": "选择一个外设", - "Select a pin": "选择一个引脚", - "Select a pin ": "选择一个引脚 ", - "Select a regimen first or create one.": "先选择一个方案或创建一个。", - "Select a sensor": "选择一个传感器", - "Select a sequence": "选择一个序列", - "Select a sequence first": "先选择一个序列", - "Select a sequence from the dropdown first.": "先从下拉菜单中选择一个序列。", - "Select a status": "选择一个状态", + "Select": "选择", + "Select a camera on the Settings panel to take photos.": "在设置面板选择相机进行拍照。", + "Select a curve": "选择曲线", + "Select a default value for this variable. If the sequence is ever run without the variable explicitly set to another value, the default value will be used.": "为此变量选择默认值。如序列运行时变量未被显式设置为其他值,则使用默认值。", + "Select a location": "选择位置", + "Select a location in the map.": "在地图上选择位置。", + "Select a map origin by clicking on one of the four quadrants to adjust the garden map to your viewing angle.": "点击四个象限中的一个以调整花园地图的原点和视角。", + "Select a model": "选择型号", + "Select a peripheral": "选择外设", + "Select a pin": "选择引脚", + "Select a pin ": "选择引脚", + "Select a regimen first or create one.": "请先选择或创建方案。", + "Select a sensor": "选择传感器", + "Select a sequence": "选择序列", + "Select a sequence first": "请先选择序列", + "Select a sequence from the dropdown first.": "请先从下拉菜单选择序列。", + "Select a status": "选择状态", "Select all": "全选", - "select all days": "选择所有天", - "Select all in group": "选择组中所有", + "select all days": "选择所有天数", + "Select all in group": "选择组内所有", "select color": "选择颜色", "Select none": "全不选", "Select one": "选择一个", - "Select the 'Find Home' sequence in the dropdown. FarmBot will execute this sequence every time it boots up. You can modify this sequence or choose a different boot sequence later to have FarmBot perform different functions when it turns on.": "在下拉菜单中选择“找到家”序列。FarmBot每次启动时都会执行此序列。您可以稍后修改此序列或选择不同的启动序列,以便FarmBot在启动时执行不同的功能。", + "Select the 'Find Home' sequence in the dropdown. FarmBot will execute this sequence every time it boots up. You can modify this sequence or choose a different boot sequence later to have FarmBot perform different functions when it turns on.": "在下拉菜单中选择“寻找原点”序列。FarmBot 每次启动时都会执行此序列。您可以修改此序列或稍后选择不同的启动序列来执行不同操作。", "Select the correct map origin.": "选择正确的地图原点。", - "Select your FarmBot model.": "选择您的FarmBot模型。", + "Select your FarmBot model.": "选择你的 FarmBot 型号。", "selected": "已选择", "selected by filters": "通过筛选选择", "SELECTION ACTIONS": "选择操作", "selection type": "选择类型", "selections empty": "选择为空", "Send a log message for each sequence step.": "为每个序列步骤发送日志消息。", - "Send a log message upon the end of sequence execution.": "在序列执行结束时发送日志消息。", - "Send a log message upon the start of sequence execution.": "在序列执行开始时发送日志消息。", + "Send a log message upon the end of sequence execution.": "序列执行结束时发送日志消息。", + "Send a log message upon the start of sequence execution.": "序列执行开始时发送日志消息。", "Send message": "发送消息", - "Send Message": "发送信息", - "Sending firmware configuration...": "发送固件配置...", + "Send Message": "发送消息", + "Sending firmware configuration...": "发送固件配置中...", "Sensor": "传感器", - "Sensor History": "传感器历史", "sensor or peripheral": "传感器或外设", "Sensor readings": "传感器读数", "Sensors": "传感器", @@ -1546,375 +1734,395 @@ "Sequence load error": "序列加载错误", "Sequence logs:": "序列日志:", "Sequence Name": "序列名称", - "Sequence not found": "序列未找到", + "Sequence not found": "未找到序列", "Sequence or Regimen": "序列或方案", "sequence steps": "序列步骤", "Sequence upgraded.": "序列已升级。", "Sequences": "序列", "Server": "服务器", - "Servo pin": "伺服引脚", + "Servo pin": "舵机引脚", "Set axis length": "设置轴长度", - "Set axis length to the current FarmBot axis position.": "将轴长度设置为当前FarmBot轴位置。", - "Set Farmware Env": "设置Farmware环境", + "Set axis length to the current FarmBot axis position.": "将轴长度设置为当前 FarmBot 轴位置。", + "Set Farmware Env": "设置 Farmware 环境变量", "Set home": "设置原点", "Set Home": "设置原点", "SET HOME": "设置原点", - "SET HOME {{ axis }}": "设置原点 {{ axis }}", + "SET HOME {{ axis }}": "设置 {{ axis }} 轴原点", "SET LENGTH": "设置长度", - "Set the current location as home (zero).": "将当前位置设置为原点(零)。", - "Set the length of each axis to provide software limits. Used only if STOP AT MAX is enabled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (disabled))": "设置每个轴的长度以提供软件限制。仅在启用“在最大值处停止”时使用。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }} (已禁用))", + "Set the current location as home (zero).": "将当前位置设置为原点(零点)。", + "Set the length of each axis to provide software limits. Used only if STOP AT MAX is enabled. (default: x: {{ x }}, y: {{ y }}, z: {{ z }} (disabled))": "设置每个轴的长度以提供软件限制,仅在启用“停止于最大值”时使用。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }}(禁用))", + "Set the time you wish for FarmBot to automatically download and install updates when available. During this time FarmBot will reboot to apply the update, so you should never schedule any events to occur during the same hour. We recommend selecting 3 AM.": "设置 FarmBot 自动下载并安装更新的时间。更新期间 FarmBot 会重启,因此请勿安排事件在此时间段内执行。建议选择凌晨3点。", "set to": "设置为", "Setting name (key)": "设置名称(键)", - "Setting toggle": "设置开关", "Setting up slots": "设置槽位", "settings": "设置", "Settings": "设置", "Setup": "设置", "Setup Complete!": "设置完成!", - "Setup, customize, and control FarmBot from your": "从您的设备设置、定制和控制FarmBot", + "Setup, customize, and control your garden from anywhere": "随时随地设置、自定义并管理你的花园", + "shape": "形状", "share sequence": "分享序列", "Shop": "商店", + "Show a 3D model of FarmBot's electronics box instead of a 2D view in the Peripherals tab of the Controls pop-up.": "在控制弹窗的外设标签中显示 FarmBot 电子盒的 3D 模型,而非 2D 视图。", "Show a confirmation dialog when deleting a plant.": "删除植物时显示确认对话框。", "Show a confirmation dialog when deleting a sequence step.": "删除序列步骤时显示确认对话框。", "Show a confirmation dialog when deleting a sequence.": "删除序列时显示确认对话框。", "Show advanced settings": "显示高级设置", "Show all download links": "显示所有下载链接", - "Show Areas Map Layer": "显示区域地图图层", + "Show Areas Map Layer": "显示区域地图层", "show assertion log messages": "显示断言日志消息", "show busy log messages": "显示忙碌日志消息", - "show calibration images": "显示校准图像", + "show calibration images": "显示校准图片", "show camera view area": "显示相机视野区域", "show debug log messages": "显示调试日志消息", "show error log messages": "显示错误日志消息", - "Show FarmBot Map Layer": "显示FarmBot地图图层", - "show fun log messages": "显示有趣的日志消息", + "Show FarmBot Map Layer": "显示 FarmBot 地图层", + "show fun log messages": "显示趣味日志消息", "show icons": "显示图标", "show info log messages": "显示信息日志消息", "Show logs": "显示日志", - "Show Moisture Interpolation Map Layer": "显示湿度插值地图图层", - "show motor position plot display": "显示电机位置图显示", - "show only photos taken within": "仅显示在以下范围内拍摄的照片", - "show only this photo and": "仅显示此照片和", + "Show Moisture Interpolation Map Layer": "显示湿度插值地图层", + "show motor load plot display": "显示电机负载曲线", + "show motor position plot display": "显示电机位置曲线", + "show only photos taken within": "仅显示指定时间内拍摄的照片", + "show only this photo and": "仅显示此照片及", "show photos in map": "在地图中显示照片", - "Show Photos Map Layer": "显示照片地图图层", + "Show Photos Map Layer": "显示照片地图层", "Show pins": "显示引脚", - "Show Plants Map Layer": "显示植物地图图层", - "Show Points Map Layer": "显示点地图图层", - "Show Previous Period": "显示上一时期", - "Show raw pin lists in Read Sensor, Control Peripheral, and If Statement steps.": "在读取传感器、控制外设和条件语句步骤中显示原始引脚列表。", - "Show Readings Map Layer": "显示读数地图图层", + "Show Plants Map Layer": "显示植物地图层", + "Show Points Map Layer": "显示点位地图层", + "Show Previous Period": "显示上一周期", + "Show raw pin lists in Read Sensor, Control Peripheral, and If Statement steps.": "在读取传感器、控制外设及条件语句步骤中显示原始引脚列表。", + "Show Readings Map Layer": "显示读数地图层", "Show removed": "显示已移除", - "Show Removed Weeds Map Layer": "显示已移除杂草地图图层", - "Show seconds in time": "显示时间中的秒", + "Show Removed Weeds Map Layer": "显示已清除杂草地图层", + "Show seconds in time": "时间显示秒数", "show soil height images": "显示土壤高度图像", - "Show Soil Interpolation Map Layer": "显示土壤插值地图图层", - "Show Spread Map Layer": "显示扩展地图图层", + "Show Soil Interpolation Map Layer": "显示土壤插值地图层", + "Show Spread Map Layer": "显示覆盖范围地图层", "show success log messages": "显示成功日志消息", "show take photo images": "显示拍照图像", - "Show the camera's field of view in the garden map.": "在花园地图中显示相机的视野。", - "Show the camera's uncropped and unrotated field of view in the garden map when CROP MAP IMAGES is enabled.": "启用裁剪地图图像时,在花园地图中显示相机未裁剪和未旋转的视野。", + "Show the camera's field of view in the garden map.": "在花园地图中显示相机视野范围。", + "Show the camera's uncropped and unrotated field of view in the garden map when CROP MAP IMAGES is enabled.": "启用裁剪地图图像时,在花园地图中显示相机未裁剪且未旋转的视野范围。", "show warn log messages": "显示警告日志消息", "show weed detector images": "显示杂草检测图像", - "Show Weeds Map Layer": "显示杂草地图图层", + "Show Weeds Map Layer": "显示杂草地图层", "showing single setting": "显示单个设置", "shown in map": "在地图中显示", - "Shutdown": "关机", - "SHUTDOWN": "关机", - "Shutdown Farmbot": "关机Farmbot", - "Since you're new around here, we recommend taking our guided tours of the app. This is the fastest way to learn about the most important pages and features at your fingertips.": "由于您是新用户,我们建议您参加我们的应用程序导览。这是最快了解您指尖上最重要的页面和功能的方法。", + "Shutdown": "关闭", + "SHUTDOWN": "关闭", + "Shutdown Farmbot": "关闭 FarmBot", + "Since you're new around here, we recommend taking our guided tours of the app. This is the fastest way to learn about the most important pages and features at your fingertips.": "既然您是新用户,建议参加我们的应用导览。这是最快了解关键页面和功能的方式。", "single input": "单输入", - "Single photo mode active": "单张照片模式激活", - "size": "大小", + "Single photo mode active": "单照片模式激活", + "size": "尺寸", "Size doesn't match calibration": "尺寸与校准不匹配", - "Size matches camera calibration": "尺寸与相机校准匹配", - "Size of the structuring element used for morphological transformations. (default: {{ defaultMorph }})": "用于形态学变换的结构元素的大小。(默认:{{ defaultMorph }})", + "Size matches camera calibration": "尺寸符合相机校准", + "Size of the structuring element used for morphological transformations. (default: {{ defaultMorph }})": "用于形态学变换的结构元素尺寸。(默认:{{ defaultMorph }})", "slot": "槽位", "Slot": "槽位", "slot direction": "槽位方向", "slots": "槽位", "Slots": "槽位", - "smartphone": "智能手机", - "Snaps a photo using the device camera. Select the camera type in the Settings panel.": "使用设备相机拍照。在设置面板中选择相机类型。", - "Snapshot current garden": "快照当前花园", + "Snaps a photo using the device camera. Select the camera type in the Settings panel.": "使用设备相机拍照。请在设置面板选择相机类型。", + "Snapshot current garden": "当前花园快照", "Soft": "软", "Soft Reset": "软重置", "SOFT RESET": "软重置", - "Soft resetting your FarmBot will revoke your FarmBot's ability to connect to your web app account and your home WiFi network. Upon soft resetting, your device will go into Configurator mode.": "软重置您的FarmBot将撤销其连接到您的Web应用程序账户和家庭WiFi网络的能力。软重置后,您的设备将进入配置模式。", + "Soft resetting your FarmBot will revoke your FarmBot's ability to connect to your web app account and your home WiFi network. Upon soft resetting, your device will go into Configurator mode.": "软重置将取消 FarmBot 连接网络应用账户和家庭WiFi的能力。软重置后设备将进入配置模式。", "Software": "软件", "Software Documentation": "软件文档", + "software.farm.bot": "software.farm.bot", "soil": "土壤", "Soil": "土壤", "Soil height": "土壤高度", "Soil Height": "土壤高度", - "soil height at plant location": "植物位置的土壤高度", + "soil height at plant location": "植物位置土壤高度", "Soil Height Detector": "土壤高度检测器", "Soil height measurement": "土壤高度测量", - "Soil height measurements": "土壤高度测量", + "Soil height measurements": "土壤高度测量值", "Soil Moisture": "土壤湿度", "Soil sensor": "土壤传感器", "Soil Sensor": "土壤传感器", "Soil sensor reading": "土壤传感器读数", "Solenoid valve": "电磁阀", - "Some {{points}} failed to delete.": "一些{{points}}删除失败。", - "Some other issue is preventing FarmBot from working. Please see the table above for more information.": "其他一些问题阻止了FarmBot的工作。请参阅上表以获取更多信息。", - "Something else happened and I need additional help": "发生了其他问题,我需要额外的帮助", - "Something went wrong while rendering this page.": "渲染此页面时出了点问题。", - "Sorry, that feature is unavailable in demo accounts.": "抱歉,该功能在演示账户中不可用。", - "sort by": "排序依据", - "Sort by": "排序依据", - "SORT BY": "排序依据", + "Some {{points}} failed to delete.": "部分 {{points}} 删除失败。", + "Some other issue is preventing FarmBot from working. Please see the table above for more information.": "存在其他问题导致 FarmBot 无法工作。请查看上方表格了解更多信息。", + "Something else happened and I need additional help": "发生了其他问题,我需要额外帮助", + "Something went wrong while rendering this page.": "渲染此页面时出错。", + "Sorry, that feature is unavailable in demo accounts.": "抱歉,演示账户无法使用此功能。", + "sort by": "排序方式", + "Sort by": "排序方式", + "SORT BY": "排序方式", "Source": "来源", + "Sowing": "播种", "Spacing (MM)": "间距(毫米)", - "Speak": "说话", - "Specify custom map dimensions (in millimeters). These values set the size of the garden map unless DYNAMIC MAP SIZE is enabled.": "指定自定义地图尺寸(以毫米为单位)。这些值设置花园地图的大小,除非启用动态地图大小。", + "Speak": "朗读", + "Specify custom map dimensions (in millimeters). These values set the size of the garden map unless DYNAMIC MAP SIZE is enabled.": "指定自定义地图尺寸(毫米)。除非启用动态地图尺寸,否则这些值设定花园地图大小。", "Speed": "速度", - "Speed (%)": "速度(%)", - "Spread": "扩展", - "Sprouted": "发芽", + "Speed (%)": "速度(%)", + "Spread": "覆盖范围", + "spread curves": "覆盖曲线", + "Sprouted": "已发芽", "stable": "稳定", "Stage": "阶段", - "Stall Detection": "停滞检测", - "Stall Detection note": "停滞检测说明", - "Stall Sensitivity": "停滞灵敏度", + "Stall Detection": "堵转检测", + "Stall detection is disabled for one or more axes.": "一个或多个轴的堵转检测被禁用。", + "Stall Detection note": "堵转检测说明", + "Stall Sensitivity": "堵转灵敏度", "Standard support": "标准支持", - "Standing from where you will normally view the FarmBot, **press the right arrow button**.": "站在通常查看FarmBot的位置,**按下右箭头按钮**。", - "Standing from where you will normally view the FarmBot, **press the up arrow button**.": "站在通常查看FarmBot的位置,**按下上箭头按钮**。", - "Standing from where you will normally view the FarmBot, **press the z-axis down arrow button**.": "站在通常查看FarmBot的位置,**按下Z轴下箭头按钮**。", + "Standing from where you will normally view the FarmBot, **press the right arrow button**.": "从您正常观看 FarmBot 的位置,**按右箭头键**。", + "Standing from where you will normally view the FarmBot, **press the up arrow button**.": "从您正常观看 FarmBot 的位置,**按上箭头键**。", + "Standing from where you will normally view the FarmBot, **press the z-axis down arrow button**.": "从您正常观看 FarmBot 的位置,**按 Z 轴向下箭头键**。", + "Start": "开始", + "start date": "开始日期", "start over": "重新开始", - "Start time and date must be in the future.": "开始时间和日期必须在未来。", + "Start time and date must be in the future.": "开始时间和日期必须是未来时间。", "Start tour": "开始导览", - "Started": "启动", - "Starts": "开始", + "Started": "已开始", + "Starts": "开始于", "status": "状态", "Status": "状态", "Steps": "步骤", - "Steps per MM": "步距/MM", + "Steps per MM": "每毫米步数", "stereo inputs": "立体声输入", "Stock": "库存", "Stock Bindings": "库存绑定", "stock names": "库存名称", "Stock pin bindings": "库存引脚绑定", "Stock sensors": "库存传感器", - "Stop at Home": "停止在原点", - "Stop at Max": "停止在最大值", - "Stop at the home (zero) location of the axis. If enabled, moving past zero is disallowed. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在轴的原点(零)位置停止。如果启用,则不允许超过零。(默认: x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Stops a device from moving until it is unlocked by a user.": "在用户解锁之前,停止设备移动。", + "Stop at Home": "停止于原点", + "Stop at Max": "停止于最大值", + "Stop at the home (zero) location of the axis. If enabled, moving past zero is disallowed. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在轴的原点(零点)停止。启用后不允许越过零点移动。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Stops a device from moving until it is unlocked by a user.": "阻止设备移动,直到用户解锁。", "strings": "字符串", "submit": "提交", "submitted": "已提交", "Success": "成功", + "Sun": "太阳", "Svg Icon": "Svg 图标", - "Swap axis minimum and maximum limit switches. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "交换轴的最小和最大限位开关。(默认值: x: {{ x }}, y: {{ y }}, z: {{ z }})", + "Swap axis minimum and maximum limit switches. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "交换轴的最小和最大限位开关。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "Swap jog buttons (and rotate map)": "交换点动按钮(并旋转地图)", - "Swap jog buttons: x and y axes": "交换点动按钮:x轴和y轴", + "Swap jog buttons: x and y axes": "交换点动按钮:x 轴和 y 轴", "Swap limit switches": "交换限位开关", - "Swap map X and Y axes, making the Y axis horizontal and X axis vertical. This setting will also swap the X and Y jog control buttons in the Move widget.": "交换地图的X轴和Y轴,使Y轴水平,X轴垂直。此设置还将交换移动小部件中的X和Y点动控制按钮。", - "swap x and y axis jog buttons": "交换x轴和y轴点动按钮", + "Swap map X and Y axes, making the Y axis horizontal and X axis vertical. This setting will also swap the X and Y jog control buttons in the Move widget.": "交换地图的 X 轴和 Y 轴,使 Y 轴水平,X 轴垂直。此设置也会交换“移动”控件中的 X 和 Y 点动控制按钮。", + "swap x and y axis jog buttons": "交换 x 和 y 轴点动按钮", "Sync": "同步", "Sync error": "同步错误", "SYNC ERROR": "同步错误", - "Sync LED": "同步LED", + "Sync LED": "同步指示灯", "SYNC NOW": "立即同步", - "Sync unknown": "同步未知", + "Sync unknown": "同步状态未知", "Synced": "已同步", "SYNCED": "已同步", - "SYNCING": "正在同步", - "Syncing...": "正在同步...", + "SYNCING": "同步中", + "Syncing...": "同步中...", "System": "系统", - "tablet": "平板电脑", - "Take a guided tour": "进行引导游览", + "Table": "表格", + "Take a guided tour": "参加导览", "Take a photo": "拍照", "Take a Photo": "拍照", - "Take a Tour": "进行游览", - "Take and view photos": "拍摄并查看照片", + "Take a Tour": "开始导览", + "Take and view photos": "拍照并查看照片", "Take photo": "拍照", "Take Photo": "拍照", "Target": "目标", - "Taxon": "分类单元", + "Taxon": "分类", "Temp": "温度", + "templates": "模板", "Temporarily hidden": "暂时隐藏", "Terms of Use": "使用条款", "text": "文本", "Text": "文本", "Text {{ num }}": "文本 {{ num }}", - "Thanks for taking the Getting Started Tour! You're now ready to dive into the details of each panel and begin planting your first garden with FarmBot. Check out our other tours for practical step-by-step help, and refer to our in-depth documentation in case you get stuck on anything.": "感谢参加入门游览!您现在可以深入了解每个面板的细节,并开始使用FarmBot种植您的第一个花园。查看我们的其他游览以获取实用的逐步帮助,并在遇到问题时参考我们的深入文档。", - "Thanks for trying out the FarmBot web app! This is a great way to introduce yourself to building sequences, regimens, events, and designing a virtual garden.": "感谢您试用FarmBot网络应用程序!这是介绍自己构建序列、方案、事件和设计虚拟花园的好方法。", - "The **GANTRY HEIGHT** is the distance in millimeters between the bottom of FarmBot's tool head and the bottom of the gantry main beam when the Z-axis is fully raised. It is used to determine if a plant is too tall for the gantry to pass over it. (default: {{ distance }})": "**龙门高度**是指当Z轴完全升起时,FarmBot工具头底部与龙门主梁底部之间的距离(以毫米为单位)。它用于确定植物是否过高,龙门无法通过。(默认值: {{ distance }})", - "The axis is not at the home position": "轴不在原点位置", - "The axis length value looks incorrect": "轴长度值看起来不正确", - "The camera will capture images at the closest available resolution to the selected size. Changing image resolution requires recalibration of the camera. Higher quality images will take longer to process.": "相机将以最接近所选大小的可用分辨率捕捉图像。更改图像分辨率需要重新校准相机。高质量图像需要更长时间处理。", - "The Control Peripheral step instructs FarmBot to set the specified pin on the Arduino to the specified mode and value. Use the digital pin mode for on (1) and off (0) control, and analog pin mode for PWM (pulse width modulation) (0-255).": "控制外设步骤指示FarmBot将Arduino上的指定引脚设置为指定模式和值。使用数字引脚模式进行开(1)和关(0)控制,使用模拟引脚模式进行PWM(脉宽调制)(0-255)控制。", - "The coordinate is not zero": "坐标不是零", - "The Detect Weeds step takes a photo and detects any weeds in the area. Visit the Photos panel to view results or change parameters.": "检测杂草步骤拍摄照片并检测区域内的任何杂草。访问照片面板查看结果或更改参数。", - "The device has never been seen. Most likely, there is a network connectivity issue on the device's end.": "设备从未见过。很可能是设备端存在网络连接问题。", - "The FarmBot axis along which the calibration objects are aligned. (default: {{ defaultAxis }})": "校准对象对齐的FarmBot轴。(默认值: {{ defaultAxis }})", - "The FarmBot web app is a powerful tool that allows you to control and configure your FarmBot in any way you want. To give you so much power, we've packed the app with a ton of settings, features, and pages, which can be a lot to understand. That's why we've created comprehensive written documentation and videos to teach you how to use everything.": "FarmBot网络应用程序是一个强大的工具,可让您以任何方式控制和配置您的FarmBot。为了给您如此多的功能,我们在应用程序中包含了大量设置、功能和页面,这可能需要大量理解。这就是为什么我们创建了全面的书面文档和视频来教您如何使用一切。", - "The FarmBot WiFi network isn't showing up": "FarmBot WiFi网络没有显示", - "The Farmware will use the parameter values set via the Farmware panel for any parameters that are not set in this sequence step.": "Farmware将使用通过Farmware面板设置的参数值,适用于在此序列步骤中未设置的任何参数。", - "The Find Home step instructs the device to perform a homing command (using encoders, stall detection, or limit switches) to find and set home (zero) for the chosen axis or axes.": "寻找原点步骤指示设备执行归零命令(使用编码器、停滞检测或限位开关)以找到并设置所选轴的原点(零)。", - "The FIND LENGTH button is disabled": "FIND LENGTH按钮被禁用", + "Thanks for taking the Getting Started Tour! You're now ready to dive into the details of each panel and begin planting your first garden with FarmBot. Check out our other tours for practical step-by-step help, and refer to our in-depth documentation in case you get stuck on anything.": "感谢参加入门导览!您现在可以深入了解各面板细节,开始用 FarmBot 种植第一个花园。请查看我们的其他导览,获得实用的逐步帮助,遇到问题时也可以参考详细文档。", + "Thanks for trying out the FarmBot web app! This is a great way to introduce yourself to building sequences, regimens, events, and designing a virtual garden.": "感谢您体验 FarmBot 网页应用!这是了解创建序列、方案、事件及设计虚拟花园的绝佳方式。", + "The **GANTRY HEIGHT** is the distance in millimeters between the bottom of FarmBot's tool head and the bottom of the gantry main beam when the Z-axis is fully raised. It is used to determine if a plant is too tall for the gantry to pass over it. (default: {{ distance }})": "**龙门架高度** 是指当 Z 轴完全升起时,FarmBot 工具头底部与龙门架主梁底部之间的毫米距离。用于判断植物是否过高而阻碍龙门架通过。(默认:{{ distance }})", + "The axis is not at the home position": "轴未回到原点位置", + "The axis length value looks incorrect": "轴长度值似乎不正确", + "The camera was previously calibrated for a different resolution.": "相机之前针对不同分辨率进行了校准。", + "The camera will capture images at the closest available resolution to the selected size. Changing image resolution requires recalibration of the camera. Higher quality images will take longer to process.": "相机将以最接近所选尺寸的分辨率拍摄图像。更改图像分辨率需要重新校准相机。更高质量的图像处理时间更长。", + "The Control Peripheral step instructs FarmBot to set the specified pin on the Arduino to the specified mode and value. Use the digital pin mode for on (1) and off (0) control, and analog pin mode for PWM (pulse width modulation) (0-255).": "控制外设步骤指示 FarmBot 将 Arduino 上的指定引脚设置为特定模式和数值。数字模式用于开(1)/关(0)控制,模拟模式用于 PWM(脉宽调制)控制(0-255)。", + "The coordinate is not zero": "坐标不是零点", + "The Detect Weeds step takes a photo and detects any weeds in the area. Visit the Photos panel to view results or change parameters.": "检测杂草步骤会拍照并识别区域内的杂草。请访问“照片”面板查看结果或更改参数。", + "The device has never been seen. Most likely, there is a network connectivity issue on the device's end.": "设备从未连接,极可能是设备端网络连接问题。", + "The FarmBot axis along which the calibration objects are aligned. (default: {{ defaultAxis }})": "用于校准的对象排列的 FarmBot 轴线。(默认:{{ defaultAxis }})", + "The FarmBot Web App": "FarmBot 网页应用", + "The FarmBot web app is a powerful tool that allows you to control and configure your FarmBot in any way you want. To give you so much power, we've packed the app with a ton of settings, features, and pages, which can be a lot to understand. That's why we've created comprehensive written documentation and videos to teach you how to use everything.": "FarmBot 网页应用是一款功能强大的工具,允许您按需控制和配置 FarmBot。为了提供如此强大的功能,我们集成了大量设置、功能和页面,可能会有一定学习难度,因此我们准备了详尽的文档和视频来教您如何使用。", + "The FarmBot WiFi network isn't showing up": "FarmBot WiFi 网络未显示", + "The Farmware will use the parameter values set via the Farmware panel for any parameters that are not set in this sequence step.": "Farmware 会使用 Farmware 面板中设置的参数值,应用于序列步骤中未指定的参数。", + "The Find Home step instructs the device to perform a homing command (using encoders, stall detection, or limit switches) to find and set home (zero) for the chosen axis or axes.": "回原点步骤指示设备执行回原点命令(使用编码器、堵转检测或限位开关)以找到并设置所选轴的原点(零点)。", + "The FIND LENGTH button is disabled": "查找长度按钮被禁用", "The firmware is missing": "固件丢失", - "The gantry attaches to aluminum tracks": "龙门架连接到铝轨道上", - "The gantry is set directly upon a raised bed": "龙门架直接设置在高架床上", - "The image appears flipped": "图像看起来是翻转的", - "The image is black": "图像是黑的", - "The image is rotated": "图像被旋转了", - "The map is rotated incorrectly": "地图旋转不正确", - "The map origin is in a different corner": "地图原点在另一个角落", - "The Mark As step allows FarmBot to programmatically edit the properties of the UTM, plants, and weeds from within a sequence. For example, you can mark a plant as \"planted\" during a seeding sequence or mark a weed as \"removed\" after removing it.": "“标记为”步骤允许FarmBot在序列中以编程方式编辑UTM、植物和杂草的属性。例如,您可以在播种序列中将植物标记为“已种植”或在移除杂草后将杂草标记为“已移除”。", - "The Measure Soil Height step takes a photo and detects the z-axis coordinate of the visible soil surface. Visit the Points panel to view results or visit the Farmware panel to change parameters.": "“测量土壤高度”步骤拍摄一张照片并检测可见土壤表面的z轴坐标。访问“点”面板查看结果或访问“农具”面板更改参数。", + "The gantry attaches to aluminum tracks": "龙门架安装于铝制轨道上", + "The gantry is set directly upon a raised bed": "龙门架直接安装在高架床上", + "The image appears flipped": "图像显示为翻转状态", + "The image is black": "图像为黑色", + "The image is rotated": "图像被旋转", + "The map is rotated incorrectly": "地图旋转错误", + "The map origin is in a different corner": "地图原点在不同的角落", + "The Mark As step allows FarmBot to programmatically edit the properties of the UTM, plants, and weeds from within a sequence. For example, you can mark a plant as \"planted\" during a seeding sequence or mark a weed as \"removed\" after removing it.": "“标记为”步骤允许 FarmBot 在序列中编程编辑 UTM、植物和杂草的属性。例如,在播种序列中标记植物为“已种植”,或在移除杂草后标记为“已移除”。", + "The maximum number of sequences allowed is {{ num }}.": "允许的最大序列数量为 {{ num }}。", + "The maximum number of steps allowed in one sequence is {{ num }}.": "一个序列中允许的最大步骤数为 {{ num }}。", + "The Measure Soil Height step takes a photo and detects the z-axis coordinate of the visible soil surface. Visit the Points panel to view results or visit the Farmware panel to change parameters.": "测量土壤高度步骤会拍照并检测可见土壤表面的 Z 轴坐标。请访问“点”面板查看结果,或访问 Farmware 面板更改参数。", "The motor is having trouble": "电机出现问题", - "The Move Relative step instructs FarmBot to move the specified distance from its current location. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move Relative where X=0 and Y=3000, then FarmBot will move to X=1000, Y=4000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move Relative steps. Move Relative steps should be preceded by a Move To step to ensure you are starting from a known location.": "“相对移动”步骤指示FarmBot从当前位置移动指定距离。例如,如果FarmBot当前在X=1000,Y=1000并且接收到一个X=0,Y=3000的“相对移动”指令,那么FarmBot将移动到X=1000,Y=4000。如果FarmBot必须同时在多个方向移动,它将沿对角线移动。如果您需要沿一个轴一次直线移动,请使用多个“相对移动”步骤。“相对移动”步骤应在“移动到”步骤之后,以确保从已知位置开始。", - "The Move step instructs FarmBot to move to the specified coordinate or distance from its current location.": "“移动”步骤指示FarmBot移动到指定坐标或从当前位置移动指定距离。", - "The Move To step instructs FarmBot to move to the specified coordinate regardless of the current position. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move To where X=0 and Y=3000, then FarmBot will move to X=0, Y=3000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move To steps. Offsets allow you to more easily instruct FarmBot to move to a location, but offset from it by the specified amount. For example moving to just above where a peripheral is located. Using offsets lets FarmBot do the math for you.": "“移动到”步骤指示FarmBot移动到指定坐标,无论当前位置如何。例如,如果FarmBot当前在X=1000,Y=1000并且接收到一个X=0,Y=3000的“移动到”指令,那么FarmBot将移动到X=0,Y=3000。如果FarmBot必须同时在多个方向移动,它将沿对角线移动。如果您需要沿一个轴一次直线移动,请使用多个“移动到”步骤。偏移量允许您更轻松地指示FarmBot移动到一个位置,但按指定数量偏移。例如,移动到外设所在位置的正上方。使用偏移量让FarmBot为您计算。", - "The next item in this event will run {{timeFromNow}}.": "此事件中的下一项将在{{timeFromNow}}运行。", - "The number of microsteps required to move the motor one step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "移动电机一步所需的微步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "The number of motor steps required to move the axis one millimeter. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "移动轴一毫米所需的电机步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "The number of the pin to guard. This pin will be set to the specified state after the duration specified by TIMEOUT.": "要保护的针脚编号。在TIMEOUT指定的时间后,此针脚将被设置为指定状态。", - "The number of the pin to report. Analog pin values will be reported every 500ms.": "要报告的针脚编号。模拟针脚值将每500毫秒报告一次。", + "The Move Relative step instructs FarmBot to move the specified distance from its current location. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move Relative where X=0 and Y=3000, then FarmBot will move to X=1000, Y=4000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move Relative steps. Move Relative steps should be preceded by a Move To step to ensure you are starting from a known location.": "相对移动步骤指示 FarmBot 从当前位置移动指定距离。例如,当前位于 X=1000,Y=1000,执行相对移动 X=0,Y=3000,则移动到 X=1000,Y=4000。若需多方向移动,将斜线移动。若需单轴直线移动,请使用多个相对移动步骤。相对移动步骤前应先执行定位移动,确保起始点已知。", + "The Move step instructs FarmBot to move to the specified coordinate or distance from its current location.": "移动步骤指示 FarmBot 移动到指定坐标或相对当前位置的距离。", + "The Move To step instructs FarmBot to move to the specified coordinate regardless of the current position. For example, if FarmBot is currently at X=1000, Y=1000 and it receives a Move To where X=0 and Y=3000, then FarmBot will move to X=0, Y=3000. If FarmBot must move in multiple directions, it will move diagonally. If you require straight movements along one axis at a time, use multiple Move To steps. Offsets allow you to more easily instruct FarmBot to move to a location, but offset from it by the specified amount. For example moving to just above where a peripheral is located. Using offsets lets FarmBot do the math for you.": "定位移动步骤指示 FarmBot 移动到指定坐标,忽略当前位置。例如,当前为 X=1000,Y=1000,定位移动到 X=0,Y=3000,则移动到该点。多方向移动时会斜线前进。如需单轴直线移动,使用多个定位移动步骤。偏移允许指令 FarmBot 移动到目标点附近,偏离指定距离,如移动到外围设备正上方,偏移让 FarmBot 自动计算位置。", + "The next item in this event will run {{timeFromNow}}.": "此事件的下一个操作将在 {{timeFromNow}} 执行。", + "The number of microsteps required to move the motor one step. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机移动一步所需的微步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "The number of motor steps required to move the axis one millimeter. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "移动轴一毫米所需的电机步数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", + "The number of the pin to guard. This pin will be set to the specified state after the duration specified by TIMEOUT.": "要保护的引脚编号。该引脚将在超时(TIMEOUT)后设置为指定状态。", + "The number of the pin to report. Analog pin values will be reported every 500ms.": "要报告的引脚编号。模拟引脚值每 500 毫秒报告一次。", "The page won't load": "页面无法加载", - "The pump is on, but there isn't any suction": "泵开着,但没有吸力", - "The Read Sensor step instructs FarmBot to read the current value of the specified sensor or peripheral. Pin Mode: Use digital for a 0 (LOW) or 1 (HIGH) response, and analog for a voltage reading (0-1023 for 0-5V).": "“读取传感器”步骤指示FarmBot读取指定传感器或外设的当前值。针脚模式:使用数字模式获得0(低)或1(高)响应,使用模拟模式获得电压读数(0-1023对应0-5V)。", - "The Run Farmware step runs a Farmware package. Visit the Farmware panel to install and manage Farmware.": "“运行农具”步骤运行一个农具包。访问“农具”面板安装和管理农具。", - "The Send Message step instructs FarmBot to send a custom message to the logs (and toast message and/or email, if selected). This can help you with debugging your sequences.": "“发送消息”步骤指示FarmBot向日志发送自定义消息(如果选择,还可以发送弹出消息和/或电子邮件)。这可以帮助您调试序列。", + "The pump is on, but there isn't any suction": "水泵开启,但没有吸力", + "The Read Sensor step instructs FarmBot to read the current value of the specified sensor or peripheral. Pin Mode: Use digital for a 0 (LOW) or 1 (HIGH) response, and analog for a voltage reading (0-1023 for 0-5V).": "读取传感器步骤指示 FarmBot 读取指定传感器或外设的当前值。引脚模式:数字模式返回 0(低电平)或 1(高电平),模拟模式返回电压值(0-1023,对应 0-5V)。", + "The Run Farmware step runs a Farmware package. Visit the Farmware panel to install and manage Farmware.": "运行 Farmware 步骤运行一个 Farmware 软件包。请访问 Farmware 面板安装和管理 Farmware。", + "The Send Message step instructs FarmBot to send a custom message to the logs (and toast message and/or email, if selected). This can help you with debugging your sequences.": "发送消息步骤指示 FarmBot 向日志发送自定义消息(并可选择显示弹窗通知和/或发送邮件),帮助调试序列。", "The status is 'disconnected'": "状态为“断开连接”", - "The terms of service have recently changed. You must accept the new terms of service to continue using the site.": "服务条款最近发生了变化。您必须接受新的服务条款才能继续使用该网站。", - "The tool currently mounted to the UTM can be set here or by using a MARK AS step in a sequence. Use the verify button or read the tool verification pin in a sequence to verify that a tool is attached.": "当前安装在UTM上的工具可以在此处设置,也可以通过序列中的“标记为”步骤进行设置。使用验证按钮或在序列中读取工具验证针脚以验证是否安装了工具。", - "The valve clicked, but there isn't any water": "阀门点击了,但没有水", - "The Wait step instructs FarmBot to wait for the specified amount of time. Use it in combination with the Control Peripheral step to water for a length of time.": "“等待”步骤指示FarmBot等待指定时间。将其与“控制外设”步骤结合使用以进行一段时间的浇水。", - "The z-axis did not reach the hardstop": "Z轴未达到硬停止", + "The terms of service have recently changed. You must accept the new terms of service to continue using the site.": "服务条款最近已更新,您必须接受新的服务条款才能继续使用本站。", + "The tool currently mounted to the UTM can be set here or by using a MARK AS step in a sequence. Use the verify button or read the tool verification pin in a sequence to verify that a tool is attached.": "当前安装在 UTM 的工具可以在此设置,或通过序列中的“标记为”步骤设置。使用验证按钮或读取序列中的工具验证引脚以确认工具是否已安装。", + "The valve clicked, but there isn't any water": "阀门已打开,但没有水流", + "The Wait step instructs FarmBot to wait for the specified amount of time. Use it in combination with the Control Peripheral step to water for a length of time.": "等待步骤指示 FarmBot 等待指定时间。可与控制外设步骤结合使用,实现浇水定时。", + "The z-axis did not reach the hardstop": "Z 轴未到达机械限位", "Then Execute": "然后执行", - "Then try finding the axis length again.": "然后尝试再次找到轴长度。", - "There is a 'camera not detected' or 'problem getting image' error log": "有“未检测到摄像头”或“获取图像问题”错误日志", - "There is a detection error log": "有检测错误日志", - "There is a surface error message": "有表面错误消息", - "There is an axis error log": "有轴错误日志", - "There is no 'Find Home' sequence": "没有“查找原点”序列", - "There is no access to FarmBot or the message broker. This is usually caused by outdated browsers (Internet Explorer) or firewalls that block WebSockets on port 3002.": "无法访问FarmBot或消息代理。这通常是由于浏览器过时(如Internet Explorer)或防火墙阻止了3002端口的WebSockets造成的。", + "Then try finding the axis length again.": "然后再次尝试查找轴长度。", + "There is a 'camera not detected' or 'problem getting image' error log": "存在“未检测到相机”或“获取图像出错”的错误日志", + "There is a detection error log": "存在检测错误日志", + "There is a surface error message": "存在表面错误消息", + "There is an axis error log": "存在轴错误日志", + "There is no 'Find Home' sequence": "没有“回原点”序列", + "There is no access to FarmBot or the message broker. This is usually caused by outdated browsers (Internet Explorer) or firewalls that block WebSockets on port 3002.": "无法访问 FarmBot 或消息代理,通常由浏览器过旧(如 IE)或防火墙阻止端口 3002 的 WebSocket 连接引起。", "There is no image": "没有图像", "There is no power": "没有电源", - "There is no value": "没有值", + "There is no value": "没有数值", "There was an error": "发生错误", - "These are the most basic commands FarmBot can execute. Drag and drop them to create sequences for watering, planting seeds, measuring soil properties, and more.": "这些是FarmBot可以执行的最基本的命令。拖放它们以创建浇水、播种、测量土壤特性等的序列。", - "This command will not execute correctly because you do not have encoders, stall detection, or limit switches enabled for the chosen axis. Enable limit switches, encoders, or stall detection from the Settings panel for: ": "此命令将无法正确执行,因为您没有为所选轴启用编码器、停滞检测或限位开关。请在“设置”面板中为以下选项启用限位开关、编码器或停滞检测:", - "This computer": "这台电脑", - "This is the account menu, providing you with links to other pages in the app, and for logging out.": "这是帐户菜单,提供指向应用程序中其他页面的链接,并用于注销。", - "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.": "这是作物详细信息面板。在这里,您可以查看所选作物的事实信息,例如预期的成熟时的扩展和高度。继续浏览下一步,了解如何将作物添加到您的花园中。", - "This is the crop search panel. Type in a crop name to the search field, for example \"Spinach\". We recommend trying generic crop names rather than specific varietals. Select the best search result and then advance the tour.": "这是作物搜索面板。在搜索栏中输入作物名称,例如“菠菜”。我们建议使用通用作物名称,而不是具体的品种名称。选择最佳搜索结果,然后继续浏览。", - "This is the current position indicator. FarmBot's current X, Y, and Z coordinates in millimeters are displayed for quick viewing from any page in the web app.": "这是当前位置指示器。FarmBot当前的X、Y和Z坐标(以毫米为单位)会显示在网页应用的任何页面上,以便快速查看。", - "This is the E-STOP button, allowing you to emergency stop any movements and turn off all of FarmBot's peripherals in case something is going wrong. After E-STOPPING FarmBot, you will need to click the same button to UNLOCK the device before resuming execution of any commands.": "这是急停按钮,允许您在出现问题时紧急停止所有动作并关闭所有FarmBot外设。急停FarmBot后,您需要点击相同的按钮解锁设备,然后才能继续执行任何命令。", - "This is the edit group panel. To make a group of all plants of one crop type, select the crop type you would like to include. Check that the correct plants are listed in the Group Members section, then advance the tour.": "这是编辑组面板。要创建一个包含所有某种作物类型植物的组,选择您想要包含的作物类型。检查“组成员”部分是否列出了正确的植物,然后继续浏览。", - "This is the edit slot panel where you will let FarmBot know the exact X, Y, and Z coordinates it must travel to when mounting and dismounting tools or picking up seeds from a seed container. Advance the tour to figure out the coordinates for this first slot.": "这是编辑槽面板,在这里您将告知FarmBot在安装和卸下工具或从种子容器中取种时必须前往的确切X、Y和Z坐标。继续浏览以确定第一个槽的坐标。", - "This is the events panel. Here you can view and manage all of your scheduled sequences and regimens. Clicking an event will open up the event details panel where you can edit it. Pressing the + button will create a new event.": "这是事件面板。在这里,您可以查看和管理所有计划的序列和方案。点击一个事件将打开事件详细信息面板,您可以在其中进行编辑。按下+按钮将创建一个新事件。", - "This is the groups section. Here you can create and manage groups of plants based on any criteria. Clicking a group will open up the group details panel where you can make edits. Pressing the group + button will create a new group.": "这是群组部分。在这里,您可以根据任何标准创建和管理植物群组。点击一个群组将打开群组详细信息面板,您可以在其中进行编辑。按下群组+按钮将创建一个新群组。", - "This is the help panel. Here you can browse the documentation or get support if you need it. Switch between documentation hubs and the other help resources using the dropdown at the top of the panel.": "这是帮助面板。在这里,您可以浏览文档或在需要时获取支持。使用面板顶部的下拉菜单在文档中心和其他帮助资源之间切换。", - "This is the message center. Here you can view and manage setup cards and announcements. Dismiss items you are finished with by pressing the X in the top right of a card. Check back often for new feature announcements and important information about your FarmBot.": "这是消息中心。在这里,您可以查看和管理设置卡和公告。按下卡片右上角的X可以删除完成的项目。请经常查看新功能公告和有关您的FarmBot的重要信息。", - "This is the photos panel. Here you can view and manage all of the photos of your garden. Additionally, here is where you can calibrate FarmBot's camera and weed detection settings to fine tune the performance for your lighting conditions and soil type.": "这是照片面板。在这里,您可以查看和管理花园的所有照片。此外,您还可以在这里校准FarmBot的摄像头和杂草检测设置,以微调适合您的光照条件和土壤类型的性能。", - "This is the plant details panel. Here you can view and edit a plant's coordinates and status, or delete it entirely.": "这是植物详细信息面板。在这里,您可以查看和编辑植物的坐标和状态,或完全删除它。", - "This is the plants panel. Here you can view and manage all of the plants in your garden. Mousing over a plant in the list will highlight it in the map and vice versa. Clicking a plant will open up the plant details panel where you can edit it. Pressing the plant + button will allow you to search for and add new crops to your garden.": "这是植物面板。在这里,您可以查看和管理花园中的所有植物。在列表中将鼠标悬停在某个植物上时,它将在地图中高亮显示,反之亦然。点击植物将打开植物详细信息面板,您可以在其中进行编辑。按下植物+按钮将允许您搜索并将新作物添加到花园中。", - "This is the plants panel. Once you add plants to your garden, they will be listed here for you to view and manage. To add a plant to your garden, press the plant + button and then advance the tour.": "这是植物面板。一旦您将植物添加到花园中,它们将列在这里供您查看和管理。要将植物添加到花园中,请按下植物+按钮,然后继续浏览。", - "This is the points panel. Here you can view and manage all of the points in your garden, including measured soil height points. Mousing over a point in the list will highlight it in the map and vice versa. Clicking a point will open up the point details panel where you can edit it. Pressing the point + button will allow you to add a point or a grid of points to the map.": "这是点面板。在这里,您可以查看和管理花园中的所有点,包括测量的土壤高度点。在列表中将鼠标悬停在某个点上时,它将在地图中高亮显示,反之亦然。点击某个点将打开点详细信息面板,您可以在其中进行编辑。按下点+按钮将允许您将点或点网格添加到地图中。", - "This is the regimens panel. Here you can view and manage all of your regimens which allow you to bulk schedule sequences based on the age of a plant. Clicking a regimen will open up the regimen editor panel where you can edit it. Pressing the + button will create a new regimen.": "这是方案面板。在这里,您可以查看和管理所有方案,这些方案允许您根据植物的年龄批量安排序列。点击方案将打开方案编辑器面板,您可以在其中进行编辑。按下+按钮将创建一个新方案。", - "This is the sequences panel. Here you can view and manage all of your sequences. Clicking a sequence will open up the sequence editor panel where you can edit it. Pressing the + button will create a new sequence.": "这是序列面板。在这里,您可以查看和管理所有序列。点击序列将打开序列编辑器面板,您可以在其中进行编辑。按下+按钮将创建一个新序列。", - "This is the settings panel. Here you can view and manage all of your FarmBot and account settings. Refer to the tooltips and documentation for information about each setting.": "这是设置面板。在这里,您可以查看和管理所有FarmBot和帐户设置。有关每个设置的信息,请参阅工具提示和文档。", - "This is the tools panel. Here you can add, edit, and view your FarmBot's tools and seed containers as well the slots they are loaded into. Mousing over a slot will highlight it in the map and vice versa. We've already added all of the items included with your FarmBot kit. Your job now is to input the exact location of the slots corresponding to where you installed them in real life. Click the first slot in the list and then advance the tour.": "这是工具面板。在这里,您可以添加、编辑和查看FarmBot的工具和种子容器以及它们加载的槽。在列表中将鼠标悬停在某个槽上时,它将在地图中高亮显示,反之亦然。我们已经添加了您的FarmBot套件中包含的所有物品。现在您的工作是输入与您在现实生活中安装它们的位置相对应的槽的确切位置。点击列表中的第一个槽,然后继续浏览。", - "This is the tools panel. Here you can view and manage all of the tools, seed containers, and slots in your garden. Clicking an item will open up the details panel where you can edit it. Pressing the + buttons will allow you to add new items.": "这是工具面板。在这里,您可以查看和管理花园中的所有工具、种子容器和槽。点击一个项目将打开详细信息面板,您可以在其中进行编辑。按下+按钮将允许您添加新项目。", - "This page has moved. Redirecting...": "该页面已移动。正在重定向...", + "These are the most basic commands FarmBot can execute. Drag and drop them to create sequences for watering, planting seeds, measuring soil properties, and more.": "这些是 FarmBot 最基本的命令。拖放它们即可创建浇水、播种、测量土壤属性等序列。", + "This command will not execute correctly because you do not have encoders, stall detection, or limit switches enabled for the chosen axis. Enable limit switches, encoders, or stall detection from the Settings panel for: ": "此命令无法正确执行,因为您未为所选轴启用编码器、堵转检测或限位开关。请在设置面板中为以下轴启用限位开关、编码器或堵转检测:", + "This computer": "此电脑", + "This is the account menu, providing you with links to other pages in the app, and for logging out.": "这是账户菜单,提供应用中其他页面的链接,以及注销登录功能。", + "This is the connectivity popup. View information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "这是连接状态弹窗,可查看您的网页浏览器、FarmBot 与 FarmBot 网页应用服务器之间的连接信息。只要 FarmBot 在线且准备就绪,您会看到绿色对勾。", + "This is the crop details panel. Here you can view factual information about the chosen crop such as the expected spread and height at maturity. Proceed to the next step of the tour to learn how to add the crop to your garden.": "这是作物详情面板,您可以查看所选作物的实际信息,如预期的扩展范围和成熟时高度。继续下一步导览,了解如何将作物添加到您的花园中。", + "This is the crop search panel. Type in a crop name to the search field, for example \"Spinach\". We recommend trying generic crop names rather than specific varietals. Select the best search result and then advance the tour.": "这是作物搜索面板。在搜索栏输入作物名称,例如“菠菜”。建议尝试通用作物名称而非特定品种。选择最佳搜索结果后,继续导览。", + "This is the current position indicator. FarmBot's current X, Y, and Z coordinates in millimeters are displayed for quick viewing from any page in the web app.": "这是当前位置指示器,显示 FarmBot 当前的 X、Y、Z 坐标(单位毫米),方便您在网页应用的任何页面快速查看。", + "This is the curves panel. Here you can view and manage all of the water, spread, and height curves for your plants. Pressing the + button will create a new curve.": "这是曲线面板,您可以查看和管理植物的浇水量、扩展范围和高度曲线。点击 + 按钮可创建新曲线。", + "This is the E-STOP button, allowing you to emergency stop any movements and turn off all of FarmBot's peripherals in case something is going wrong. After E-STOPPING FarmBot, you will need to click the same button to UNLOCK the device before resuming execution of any commands.": "这是急停(E-STOP)按钮,用于在出现异常时紧急停止所有动作并关闭 FarmBot 的所有外设。急停后,需点击同一按钮解锁设备,方可继续执行命令。", + "This is the edit group panel. To make a group of all plants of one crop type, select the crop type you would like to include. Check that the correct plants are listed in the Group Members section, then advance the tour.": "这是编辑分组面板。要创建某一作物类型的植物分组,请选择相应作物类型,确认“组成员”列表中植物正确,然后继续导览。", + "This is the edit slot panel where you will let FarmBot know the exact X, Y, and Z coordinates it must travel to when mounting and dismounting tools or picking up seeds from a seed container. Advance the tour to figure out the coordinates for this first slot.": "这是编辑槽位面板,您将在此告知 FarmBot 安装或卸载工具,或从种子容器取种时需前往的准确 X、Y、Z 坐标。继续导览以确定第一个槽位的坐标。", + "This is the events panel. Here you can view and manage all of your scheduled sequences and regimens. Clicking an event will open up the event details panel where you can edit it. Pressing the + button will create a new event.": "这是事件面板,您可以查看和管理所有已安排的序列和方案。点击某事件可打开详情面板进行编辑。点击 + 按钮可创建新事件。", + "This is the groups section. Here you can create and manage groups of plants based on any criteria. Clicking a group will open up the group details panel where you can make edits. Pressing the group + button will create a new group.": "这是分组区域,您可以根据任意条件创建和管理植物分组。点击某组可打开详情面板编辑。点击分组 + 按钮可创建新分组。", + "This is the help panel. Here you can browse the documentation or get support if you need it. Switch between documentation hubs and the other help resources using the dropdown at the top of the panel.": "这是帮助面板,您可以浏览文档或获取支持。可通过面板顶部的下拉菜单切换不同文档中心及其它帮助资源。", + "This is the message center. Here you can view and manage setup cards and announcements. Dismiss items you are finished with by pressing the X in the top right of a card. Check back often for new feature announcements and important information about your FarmBot.": "这是消息中心,您可以查看和管理设置卡片及公告。完成的项可点击卡片右上角的 X 关闭。请经常查看新功能公告和有关 FarmBot 的重要信息。", + "This is the photos panel. Here you can view and manage all of the photos of your garden. Additionally, here is where you can calibrate FarmBot's camera and weed detection settings to fine tune the performance for your lighting conditions and soil type.": "这是照片面板,您可以查看和管理花园的所有照片。同时,您可以在这里校准 FarmBot 的相机和杂草检测设置,以针对光照条件和土壤类型进行性能微调。", + "This is the plant details panel. Here you can view and edit a plant's coordinates and status, or delete it entirely.": "这是植物详情面板,您可以查看和编辑植物的坐标及状态,或将其完全删除。", + "This is the plants panel. Here you can view and manage all of the plants in your garden. Mousing over a plant in the list will highlight it in the map and vice versa. Clicking a plant will open up the plant details panel where you can edit it. Pressing the plant + button will allow you to search for and add new crops to your garden.": "这是植物面板,您可以查看和管理花园中的所有植物。鼠标悬停列表中的植物会在地图上高亮,反之亦然。点击植物打开详情面板编辑。点击植物 + 按钮可搜索并添加新作物。", + "This is the plants panel. Once you add plants to your garden, they will be listed here for you to view and manage. To add a plant to your garden, press the plant + button and then advance the tour.": "这是植物面板。一旦您将植物添加到花园,它们将显示在此供您查看和管理。要添加植物,请点击植物 + 按钮,然后继续导览。", + "This is the points panel. Here you can view and manage all of the points in your garden, including measured soil height points. Mousing over a point in the list will highlight it in the map and vice versa. Clicking a point will open up the point details panel where you can edit it. Pressing the point + button will allow you to add a point or a grid of points to the map.": "这是点位面板,您可以查看和管理花园中的所有点位,包括测量的土壤高度点。鼠标悬停列表中的点位会在地图上高亮,反之亦然。点击点位打开详情面板编辑。点击点位 + 按钮可添加单点或点位网格。", + "This is the regimens panel. Here you can view and manage all of your regimens which allow you to bulk schedule sequences based on the age of a plant. Clicking a regimen will open up the regimen editor panel where you can edit it. Pressing the + button will create a new regimen.": "这是方案面板,您可以查看和管理所有方案,基于植物的生长周期批量安排序列。点击方案打开编辑面板。点击 + 按钮可创建新方案。", + "This is the sensors panel. Here you can view and manage your sensors and sensor readings. Click the Read Sensor buttons to read the current value of your sensors. Create and view historical sensor readings in the Sensor History section.": "这是传感器面板,您可以查看和管理传感器及其读数。点击“读取传感器”按钮读取当前值。可在传感器历史部分创建并查看历史读数。", + "This is the sequences panel. Here you can view and manage all of your sequences. Clicking a sequence will open up the sequence editor panel where you can edit it. Pressing the + button will create a new sequence.": "这是序列面板,您可以查看和管理所有序列。点击序列打开编辑面板。点击 + 按钮可创建新序列。", + "This is the settings panel. Here you can view and manage all of your FarmBot and account settings. Refer to the tooltips and documentation for information about each setting.": "这是设置面板,您可以查看和管理 FarmBot 及账户的所有设置。请参考工具提示和文档了解各项设置详情。", + "This is the tools panel. Here you can add, edit, and view your FarmBot's tools and seed containers as well the slots they are loaded into. Mousing over a slot will highlight it in the map and vice versa. We've already added all of the items included with your FarmBot kit. Your job now is to input the exact location of the slots corresponding to where you installed them in real life. Click the first slot in the list and then advance the tour.": "这是工具面板,您可以添加、编辑和查看 FarmBot 的工具和种子容器及其对应的槽位。鼠标悬停槽位会在地图上高亮,反之亦然。我们已添加所有 FarmBot 套件包含的物品,您现在需输入实际安装对应槽位的准确位置。点击列表中的第一个槽位,然后继续导览。", + "This is the tools panel. Here you can view and manage all of the tools, seed containers, and slots in your garden. Clicking an item will open up the details panel where you can edit it. Pressing the + buttons will allow you to add new items.": "这是工具面板,您可以查看和管理花园中的所有工具、种子容器和槽位。点击某项打开详情面板编辑。点击 + 按钮可添加新物品。", + "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.": "这是杂草面板,您可以查看和管理花园中的所有杂草。鼠标悬停列表中的杂草会在地图上高亮,反之亦然。新检测的杂草会出现在“待处理”类别,您需定期批准后才能列入“活跃”类别。杂草处理完毕后,可以用“标记为”序列命令将其移动到“已移除”类别。点击某杂草打开详情面板,可手动编辑。", "This phone": "这部手机", "this photo": "这张照片", - "this photo from map": "地图中的这张照片", + "this photo from map": "来自地图的这张照片", "this photo in map": "地图中的这张照片", - "This sequence has no description.": "此序列没有描述。", - "This sequence includes deprecated steps.": "此序列包含已弃用的步骤。", - "This sequence is pinned.": "此序列已固定。", - "This sequence is published at the following link": "此序列已发布在以下链接", + "This sequence has no description.": "此序列无描述。", + "This sequence includes deprecated steps.": "此序列包含已弃用步骤。", + "This sequence includes Lua code. Review carefully before executing.": "此序列包含 Lua 代码,执行前请仔细检查。", + "This sequence is pinned.": "此序列已置顶。", + "This sequence is published at the following link": "此序列发布于以下链接", "this sequence was imported": "此序列已导入", - "This sequence was imported from a publicly shared sequence. If the original author publishes a new version, you may upgrade your copy. Upgrading will overwrite your copy with the contents of the new version. It is recommended you check your FarmBot continues operating as expected after any upgrades.": "此序列是从公开共享的序列中导入的。如果原作者发布新版本,您可以升级您的副本。升级将用新版本的内容覆盖您的副本。建议在升级后检查您的FarmBot是否按预期运行。", - "This step executes the sequence that contains it, which may cause an infinite loop.": "此步骤执行包含它的序列,这可能导致无限循环。", - "This variable is currently being used and cannot be deleted.": "此变量正在使用中,无法删除。", - "This will restart FarmBot's Raspberry Pi and controller software.": "这将重启FarmBot的Raspberry Pi和控制器软件。", - "This will shutdown FarmBot's Raspberry Pi. To turn it back on, unplug FarmBot and plug it back in.": "这将关闭FarmBot的Raspberry Pi。要重新开启,请拔掉FarmBot并重新插入。", + "This sequence was imported from a publicly shared sequence. If the original author publishes a new version, you may upgrade your copy. Upgrading will overwrite your copy with the contents of the new version. It is recommended you check your FarmBot continues operating as expected after any upgrades.": "此序列来自公开共享序列导入。如原作者发布新版本,您可升级您的副本。升级将覆盖现有副本内容。建议升级后检查 FarmBot 是否正常运行。", + "This step executes the sequence that contains it, which may cause an infinite loop.": "此步骤会执行包含它的序列,可能导致无限循环。", + "This variable is currently being used and cannot be deleted.": "该变量当前正在使用,无法删除。", + "This will restart FarmBot's Raspberry Pi and controller software.": "这将重启 FarmBot 的树莓派及控制器软件。", + "This will shutdown FarmBot's Raspberry Pi. To turn it back on, unplug FarmBot and plug it back in.": "这将关闭 FarmBot 的树莓派。要重新开机,请拔掉 FarmBot 电源再重新插上。", "Ticker Notification": "滚动通知", "Time": "时间", - "Time in milliseconds": "时间以毫秒为单位", + "Time in milliseconds": "时间(毫秒)", "Time is not properly formatted.": "时间格式不正确。", - "Time period": "时间段", + "Time period": "时间周期", + "Time Travel": "时间旅行", "time zone": "时区", "Timeout (sec)": "超时(秒)", - "Timeout after (seconds)": "超时后(秒)", + "Timeout after (seconds)": "超时秒数", "timezone": "时区", - "Tip: Use dot notation (i.e., 'meta.color') to access meta fields.": "提示:使用点符号(即'meta.color')来访问元字段。", - "to": "至", - "to add the plant to the map. Alternatively, you can plant a grid using the form below.": "以将植物添加到地图中。或者,您可以使用下面的表格种植网格。", - "To calculate **WATER FLOW RATE**, hold a measuring cup below the watering nozzle and click the **RUN WATER FOR 5 SECONDS** button. Measure how much water FarmBot dispensed in milliliters (mL) and then divide this number by 5. Enter the result in the field.": "要计算**水流量**,将量杯放在浇水喷嘴下方,并点击**运行5秒钟水**按钮。测量FarmBot分配的水量(毫升),然后将此数值除以5。在字段中输入结果。", - "To finish setting up your account and FarmBot, please select which FarmBot you have. Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster. If you want to start completely from scratch, feel free to select \"Custom bot\" and we won't change a thing.": "要完成帐户和FarmBot的设置,请选择您拥有的FarmBot型号。选择后,我们将自动添加一些工具、传感器、外设、序列等,以便您更快地启动和运行。如果您想从头开始,随时选择“自定义机器人”,我们不会更改任何内容。", - "to get started": "开始", - "to get started or click the": "开始或点击", - "To prepare for camera calibration, move the z-axis all the way up.": "为准备相机校准,将z轴移动到最上方。", + "Tip: Use dot notation (i.e., 'meta.color') to access meta fields.": "提示:使用点号表示法(如 'meta.color')访问元字段。", + "to": "到", + "To add a grid or row of plants, press the + GRID button, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "要添加植物网格或行,点击 + 网格按钮,填写网格和行种植字段,点击预览。预览植物会以灰度显示在地图上。调整满意后点击保存,然后继续导览。", + "to add the plant to the map. Alternatively, you can plant a grid using the form below.": "将植物添加到地图。或者,您也可以使用下面的表单种植网格。", + "To calculate **WATER FLOW RATE**, hold a measuring cup below the watering nozzle and click the **RUN WATER FOR 5 SECONDS** button. Measure how much water FarmBot dispensed in milliliters (mL) and then divide this number by 5. Enter the result in the field.": "计算**水流速率**时,将量杯放在浇水喷嘴下,点击**运行浇水5秒**按钮。测量 FarmBot 浇出的水量(毫升),再除以5,将结果填入字段。", + "To finish setting up your account and FarmBot, please select which FarmBot you have. Once you make a selection, we'll automatically add some tools, sensors, peripherals, sequences, and more to get you up and running faster. If you want to start completely from scratch, feel free to select \"Custom bot\" and we won't change a thing.": "完成账户和 FarmBot 设置,请选择您的 FarmBot 机型。选择后,我们将自动添加工具、传感器、外设、序列等,帮助您快速启动。若想从零开始,可选择“自定义机器人”,我们将不做任何更改。", + "to get started": "开始使用", + "to get started or click the": "开始使用或点击", + "To prepare for camera calibration, move the z-axis all the way up.": "准备相机校准,请将 Z 轴移动到最顶端。", "To State": "到状态", - "Toast Pop Up": "弹出通知", + "Toast Pop Up": "提示弹窗", "toggle": "切换", - "Toggle a digital pin on or off.": "切换数字引脚开或关。", + "Toggle a digital pin on or off.": "切换数字引脚的开或关。", "toggle advanced view": "切换高级视图", - "toggle beeps": "切换蜂鸣声", - "toggle celery script view": "切换芹菜脚本视图", + "toggle beeps": "切换提示音", + "toggle celery script view": "切换 Celery 脚本视图", "toggle code view": "切换代码视图", "Toggle crop": "切换作物", "toggle editor view": "切换编辑器视图", - "toggle fancy editor": "切换高级编辑器", - "toggle folder open": "切换文件夹打开", - "toggle packing method": "切换打包方法", + "toggle fancy editor": "切换花哨编辑器", + "toggle folder open": "切换文件夹展开", + "toggle increased editor height": "切换加高编辑器", + "toggle packing method": "切换包装方式", "Toggle peripheral": "切换外设", "Toggle Peripheral": "切换外设", + "Toggle pin": "切换引脚", "Toggle rotation": "切换旋转", - "toggle safe z": "切换安全z", - "toggle settings open": "切换设置打开", + "toggle settings open": "切换设置展开", "too weak": "太弱", - "Tool Mount": "工具安装", + "Tool Mount": "工具安装座", "Tool or Seed Container": "工具或种子容器", "Tool Verification": "工具验证", "Tools": "工具", "tools and seed containers": "工具和种子容器", "top": "顶部", - "Top Left": "左上角", - "Top Right": "右上角", - "Total number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "重试校准的总次数。(默认:x:{{ x }},y:{{ y }},z:{{ z }})", + "Top Left": "左上", + "Top Right": "右上", + "Total number of times to retry calibration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "校准重试总次数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "Tours": "导览", "TOURS": "导览", - "Trail": "路径", - "Travel in millimeters for stall detection to ignore during acceleration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "在加速过程中忽略卡滞检测的行程(以毫米为单位)。(默认:x:{{ x }},y:{{ y }},z:{{ z }})", + "Trail": "轨迹", + "Travel in millimeters for stall detection to ignore during acceleration. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "堵转检测加速时忽略的行程毫米数。(默认:x: {{ x }}, y: {{ y }}, z: {{ z }})", "true": "真", - "Try a different Raspberry Pi USB power cable.": "尝试不同的Raspberry Pi USB电源线。", - "Try again while observing the log messages.": "在观察日志消息时再试一次。", - "Try an alternate calibration method. Two red objects spaced 100mm apart can be used in place of the card.": "尝试替代校准方法。可以用相距100毫米的两个红色物体代替卡片。", - "Try disabling cellular data or connecting with a different device.": "尝试禁用蜂窝数据或使用不同的设备连接。", - "Try navigating to ": "尝试导航到", - "Try using the FIND HOME button a few more times. If FarmBot is still unable to reach the home position, check the hardware for resistance. You may also move FarmBot's {{ axis }}-axis with the controls or manually until the plates hit the hardstop. Then open the ... menu and click SET HOME.": "尝试多次使用“查找原点”按钮。如果FarmBot仍无法到达原点位置,请检查硬件是否有阻力。您还可以使用控制器或手动移动FarmBot的{{ axis }}轴,直到板块碰到硬停。然后打开...菜单并点击设置原点。", - "Try waiting three minutes from power on. Check the Raspberry Pi power LED. Check that the SD is fully inserted. Try downloading a new FarmBot OS image, ensuring that the device model is correct. Try re-flashing the SD card via Etcher. If possible, ensure line-of-sight between devices when trying to connect.": "尝试从开机起等待三分钟。检查Raspberry Pi电源LED。检查SD卡是否完全插入。尝试下载新的FarmBot OS镜像,确保设备型号正确。通过Etcher重新刷新SD卡。如果可能,请确保连接时设备之间有视线。", - "ttyACM0 (recommended for Genesis)": "ttyACM0(推荐用于Genesis)", - "ttyAMA0 (recommended for Express v1.0)": "ttyAMA0(推荐用于Express v1.0)", - "Turn off to set Web App to English.": "关闭以将Web应用程序设置为英文。", + "Try a different Raspberry Pi USB power cable.": "尝试更换树莓派 USB 电源线。", + "Try again while observing the log messages.": "重试时观察日志信息。", + "Try an alternate calibration method. Two red objects spaced 100mm apart can be used in place of the card.": "尝试另一种校准方法。两个间距为100毫米的红色物体可替代校准卡。", + "Try disabling cellular data or connecting with a different device.": "尝试关闭蜂窝数据或用另一台设备连接。", + "Try navigating to ": "尝试访问 ", + "Try using the FIND HOME button a few more times. If FarmBot is still unable to reach the home position, check the hardware for resistance. You may also move FarmBot's {{ axis }}-axis with the controls or manually until the plates hit the hardstop. Then open the ... menu and click SET HOME.": "试着多按几次“寻找原点(FIND HOME)”按钮。如果 FarmBot 仍无法回到原点,请检查硬件是否有阻力。您也可以通过控制器或手动移动 FarmBot 的{{ axis }}轴,直到滑板碰到机械限位。然后打开“...”菜单,点击“设置原点(SET HOME)”。", + "Try waiting three minutes from power on. Check the Raspberry Pi power LED. Check that the SD is fully inserted. Try downloading a new FarmBot OS image, ensuring that the device model is correct. Try re-flashing the SD card via Etcher. If possible, ensure line-of-sight between devices when trying to connect.": "开机后请等待三分钟。检查树莓派电源指示灯。确认 SD 卡是否完全插入。尝试下载新的 FarmBot OS 镜像,确保设备型号正确。尝试使用 Etcher 重新刷写 SD 卡。如有可能,连接时确保设备间无遮挡。", + "ttyACM0 (recommended for Genesis)": "ttyACM0(推荐用于 Genesis)", + "ttyAMA0 (recommended for Express v1.0)": "ttyAMA0(推荐用于 Express v1.0)", + "Turn off to set Web App to English.": "关闭以将网页版应用设置为英文。", "type": "类型", "Type": "类型", - "Type filtered": "类型过滤", + "Type filtered": "类型已过滤", "Type not filtered": "类型未过滤", - "Unable to connect to FarmBot. Please reconnect FarmBot to continue.": "无法连接到FarmBot。请重新连接FarmBot以继续。", + "Unable to connect to FarmBot. Please reconnect FarmBot to continue.": "无法连接 FarmBot。请重新连接 FarmBot 以继续。", "Unable to load content.": "无法加载内容。", "Unable to load webcam feed.": "无法加载摄像头视频。", "Unable to properly display this step.": "无法正确显示此步骤。", - "Unable to resend verification email. Are you already verified?": "无法重新发送验证电子邮件。您是否已经验证过?", + "Unable to resend verification email. Are you already verified?": "无法重新发送验证邮件。您是否已完成验证?", "Unable to save changes.": "无法保存更改。", "Unable to save event.": "无法保存事件。", "Unavailable": "不可用", "uncategorized": "未分类", - "Uncropped Camera view": "未裁剪的相机视图", - "Unexpected error occurred, we've been notified of the problem.": "发生意外错误,我们已收到问题通知。", + "Uncropped Camera view": "未裁剪的摄像头视图", + "Unexpected error occurred, we've been notified of the problem.": "发生意外错误,我们已收到通知。", "unknown": "未知", "Unknown": "未知", "UNKNOWN": "未知", - "unknown (offline)": "未知(离线)", - "Unknown Farmware": "未知的Farmware", - "Unknown problem of priority {{priority}} ({{slug}}).": "优先级为{{priority}}的未知问题({{slug}})。", + "Unknown Farmware": "未知的 Farmware", + "Unknown problem of priority {{priority}} ({{slug}}).": "未知优先级为 {{priority}} 的问题({{slug}})。", "Unknown tool": "未知工具", "Unknown.": "未知。", "UNLOCK": "解锁", @@ -1924,126 +2132,139 @@ "Unnamed": "未命名", "unpin sequence": "取消固定序列", "Unpublish error": "取消发布错误", - "Unpublishing": "取消发布", + "Unpublishing": "取消发布中", "Until": "直到", - "Untitled Group": "未命名的组", - "Untitled point": "未命名的点", - "Untitled tool": "未命名的工具", - "Untitled weed": "未命名的杂草", - "Untitled Zone": "未命名的区域", + "Untitled Group": "未命名组", + "Untitled point": "未命名点", + "Untitled tool": "未命名工具", + "Untitled weed": "未命名杂草", + "Untitled Zone": "未命名区域", "unvisualize": "取消可视化", - "UP TO DATE": "最新的", + "UP TO DATE": "已更新", "Update": "更新", + "Update {{ curveName }} curve to": "将 {{ curveName }} 曲线更新为", "Update color to": "更新颜色为", "Update depth to": "更新深度为", - "update Farmware": "更新Farmware", - "Update Farmware": "更新Farmware", + "update Farmware": "更新 Farmware", + "Update Farmware": "更新 Farmware", + "Update preview": "更新预览", "Update radius to": "更新半径为", - "Update start to": "更新开始为", + "Update start to": "更新起点为", "Update status to": "更新状态为", "update time": "更新时间", - "UPDATE TO": "更新为", - "update to FarmBot's value": "更新为FarmBot的值", + "UPDATE TO": "更新到", + "update to FarmBot's value": "更新为 FarmBot 的值", "Update type to": "更新类型为", "Upgrade error": "升级错误", - "upgrade FarmBot OS": "升级FarmBot操作系统", - "upgrade your copy to this version": "将您的副本升级到此版本", - "Upgrading their copy to other published versions": "将他们的副本升级到其他已发布的版本", - "uploading photo": "正在上传照片", - "Upon successful password change, your FarmBot will soft reset allowing you to configure it with the updated credentials. You will also be logged out of other browser sessions. Continue?": "密码更改成功后,您的FarmBot将进行软重置,允许您使用更新的凭据进行配置。您还将退出其他浏览器会话。继续吗?", - "Uptime": "正常运行时间", - "USB Camera": "USB相机", + "upgrade FarmBot OS": "升级 FarmBot OS", + "upgrade your copy to this version": "将您的版本升级到此版本", + "Upgrading their copy to other published versions": "将他们的版本升级到其他已发布版本", + "uploading photo": "上传照片中", + "Upon successful password change, your FarmBot will soft reset allowing you to configure it with the updated credentials. You will also be logged out of other browser sessions. Continue?": "密码修改成功后,您的 FarmBot 将软重启,允许您使用更新后的凭据进行配置。您也会被登出其他浏览器会话。是否继续?", + "Uptime": "运行时间", + "USB Camera": "USB 摄像头", "Use 24-hour time format": "使用24小时制时间格式", "use alternative method": "使用替代方法", "use average soil height": "使用平均土壤高度", - "use average z: {{ value }}": "使用平均z:{{ value }}", + "use average z: {{ value }}": "使用平均 z 值:{{ value }}", "use current location": "使用当前位置", "Use current location": "使用当前位置", + "Use default": "使用默认", "Use Encoders for Positioning": "使用编码器进行定位", - "Use the encoders for calculating movements in addition to using encoders for stall detection. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "除了使用编码器进行卡滞检测外,还使用编码器计算运动。(默认:x:{{ x }},y:{{ y }},z:{{ z }})", - "Use the manual controls to move FarmBot along the full length of the X-axis in both directions.": "使用手动控制器将FarmBot沿X轴全长双向移动。", - "Use the manual controls to move FarmBot along the full length of the Y-axis in both directions.": "使用手动控制器将FarmBot沿Y轴全长双向移动。", - "Use the manual controls to move FarmBot along the full length of the Z-axis in both directions.": "使用手动控制器将FarmBot沿Z轴全长双向移动。", - "Use these manual control buttons to move FarmBot in realtime. Press the arrows for relative movements or type in new coordinates and press GO for an absolute movement. Tip: Press the Home button when you are done so FarmBot is ready to get back to work.": "使用这些手动控制按钮实时移动FarmBot。按箭头进行相对移动或输入新坐标并按GO进行绝对移动。提示:完成后按“原点”按钮,以便FarmBot准备好重新工作。", - "Use these toggle switches to control FarmBot's peripherals in realtime. To edit and create new peripherals, press the EDIT button. Make sure to turn things off when you're done!": "使用这些开关实时控制FarmBot的外设。要编辑和创建新的外设,请按编辑按钮。完成后请确保关闭所有设备!", - "Used in another resource. Protected from deletion.": "用于其他资源。受保护,无法删除。", + "Use the encoders for calculating movements in addition to using encoders for stall detection. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "使用编码器计算运动,同时使用编码器检测堵转。(默认:x: {{ x }},y: {{ y }},z: {{ z }})", + "Use the manual controls to move FarmBot along the full length of the X-axis in both directions.": "使用手动控制将 FarmBot 沿 X 轴全长向两个方向移动。", + "Use the manual controls to move FarmBot along the full length of the Y-axis in both directions.": "使用手动控制将 FarmBot 沿 Y 轴全长向两个方向移动。", + "Use the manual controls to move FarmBot along the full length of the Z-axis in both directions.": "使用手动控制将 FarmBot 沿 Z 轴全长向两个方向移动。", + "Use these manual control buttons to move FarmBot in realtime. Press the arrows for relative movements or type in new coordinates and press GO for an absolute movement. Tip: Press the Home button when you are done so FarmBot is ready to get back to work.": "使用这些手动控制按钮实时移动 FarmBot。按箭头进行相对移动,或输入新坐标并按 GO 进行绝对移动。提示:完成后请按原点按钮,使 FarmBot 准备开始工作。", + "Use these toggle switches to control FarmBot's peripherals in realtime. To edit and create new peripherals, press the EDIT button. Make sure to turn things off when you're done!": "使用这些切换开关实时控制 FarmBot 的外设。要编辑或创建新外设,请按编辑按钮。完成后请确保关闭相关设备!", + "Used in another resource. Protected from deletion.": "正在其他资源中使用,禁止删除。", "User Interface Read Only Mode": "用户界面只读模式", - "Using a demo account": "使用演示帐户", - "Using another device, search for and connect to the \\": "使用另一台设备,搜索并连接到\\", - "Using another device, search for and connect to the `farmbot-xxxx` WiFi network": "使用另一台设备,搜索并连接到`farmbot-xxxx` WiFi网络", - "Using the manual controls, instruct FarmBot to move towards the seed trough. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the needle just above the trough and then descend down into it until the tip of the needle is 3 to 5mm from the bottom of the trough. Click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制器指示FarmBot移动到种子槽。当接近时,将移动量更改为较小值以进行更精细的移动。您的目标是将针头定位在槽上方,然后下降到槽内,直到针头尖端距离槽底3至5毫米。点击插槽X、Y和Z字段旁边的蓝色按钮,以保存FarmBot当前的位置到插槽。", - "Using the manual controls, instruct FarmBot to move towards the tool and slot. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the UTM just above the tool and then descend down onto it (mounting it). Once the UTM has mounted the tool, click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制器指示FarmBot移动到工具和插槽。接近时,将移动量更改为较小值以进行更精细的移动。您的目标是将UTM定位在工具上方,然后下降到工具上(安装它)。一旦UTM安装了工具,点击插槽X、Y和Z字段旁边的蓝色按钮,以保存FarmBot当前的位置到插槽。", - "UTM and TOOLS": "UTM和工具", + "Using a demo account": "使用演示账户", + "Using a desktop computer or laptop, download and install the official Raspberry Pi Imager program from the Raspberry Pi Foundation. This is necessary for installing FarmBot OS onto the microSD card in the next step.": "请使用台式机或笔记本电脑,从树莓派基金会官网下载并安装官方 Raspberry Pi Imager 程序。这是下一步将 FarmBot OS 安装到 microSD 卡所必需的。", + "Using a desktop computer or laptop, download the latest FarmBot OS .img file:": "请使用台式机或笔记本电脑,下载最新的 FarmBot OS 镜像文件(.img):", + "Using another device, search for and connect to the \\": "使用另一设备,搜索并连接到 \\", + "Using another device, search for and connect to the `farmbot-xxxx` WiFi network": "使用另一设备,搜索并连接到 `farmbot-xxxx` WiFi 网络", + "Using the manual controls, instruct FarmBot to move towards the seed trough. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the needle just above the trough and then descend down into it until the tip of the needle is 3 to 5mm from the bottom of the trough. Click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制,指导 FarmBot 向种子槽移动。接近时,将移动步长(MOVE AMOUNT)调小以便精细移动。目标是将针头定位在槽上方,然后下降至距离槽底3-5毫米处。点击槽位的 X、Y、Z 字段旁的蓝色按钮,保存 FarmBot 当前的位置到该槽位。", + "Using the manual controls, instruct FarmBot to move towards the tool and slot. As you get closer, change the MOVE AMOUNT to a smaller value for finer movements. Your goal is to position the UTM just above the tool and then descend down onto it (mounting it). Once the UTM has mounted the tool, click the blue button next to the slot's X, Y, and Z fields to save FarmBot's current position to the slot.": "使用手动控制,指导 FarmBot 向工具和槽位移动。接近时,将移动步长(MOVE AMOUNT)调小以便精细移动。目标是将 UTM 定位在工具上方,然后下降到工具上(安装)。UTM 安装好后,点击槽位的 X、Y、Z 字段旁的蓝色按钮,保存 FarmBot 当前的位置到该槽位。", + "UTM": "UTM", + "UTM and TOOLS": "UTM 和工具", "Vacuum": "真空", "VACUUM": "真空", "Vacuum pump": "真空泵", "value": "值", - "Value": "价值", + "Value": "值", "VALUE": "值", - "Value must be greater than {{ num }}.": "值必须大于{{ num }}。", - "Value must be greater than or equal to {{min}}.": "值必须大于或等于{{min}}。", - "Value must be less than {{ num }}.": "值必须小于{{ num }}。", - "Value must be less than or equal to {{max}}.": "值必须小于或等于{{max}}。", - "Variable": "可变的", + "Value must be greater than {{ num }}.": "值必须大于 {{ num }}。", + "Value must be greater than or equal to {{min}}.": "值必须大于或等于 {{min}}。", + "Value must be less than {{ num }}.": "值必须小于 {{ num }}。", + "Value must be less than or equal to {{max}}.": "值必须小于或等于 {{max}}。", + "Variable": "变量", "Variables": "变量", "Variance": "方差", - "Verification email resent. Please check your email!": "验证邮件已重新发送。请检查您的电子邮件!", + "Verification email resent. Please check your email!": "验证邮件已重新发送。请检查您的邮箱!", "verify": "验证", - "Verify axis motor connections.": "验证轴电机连接。", - "Verify Password": "验证密码", + "Verify axis motor connections.": "检查轴电机连接。", + "Verify Password": "确认密码", "Version": "版本", - "Version {{ version }}": "版本{{ version }}", - "Version last seen": "上次看到的版本", + "Version {{ version }}": "版本 {{ version }}", + "Version last seen": "上次见到的版本", "versions": "版本", "view": "查看", - "View": "查看", - "View and filter historical sensor reading data.": "查看和过滤历史传感器读数数据。", - "View and filter log messages.": "查看和过滤日志消息。", - "View available tours": "查看可用的导览", - "View CeleryScript": "查看CeleryScript", + "View and filter historical sensor reading data.": "查看并筛选历史传感器读取数据。", + "View and filter log messages.": "查看并筛选日志消息。", + "View available tours": "查看可用导览", + "View CeleryScript": "查看 CeleryScript", "View crop info": "查看作物信息", "View current location": "查看当前位置", + "View FarmBot's current location in the navigation bar.": "在导航栏查看 FarmBot 当前的位置。", "View fullscreen": "全屏查看", - "view in map (opens in new tab)": "在地图中查看(在新标签页打开)", + "view in map (opens in new tab)": "地图中查看(新标签页打开)", "View log messages": "查看日志消息", "View Logs": "查看日志", - "View photos your FarmBot has taken here.": "在这里查看FarmBot拍摄的照片。", + "View photos your FarmBot has taken here.": "查看 FarmBot 拍摄的照片。", + "View profile": "查看个人资料", "View raw data representation of sequence steps.": "查看序列步骤的原始数据表示。", - "viewing a publicly shared sequence": "查看公开共享的序列", + "View recent log messages in the logs pop-up. More detailed log messages can be shown by adjusting filter settings.": "在日志弹窗中查看最近的日志消息。通过调整筛选设置可显示更详细的日志。", + "viewing a publicly shared sequence": "查看公开分享的序列", "Viewing saved garden": "查看已保存的花园", - "Visit the documentation.": "访问文档。", + "Visit the documentation.": "查看文档。", "visualize": "可视化", "Voltage": "电压", - "Wait": "等候", + "Volume (mL)": "体积(毫升)", + "Volume to date (L)": "累计体积(升)", + "Wait": "等待", "Warn": "警告", "Warning": "警告", - "Warning: Binding to a pin without a physical button and pull-down resistor connected may put FarmBot into an unstable state.": "警告:绑定到一个没有连接物理按钮和下拉电阻的引脚可能会使FarmBot处于不稳定状态。", - "Warning: Changing the values below may cause app and device errors.": "警告:更改下面的值可能会导致应用程序和设备错误。", - "Warning: Limit switches are NOT included with standard FarmBot Genesis or Express kits. Do NOT enable limit switches unless you have built your own FarmBot with them or added them to a stock kit.": "警告:标准的FarmBot Genesis或Express套件不包括限位开关。除非您已经用它们建造了自己的FarmBot或将它们添加到标准套件中,否则不要启用限位开关。", - "Warning: low value": "警告:低值", - "WARNING: Sending passwords via HTTP:// is not secure.": "警告:通过HTTP://发送密码是不安全的。", - "Warning: This will erase data stored on your FarmBot's SD card, requiring you to reconfigure FarmBot so that it can reconnect to your WiFi network and web app account. Soft resetting the device will not delete data stored in your web app account. Are you sure you wish to continue?": "警告:这将擦除存储在FarmBot的SD卡上的数据,需要您重新配置FarmBot以便它可以重新连接到您的WiFi网络和Web应用程序帐户。软重置设备不会删除存储在您的Web应用程序帐户中的数据。您确定要继续吗?", - "Warning: This will overwrite all existing hardware settings, replacing them with the provided values. Are you sure you wish to continue?": "警告:这将覆盖所有现有的硬件设置,并用提供的值替换它们。您确定要继续吗?", - "Warning: This will reset all hardware settings to the default values. Are you sure you wish to continue?": "警告:这将将所有硬件设置重置为默认值。您确定要继续吗?", - "Warning: Upon successful change of your account email or password, FarmBot will cease to function and become inaccessible until it is reconfigured with your new web app credentials.": "警告:成功更改您的帐户电子邮件或密码后,FarmBot将停止工作,并且在重新配置为新的Web应用程序凭据之前将无法访问。", - "WARNING! Deleting your account will permanently delete all of your Sequences, Regimens, Events, and Farm Designer data. Upon deleting your account, FarmBot will cease to function and become inaccessible until it is paired with another web app account. To do this, you will need to reboot your FarmBot so that is goes back into configuration mode for pairing with another user account. When this happens, all of the data on your FarmBot will be overwritten with the new account's data. If the account is brand new, then FarmBot will become a blank slate.": "警告!删除您的帐户将永久删除所有序列,方案,事件和农场设计师数据。删除您的帐户后,FarmBot将停止工作,并且在与另一个Web应用程序帐户配对之前将无法访问。要做到这一点,您需要重新启动FarmBot,以使其重新进入与另一个用户帐户配对的配置模式。发生这种情况时,FarmBot上的所有数据都将被新帐户的数据覆盖。如果帐户是全新的,则FarmBot将变成一个空白状态。", - "Warning! Leaving the stable FarmBot OS release channel may reduce FarmBot system stability. Are you sure?": "警告!离开稳定的FarmBot OS发布通道可能会降低FarmBot系统的稳定性。您确定吗?", - "WARNING! Resetting your account will permanently delete all of your Sequences, Regimens, Events, Tools, Logs, and Farm Designer data. All app settings and device settings will be reset to default values. This is useful if you want to delete all data to start from scratch while avoiding having to fully delete your account, re-signup, and re-configure your FarmBot. Note that when FarmBot syncs after resetting your account, your FarmBot will delete all of its stored Sequences, etc, because your account will no longer have any of these resources until you create new ones. Furthermore, upon reset any customized device settings will be immediately overwritten with the default values downloaded from the reset web app account.": "警告!重置您的帐户将永久删除所有序列,方案,事件,工具,日志和农场设计师数据。所有应用程序设置和设备设置将重置为默认值。如果您想要删除所有数据,从头开始,同时避免完全删除您的帐户,重新注册和重新配置FarmBot,则此功能非常有用。请注意,当FarmBot在重置您的帐户后同步时,您的FarmBot将删除所有存储的序列等,因为您的帐户将不再拥有这些资源,直到您创建新的资源。此外,重置后,任何自定义的设备设置都将立即被重置为从重置的Web应用程序帐户下载的默认值。", - "Warning! When disabled, clicking the UNLOCK button will immediately unlock FarmBot instead of confirming that it is safe to do so. As a result, double-clicking the E-STOP button may not stop FarmBot. Are you sure you want to disable this feature?": "警告!当禁用时,单击UNLOCK按钮将立即解锁FarmBot,而不是确认是否安全进行此操作。因此,双击E-STOP按钮可能不会停止FarmBot。您确定要禁用此功能吗?", - "Warning! When enabled, any unsaved changes to sequences will be discarded when refreshing or closing the page. Are you sure?": "警告!启用时,刷新或关闭页面时将放弃对序列的任何未保存更改。您确定吗?", - "Warning! When enabled, any unsaved changes will be discarded when refreshing or closing the page. Are you sure?": "警告!启用时,刷新或关闭页面时将放弃任何未保存的更改。您确定吗?", - "Watch the video below and make small adjustments to the motor speed and current settings.": "观看下面的视频并对电机速度和电流设置进行小幅调整。", - "Watch the video below demonstrating movements along the full length of the axes. Once you have finished watching, proceed to the next setup steps to test movements along the full length of each axis.": "观看下面的视频,演示沿轴的整个长度进行移动。观看完成后,请继续下一步设置以测试沿每个轴的整个长度移动。", - "Watch the video below showing how to match the manual controls to your real life FarmBot. Once you have finished watching, proceed to the next setup steps to test and set the controls for each axis.": "观看下面的视频,了解如何将手动控件与您的现实中的FarmBot相匹配。观看完成后,请继续下一步设置以测试和设置每个轴的控件。", - "Watch the video below showing how to match the virtual FarmBot map to your real life FarmBot. The relevant controls are available below the video for your convenience.": "观看下面的视频,了解如何将虚拟FarmBot地图与您的现实中的FarmBot相匹配。相关的控件可在视频下方方便您使用。", + "Warning: Binding to a pin without a physical button and pull-down resistor connected may put FarmBot into an unstable state.": "警告:绑定到未连接物理按钮和下拉电阻的引脚可能导致 FarmBot 处于不稳定状态。", + "Warning: Changing the values below may cause app and device errors.": "警告:更改以下数值可能导致应用和设备错误。", + "Warning: Limit switches are NOT included with standard FarmBot Genesis or Express kits. Do NOT enable limit switches unless you have built your own FarmBot with them or added them to a stock kit.": "警告:标准 FarmBot Genesis 或 Express 套件不包含限位开关。除非您自行安装或在原装套件中添加,否则请勿启用限位开关。", + "Warning: low value": "警告:数值过低", + "Warning: One or more items are scheduled to run within one hour of the FarmBot OS update time setting.": "警告:有一个或多个任务安排在 FarmBot OS 更新设置时间的一小时内执行。", + "WARNING: Sending passwords via HTTP:// is not secure.": "警告:通过 HTTP:// 发送密码不安全。", + "Warning: This will erase data stored on your FarmBot's SD card, requiring you to reconfigure FarmBot so that it can reconnect to your WiFi network and web app account. Soft resetting the device will not delete data stored in your web app account. Are you sure you wish to continue?": "警告:这将清除 FarmBot SD 卡上的数据,需重新配置 FarmBot 以连接您的 WiFi 网络和网页版账户。软重启设备不会删除网页版账户中的数据。确定要继续吗?", + "Warning: This will overwrite all existing hardware settings, replacing them with the provided values. Are you sure you wish to continue?": "警告:这将覆盖所有现有硬件设置,替换为提供的数值。确定要继续吗?", + "Warning: This will reset all hardware settings to the default values. Are you sure you wish to continue?": "警告:这将把所有硬件设置重置为默认值。确定要继续吗?", + "Warning: Upon successful change of your account email or password, FarmBot will cease to function and become inaccessible until it is reconfigured with your new web app credentials.": "警告:成功更改账户邮箱或密码后,FarmBot 将停止工作且无法访问,直到使用新的网页版凭据重新配置。", + "WARNING! Deleting your account will permanently delete all of your Sequences, Regimens, Events, and Farm Designer data. Upon deleting your account, FarmBot will cease to function and become inaccessible until it is paired with another web app account. To do this, you will need to reboot your FarmBot so that is goes back into configuration mode for pairing with another user account. When this happens, all of the data on your FarmBot will be overwritten with the new account's data. If the account is brand new, then FarmBot will become a blank slate.": "警告!删除账户将永久删除所有序列、方案、事件及农场设计器数据。删除账户后,FarmBot 将停止工作且无法访问,直到与另一个网页版账户配对。为此,您需重启 FarmBot,使其进入配置模式以配对新账户。此过程会用新账户数据覆盖 FarmBot 上的所有数据。如果新账户为空白,则 FarmBot 将成为空白状态。", + "Warning! Leaving the stable FarmBot OS release channel may reduce FarmBot system stability. Are you sure?": "警告!离开稳定的 FarmBot OS 发布通道可能降低系统稳定性。确定要继续吗?", + "WARNING! Resetting your account will permanently delete all of your Sequences, Regimens, Events, Tools, Logs, and Farm Designer data. All app settings and device settings will be reset to default values. This is useful if you want to delete all data to start from scratch while avoiding having to fully delete your account, re-signup, and re-configure your FarmBot. Note that when FarmBot syncs after resetting your account, your FarmBot will delete all of its stored Sequences, etc, because your account will no longer have any of these resources until you create new ones. Furthermore, upon reset any customized device settings will be immediately overwritten with the default values downloaded from the reset web app account.": "警告!重置账户将永久删除所有序列、方案、事件、工具、日志及农场设计器数据。所有应用和设备设置将恢复默认值。此操作适用于想要清除所有数据重新开始,但又不想完全删除账户、重新注册及重新配置 FarmBot 的情况。请注意,重置账户后同步时,FarmBot 会删除所有存储的序列等数据,因为账户中不再拥有这些资源,直到您创建新的。此外,任何自定义的设备设置也会被重置网页版账户下载的默认值覆盖。", + "Warning! When disabled, clicking the UNLOCK button will immediately unlock FarmBot instead of confirming that it is safe to do so. As a result, double-clicking the E-STOP button may not stop FarmBot. Are you sure you want to disable this feature?": "警告!禁用后,点击解锁按钮将立即解锁 FarmBot,而不会确认安全性。因此,双击紧急停止按钮可能无法停止 FarmBot。确定要禁用此功能吗?", + "Warning! When enabled, any unsaved changes to sequences will be discarded when refreshing or closing the page. Are you sure?": "警告!启用后,刷新或关闭页面将丢弃所有未保存的序列更改。确定吗?", + "Warning! When enabled, any unsaved changes will be discarded when refreshing or closing the page. Are you sure?": "警告!启用后,刷新或关闭页面将丢弃所有未保存的更改。确定吗?", + "Watch the video below and make small adjustments to the motor speed and current settings.": "观看下面视频,并对电机速度和电流设置做小幅调整。", + "Watch the video below demonstrating movements along the full length of the axes. Once you have finished watching, proceed to the next setup steps to test movements along the full length of each axis.": "观看下面视频,演示轴的全长运动。观看完成后,继续下一步设置,测试每个轴的全长运动。", + "Watch the video below showing how to match the manual controls to your real life FarmBot. Once you have finished watching, proceed to the next setup steps to test and set the controls for each axis.": "观看下面视频,了解如何将手动控制与实际 FarmBot 匹配。观看完成后,继续下一步设置,测试并设置每个轴的控制。", + "Watch the video below showing how to match the virtual FarmBot map to your real life FarmBot. The relevant controls are available below the video for your convenience.": "观看下面视频,了解如何将虚拟 FarmBot 地图与实际 FarmBot 匹配。相关控制按钮位于视频下方,方便操作。", "Water": "水", "WATER": "水", - "Water flow rate": "水流量", - "Water Flow Rate (mL/s)": "水流量(毫升/秒)", + "Water curves": "浇水曲线", + "Water flow rate": "流量", + "Water Flow Rate (mL/s)": "流量(毫升/秒)", "Watering nozzle": "浇水喷嘴", "Watering Nozzle": "浇水喷嘴", "weak": "弱", - "Web App": "Web 应用程序", + "Web App": "网页版应用", + "webcams": "摄像头", "weed": "杂草", "Weed created.": "杂草已创建。", "Weed detection": "杂草检测", @@ -2055,483 +2276,135 @@ "Weeds": "杂草", "Week": "周", "Weeks": "周", - "Welcome to the": "欢迎来到", - "Welcome to the FarmBot Web App": "欢迎来到 FarmBot Web 应用程序", - "Welcome to the FarmBot web app! In this tour you'll become familiar with the overall organization of the app.": "欢迎来到 FarmBot web 应用程序!在本次导览中,您将熟悉应用程序的整体组织。", - "Welcome to the setup wizard. This process will guide you through the steps necessary to get your FarmBot set up and running. Each step will include an action to perform and a question about the outcome, which can be answered yes or no. Answering yes will continue to the next step, while answering no will display a list of results that can be selected for specific troubleshooting tips.": "欢迎使用设置向导。此过程将引导您完成设置和运行FarmBot所需的步骤。每个步骤都将包括要执行的操作以及有关结果的问题,可以回答是或否。回答是将继续进行下一步,而回答否将显示可以选择特定故障排除提示的结果列表。", - "What do you want to grow?": "您想种什么?", + "Welcome to the FarmBot Web App": "欢迎使用 FarmBot 网页版应用", + "Welcome to the FarmBot web app! In this tour you'll become familiar with the overall organization of the app.": "欢迎使用 FarmBot 网页版应用!本导览将帮助您熟悉应用的整体结构。", + "Welcome to the setup wizard. This process will guide you through the steps necessary to get your FarmBot set up and running. Each step will include an action to perform and a question about the outcome, which can be answered yes or no. Answering yes will continue to the next step, while answering no will display a list of results that can be selected for specific troubleshooting tips.": "欢迎使用设置向导。本流程将引导您完成 FarmBot 的安装和启动。每步包含一个操作和一个结果提问,您可选择“是”或“否”。选择“是”进入下一步,选择“否”将显示结果列表,供您选择具体的故障排查建议。", + "What do you want to grow?": "您想种植什么?", + "What is your preferred language?": "您偏好的语言是?", "What's next?": "下一步是什么?", - "When": "当", - "When adding plants to the map from the web app, set each new plant's depth to this value (in millimeters).": "从Web应用程序向地图添加植物时,请将每个新植物的深度设置为此值(以毫米为单位)。", - "When executing a sequence over a Group of locations, FarmBot will travel to each group member in the order of the chosen sort method. If the random option is chosen, FarmBot will travel in a random order every time, so the ordering shown below will only be representative.": "在对位置组执行序列时,FarmBot将按照选择的排序方法的顺序前往每个组成员。如果选择了随机选项,则FarmBot将每次以随机顺序前往,因此下面显示的顺序仅供参考。", - "When you publish a new version, other users of the sequence may optionally upgrade to the latest version.": "当您发布新版本时,序列的其他用户可以选择升级到最新版本。", - "When you're finished with a message, press the x button in the top right of the card to dismiss it.": "完成消息后,请按卡片右上角的x按钮将其关闭。", - "Which FarmBot model do you have?": "您有哪种FarmBot型号?", - "while your garden is applied.": "在应用您的花园时。", + "When adding plants to the map from the web app, set each new plant's depth to this value (in millimeters).": "从网页版应用添加植物到地图时,设置每个新植物的深度为此数值(毫米)。", + "When executing a sequence over a Group of locations, FarmBot will travel to each group member in the order of the chosen sort method. If the random option is chosen, FarmBot will travel in a random order every time, so the ordering shown below will only be representative.": "当在一组位置上执行序列时,FarmBot 将按照所选排序方法依次访问每个组成员。如果选择随机选项,FarmBot 每次的访问顺序都会不同,所以下方显示的顺序仅供参考。", + "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, click the sort icon to open the sort menu and select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "当您编程让 FarmBot 对一组植物执行操作时,可能希望控制访问每株植物的顺序。为此,点击排序图标打开排序菜单,选择一种排序方法。选择完成后,继续导览。", + "When you publish a new version, other users of the sequence may optionally upgrade to the latest version.": "发布新版本后,其他序列用户可选择升级到最新版本。", + "When you're finished with a message, press the x button in the top right of the card to dismiss it.": "消息处理完毕后,点击卡片右上角的 x 按钮关闭。", + "Which FarmBot model do you have?": "您拥有哪款 FarmBot?", + "while your garden is applied.": "当您的花园应用时。", "White": "白色", - "Why is my FarmBot not moving?": "为什么我的FarmBot不动?", - "Widget load failed.": "小部件加载失败。", + "Why is my FarmBot not moving?": "为什么我的 FarmBot 不动?", + "Widget load failed.": "控件加载失败。", "width": "宽度", - "WiFi strength": "WiFi强度", - "With the FarmBot still powered off, manually move the gantry, cross-slide, and Z-axis roughly 150mm away from any of its hardstops. In other words, position the gantry partway along the tracks, position the cross-slide partway across the gantry main beam, and position the Z-axis halfway down.": "在FarmBot仍然关闭电源的情况下,手动将门架,横梁和Z轴大致移动到任何一个硬停位置的150mm处。换句话说,将门架部分沿轨道移动,将横梁部分沿门架主梁移动,并将Z轴部分向下移动一半。", - "Within filter range": "在过滤器范围内", + "WiFi": "WiFi", + "WiFi strength": "WiFi 信号强度", + "With the FarmBot still powered off, manually move the gantry and cross-slide roughly 150mm away from the X and Y axis hardstops. In other words, position the gantry partway along the tracks and position the cross-slide partway across the gantry main beam. Rotate the leadscrew by hand to position the Z-axis fully raised up.": "在 FarmBot 断电状态下,手动将龙门架和横滑台大约移离 X 和 Y 轴机械限位约150毫米。换句话说,将龙门架定位在轨道中间,横滑台定位在龙门主梁中间。手动旋转丝杆,将 Z 轴升到最高位置。", + "With the FarmBot still powered off, manually move the gantry, cross-slide, and Z-axis roughly 150mm away from any of its hardstops. In other words, position the gantry partway along the tracks, position the cross-slide partway across the gantry main beam, and position the Z-axis halfway down.": "在 FarmBot 断电状态下,手动将龙门架、横滑台和 Z 轴大约移离任何机械限位约150毫米。换句话说,将龙门架定位在轨道中间,横滑台定位在龙门主梁中间,Z 轴定位在中间位置。", + "Within filter range": "在筛选范围内", "Worst time": "最差时间", - "Would you like to": "您想要", - "Write pin": "写入引脚", + "Write pin": "写引脚", + "WRITE\\": "写入\\", + "X": "X", "x (mm)": "x(毫米)", "X (mm)": "X(毫米)", - "x and y axis": "x和y轴", + "x and y axis": "x 和 y 轴", + "X and Y together": "X 和 Y 一起", "X Axis": "X 轴", - "X AXIS": "X轴", + "X AXIS": "X 轴", "X position": "X 位置", - "X-axis": "X轴", - "X-axis length": "X轴长度", - "x-axis length (mm)": "x轴长度(毫米)", - "X-axis motor": "X轴电机", - "x-axis motor step": "x轴电机步数", - "X-axis movements": "X轴移动", - "x-axis stall detection": "x轴堵转检测", - "X, Y, Z (mm)": "X,Y,Z(毫米)", + "X-axis": "X 轴", + "x-axis acceleration (mm)": "x 轴加速度(毫米)", + "X-axis length": "X 轴长度", + "x-axis length (mm)": "x 轴长度(毫米)", + "x-axis maximum speed (mm/s)": "x 轴最大速度(毫米/秒)", + "x-axis minimum speed (mm/s)": "x 轴最小速度(毫米/秒)", + "X-axis motor": "X 轴电机", + "x-axis motor current (%)": "x 轴电机电流(%)", + "x-axis motor step": "x 轴电机步距", + "X-axis movements": "X 轴运动", + "x-axis stall detection": "x 轴失速检测", + "X-max bleed": "X 最大补偿", + "X-min bleed": "X 最小补偿", + "X, Y, Z (mm)": "X、Y、Z(毫米)", "X/Y Alternating": "X/Y 交替", - "X/Y, Ascending": "X/Y,升序", - "X/Y, Descending": "X/Y,降序", + "X/Y, Ascending": "X/Y 升序", + "X/Y, Descending": "X/Y 降序", + "Y": "Y", "y (mm)": "y(毫米)", "Y (mm)": "Y(毫米)", - "Y Axis": "Y轴", - "Y AXIS": "Y轴", - "Y position": "Y位置", - "Y-axis": "Y轴", - "Y-axis length": "Y轴长度", - "y-axis length (mm)": "Y轴长度(毫米)", - "Y-axis motor": "Y轴电机", - "y-axis motor step": "Y轴电机步数", - "Y-axis movements": "Y轴移动", - "y-axis stall detection": "Y轴堵转检测", - "Y/X Alternating": "Y/X,交替", - "Y/X, Ascending": "Y/X,升序", - "Y/X, Descending": "Y/X,降序", + "Y Axis": "Y 轴", + "Y AXIS": "Y 轴", + "Y position": "Y 位置", + "Y-axis": "Y 轴", + "y-axis acceleration (mm)": "y 轴加速度(毫米)", + "Y-axis length": "Y 轴长度", + "y-axis length (mm)": "y 轴长度(毫米)", + "y-axis maximum speed (mm/s)": "y 轴最大速度(毫米/秒)", + "y-axis minimum speed (mm/s)": "y 轴最小速度(毫米/秒)", + "Y-axis motor": "Y 轴电机", + "y-axis motor current (%)": "y 轴电机电流(%)", + "y-axis motor step": "y 轴电机步距", + "Y-axis movements": "Y 轴运动", + "y-axis stall detection": "y 轴失速检测", + "Y-max bleed": "Y 最大补偿", + "Y-min bleed": "Y 最小补偿", + "Y/X Alternating": "Y/X 交替", + "Y/X, Ascending": "Y/X 升序", + "Y/X, Descending": "Y/X 降序", "Year": "年", "Years": "年", "Yellow": "黄色", "yes": "是", - "You are either offline, using a web browser that does not support WebSockets, or are behind a firewall that blocks port 3002. Do not attempt to debug FarmBot hardware until you solve this issue first. You will not be able to troubleshoot hardware issues without a reliable browser and internet connection.": "您要么处于离线状态,要么使用不支持WebSockets的网络浏览器,或者位于阻止端口3002的防火墙后面。在解决此问题之前,请勿尝试调试FarmBot硬件。没有可靠的浏览器和互联网连接,您将无法排除硬件问题。", - "You are running an old version of FarmBot OS that is no longer supported.": "您正在运行一个不再受支持的旧版本的FarmBot OS。", - "You are scheduling a regimen to run today. Be aware that running a regimen too late in the day may result in skipped regimen tasks. Consider rescheduling this event to tomorrow if this is a concern.": "您正在安排一个今天运行的生活习惯。请注意,如果在一天中运行生活习惯太晚,可能会导致生活习惯任务被跳过。如果这是一个问题,请考虑将此事件重新安排到明天。", - "You can publish new versions of this sequence at any time, which other users may choose to upgrade to.": "您可以随时发布此序列的新版本,其他用户可以选择升级到该版本。", - "You have a FarmBot": "您有一个FarmBot", - "You have made custom modifications to this imported sequence. Upgrading will overwrite all modifications, replacing your copy with the chosen public version.": "您已对此导入的序列进行了自定义修改。升级将覆盖所有修改,使用所选择的公共版本替换您的副本。", - "You haven't made any sequences or regimens yet. To add an event, first create a sequence or regimen.": "您尚未创建任何序列或生活习惯。要添加事件,请首先创建序列或生活习惯。", - "You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.": "您尚未使用您的FarmBot拍摄任何照片。一旦您拍摄,它们将显示在这里。", - "You may also try increasing motor current by 10%.": "您还可以尝试将电机电流增加10%。", - "You may also unpublish the sequence and/or delete it from your account at any time to disable the share link. However, these actions will not affect existing imports owned by other user accounts.": "您还可以随时取消发布序列和/或从您的帐户中删除它,以禁用共享链接。但是,这些操作不会影响其他用户帐户拥有的现有导入。", - "You may click the button below to resend the email.": "您可以单击下面的按钮重新发送电子邮件。", - "You may experience data loss if you do not refresh the page.": "如果您不刷新页面,可能会丢失数据。", - "You must register your original FarmBot order number before contacting support.": "在联系支持之前,您必须注册您的原始FarmBot订单号。", - "You must save changes to the sequence before publishing a new version.": "在发布新版本之前,您必须保存对序列的更改。", - "You're currently using a demo account": "您当前正在使用演示帐户", + "You are either offline, using a web browser that does not support WebSockets, or are behind a firewall that blocks port 3002. Do not attempt to debug FarmBot hardware until you solve this issue first. You will not be able to troubleshoot hardware issues without a reliable browser and internet connection.": "您当前离线、使用不支持 WebSockets 的浏览器,或处于阻止 3002 端口的防火墙之后。在解决此问题之前,请不要尝试调试 FarmBot 硬件。没有可靠的浏览器和互联网连接,您将无法排查硬件问题。", + "You are running an old version of FarmBot OS that is no longer supported.": "您正在运行已不再受支持的旧版本 FarmBot OS。", + "You are scheduling a regimen to run today. Be aware that running a regimen too late in the day may result in skipped regimen tasks. Consider rescheduling this event to tomorrow if this is a concern.": "您正在安排一个今天运行的流程。请注意,若运行时间过晚,可能会导致部分任务被跳过。如果担心这一点,请考虑将此事件改到明天。", + "You can publish new versions of this sequence at any time, which other users may choose to upgrade to.": "您可以随时发布此序列的新版本,其他用户可以选择升级。", + "You have a FarmBot": "您拥有一个 FarmBot", + "You have made custom modifications to this imported sequence. Upgrading will overwrite all modifications, replacing your copy with the chosen public version.": "您已对该导入序列进行自定义修改。升级将覆盖所有修改,并用所选的公共版本替换您的副本。", + "You haven't made any sequences or regimens yet. To add an event, first create a sequence or regimen.": "您尚未创建任何序列或流程。要添加事件,请先创建一个序列或流程。", + "You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.": "您还没有用 FarmBot 拍摄任何照片。拍摄后,它们将显示在此处。", + "You may also try increasing motor current by 10%.": "您也可以尝试将电机电流增加 10%。", + "You may also unpublish the sequence and/or delete it from your account at any time to disable the share link. However, these actions will not affect existing imports owned by other user accounts.": "您可以随时取消发布该序列和/或从您的账户中删除它,以禁用分享链接。但这些操作不会影响其他用户账户已导入的副本。", + "You may click the button below to resend the email.": "您可以点击下方按钮重新发送邮件。", + "You may experience data loss if you do not refresh the page.": "如果不刷新页面,您可能会丢失数据。", + "You must register your original FarmBot order number before contacting support.": "在联系支持前,您必须注册您的 FarmBot 原始订单号。", + "You must save changes to the sequence before publishing a new version.": "您必须先保存对序列的更改,然后才能发布新版本。", + "You're currently using a demo account": "您当前正在使用演示账户", "You're currently viewing the": "您当前正在查看", - "Your browser is connected correctly, but we have no recent record of FarmBot connecting to the internet. This usually happens because of poor WiFi connectivity in the garden, a bad password during configuration, a very long power outage, or blocked ports on FarmBot's local network. Please refer IT staff to:": "您的浏览器已正确连接,但我们没有最近的记录显示FarmBot连接到互联网。这通常是由于花园中的WiFi连接质量差、配置期间密码错误、长时间的停电或FarmBot本地网络上的端口被阻止而引起的。请向IT人员求助:", + "Your browser is connected correctly, but we have no recent record of FarmBot connecting to the internet. This usually happens because of poor WiFi connectivity in the garden, a bad password during configuration, a very long power outage, or blocked ports on FarmBot's local network. Please refer IT staff to:": "您的浏览器已正确连接,但我们最近没有记录到 FarmBot 连接互联网。这通常是由于花园中的 WiFi 信号较差、配置时输入的密码错误、长时间断电或 FarmBot 本地网络端口被阻止造成的。请将以下信息转给 IT 人员:", "your copy": "您的副本", "Your device has no firmware": "您的设备没有固件", - "Your FarmBot's internal computer is the": "您的FarmBot的内部计算机是", - "Your Name": "你的名字", + "Your FarmBot's internal computer is the": "您的 FarmBot 内部计算机是", + "Your Name": "您的姓名", "Your password is changed.": "您的密码已更改。", - "Your version of FarmBot OS is outdated and will soon no longer be supported. Please update your device as soon as possible.": "您的FarmBot OS版本已过时,将很快不再受支持。请尽快更新您的设备。", - "Your web browser is unable to communicate with the web app server. Make sure you are connected to the Internet.": "您的网络浏览器无法与Web应用程序服务器通信。确保您已连接到互联网。", - "Your web browser is unable to connect to the message broker. You might be behind a firewall or disconnected from the Internet. Check your network settings. View the connection status for more details.": "您的网络浏览器无法连接到消息代理。您可能在防火墙后面或未连接到互联网。检查您的网络设置。查看连接状态以获取更多详细信息。", - "Your web browser may not work properly with the FarmBot Web App. If you experience any issues, try using a recent version of Chrome, Firefox, or Edge.": "您的网络浏览器可能无法与FarmBot Web App正常工作。如果遇到任何问题,请尝试使用Chrome、Firefox或Edge的最新版本。", + "Your version of FarmBot OS is outdated and will soon no longer be supported. Please update your device as soon as possible.": "您的 FarmBot OS 版本已过时,且很快将不再受支持。请尽快更新您的设备。", + "Your web browser is unable to communicate with the web app server. Make sure you are connected to the Internet.": "您的网页浏览器无法与 Web 应用服务器通信。请确保已连接到互联网。", + "Your web browser is unable to connect to the message broker. You might be behind a firewall or disconnected from the Internet. Check your network settings. View the connection status for more details.": "您的网页浏览器无法连接到消息代理。您可能处于防火墙之后,或已断开互联网连接。请检查网络设置。查看连接状态以获取更多信息。", + "Your web browser may not work properly with the FarmBot Web App. If you experience any issues, try using a recent version of Chrome, Firefox, or Edge.": "您的网页浏览器可能无法正常使用 FarmBot Web 应用。如果遇到问题,请尝试使用最新版本的 Chrome、Firefox 或 Edge。", + "z": "z", + "Z": "Z", "Z (mm)": "Z(毫米)", - "Z Axis": "Z轴", - "Z AXIS": "Z轴", - "Z axis coordinate (millimeters) of soil level. This value will only be used if there are no soil height measurements available. To add soil height measurements, run a sequence with the MEASURE SOIL HEIGHT command in a grid over your garden. Alternatively, use a ruler to manually measure the height at various locations in the garden and add corresponding soil height points from the points panel. (default: 0)": "土壤水平的Z轴坐标(毫米)。仅当没有土壤高度测量数据可用时,才会使用此值。要添加土壤高度测量数据,请在花园上运行带有MEASURE SOIL HEIGHT命令的序列。或者,使用标尺在花园的各个位置手动测量高度,并从点面板添加相应的土壤高度点。(默认值:0)", - "Z axis coordinate (millimeters) to which the z axis should be retracted during Safe Z moves. It is recommended to choose a value at which the z axis is all of the way up to provide as much clearance as possible. (default: 0)": "在安全Z移动期间应将z轴缩回的Z轴坐标(毫米)。建议选择一个值,其中z轴全部上移,以尽可能提供尽可能多的间隙。(默认值:0)", - "Z doesn't match calibration": "Z不符合校准", - "Z height matches calibration": "Z高度符合校准", - "Z position": "Z位置", - "Z-axis": "Z轴", - "Z-axis length": "Z轴长度", - "z-axis length (mm)": "z轴长度(毫米)", - "Z-axis motor": "Z轴电机", - "z-axis motor step": "z轴电机步进", - "Z-axis movements": "Z轴运动", - "z-axis stall detection": "z轴堵转检测", + "Z Axis": "Z 轴", + "Z AXIS": "Z 轴", + "Z axis coordinate (millimeters) of soil level. This value will only be used if there are no soil height measurements available. To add soil height measurements, run a sequence with the MEASURE SOIL HEIGHT command in a grid over your garden. Alternatively, use a ruler to manually measure the height at various locations in the garden and add corresponding soil height points from the points panel. (default: 0)": "土壤高度的 Z 轴坐标(毫米)。仅在没有土壤高度测量数据时使用此值。要添加土壤高度测量,请在花园中按网格运行带有“测量土壤高度”命令的序列。或者,使用尺子在花园不同位置手动测量高度,并在点面板中添加相应的土壤高度点。(默认:0)", + "Z axis coordinate (millimeters) to which the z axis should be retracted during Safe Z moves. It is recommended to choose a value at which the z axis is all of the way up to provide as much clearance as possible. (default: 0)": "安全 Z 移动期间 Z 轴应收回的 Z 轴坐标(毫米)。建议选择 Z 轴完全升起的位置,以提供尽可能多的间隙。(默认:0)", + "Z axis extrusion length. (default: {{ defaultConfigValue }}mm)": "Z 轴挤出长度。(默认:{{ defaultConfigValue }} 毫米)", + "Z Axis Length": "Z 轴长度", + "Z doesn't match calibration": "Z 与校准不匹配", + "Z height matches calibration": "Z 高度与校准匹配", + "Z position": "Z 位置", + "Z-axis": "Z 轴", + "z-axis acceleration (mm)": "z 轴加速度(毫米)", + "Z-axis length": "Z 轴长度", + "z-axis length (mm)": "z 轴长度(毫米)", + "z-axis maximum speed (mm/s)": "z 轴最大速度(毫米/秒)", + "z-axis minimum speed (mm/s)": "z 轴最小速度(毫米/秒)", + "Z-axis motor": "Z 轴电机", + "z-axis motor current (%)": "z 轴电机电流(%)", + "z-axis motor step": "z 轴电机步距", + "Z-axis movements": "Z 轴运动", + "z-axis stall detection": "z 轴失速检测", "zone name": "区域名称", "Zones": "区域", "zoom in": "放大", "zoom out": "缩小" }, - "untranslated": { - "": "", - ", quietMode = ": ", quietMode = ", - ".img\\": ".img\\", - "(x, y, z)": "(x, y, z)", - "{{ name }} Grid": "{{ name }} Grid", - "% Change": "% Change", - "1280 x 960 (1.3MP)": "1280 x 960 (1.3MP)", - "1600 x 1200 (2MP)": "1600 x 1200 (2MP)", - "2592 x 1944 (5MP)": "2592 x 1944 (5MP)", - "320 x 240 (0.08MP)": "320 x 240 (0.08MP)", - "3280 x 2464 (8MP)": "3280 x 2464 (8MP)", - "4056 x 3040 (12.3MP)": "4056 x 3040 (12.3MP)", - "640 x 480 (0.3MP)": "640 x 480 (0.3MP)", - "800 x 600 (0.5MP)": "800 x 600 (0.5MP)", - "Action may be required": "Action may be required", - "Add Grid or Row": "Add Grid or Row", - "add new height curve": "add new height curve", - "add new spread curve": "add new spread curve", - "Add new tool": "Add new tool", - "add new water curve": "add new water curve", - "Add watering nozzle": "Add watering nozzle", - "alpha": "alpha", - "Alternatively, revert to the previous resolution": "Alternatively, revert to the previous resolution", - "Always review and test auto-generated code": "Always review and test auto-generated code", - "Arduino/Farmduino": "Arduino/Farmduino", - "Assertion": "Assertion", - "at soil level": "at soil level", - "Auto update": "Auto update", - "auto-generate Lua code": "auto-generate Lua code", - "auto-generate sequence description": "auto-generate sequence description", - "auto-generate sequence title and color": "auto-generate sequence title and color", - "auto-update preview": "auto-update preview", - "Automatically finding the Z-axis home position is not enabled by default for Express FarmBots. To manually set the Z home position, use the manual controls to move the Z-axis to the fully raised position. If the Z-axis is not fully raised when the FarmBot reaches the Z=0 coordinate, press the E-stop button, rotate the leadscrew by hand to fully raise the Z-axis, and then Unlock the FarmBot. With the Z-axis fully raised, open the ... menu for the Z-axis and click **SET HOME**.": "Automatically finding the Z-axis home position is not enabled by default for Express FarmBots. To manually set the Z home position, use the manual controls to move the Z-axis to the fully raised position. If the Z-axis is not fully raised when the FarmBot reaches the Z=0 coordinate, press the E-stop button, rotate the leadscrew by hand to fully raise the Z-axis, and then Unlock the FarmBot. With the Z-axis fully raised, open the ... menu for the Z-axis and click **SET HOME**.", - "Automatically finding the Z-axis length is not enabled by default for Express FarmBots. To manually set the Z length, use the manual controls to move the Z-axis to the fully lowered position. With the Z-axis fully lowered, open the ... menu for the Z-axis and click **SET LENGTH**. Then open the ... menu again and click **MOVE TO HOME**.": "Automatically finding the Z-axis length is not enabled by default for Express FarmBots. To manually set the Z length, use the manual controls to move the Z-axis to the fully lowered position. With the Z-axis fully lowered, open the ... menu for the Z-axis and click **SET LENGTH**. Then open the ... menu again and click **MOVE TO HOME**.", - "automatically update preview": "automatically update preview", - "BIND": "BIND", - "Binomial Name": "Binomial Name", - "Calibrate the camera again for the selected resolution.": "Calibrate the camera again for the selected resolution.", - "Change {{ curveName }} curve for {{ num }} items?": "Change {{ curveName }} curve for {{ num }} items?", - "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1+ kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1+ kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.", - "CHOOSE STORAGE\\": "CHOOSE STORAGE\\", - "Closed": "Closed", - "collage": "collage", - "collapse": "collapse", - "Connect the microSD card to your computer": "Connect the microSD card to your computer", - "Connected": "Connected", - "Connection Quality": "Connection Quality", - "Connection type": "Connection type", - "Consider moving steps into subsequences.": "Consider moving steps into subsequences.", - "Constant Value": "Constant Value", - "Copy curve": "Copy curve", - "CPU": "CPU", - "Currently used with this crop": "Currently used with this crop", - "curve": "curve", - "Curve already has the maximum number of control points.": "Curve already has the maximum number of control points.", - "Curve in use.": "Curve in use.", - "Curves": "Curves", - "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls pop-up.": "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls pop-up.", - "DAY": "DAY", - "Day {{ num }}": "Day {{ num }}", - "Default plant depth (mm)": "Default plant depth (mm)", - "Delete all {{ count }} {{points}} in section?": "Delete all {{ count }} {{points}} in section?", - "Delete curve": "Delete curve", - "Did FarmBot unlock? (Check the logs or try sending a movement command)": "Did FarmBot unlock? (Check the logs or try sending a movement command)", - "Did the writing process complete?": "Did the writing process complete?", - "Did you select a time when you will not need to use your FarmBot?": "Did you select a time when you will not need to use your FarmBot?", - "Double-check the URL or explore the navigation bar.": "Double-check the URL or explore the navigation bar.", - "Download": "Download", - "Download Raspberry Pi Imager": "Download Raspberry Pi Imager", - "duration": "duration", - "edit curve": "edit curve", - "Enable 3D electronics box": "Enable 3D electronics box", - "Expected height (mm)": "Expected height (mm)", - "Expected spread (mm)": "Expected spread (mm)", - "FarmBot Connection": "FarmBot Connection", - "Farmware": "Farmware", - "Firmware value from your choice in the dropdown to the right, as understood by the Web App.": "Firmware value from your choice in the dropdown to the right, as understood by the Web App.", - "For a profile view of FarmBot's current location in the virtual garden, open the profile viewer.": "For a profile view of FarmBot's current location in the virtual garden, open the profile viewer.", - "fullscreen": "fullscreen", - "Fully raised tool head": "Fully raised tool head", - "Gantry main beam": "Gantry main beam", - "generate code": "generate code", - "generating": "generating", - "Good": "Good", - "grid": "grid", - "Has the download finished?": "Has the download finished?", - "Have you identified which Raspberry Pi is in your FarmBot?": "Have you identified which Raspberry Pi is in your FarmBot?", - "Have you inserted the microSD card into the Raspberry Pi?": "Have you inserted the microSD card into the Raspberry Pi?", - "Have you manually set the Z-axis home position with the Z-axis fully raised?": "Have you manually set the Z-axis home position with the Z-axis fully raised?", - "Have you manually set the Z-axis length with the Z-axis fully lowered and then returned the Z-axis to the home position?": "Have you manually set the Z-axis length with the Z-axis fully lowered and then returned the Z-axis to the home position?", - "height curves": "height curves", - "Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.", - "Here you can view running and completed jobs as well as log messages.": "Here you can view running and completed jobs as well as log messages.", - "idle": "idle", - "If you are upgrading your FarmBot, you may need to manually add any new peripherals, sensors, and tools that your new electronics board supports.": "If you are upgrading your FarmBot, you may need to manually add any new peripherals, sensors, and tools that your new electronics board supports.", - "Insert the microSD card into FarmBot": "Insert the microSD card into FarmBot", - "Inspect the ports on the top edge of the Raspberry Pi and select which Raspberry Pi model is in your FarmBot.": "Inspect the ports on the top edge of the Raspberry Pi and select which Raspberry Pi model is in your FarmBot.", - "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections. Check the cable carrier for any snap-in tabs that are not fully snapped into place. Tabs may be catching on the cable carrier supports or other parts of the cable carrier.": "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections. Check the cable carrier for any snap-in tabs that are not fully snapped into place. Tabs may be catching on the cable carrier supports or other parts of the cable carrier.", - "INSTALL FARMBOT OS": "INSTALL FARMBOT OS", - "Install FarmBot OS onto the microSD card": "Install FarmBot OS onto the microSD card", - "Is FarmBot positioned?": "Is FarmBot positioned?", - "Is Raspberry Pi Imager installed?": "Is Raspberry Pi Imager installed?", - "Is the card connected?": "Is the card connected?", - "jobs": "jobs", - "Jobs and Logs": "Jobs and Logs", - "Learn more about connecting": "Learn more about connecting", - "Learn more about ports": "Learn more about ports", - "LED 3": "LED 3", - "LED 4": "LED 4", - "Linear Ramp": "Linear Ramp", - "Load (%)": "Load (%)", - "logs": "logs", - "Low": "Low", - "Lua": "Lua", - "Manually position the FarmBot": "Manually position the FarmBot", - "max value": "max value", - "Maximum number of control points reached.": "Maximum number of control points reached.", - "mL": "mL", - "motor load": "motor load", - "motor position": "motor position", - "move": "move", - "network": "network", - "New Regimen ": "New Regimen ", - "New Sequence {{ num }}": "New Sequence {{ num }}", - "No Curve selected": "No Curve selected", - "No curves yet.": "No curves yet.", - "Not Found": "Not Found", - "Occurred": "Occurred", - "Open": "Open", - "Open up the Raspberry Pi Imager program and click \\": "Open up the Raspberry Pi Imager program and click \\", - "Other curves": "Other curves", - "Perhaps the page has moved?": "Perhaps the page has moved?", - "peripherals": "peripherals", - "Plant may exceed the distance between the soil and FarmBot": "Plant may exceed the distance between the soil and FarmBot", - "Plant may spread beyond the growing area": "Plant may spread beyond the growing area", - "Please select a model": "Please select a model", - "Plots": "Plots", - "Ports": "Ports", - "Press \"+\" to add a curve.": "Press \"+\" to add a curve.", - "Raspberry Pi": "Raspberry Pi", - "Raspberry Pi model": "Raspberry Pi model", - "Raspberry Pi Model 3": "Raspberry Pi Model 3", - "Raspberry Pi Model 4": "Raspberry Pi Model 4", - "Raspberry Pi model from your choice in the dropdown to the right, as understood by the Web App.": "Raspberry Pi model from your choice in the dropdown to the right, as understood by the Web App.", - "Raspberry Pi model reported from your device, as understood by FarmBot OS.": "Raspberry Pi model reported from your device, as understood by FarmBot OS.", - "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the back side of the Raspberry Pi, on the right-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.": "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the back side of the Raspberry Pi, on the right-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.", - "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.": "Remove the microSD card from the FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge. Then connect the microSD card to your computer using a card reader. You may need to use the microSD card to SD card adapter included with your kit.", - "Remove the microSD card from your computer and insert it into FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge.": "Remove the microSD card from your computer and insert it into FarmBot's Raspberry Pi. The card slot is located on the front side of the Raspberry Pi, on the left-hand edge.", - "S-Curve": "S-Curve", - "scale": "scale", - "Search your curves...": "Search your curves...", - "Select": "Select", - "Select a curve": "Select a curve", - "Set the time you wish for FarmBot to automatically download and install updates when available. During this time FarmBot will reboot to apply the update, so you should never schedule any events to occur during the same hour. We recommend selecting 3 AM.": "Set the time you wish for FarmBot to automatically download and install updates when available. During this time FarmBot will reboot to apply the update, so you should never schedule any events to occur during the same hour. We recommend selecting 3 AM.", - "shape": "shape", - "Show a 3D model of FarmBot's electronics box instead of a 2D view in the Peripherals tab of the Controls pop-up.": "Show a 3D model of FarmBot's electronics box instead of a 2D view in the Peripherals tab of the Controls pop-up.", - "show motor load plot display": "show motor load plot display", - "software.farm.bot": "software.farm.bot", - "Sowing": "Sowing", - "spread curves": "spread curves", - "Stall detection is disabled for one or more axes.": "Stall detection is disabled for one or more axes.", - "Start": "Start", - "start date": "start date", - "Sun": "Sun", - "Table": "Table", - "templates": "templates", - "The camera was previously calibrated for a different resolution.": "The camera was previously calibrated for a different resolution.", - "The maximum number of sequences allowed is {{ num }}.": "The maximum number of sequences allowed is {{ num }}.", - "The maximum number of steps allowed in one sequence is {{ num }}.": "The maximum number of steps allowed in one sequence is {{ num }}.", - "This is the connectivity popup. View information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "This is the connectivity popup. View information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.", - "This is the curves panel. Here you can view and manage all of the water, spread, and height curves for your plants. Pressing the + button will create a new curve.": "This is the curves panel. Here you can view and manage all of the water, spread, and height curves for your plants. Pressing the + button will create a new curve.", - "This is the sensors panel. Here you can view and manage your sensors and sensor readings. Click the Read Sensor buttons to read the current value of your sensors. Create and view historical sensor readings in the Sensor History section.": "This is the sensors panel. Here you can view and manage your sensors and sensor readings. Click the Read Sensor buttons to read the current value of your sensors. Create and view historical sensor readings in the Sensor History section.", - "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.": "This is the weeds panel. Here you can view and manage all of the weeds in your garden. Mousing over a weed in the list will highlight it in the map and vice versa. Newly detected weeds will appear in the PENDING category, which you must periodically approve to be listed in the ACTIVE category. Once a weed has been dealt with by FarmBot, it can be moved to the REMOVED category with a Mark As sequence command. Clicking a weed will open up the weed details panel where you can manually edit it.", - "This sequence includes Lua code. Review carefully before executing.": "This sequence includes Lua code. Review carefully before executing.", - "To add a grid or row of plants, press the + GRID button, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "To add a grid or row of plants, press the + GRID button, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.", - "toggle increased editor height": "toggle increased editor height", - "Update {{ curveName }} curve to": "Update {{ curveName }} curve to", - "Update preview": "Update preview", - "Using a desktop computer or laptop, download and install the official Raspberry Pi Imager program from the Raspberry Pi Foundation. This is necessary for installing FarmBot OS onto the microSD card in the next step.": "Using a desktop computer or laptop, download and install the official Raspberry Pi Imager program from the Raspberry Pi Foundation. This is necessary for installing FarmBot OS onto the microSD card in the next step.", - "Using a desktop computer or laptop, download the latest FarmBot OS .img file:": "Using a desktop computer or laptop, download the latest FarmBot OS .img file:", - "UTM": "UTM", - "View FarmBot's current location in the navigation bar.": "View FarmBot's current location in the navigation bar.", - "View profile": "View profile", - "View recent log messages in the logs pop-up. More detailed log messages can be shown by adjusting filter settings.": "View recent log messages in the logs pop-up. More detailed log messages can be shown by adjusting filter settings.", - "Volume (mL)": "Volume (mL)", - "Volume to date (L)": "Volume to date (L)", - "Warning: One or more items are scheduled to run within one hour of the FarmBot OS update time setting.": "Warning: One or more items are scheduled to run within one hour of the FarmBot OS update time setting.", - "Water curves": "Water curves", - "webcams": "webcams", - "What is your preferred language?": "What is your preferred language?", - "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, click the sort icon to open the sort menu and select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, click the sort icon to open the sort menu and select one of the available Sort By methods. Once you have chosen a method, advance the tour.", - "WiFi": "WiFi", - "With the FarmBot still powered off, manually move the gantry and cross-slide roughly 150mm away from the X and Y axis hardstops. In other words, position the gantry partway along the tracks and position the cross-slide partway across the gantry main beam. Rotate the leadscrew by hand to position the Z-axis fully raised up.": "With the FarmBot still powered off, manually move the gantry and cross-slide roughly 150mm away from the X and Y axis hardstops. In other words, position the gantry partway along the tracks and position the cross-slide partway across the gantry main beam. Rotate the leadscrew by hand to position the Z-axis fully raised up.", - "WRITE\\": "WRITE\\", - "X": "X", - "x-axis acceleration (mm)": "x-axis acceleration (mm)", - "x-axis maximum speed (mm/s)": "x-axis maximum speed (mm/s)", - "x-axis minimum speed (mm/s)": "x-axis minimum speed (mm/s)", - "x-axis motor current (%)": "x-axis motor current (%)", - "X-max bleed": "X-max bleed", - "X-min bleed": "X-min bleed", - "Y": "Y", - "y-axis acceleration (mm)": "y-axis acceleration (mm)", - "y-axis maximum speed (mm/s)": "y-axis maximum speed (mm/s)", - "y-axis minimum speed (mm/s)": "y-axis minimum speed (mm/s)", - "y-axis motor current (%)": "y-axis motor current (%)", - "Y-max bleed": "Y-max bleed", - "Y-min bleed": "Y-min bleed", - "z": "z", - "Z": "Z", - "z-axis acceleration (mm)": "z-axis acceleration (mm)", - "z-axis maximum speed (mm/s)": "z-axis maximum speed (mm/s)", - "z-axis minimum speed (mm/s)": "z-axis minimum speed (mm/s)", - "z-axis motor current (%)": "z-axis motor current (%)" - }, - "other_translations": { - "ACCELERATE FOR (steps)": "加速 (步骤)", - "active": "活动", - "Add": "添加", - "Add Command": "添加命令", - "Add Farm Event": "添加农场事件", - "ALLOW NEGATIVES": "允许负", - "Bot ready": "机器人准备", - "CALIBRATE {{axis}}": "校正 {{轴}}", - "CALIBRATION": "校准", - "calling FarmBot with credentials": "调用FarmBot与凭证", - "Check that the camera is plugged in correctly to either a Raspberry Pi USB port (Express v1.0 kits and all Genesis kits) or into one of the vertically oriented USB ports on the Farmduino (Express v1.1 kits). For cameras with a 90 degree intermediary connector at the cross-slide, ensure the connectors are fully connected.": "检查相机是否正确插入 Raspberry Pi USB 端口(Express v1.0 套件和所有 Genesis 套件)或 Farmduino 上的垂直 USB 端口之一(Express v1.1 套件)。对于在横向滑动处具有 90 度中间连接器的相机,请确保连接器已完全连接。", - "Choose a species": "选择一个种类", - "Completed jobs older than five minutes may be cleared upon refresh": "超过五分钟的已完成作业可能会在刷新时被清除", - "Confirm Password": "确认密码", - "CONTROLLER": "控制器", - "Copy": "复制", - "Could not download sync data": "无法下载同步数据", - "Crop Info": "作物信息", - "Current position": "当前位置", - "Customize which Action or Sequence you want FarmBot to execute when you press Button 3, 4, or 5 on the electronics box. To start, we recommend setting Button 5 to the 'Find Home' sequence. You can change this later from the controls panel.": "自定义当您按下电子盒上的按钮 3、4 或 5 时 FarmBot 执行的操作或序列。首先,我们建议将按钮 5 设置为“查找主页”序列。您可以稍后从控制面板更改此设置。", - "Default plant depth": "默认植物深度", - "DELETE ACCOUNT": "删除帐户", - "Delete all created points": "删除所有已创建的点", - "Delete all created weeds": "删除所有已创建的杂草", - "Delete all of the points created through this panel.": "删除通过此面板创建的所有点。", - "Delete all of the weeds created through this panel.": "删除通过此面板创建的所有杂草。", - "Delete all the points you have created?": "删除您创建的所有点?", - "Delete all the weeds you have created?": "删除您创建的所有杂草?", - "Delete multiple": "删除多个", - "Delete this plant": "删除这个植物", - "Designer": "设计师", - "DEVICE": "装置", - "Did FarmBot's motors power back on? (Try moving the Y-axis by hand)": "FarmBot 的电机是否重新启动?(尝试手动移动 Y 轴)", - "downloading device credentials": "下载设备凭证", - "Drag and drop into map": "拖放到地图上", - "DRAG STEP HERE": "拖一步", - "Duration": "持续时间", - "EDIT": "编辑工作", - "Edit Farm Event": "编辑农场事件", - "Edit Sequence": "编辑序列", - "ENABLE ENCODERS": "编码器", - "Error establishing socket connection": "建立套接字连接错误", - "Execute Script": "执行脚本", - "EXECUTE SCRIPT": "执行脚本", - "EXECUTE SEQUENCE": "执行序列", - "Factory Reset": "恢复出场设置", - "Farm Events": "农场事件", - "Filters active": "过滤器已激活", - "Firmware value from your choice in the dropdown to the left, as understood by the Web App.": "Web应用程序理解的下拉菜单中选择的固件值。", - "Flash FarmBot's SD card with FarmBot OS and re-insert it.": "使用FarmBot操作系统刷新FarmBot的SD卡并重新插入。", - "Forgot Password": "忘记密码", - "Grid and Row Planting": "网格和行种植", - "I agree to the terms of use": "我同意使用条款", - "I do not know where to get FarmBot OS": "我不知道在哪里获取FarmBot操作系统", - "If not using a webcam, use this setting to remove the widget from the Controls panel.": "如果不使用摄像头,请使用此设置从控制面板中移除小部件。", - "If Statement": "条件语句", - "IF STATEMENT": "条件语句", - "Import coordinates from": "进口坐标", - "initiating connection": "初始化连接", - "Inspect the wood raised bed (Express kits) or track extrusions (Genesis kits) for bumps. Use sand paper to smooth out imperfections.": "检查木制高床(Express套件)或轨道挤压件(Genesis套件)是否有凹凸。使用砂纸平滑不完美的地方。", - "Installing FarmBot OS documentation": "安装FarmBot操作系统文档", - "INVERT ENDPOINTS": "反转端口", - "INVERT MOTORS": "反转电机", - "Is the SD card with FarmBot OS installed?": "是否已安装FarmBot操作系统的SD卡?", - "LENGTH (m)": "长度(m)", - "low": "低", - "Motor Current": "电机电流", - "Motor current in milliamps. (default: x: {{ x }}, y: {{ y }}, z: {{ z }})": "电机电流(毫安)。 (默认值:x: {{ x }}, y: {{ y }}, z: {{ z }})", - "Motor position plot": "电机位置图", - "Move Absolute": "绝对移动", - "MOVE ABSOLUTE": "绝对移动", - "MOVE AMOUNT (mm)": "移动距离 (mm)", - "MOVE RELATIVE": "相对移动", - "NAME": "名称", - "NETWORK": "网络", - "Network Quality": "网络质量", - "never connected to device": "没有连接到设备", - "New regimen ": "新日程", - "new sequence {{ num }}": "新序列 {{ num }}", - "no active jobs": "没有活动任务", - "normal": "正常", - "Not Connected to bot": "没有连接到机器人", - "occurred": "发生", - "Page Not Found.": "页面未找到。", - "Pin {{num}}": "引脚 {{num}}", - "Pin Mode": "引脚模式", - "Pin Number": "引脚数", - "pinned sequences": "固定的序列", - "Plant Info": "工厂信息", - "Position (mm)": "位置(毫米)", - "Presets": "预设", - "Quiet Mode": "安静模式", - "Read Pin": "读出引脚", - "READ PIN": "读出引脚", - "Regimen Name": "方案名称", - "Repeats Every": "每次重复序列", - "RESTART FARMBOT": "重启FARMBOT", - "SAVE": "保存", - "SD card": "SD卡", - "Select an action": "选择一个动作", - "SEND MESSAGE": "发送信息", - "Send Password reset": "发送密码重置", - "Server Port": "服务器端口", - "Server URL": "服务器URL", - "show": "显示", - "show all": "显示全部", - "SHUTDOWN FARMBOT": "关闭FARMBOT", - "SLOT": "位置", - "Socket Connection Established": "套接字连接建立", - "Sowing Method": "播种方法", - "Starting X": "起始X", - "starting Y": "起始Y", - "STATUS": "地位", - "Sun Requirements": "阳光需求", - "Sync Required": "同步要求", - "TAKE PHOTO": "拍照", - "TEST": "测试", - "This is the connectivity popup. Click it to view information about the connection between your web browser, your FarmBot, and the FarmBot web app servers. Whenever your FarmBot is online and ready for action, you will see a green checkmark.": "这是连接弹出窗口。点击它查看您的网络浏览器、FarmBot和FarmBot网络应用服务器之间的连接信息。每当您的FarmBot在线并准备好操作时,您将看到一个绿色勾号。", - "This is the controls panel. Here you can control your FarmBot in realtime by pressing the movement arrow buttons, toggling peripherals, and executing pinned sequences. You can also view current status information about your FarmBot including its position and an optional webcam stream.": "这是控制面板。在这里,您可以通过按移动箭头按钮、切换外设和执行固定的序列来实时控制您的FarmBot。您还可以查看有关FarmBot的当前状态信息,包括其位置和可选的网络摄像头流。", - "This is the weed detector toggle. When turned ON, your FarmBot will take and process photos for weeds after every sequence execution.": "这是杂草探测器开关。开启时,您的FarmBot将在每次序列执行后拍摄和处理杂草照片。", - "This is the weeds panel. Here you can view and manage all of the weeds in your garden detected by FarmBot. Mousing over a weed in the list will highlight it in the map and vice versa. Clicking a weed will open up the weed details panel where you can edit it. Pressing the weed + button will allow you to add a weed manually.": "这是杂草面板。在这里,您可以查看和管理FarmBot检测到的花园中的所有杂草。在列表中将鼠标悬停在某个杂草上时,它将在地图中高亮显示,反之亦然。点击杂草将打开杂草详细信息面板,您可以在其中进行编辑。按下杂草+按钮将允许您手动添加杂草。", - "TIMEOUT AFTER (seconds)": "超时后 (秒)", - "To add a grid or row of plants, scroll to the bottom of the panel, enter values into the grid and row planting fields and click PREVIEW. The previewed plants will show in the map in grayscale. Make adjustments as necessary and when you are happy with the preview, click SAVE. Then advance the tour.": "要添加一排或一行植物,请滚动到面板底部,在网格和行种植字段中输入数值并点击预览。预览的植物将在地图中以灰度显示。根据需要进行调整,当对预览满意时,点击保存。然后继续浏览。", - "toggle logs": "切换日志", - "TOOL": "工具", - "TOOL NAME": "工具名称", - "TOOLBAY NAME": "工具名字", - "Tried to delete Farm Event": "试图删除农场事件", - "Tried to delete plant": "试图删除植物", - "Tried to save Farm Event": "试图保存农场件", - "Tried to save plant": "试图保存植物", - "Tried to update Farm Event": "试图更新农场事件", - "ttyUSB0 (recommended for Express v1.1)": "ttyUSB0(推荐用于Express v1.1)", - "Unable to delete sequence": "无法删除序列", - "Unable to download device credentials": "无法下载设备凭据", - "UPDATE": "更新", - "View all logs": "查看所有日志", - "View FarmBot's current location using the axis position display.": "使用轴位置显示查看FarmBot的当前位置。", - "View recent log messages here. More detailed log messages can be shown by adjusting filter settings.": "在此查看最近的日志消息。通过调整过滤器设置可以显示更详细的日志消息。", - "WAIT": "等候", - "Webcam Feeds": "网络摄像头供稿", - "When you program your FarmBot to perform an operation on a group of plants, you may want to control the ordering at which FarmBot visits each plant in the group. To do this, select one of the available Sort By methods. Once you have chosen a method, advance the tour.": "当您将FarmBot编程执行对一组植物的操作时,您可能希望控制FarmBot访问组中每个植物的顺序。要做到这一点,请选择其中一个可用的排序方法。选择了一种方法后,继续导览。", - "Write Pin": "写入引脚", - "WRITE PIN": "写入引脚", - "x-axis acceleration": "x轴加速度", - "x-axis maximum speed": "x轴最大速度", - "x-axis minimum speed": "x轴最小速度", - "x-axis motor current": "x轴电机电流", - "y-axis acceleration": "Y轴加速度", - "y-axis maximum speed": "Y轴最大速度", - "y-axis minimum speed": "Y轴最小速度", - "y-axis motor current": "Y轴电机电流", - "z-axis acceleration": "z轴加速度", - "z-axis maximum speed": "z轴最大速度", - "z-axis minimum speed": "z轴最小速度", - "z-axis motor current": "z轴电机电流" - } + "other_translations": {} } From b8fbb18bbc9aab3c8ad9f348dd6bfedc4349df25 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Thu, 11 Sep 2025 14:06:14 -0700 Subject: [PATCH 03/53] add 3D point group order visual --- .../__tests__/three_d_garden_map_test.tsx | 33 ++--- frontend/farm_designer/index.tsx | 2 + frontend/farm_designer/state_to_props.ts | 7 +- frontend/farm_designer/three_d_garden_map.tsx | 7 +- .../__tests__/group_order_visual_test.tsx | 122 ++++++++++++++++++ frontend/three_d_garden/elements/text.tsx | 3 +- frontend/three_d_garden/garden_model.tsx | 13 +- .../three_d_garden/group_order_visual.tsx | 91 +++++++++++++ frontend/three_d_garden/index.tsx | 8 +- 9 files changed, 264 insertions(+), 22 deletions(-) create mode 100644 frontend/three_d_garden/__tests__/group_order_visual_test.tsx create mode 100644 frontend/three_d_garden/group_order_visual.tsx diff --git a/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx b/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx index e18a05f48..cfd8737be 100644 --- a/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx +++ b/frontend/farm_designer/__tests__/three_d_garden_map_test.tsx @@ -25,6 +25,13 @@ import { FirmwareHardware } from "farmbot"; import { CROPS } from "../../crops/constants"; import { fakeDevice } from "../../__test_support__/resource_index_builder"; +const EMPTY_PROPS = { + mapPoints: [], + weeds: [], + allPoints: [], + groups: [], +}; + describe("", () => { const fakeProps = (): ThreeDGardenMapProps => ({ mapTransformProps: fakeMapTransformProps(), @@ -44,6 +51,8 @@ describe("", () => { negativeZ: false, mountedToolName: undefined, peripheralValues: [], + allPoints: [], + groups: [], }); it("converts props", () => { @@ -108,8 +117,7 @@ describe("", () => { y: 201, }], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); @@ -122,8 +130,7 @@ describe("", () => { config: expect.objectContaining({ x: 0, y: 0, z: 0 }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); @@ -137,8 +144,7 @@ describe("", () => { config: expect.objectContaining({ negativeZ: true, x: 0, y: 0, z: -100 }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); @@ -157,8 +163,7 @@ describe("", () => { }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); const callArgs = (ThreeDGarden as jest.Mock).mock.calls[0][0]; expect(callArgs.config.sunInclination).toBeCloseTo(28.64788975654116, 4); @@ -179,8 +184,7 @@ describe("", () => { }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); @@ -197,8 +201,7 @@ describe("", () => { config: expect.objectContaining({ kitVersion }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); @@ -211,8 +214,7 @@ describe("", () => { config: expect.objectContaining({ waterFlow: true }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); @@ -233,8 +235,7 @@ describe("", () => { config: expect.objectContaining({ rotary: exp }), threeDPlants: [], addPlantProps: expect.any(Object), - mapPoints: [], - weeds: [], + ...EMPTY_PROPS, }, {}); }); }); diff --git a/frontend/farm_designer/index.tsx b/frontend/farm_designer/index.tsx index 27ae5410c..2d2121444 100755 --- a/frontend/farm_designer/index.tsx +++ b/frontend/farm_designer/index.tsx @@ -233,6 +233,8 @@ export class RawFarmDesigner mountedToolName={this.props.mountedToolInfo.name} botPosition={this.props.botLocationData.position} peripheralValues={this.props.peripheralValues} + allPoints={this.props.allPoints} + groups={this.props.groups} getWebAppConfigValue={this.props.getConfigValue} /> :
{ const label = x.body.label; @@ -134,7 +137,7 @@ export function mapStateToProps(props: Everything): FarmDesignerProps { designer: props.resources.consumers.farm_designer, genericPoints, weeds, - allPoints: selectAllPoints(props.resources.index), + allPoints, tools: selectAllTools(props.resources.index), toolSlots: joinToolsAndSlot(props.resources.index), hoveredPlant, @@ -151,7 +154,7 @@ export function mapStateToProps(props: Everything): FarmDesignerProps { getConfigValue, sensorReadings, sensors: selectAllSensors(props.resources.index), - groups: selectAllPointGroups(props.resources.index), + groups, mountedToolInfo, visualizedSequenceBody, logs: selectAllLogs(props.resources.index), diff --git a/frontend/farm_designer/three_d_garden_map.tsx b/frontend/farm_designer/three_d_garden_map.tsx index 39bf69d72..a24c96fdb 100644 --- a/frontend/farm_designer/three_d_garden_map.tsx +++ b/frontend/farm_designer/three_d_garden_map.tsx @@ -7,7 +7,8 @@ import { import { clone } from "lodash"; import { BotPosition, SourceFbosConfig } from "../devices/interfaces"; import { - ConfigurationName, TaggedCurve, TaggedGenericPointer, TaggedWeedPointer, + ConfigurationName, TaggedCurve, TaggedGenericPointer, TaggedPoint, + TaggedPointGroup, TaggedWeedPointer, } from "farmbot"; import { DesignerState } from "./interfaces"; import { GetWebAppConfigValue } from "../config_storage/actions"; @@ -40,6 +41,8 @@ export interface ThreeDGardenMapProps { mountedToolName: string | undefined; peripheralValues: PeripheralValues; device: DeviceAccountSettings; + allPoints: TaggedPoint[]; + groups: TaggedPointGroup[]; } export const ThreeDGardenMap = (props: ThreeDGardenMapProps) => { @@ -148,6 +151,8 @@ export const ThreeDGardenMap = (props: ThreeDGardenMapProps) => { weeds={props.weeds} toolSlots={props.toolSlots} mountedToolName={props.mountedToolName} + allPoints={props.allPoints} + groups={props.groups} addPlantProps={{ gridSize: props.mapTransformProps.gridSize, dispatch: props.dispatch, diff --git a/frontend/three_d_garden/__tests__/group_order_visual_test.tsx b/frontend/three_d_garden/__tests__/group_order_visual_test.tsx new file mode 100644 index 000000000..ef60dd695 --- /dev/null +++ b/frontend/three_d_garden/__tests__/group_order_visual_test.tsx @@ -0,0 +1,122 @@ +import { + fakePlant, fakePointGroup, +} from "../../__test_support__/fake_state/resources"; + +let mockGroup: TaggedPointGroup | undefined = fakePointGroup(); +jest.mock("../../point_groups/group_detail", () => ({ + findGroupFromUrl: () => mockGroup, +})); + +let mockGroupPoints = [fakePlant(), fakePlant()]; +jest.mock("../../point_groups/criteria/apply", () => ({ + pointsSelectedByGroup: () => mockGroupPoints, +})); + +jest.mock("../../point_groups/point_group_sort", () => ({ + sortGroupBy: jest.fn((_method, pts) => pts), +})); + +import React from "react"; +import { render } from "@testing-library/react"; +import { + areGroupOrderPropsEqual, + GroupOrderProps, + GroupOrderVisual, + GroupOrderVisualProps, +} from "../group_order_visual"; +import { INITIAL } from "../config"; +import { clone } from "lodash"; +import { TaggedPointGroup } from "farmbot"; +import { sortGroupBy } from "../../point_groups/point_group_sort"; + +describe("", () => { + const fakeProps = (): GroupOrderVisualProps => ({ + allPoints: [], + groups: [], + config: clone(INITIAL), + getZ: () => 0, + tryGroupSortType: undefined, + }); + + it("renders order visual: group sort setting", () => { + const p = fakeProps(); + mockGroup = fakePointGroup(); + mockGroup.body.sort_type = "random"; + mockGroupPoints = [fakePlant(), fakePlant()]; + p.tryGroupSortType = undefined; + const { container } = render(); + expect(container).toContainHTML("group-order"); + expect(sortGroupBy).toHaveBeenCalledWith("random", mockGroupPoints); + }); + + it("renders order visual: sort preview", () => { + const p = fakeProps(); + mockGroup = fakePointGroup(); + mockGroup.body.sort_type = "random"; + mockGroupPoints = [fakePlant(), fakePlant()]; + p.tryGroupSortType = "nn"; + const { container } = render(); + expect(container).toContainHTML("group-order"); + expect(sortGroupBy).toHaveBeenCalledWith("nn", mockGroupPoints); + }); + + it("doesn't render order visual when no group is found", () => { + const p = fakeProps(); + mockGroup = undefined; + mockGroupPoints = [fakePlant(), fakePlant()]; + const { container } = render(); + expect(container).not.toContainHTML("group-order"); + }); + + it("doesn't render order visual when groupPoints is empty", () => { + const p = fakeProps(); + mockGroup = fakePointGroup(); + mockGroupPoints = []; + const { container } = render(); + expect(container).not.toContainHTML("group-order"); + }); +}); + +describe("areGroupOrderPropsEqual()", () => { + const fakeProps = (): GroupOrderProps => ({ + config: clone(INITIAL), + getZ: jest.fn(), + tryGroupSortType: undefined, + sortType: "nn", + groupPoints: [], + }); + + it("returns equal", () => { + const pp = fakeProps(); + const np = fakeProps(); + expect(areGroupOrderPropsEqual(pp, np)).toBeTruthy(); + }); + + it("returns not equal: config", () => { + const pp = fakeProps(); + const np = fakeProps(); + np.config.exaggeratedZ = true; + expect(areGroupOrderPropsEqual(pp, np)).toBeFalsy(); + }); + + it("returns not equal: sortType", () => { + const pp = fakeProps(); + const np = fakeProps(); + np.sortType = "random"; + expect(areGroupOrderPropsEqual(pp, np)).toBeFalsy(); + }); + + it("returns not equal: trySortType", () => { + const pp = fakeProps(); + const np = fakeProps(); + np.tryGroupSortType = "nn"; + expect(areGroupOrderPropsEqual(pp, np)).toBeFalsy(); + }); + + it("returns not equal: points", () => { + const pp = fakeProps(); + const np = fakeProps(); + np.groupPoints = [fakePlant()]; + expect(areGroupOrderPropsEqual(pp, np)).toBeFalsy(); + }); +}); diff --git a/frontend/three_d_garden/elements/text.tsx b/frontend/three_d_garden/elements/text.tsx index 5b4a02045..4f672bd91 100644 --- a/frontend/three_d_garden/elements/text.tsx +++ b/frontend/three_d_garden/elements/text.tsx @@ -12,6 +12,7 @@ export interface TextProps { name?: string; visible?: boolean; renderOrder?: RenderOrder; + thickness?: number; } export const Text = (props: TextProps) => { @@ -23,7 +24,7 @@ export const Text = (props: TextProps) => { {props.children} diff --git a/frontend/three_d_garden/garden_model.tsx b/frontend/three_d_garden/garden_model.tsx index f57651078..64526878f 100644 --- a/frontend/three_d_garden/garden_model.tsx +++ b/frontend/three_d_garden/garden_model.tsx @@ -25,7 +25,9 @@ import { AmbientLight, AxesHelper, Group, MeshBasicMaterial, } from "./components"; import { ICON_URLS } from "../crops/constants"; -import { TaggedGenericPointer, TaggedWeedPointer } from "farmbot"; +import { + TaggedGenericPointer, TaggedPoint, TaggedPointGroup, TaggedWeedPointer, +} from "farmbot"; import { BooleanSetting } from "../session_keys"; import { SlotWithTool } from "../resources/interfaces"; import { cameraInit } from "./camera"; @@ -34,6 +36,7 @@ import { computeSurface } from "./triangles"; import { BigDistance } from "./constants"; import { precomputeTriangles, getZFunc } from "./triangle_functions"; import { Visualization } from "./visualization"; +import { GroupOrderVisual } from "./group_order_visual"; const AnimatedGroup = animated(Group); @@ -48,6 +51,8 @@ export interface GardenModelProps { toolSlots?: SlotWithTool[]; mountedToolName?: string | undefined; startTimeRef?: React.RefObject; + allPoints?: TaggedPoint[]; + groups?: TaggedPointGroup[]; } // eslint-disable-next-line complexity @@ -216,6 +221,12 @@ export const GardenModel = (props: GardenModelProps) => { getZ={getZ} dispatch={dispatch} />)} + diff --git a/frontend/three_d_garden/group_order_visual.tsx b/frontend/three_d_garden/group_order_visual.tsx new file mode 100644 index 000000000..4aa1e5f35 --- /dev/null +++ b/frontend/three_d_garden/group_order_visual.tsx @@ -0,0 +1,91 @@ +import { Billboard, Cylinder, Line } from "@react-three/drei"; +import React from "react"; +import { threeSpace, zZero as zZeroFunc } from "./helpers"; +import { Config } from "./config"; +import { PointGroupSortType } from "farmbot/dist/resources/api_resources"; +import { sortGroupBy } from "../point_groups/point_group_sort"; +import { TaggedPoint, TaggedPointGroup } from "farmbot"; +import { findGroupFromUrl } from "../point_groups/group_detail"; +import { pointsSelectedByGroup } from "../point_groups/criteria/apply"; +import { Group, MeshPhongMaterial } from "./components"; +import { Text } from "./elements"; +import { RenderOrder } from "./constants"; + +interface CommonProps { + config: Config; + getZ(x: number, y: number): number; + tryGroupSortType: PointGroupSortType | undefined; +} + +export interface GroupOrderVisualProps extends CommonProps { + allPoints: TaggedPoint[]; + groups: TaggedPointGroup[]; +} + +export const GroupOrderVisual = (props: GroupOrderVisualProps) => { + const group = findGroupFromUrl(props.groups); + if (!group) { return; } + const groupPoints = pointsSelectedByGroup(group, props.allPoints); + if (groupPoints.length == 0) { return; } + return ; +}; + +export interface GroupOrderProps extends CommonProps { + sortType: PointGroupSortType; + groupPoints: TaggedPoint[]; +} + +export const areGroupOrderPropsEqual = + (prev: GroupOrderProps, next: GroupOrderProps) => { + if (prev.config.exaggeratedZ != next.config.exaggeratedZ) { return false; } + if (prev.sortType != next.sortType) { return false; } + if (prev.tryGroupSortType != next.tryGroupSortType) { return false; } + const uuids = (pts: TaggedPoint[]) => JSON.stringify(pts.map(p => p.uuid)); + if (uuids(prev.groupPoints) != uuids(next.groupPoints)) { return false; } + return true; + }; + +const GroupOrder = (props: GroupOrderProps) => { + const { sortType, groupPoints, config, getZ, tryGroupSortType } = props; + const sortedPoints = sortGroupBy(tryGroupSortType || sortType, groupPoints); + const positions: [number, number, number][] = sortedPoints + .map(p => [ + threeSpace(p.body.x, config.bedLengthOuter) + config.bedXOffset, + threeSpace(p.body.y, config.bedWidthOuter) + config.bedYOffset, + zZeroFunc(config) + getZ(p.body.x, p.body.y) + 25, + ]); + return + + {positions.map((p, i) => + + + + + + {i + 1} + + )} + ; +}; + +const MemoGroupOrder = React.memo(GroupOrder, areGroupOrderPropsEqual); diff --git a/frontend/three_d_garden/index.tsx b/frontend/three_d_garden/index.tsx index c0e884d49..4efbbf375 100644 --- a/frontend/three_d_garden/index.tsx +++ b/frontend/three_d_garden/index.tsx @@ -4,7 +4,9 @@ import { Config } from "./config"; import { GardenModel } from "./garden_model"; import { noop } from "lodash"; import { AddPlantProps } from "./bed"; -import { TaggedGenericPointer, TaggedWeedPointer } from "farmbot"; +import { + TaggedGenericPointer, TaggedPoint, TaggedPointGroup, TaggedWeedPointer, +} from "farmbot"; import { SlotWithTool } from "../resources/interfaces"; import { NavigateFunction } from "react-router"; import { FilePath, Path } from "../internal_urls"; @@ -28,6 +30,8 @@ export interface ThreeDGardenProps { weeds: TaggedWeedPointer[]; toolSlots?: SlotWithTool[]; mountedToolName?: string; + allPoints?: TaggedPoint[]; + groups?: TaggedPointGroup[]; } export const ThreeDGarden = (props: ThreeDGardenProps) => { @@ -53,6 +57,8 @@ export const ThreeDGarden = (props: ThreeDGardenProps) => { weeds={props.weeds} toolSlots={props.toolSlots} mountedToolName={props.mountedToolName} + allPoints={props.allPoints} + groups={props.groups} addPlantProps={props.addPlantProps} /> From e2cba0627aa419a4305c4788f49236cf34957ec0 Mon Sep 17 00:00:00 2001 From: gabrielburnworth Date: Tue, 16 Sep 2025 10:14:27 -0700 Subject: [PATCH 04/53] improve point group ui --- .../farm_designer/farm_designer_panels.scss | 2 +- frontend/point_groups/criteria/show.tsx | 26 ++++++++++--------- .../__tests__/group_order_visual_test.tsx | 8 +++--- .../three_d_garden/group_order_visual.tsx | 17 ++++++++---- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/frontend/css/farm_designer/farm_designer_panels.scss b/frontend/css/farm_designer/farm_designer_panels.scss index 7999514ca..e4ae09c26 100644 --- a/frontend/css/farm_designer/farm_designer_panels.scss +++ b/frontend/css/farm_designer/farm_designer_panels.scss @@ -601,7 +601,7 @@ display: inline-block; font-size: 1.2rem; font-weight: bold; - color: $black; + color: var(--text-color); } } .number-eq-criteria, diff --git a/frontend/point_groups/criteria/show.tsx b/frontend/point_groups/criteria/show.tsx index 29e6890de..5d16f8cf9 100644 --- a/frontend/point_groups/criteria/show.tsx +++ b/frontend/point_groups/criteria/show.tsx @@ -35,18 +35,20 @@ export class EqCriteriaSelection
{key}

=

- {values.map((value, valueIndex) => - - - - )} +
+ {values.map((value, valueIndex) => + + + + )} +
)}
; } diff --git a/frontend/three_d_garden/__tests__/group_order_visual_test.tsx b/frontend/three_d_garden/__tests__/group_order_visual_test.tsx index ef60dd695..b7c185750 100644 --- a/frontend/three_d_garden/__tests__/group_order_visual_test.tsx +++ b/frontend/three_d_garden/__tests__/group_order_visual_test.tsx @@ -1,5 +1,7 @@ import { - fakePlant, fakePointGroup, + fakePlant, fakePoint, fakePointGroup, + fakeToolSlot, + fakeWeed, } from "../../__test_support__/fake_state/resources"; let mockGroup: TaggedPointGroup | undefined = fakePointGroup(); @@ -7,7 +9,7 @@ jest.mock("../../point_groups/group_detail", () => ({ findGroupFromUrl: () => mockGroup, })); -let mockGroupPoints = [fakePlant(), fakePlant()]; +let mockGroupPoints = [fakePlant(), fakeToolSlot(), fakePoint(), fakeWeed()]; jest.mock("../../point_groups/criteria/apply", () => ({ pointsSelectedByGroup: () => mockGroupPoints, })); @@ -42,7 +44,7 @@ describe("", () => { const p = fakeProps(); mockGroup = fakePointGroup(); mockGroup.body.sort_type = "random"; - mockGroupPoints = [fakePlant(), fakePlant()]; + mockGroupPoints = [fakePlant(), fakeToolSlot(), fakePoint(), fakeWeed()]; p.tryGroupSortType = undefined; const { container } = render(); expect(container).toContainHTML("group-order"); diff --git a/frontend/three_d_garden/group_order_visual.tsx b/frontend/three_d_garden/group_order_visual.tsx index 4aa1e5f35..24fa57abf 100644 --- a/frontend/three_d_garden/group_order_visual.tsx +++ b/frontend/three_d_garden/group_order_visual.tsx @@ -51,11 +51,18 @@ const GroupOrder = (props: GroupOrderProps) => { const { sortType, groupPoints, config, getZ, tryGroupSortType } = props; const sortedPoints = sortGroupBy(tryGroupSortType || sortType, groupPoints); const positions: [number, number, number][] = sortedPoints - .map(p => [ - threeSpace(p.body.x, config.bedLengthOuter) + config.bedXOffset, - threeSpace(p.body.y, config.bedWidthOuter) + config.bedYOffset, - zZeroFunc(config) + getZ(p.body.x, p.body.y) + 25, - ]); + .map(p => { + const x = threeSpace(p.body.x, config.bedLengthOuter) + config.bedXOffset; + const y = threeSpace(p.body.y, config.bedWidthOuter) + config.bedYOffset; + const zZero = zZeroFunc(config); + if (p.body.pointer_type == "ToolSlot") { + return [x, y, zZero + p.body.z + 25]; + } + if (p.body.pointer_type == "GenericPointer") { + return [x, y, zZero + getZ(p.body.x, p.body.y) + 75]; + } + return [x, y, zZero + getZ(p.body.x, p.body.y) + p.body.radius + 10]; + }); return Date: Wed, 17 Sep 2025 09:24:58 -0700 Subject: [PATCH 05/53] combine jobs and logs tabs --- frontend/css/panels/jobs.scss | 49 +++++++++++++++++++++--- frontend/css/panels/logs.scss | 36 +++++++++-------- frontend/devices/__tests__/jobs_test.tsx | 30 ++------------- frontend/devices/jobs.tsx | 22 +++-------- frontend/logs/__tests__/index_test.tsx | 2 + frontend/logs/components/logs_table.tsx | 41 ++++++++++++-------- frontend/logs/index.tsx | 2 +- 7 files changed, 101 insertions(+), 81 deletions(-) diff --git a/frontend/css/panels/jobs.scss b/frontend/css/panels/jobs.scss index 8ad921096..01f741f2b 100644 --- a/frontend/css/panels/jobs.scss +++ b/frontend/css/panels/jobs.scss @@ -2,7 +2,48 @@ @use "sass:color"; .jobs-and-logs { - margin-top: 1rem; + grid-template-rows: 10rem 25rem; + height: 35.5rem; + + .jobs-section, + .logs-section { + display: flex; + flex-direction: column; + overflow: hidden; + } + + .jobs-section { + border-bottom: 2px solid var(--border-color); + .jobs-tab { + flex: 1; + overflow-y: auto; + } + } + + .logs-section { + .logs-tab { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; + + .search-row { + margin: 0 1rem; + } + + .logs-table-wrapper { + flex: 1; + display: flex; + flex-direction: column; + overflow: hidden; + + .logs-table { + max-height: none; + height: 100%; + } + } + } + } } .jobs-panel { @@ -16,8 +57,8 @@ } .jobs-tab { - overflow-y: scroll; - max-height: 26rem; + overflow-y: auto; + height: 100%; &.bp6-popover { margin-top: 1.5rem; } @@ -34,7 +75,6 @@ position: sticky; top: 0; z-index: 999; - background: var(--main-bg); } tr { transform: scale(1); @@ -72,6 +112,5 @@ width: min(500px, 100vw - 1rem); max-height: calc(100vh - 10rem); overflow: hidden; - padding-top: 1rem; } } diff --git a/frontend/css/panels/logs.scss b/frontend/css/panels/logs.scss index 2ef734e98..f7b85c70d 100644 --- a/frontend/css/panels/logs.scss +++ b/frontend/css/panels/logs.scss @@ -6,10 +6,9 @@ .fa-trash { display: none; } - tr { - vertical-align: top; + tbody tr { &:hover { - background: $translucent2_white; + background: var(--secondary-bg); .fa-trash { display: inline; margin-left: 6px; @@ -21,6 +20,9 @@ } } } + tr { + vertical-align: top; + } .fa-filter { border: 1px black solid; border-radius: 50%; @@ -52,12 +54,6 @@ font-weight: bold; } } - .notice { - font-style: italic; - text-align: center; - font-size: 1.4rem; - padding: 1rem; - } } .logs-filter-menu { @@ -93,6 +89,8 @@ display: block; overflow: scroll; max-height: 42rem; + padding-top: 0.5rem; + border-radius: 0; .log-verbosity-saucer .saucer { text-align: center; margin-left: 6px; @@ -103,15 +101,11 @@ button { float: none; } + table { + border-radius: 0; + } thead { text-align: left; - background: var(--main-bg); - } - thead, - th { - position: sticky; - top: 0; - z-index: 999; } td { word-break: break-word; @@ -132,6 +126,16 @@ td:nth-child(4) { white-space: nowrap; } + + .logs-retention-row { + td { + font-style: italic; + text-align: center; + padding: 0.7rem 1rem 1rem; + white-space: normal; + background: var(--secondary-bg); + } + } } .link-to-logs { diff --git a/frontend/devices/__tests__/jobs_test.tsx b/frontend/devices/__tests__/jobs_test.tsx index b26a830cc..b251e0d94 100644 --- a/frontend/devices/__tests__/jobs_test.tsx +++ b/frontend/devices/__tests__/jobs_test.tsx @@ -10,7 +10,6 @@ import { fakeBytesJob, fakePercentJob } from "../../__test_support__/fake_bot_da import { fakeTimeSettings } from "../../__test_support__/fake_time_settings"; import { bot } from "../../__test_support__/fake_state/bot"; import { jobsState } from "../../__test_support__/panel_state"; -import { Actions } from "../../constants"; import { fakeDevice } from "../../__test_support__/resource_index_builder"; describe("", () => { @@ -50,31 +49,10 @@ describe("", () => { device: fakeDevice(), }); - it("renders jobs", () => { - const p = fakeProps(); - p.jobsPanelState.jobs = true; - p.jobsPanelState.logs = false; - const wrapper = mount(); - expect(wrapper.html()).toContain("jobs-tab"); - expect(wrapper.html()).not.toContain("logs-tab"); - }); - - it("renders logs", () => { - const p = fakeProps(); - p.jobsPanelState.jobs = false; - p.jobsPanelState.logs = true; - const wrapper = mount(); - expect(wrapper.html()).not.toContain("jobs-tab"); - expect(wrapper.html()).toContain("logs-tab"); - }); - - it("sets state", () => { - const p = fakeProps(); - const wrapper = mount(); - wrapper.instance().setPanelState("logs")(); - expect(p.dispatch).toHaveBeenCalledWith({ - type: Actions.SET_JOBS_PANEL_OPTION, payload: "logs", - }); + it("renders jobs and logs", () => { + const wrapper = mount(); + expect(wrapper.find(".jobs-tab").length).toEqual(1); + expect(wrapper.find(".logs-tab").length).toEqual(1); }); }); diff --git a/frontend/devices/jobs.tsx b/frontend/devices/jobs.tsx index 241365fda..bf3112bd2 100644 --- a/frontend/devices/jobs.tsx +++ b/frontend/devices/jobs.tsx @@ -15,7 +15,6 @@ import moment from "moment"; import { betterCompact, formatTime } from "../util"; import { Color } from "../ui"; import { cloneDeep, round, sortBy } from "lodash"; -import { Actions } from "../constants"; import { BotState, SourceFbosConfig } from "./interfaces"; import { GetWebAppConfigValue } from "../config_storage/actions"; import { LogsPanel } from "../logs"; @@ -62,12 +61,6 @@ export interface JobsAndLogsProps { export class JobsAndLogs extends React.Component { - setPanelState = (key: keyof JobsAndLogsState) => () => - this.props.dispatch({ - type: Actions.SET_JOBS_PANEL_OPTION, - payload: key, - }); - Jobs = () => { return
-
- - + return
+
+ +
+
+
- {jobs && } - {logs && }
; } } diff --git a/frontend/logs/__tests__/index_test.tsx b/frontend/logs/__tests__/index_test.tsx index 1bb4e0911..19c807369 100644 --- a/frontend/logs/__tests__/index_test.tsx +++ b/frontend/logs/__tests__/index_test.tsx @@ -53,6 +53,8 @@ describe("", () => { .map(string => expect(wrapper.text().toLowerCase()).toContain(string.toLowerCase())); verifyFilterState(wrapper, true); + expect(wrapper.find(".logs-retention-row").text().toLowerCase()) + .toContain("logs older than"); }); it("handles unknown log type", () => { diff --git a/frontend/logs/components/logs_table.tsx b/frontend/logs/components/logs_table.tsx index 0079b9191..1deba7f68 100644 --- a/frontend/logs/components/logs_table.tsx +++ b/frontend/logs/components/logs_table.tsx @@ -96,6 +96,20 @@ const LOG_TABLE_CLASS = [ /** All log messages with select data in table form for display in the app. */ export const LogsTable = (props: LogsTableProps) => { + const retentionDays = props.device.body.max_log_age_in_days || 60; + const rows = filterByVerbosity(getFilterLevel(props.state), props.logs) + .filter(bySearchTerm(props.state.searchTerm, props.timeSettings)) + .filter(log => !props.state.currentFbosOnly || !props.fbosVersion || + logVersionMatch(log, props.fbosVersion)) + .map((log: TaggedLog) => + ); + return
@@ -107,25 +121,18 @@ export const LogsTable = (props: LogsTableProps) => { - {filterByVerbosity(getFilterLevel(props.state), props.logs) - .filter(bySearchTerm(props.state.searchTerm, props.timeSettings)) - .filter(log => !props.state.currentFbosOnly || !props.fbosVersion || - logVersionMatch(log, props.fbosVersion)) - .map((log: TaggedLog) => - )} + {rows} + + + + +
+ {t("Logs older than {{ days }} days are automatically deleted", { + days: retentionDays, + })} +
-

- {t("Logs older than {{ days }} days are automatically deleted", { - days: props.device.body.max_log_age_in_days || 60, - })} -

; }; diff --git a/frontend/logs/index.tsx b/frontend/logs/index.tsx index b6961bb94..b8b9dd6d9 100644 --- a/frontend/logs/index.tsx +++ b/frontend/logs/index.tsx @@ -96,7 +96,7 @@ export class LogsPanel extends React.Component> { render() { const { dispatch, bot } = this.props; - return
+ return
Date: Wed, 17 Sep 2025 09:58:03 -0700 Subject: [PATCH 06/53] table height adjustments --- frontend/css/panels/jobs.scss | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/css/panels/jobs.scss b/frontend/css/panels/jobs.scss index 01f741f2b..e33022aed 100644 --- a/frontend/css/panels/jobs.scss +++ b/frontend/css/panels/jobs.scss @@ -2,8 +2,8 @@ @use "sass:color"; .jobs-and-logs { - grid-template-rows: 10rem 25rem; - height: 35.5rem; + grid-template-rows: 14rem 23rem; + height: 37.5rem; .jobs-section, .logs-section { @@ -64,6 +64,7 @@ } table { text-align: left; + border-radius: 0; p { padding: 1rem; } From 596b7be2c6b6db1b67dff36c8cf4b095cf170073 Mon Sep 17 00:00:00 2001 From: Rory Aronson Date: Wed, 17 Sep 2025 11:09:17 -0700 Subject: [PATCH 07/53] add option to demo the app to login page --- frontend/demo/demo_iframe.tsx | 30 ++++++----- .../__tests__/demo_login_option_test.tsx | 53 +++++++++++++++++++ frontend/front_page/demo_login_option.tsx | 36 +++++++++++++ frontend/front_page/front_page.tsx | 16 ++++-- 4 files changed, 117 insertions(+), 18 deletions(-) create mode 100644 frontend/front_page/__tests__/demo_login_option_test.tsx create mode 100644 frontend/front_page/demo_login_option.tsx diff --git a/frontend/demo/demo_iframe.tsx b/frontend/demo/demo_iframe.tsx index 9d370c64f..93f9fb1e8 100644 --- a/frontend/demo/demo_iframe.tsx +++ b/frontend/demo/demo_iframe.tsx @@ -9,7 +9,7 @@ import { Path } from "../internal_urls"; import { FBSelect } from "../ui"; import { SEED_DATA_OPTIONS, SEED_DATA_OPTIONS_DDI } from "../messages/cards"; -interface State { +export interface DemoAccountState { error: Error | undefined; stage: string; productLine: string; @@ -27,8 +27,8 @@ export const EASTER_EGG = "BIRDS AREN'T REAL"; export const WAITING_ON_API = "Planting your demo garden..."; // APPLICATION CODE ============================== -export class DemoIframe extends React.Component<{}, State> { - state: State = { +export abstract class DemoAccountBase

extends React.Component { + state: DemoAccountState = { error: undefined, stage: t("DEMO THE APP"), productLine: "genesis_1.8", @@ -69,6 +69,20 @@ export class DemoIframe extends React.Component<{}, State> { this.connectMqtt().then(this.connectApi); }; + protected abstract ok(): React.ReactNode; + + no = () => { + console.error(this.state.error); + const message = JSON.stringify(this.state.error, undefined, 2); + return

{message}: {"" + this.state.error}
; + }; + + render() { + return this.state.error ? this.no() : this.ok(); + } +} + +export class DemoIframe extends DemoAccountBase { ok = () => { const selection = this.state.productLine; return
@@ -90,14 +104,4 @@ export class DemoIframe extends React.Component<{}, State> { onChange={ddi => this.setState({ productLine: "" + ddi.value })} />
; }; - - no = () => { - console.error(this.state.error); - const message = JSON.stringify(this.state.error, undefined, 2); - return
{message}: {"" + this.state.error}
; - }; - - render() { - return this.state.error ? this.no() : this.ok(); - } } diff --git a/frontend/front_page/__tests__/demo_login_option_test.tsx b/frontend/front_page/__tests__/demo_login_option_test.tsx new file mode 100644 index 000000000..c20383208 --- /dev/null +++ b/frontend/front_page/__tests__/demo_login_option_test.tsx @@ -0,0 +1,53 @@ +let mockResponse: string | Error = "12345"; +jest.mock("axios", () => ({ + post: jest.fn(() => + typeof mockResponse === "string" + ? Promise.resolve(mockResponse) + : Promise.reject(mockResponse)), +})); + +const mockMqttClient = { + on: jest.fn((ev: string, cb: Function) => ev == "connect" && cb()), + subscribe: jest.fn(), +}; + +jest.mock("mqtt", () => ({ connect: () => mockMqttClient })); + +import React from "react"; +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { DemoLoginOption } from "../demo_login_option"; +import axios from "axios"; +import { MQTT_CHAN } from "../../demo/demo_iframe"; + +describe("", () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it("renders demo controls", () => { + mockResponse = "ok"; + render(); + expect(screen.getByRole("heading", { name: /demo the app/i })) + .toBeInTheDocument(); + expect(screen.getByRole("button", { name: /demo the app/i })) + .toBeInTheDocument(); + expect(screen.getByText(/farmbot model/i)).toBeInTheDocument(); + }); + + it("requests a demo account on click", async () => { + mockResponse = "ok"; + + render(); + const user = userEvent.setup(); + await user.click(screen.getByRole("button", { name: /demo the app/i })); + + await waitFor(() => + expect(mockMqttClient.subscribe) + .toHaveBeenCalledWith(MQTT_CHAN, expect.any(Function))); + await waitFor(() => + expect(axios.post).toHaveBeenCalledWith( + "/api/demo_account", + expect.objectContaining({ product_line: expect.any(String) }))); + }); +}); diff --git a/frontend/front_page/demo_login_option.tsx b/frontend/front_page/demo_login_option.tsx new file mode 100644 index 000000000..9503ae247 --- /dev/null +++ b/frontend/front_page/demo_login_option.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { DemoAccountBase } from "../demo/demo_iframe"; +import { t } from "../i18next_wrapper"; +import { FBSelect, Widget, WidgetBody, WidgetHeader } from "../ui"; +import { SEED_DATA_OPTIONS, SEED_DATA_OPTIONS_DDI } from "../messages/cards"; + +export class DemoLoginOption extends DemoAccountBase { + ok = () => { + const selection = this.state.productLine; + return + + +
+
+ + x.value != "none")} + customNullLabel={t("Select a model")} + selectedItem={SEED_DATA_OPTIONS_DDI()[selection]} + onChange={ddi => this.setState({ productLine: "" + ddi.value })} /> +
+
+ +
+
+
+
; + }; +} diff --git a/frontend/front_page/front_page.tsx b/frontend/front_page/front_page.tsx index 64d6d1074..c5d8c3644 100644 --- a/frontend/front_page/front_page.tsx +++ b/frontend/front_page/front_page.tsx @@ -16,9 +16,17 @@ import { get } from "lodash"; import { t } from "../i18next_wrapper"; import { ToastContainer } from "../toast/fb_toast"; import { Path } from "../internal_urls"; +import { DemoLoginOption } from "./demo_login_option"; export const DEFAULT_APP_PAGE = Path.app(); +const OrDivider = () => +
+
+ {t("OR")} +
+
; + export interface PartialFormEvent { currentTarget: { checked: boolean; @@ -218,11 +226,7 @@ export class FrontPage extends React.Component<{}, Partial> {

{t("Setup, customize, and control your garden from anywhere")}

-
-
- {t("OR")} -
-
+ > { set={(key, val) => this.setState({ [key]: val })}> {this.maybeRenderTos()} + +
; From d62cf066fec1ee443be2d0463833ba1591c0d84f Mon Sep 17 00:00:00 2001 From: Rory Aronson Date: Wed, 17 Sep 2025 14:03:27 -0700 Subject: [PATCH 08/53] minor style improvements --- frontend/css/app/navbar.scss | 1 - frontend/css/app/status_ticker.scss | 4 ---- frontend/css/farm_designer/farm_designer.scss | 6 +++--- frontend/css/farm_designer/farm_designer_panels.scss | 2 +- frontend/css/panels/jobs.scss | 7 ++----- frontend/css/panels/logs.scss | 6 +++--- frontend/logs/index.tsx | 2 +- frontend/nav/index.tsx | 2 +- 8 files changed, 11 insertions(+), 19 deletions(-) diff --git a/frontend/css/app/navbar.scss b/frontend/css/app/navbar.scss index d041fc42d..ee9f0006c 100644 --- a/frontend/css/app/navbar.scss +++ b/frontend/css/app/navbar.scss @@ -11,7 +11,6 @@ } nav { - margin-top: 3rem; button { margin: 1.8rem 1.8rem 0 0; font-size: 1.3rem !important; diff --git a/frontend/css/app/status_ticker.scss b/frontend/css/app/status_ticker.scss index 3971dbd4b..169b25fcb 100644 --- a/frontend/css/app/status_ticker.scss +++ b/frontend/css/app/status_ticker.scss @@ -2,10 +2,6 @@ @use "sass:color"; .ticker-list { - position: fixed; - top: 0; - left: 0; - right: 0; z-index: 3; background: var(--main-bg); backdrop-filter: var(--blur); diff --git a/frontend/css/farm_designer/farm_designer.scss b/frontend/css/farm_designer/farm_designer.scss index cd3f8bd42..ce6a082ee 100644 --- a/frontend/css/farm_designer/farm_designer.scss +++ b/frontend/css/farm_designer/farm_designer.scss @@ -14,7 +14,7 @@ } &.panel-closed-mobile, &.panel-closed { - top: 15rem; + top: 13rem; } } } @@ -535,8 +535,8 @@ } .garden-map-legend { - position: fixed; - top: 8rem; + position: absolute; + top: 7.5rem; right: -155px; z-index: 3; transition: all 0.3s ease; diff --git a/frontend/css/farm_designer/farm_designer_panels.scss b/frontend/css/farm_designer/farm_designer_panels.scss index e4ae09c26..2304379b5 100644 --- a/frontend/css/farm_designer/farm_designer_panels.scss +++ b/frontend/css/farm_designer/farm_designer_panels.scss @@ -2,7 +2,7 @@ @use "sass:color"; .farm-designer-panels { - position: fixed; + position: absolute; top: 7.5rem; width: 45rem; margin: 1rem; diff --git a/frontend/css/panels/jobs.scss b/frontend/css/panels/jobs.scss index e33022aed..ba26d4435 100644 --- a/frontend/css/panels/jobs.scss +++ b/frontend/css/panels/jobs.scss @@ -26,17 +26,13 @@ flex-direction: column; flex: 1; overflow: hidden; - .search-row { margin: 0 1rem; } - .logs-table-wrapper { flex: 1; display: flex; flex-direction: column; - overflow: hidden; - .logs-table { max-height: none; height: 100%; @@ -79,6 +75,7 @@ } tr { transform: scale(1); + vertical-align: top; } th, td { @@ -110,7 +107,7 @@ .jobs-panel-portal { .bp6-popover-content { padding: 0; - width: min(500px, 100vw - 1rem); + width: min(500px, 100vw); max-height: calc(100vh - 10rem); overflow: hidden; } diff --git a/frontend/css/panels/logs.scss b/frontend/css/panels/logs.scss index f7b85c70d..36c864845 100644 --- a/frontend/css/panels/logs.scss +++ b/frontend/css/panels/logs.scss @@ -3,6 +3,7 @@ .logs-table-wrapper { border: none; + overflow: scroll; .fa-trash { display: none; } @@ -86,10 +87,9 @@ } .logs-table { - display: block; - overflow: scroll; + display: table; max-height: 42rem; - padding-top: 0.5rem; + margin-top: 0.5rem; border-radius: 0; .log-verbosity-saucer .saucer { text-align: center; diff --git a/frontend/logs/index.tsx b/frontend/logs/index.tsx index b8b9dd6d9..0dc9adb23 100644 --- a/frontend/logs/index.tsx +++ b/frontend/logs/index.tsx @@ -97,7 +97,7 @@ export class LogsPanel extends React.Component> { render() { const { dispatch, bot } = this.props; return
-
+
> { this.isStaff ? "red" : "", ].join(" ")}>