From 25d0d7f06f64fcb79d6a02129e42f45f916b75ba Mon Sep 17 00:00:00 2001 From: "Dr.-Ing. Amilcar do Carmo Lucas" Date: Wed, 30 Oct 2024 15:09:05 +0100 Subject: [PATCH 1/4] FIX: start GUI in chinese if chinese was selected during windows instalation --- windows/ardupilot_methodic_configurator.iss | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/windows/ardupilot_methodic_configurator.iss b/windows/ardupilot_methodic_configurator.iss index 9cf0bbee..7dcb4f75 100644 --- a/windows/ardupilot_methodic_configurator.iss +++ b/windows/ardupilot_methodic_configurator.iss @@ -49,8 +49,8 @@ Type: filesandordirs; Name: "{app}\_internal\MethodicConfigurator\ArduCopter_con Type: filesandordirs; Name: "{app}\_internal\MethodicConfigurator\ArduPlane_configuration_steps.json"; [Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" -Name: "chinese"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" +Name: "en"; MessagesFile: "compiler:Default.isl" +Name: "zh_CN"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" @@ -73,14 +73,15 @@ Source: "..\\MethodicConfigurator\locale\*.mo"; DestDir: "{app}\_internal\Method Name: "{userappdata}\.ardupilot_methodic_configurator\vehicles"; Flags: uninsneveruninstall [Icons] -Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; Tasks: desktopicon; IconFilename: "{app}\MethodicConfigurator.ico" +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; Tasks: desktopicon; IconFilename: "{app}\MethodicConfigurator.ico"; Languages: en +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; Tasks: desktopicon; IconFilename: "{app}\MethodicConfigurator.ico"; Parameters: "--language {language}"; Languages: zh_CN Name: "{group}\Documentation"; Filename: "https://github.com/ArduPilot/MethodicConfigurator/blob/master/USERMANUAL.md" Name: "{group}\Vehicle Templates"; Filename: "{commonappdata}\.ardupilot_methodic_configurator\vehicle_templates" Name: "{group}\ArduPilot MethodicConfigurator Forum"; Filename: "https://discuss.ardupilot.org/t/new-ardupilot-methodic-configurator-gui/115038/" Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; IconFilename: "{app}\MethodicConfigurator.ico" [Run] -Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent; Parameters: "--language {language}" [Registry] Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \ From b1483e5942db9629c7997acfcbf37817130bfbe7 Mon Sep 17 00:00:00 2001 From: "Dr.-Ing. Amilcar do Carmo Lucas" Date: Fri, 1 Nov 2024 13:53:01 +0100 Subject: [PATCH 2/4] FIX: reading translation files --- MethodicConfigurator/internationalization.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MethodicConfigurator/internationalization.py b/MethodicConfigurator/internationalization.py index fccf980c..b164278a 100644 --- a/MethodicConfigurator/internationalization.py +++ b/MethodicConfigurator/internationalization.py @@ -10,6 +10,8 @@ import argparse import gettext +from os import path as os_path + # Do not import nor use logging functions in this file. # Logging is not yet configured when these functions are called @@ -33,7 +35,9 @@ def load_translation() -> callable: # Load the correct language ASAP based on the command line argument try: - translation = gettext.translation('MethodicConfigurator', localedir='locale', + script_dir = os_path.dirname(os_path.abspath(__file__)) + locale_dir = os_path.join(script_dir, 'locale') + translation = gettext.translation('MethodicConfigurator', localedir=locale_dir, languages=[pre_args.language], fallback=False) return translation.gettext except FileNotFoundError: From 576e40baa7849ac8ee1e8ea57d28b3cb0b7d9f65 Mon Sep 17 00:00:00 2001 From: "Dr.-Ing. Amilcar do Carmo Lucas" Date: Fri, 1 Nov 2024 14:46:59 +0100 Subject: [PATCH 3/4] IMPROVEMENT: translate a bit --- .../zh_CN/LC_MESSAGES/MethodicConfigurator.po | 1015 ++++++++++++----- 1 file changed, 710 insertions(+), 305 deletions(-) diff --git a/MethodicConfigurator/locale/zh_CN/LC_MESSAGES/MethodicConfigurator.po b/MethodicConfigurator/locale/zh_CN/LC_MESSAGES/MethodicConfigurator.po index b8913709..6444398b 100644 --- a/MethodicConfigurator/locale/zh_CN/LC_MESSAGES/MethodicConfigurator.po +++ b/MethodicConfigurator/locale/zh_CN/LC_MESSAGES/MethodicConfigurator.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-10-25 14:53+0200\n" +"POT-Creation-Date: 2024-11-01 12:46+0100\n" "PO-Revision-Date: 2024-10-29 HO:MI+ZONE\n" "Last-Translator: SakuraRC_Yang <35626190+BloodSakura3774@users.noreply.github.com>\n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" #: MethodicConfigurator/ardupilot_methodic_configurator.py:51 msgid "ArduPilot methodic configurator is a simple GUI with a table that lists parameters. The GUI reads intermediate parameter files from a directory and displays their parameters in a table. Each row displays the parameter name, its current value on the flight controller, its new value from the selected intermediate parameter file, and an \"Upload\" checkbox. The GUI includes \"Upload selected params to FC\" and \"Skip\" buttons at the bottom. When \"Upload Selected to FC\" is clicked, it uploads the selected parameters to the flight controller. When \"Skip\" is pressed, it skips to the next intermediate parameter file. The process gets repeated for each intermediate parameter file." -msgstr "" +msgstr "ArduPilot 方法配置器是一个简单的 GUI,带有一个列出参数的表格。该 GUI 从目录中读取中间参数文件,并在表格中显示它们的参数。每一行显示参数名称、飞行控制器上的当前值、来自选定中间参数文件的新值,以及一个“上传”复选框。GUI 在底部包含“上传选定参数到 FC”和“跳过”按钮。当点击“上传选定到 FC”时,它将选定的参数上传到飞行控制器。当按下“跳过”时,它会跳到下一个中间参数文件。对于每个中间参数文件,过程会重复。" #: MethodicConfigurator/ardupilot_methodic_configurator.py:73 msgid "No serial ports found" @@ -34,71 +34,75 @@ msgstr "车辆类型明确设置为 %s。" #: MethodicConfigurator/ardupilot_methodic_configurator.py:115 #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:121 msgid "Error in derived parameters" -msgstr "" +msgstr "派生参数中的错误" -#: MethodicConfigurator/ardupilot_methodic_configurator.py:137 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:185 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:372 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:393 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:422 +#: MethodicConfigurator/ardupilot_methodic_configurator.py:140 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:186 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:373 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:394 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:421 msgid "Fatal error reading parameter files" -msgstr "" +msgstr "读取参数文件时发生致命错误" #: MethodicConfigurator/argparse_check_range.py:32 msgid "either min or inf, but not both" -msgstr "" +msgstr "要么是最小值,要么是正无穷,但不能同时存在" #: MethodicConfigurator/argparse_check_range.py:34 msgid "either max or sup, but not both" -msgstr "" +msgstr "要么是最大值,要么是正无穷,但不能同时存在" + +#: MethodicConfigurator/argparse_check_range.py:57 +msgid "valid range: {_lo}, {_up}" +msgstr "有效范围: {_lo}, {_up}" #: MethodicConfigurator/backend_filesystem.py:116 msgid "Could not detect vehicle type. Defaulting to %s." -msgstr "" +msgstr "无法检测车辆类型,默认设置为 %s。" #: MethodicConfigurator/backend_filesystem.py:237 msgid "Error: %s is not a directory." -msgstr "" +msgstr "错误: %s 不是一个目录。" #: MethodicConfigurator/backend_filesystem.py:424 msgid "Intermediate parameter files and summary files zipped to %s" -msgstr "" +msgstr "中间参数文件和摘要文件已压缩到 %s" #: MethodicConfigurator/backend_filesystem.py:469 msgid "Parameter %s not found in the current parameter file" -msgstr "" +msgstr "在当前参数文件中未找到参数 %s" #: MethodicConfigurator/backend_filesystem.py:477 msgid "Error writing last uploaded filename: %s" -msgstr "" +msgstr "写入最后上传文件名时发生错误: %s" #: MethodicConfigurator/backend_filesystem.py:484 msgid "last_uploaded_filename.txt not found: %s" -msgstr "" +msgstr "未找到 last_uploaded_filename.txt: %s" #: MethodicConfigurator/backend_filesystem.py:486 msgid "Error reading last uploaded filename: %s" -msgstr "" +msgstr "读取最后上传文件名时发生错误: %s" #: MethodicConfigurator/backend_filesystem.py:501 msgid "Starting file index %s is out of range. Starting with file %s instead." -msgstr "" +msgstr "起始文件索引 %s 超出范围。改为从文件 %s 开始。" #: MethodicConfigurator/backend_filesystem.py:507 msgid "Starting with the first file." -msgstr "" +msgstr "从第一个文件开始。" #: MethodicConfigurator/backend_filesystem.py:510 msgid "Starting with the first non-tcal file." -msgstr "" +msgstr "从第一个非 tcal 文件开始。" #: MethodicConfigurator/backend_filesystem.py:514 msgid "Last uploaded file was %s." -msgstr "" +msgstr "最后上传的文件是 %s。" #: MethodicConfigurator/backend_filesystem.py:516 msgid "No last uploaded file found. %s." -msgstr "" +msgstr "未找到最后上传的文件。 %s。" #: MethodicConfigurator/backend_filesystem.py:521 msgid "Last uploaded file not found in the list of files. %s." @@ -164,6 +168,22 @@ msgstr "" msgid "Error in file '%s': '%s' %s parameter '%s' 'Change Reason' attribute not found." msgstr "" +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:116 +msgid "In file '{self.configuration_steps_filename}': '{filename}' {parameter_type} parameter '{parameter}' could not be computed: 'fc_parameters' not found, is an FC connected?" +msgstr "" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:141 +msgid "In file '{self.configuration_steps_filename}': '{filename}' {parameter_type} parameter '{parameter}' could not be computed: {_e}" +msgstr "" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:164 +msgid "File '{self.configuration_steps_filename}' not found. No intermediate parameter configuration steps available" +msgstr "" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:169 +msgid "No documentation available for {selected_file} in the {self.configuration_steps_filename} file" +msgstr "" + #: MethodicConfigurator/backend_filesystem_program_settings.py:58 msgid "Directory already exists, choose a different one" msgstr "" @@ -172,6 +192,22 @@ msgstr "" msgid "Error creating new vehicle directory: %s" msgstr "" +#: MethodicConfigurator/backend_filesystem_program_settings.py:92 +msgid "The user configuration directory '{user_config_directory}' does not exist." +msgstr "" + +#: MethodicConfigurator/backend_filesystem_program_settings.py:95 +msgid "The path '{user_config_directory}' is not a directory." +msgstr "" + +#: MethodicConfigurator/backend_filesystem_program_settings.py:106 +msgid "The site configuration directory '{site_config_directory}' does not exist." +msgstr "" + +#: MethodicConfigurator/backend_filesystem_program_settings.py:109 +msgid "The path '{site_config_directory}' is not a directory." +msgstr "" + #: MethodicConfigurator/backend_filesystem_vehicle_components.py:50 msgid "File '%s' not found in %s." msgstr "" @@ -184,6 +220,14 @@ msgstr "" msgid "Error saving JSON data to file '%s': %s" msgstr "" +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:75 +msgid "Firmware type {fw_type} in {self.vehicle_components_json_filename} is not supported" +msgstr "" + +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:89 +msgid "FW version string {version_str} on {self.vehicle_components_json_filename} is invalid" +msgstr "" + #: MethodicConfigurator/backend_flightcontroller.py:90 msgid "You should uninstall ModemManager as it conflicts with ArduPilot" msgstr "" @@ -236,66 +280,78 @@ msgstr "" msgid "Connection established with systemID %d, componentID %d." msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:272 +#: MethodicConfigurator/backend_flightcontroller.py:257 +msgid "Autopilot type {self.info.autopilot}" +msgstr "" + +#: MethodicConfigurator/backend_flightcontroller.py:260 +msgid "Unsupported autopilot type {self.info.autopilot}" +msgstr "" + +#: MethodicConfigurator/backend_flightcontroller.py:264 +msgid "Vehicle type: {self.info.mav_type} running {self.info.vehicle_type} firmware" +msgstr "" + +#: MethodicConfigurator/backend_flightcontroller.py:275 msgid "Connection failed: %s" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:273 +#: MethodicConfigurator/backend_flightcontroller.py:276 msgid "Failed to connect after %d attempts." msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:278 +#: MethodicConfigurator/backend_flightcontroller.py:281 msgid "" "No AUTOPILOT_VERSION MAVLink message received, connection failed.\n" "Only ArduPilot versions newer than 4.3.8 are supported.\n" "Make sure parameter SERIAL0_PROTOCOL is set to 2" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:294 +#: MethodicConfigurator/backend_flightcontroller.py:297 msgid "ChibiOS version missmatch: %s (BANNER) != % s (AUTOPILOT_VERSION)" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:307 +#: MethodicConfigurator/backend_flightcontroller.py:310 msgid "FC product mismatch: %s (BANNER) != %s (AUTOPILOT_VERSION)" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:322 +#: MethodicConfigurator/backend_flightcontroller.py:325 msgid "Testing active, will load all parameters from the %s file" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:331 +#: MethodicConfigurator/backend_flightcontroller.py:334 msgid "MAVFTP is supported by the %s flight controller" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:336 +#: MethodicConfigurator/backend_flightcontroller.py:339 msgid "MAVFTP is not supported by the %s flight controller, fallback to MAVLink" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:340 +#: MethodicConfigurator/backend_flightcontroller.py:343 msgid "Will fetch all parameters from the %s flight controller" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:359 +#: MethodicConfigurator/backend_flightcontroller.py:362 msgid "Received parameter: %s = %s" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:364 +#: MethodicConfigurator/backend_flightcontroller.py:367 msgid "Fetched %d parameter values from the %s flight controller" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:368 +#: MethodicConfigurator/backend_flightcontroller.py:371 msgid "Error: %s" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:423 +#: MethodicConfigurator/backend_flightcontroller.py:426 msgid "Reset command sent to ArduPilot." msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:534 +#: MethodicConfigurator/backend_flightcontroller.py:537 msgid "MAVLink connection string to the flight controller. If set to \"none\" no connection is made. Defaults to autodetection" msgstr "" -#: MethodicConfigurator/backend_flightcontroller.py:544 +#: MethodicConfigurator/backend_flightcontroller.py:547 msgid "Flight controller reboot time. Default is %(default)s" msgstr "" @@ -311,10 +367,26 @@ msgstr "" msgid "User interface language (default is %(default)s)." msgstr "" +#: MethodicConfigurator/frontend_tkinter_base.py:44 +msgid "" +"No intermediate parameter files found in the selected '{_dirname}' vehicle directory.\n" +"Please select and step inside a vehicle directory containing valid ArduPilot intermediate parameter files.\n" +"\n" +"Make sure to step inside the directory (double-click) and not just select it." +msgstr "" + #: MethodicConfigurator/frontend_tkinter_base.py:47 msgid "No Parameter Files Found" msgstr "" +#: MethodicConfigurator/frontend_tkinter_base.py:51 +msgid "" +"{_error_string}\n" +"\n" +"Please connect a flight controller to the PC,\n" +"wait at least 7 seconds and retry." +msgstr "" + #: MethodicConfigurator/frontend_tkinter_base.py:53 msgid "No Connection to the Flight Controller" msgstr "" @@ -331,8 +403,12 @@ msgstr "" msgid "Please be patient, {:.1f}% of {}% complete" msgstr "" +#: MethodicConfigurator/frontend_tkinter_base.py:262 +msgid "Lifting window: {_e} on file {__file__}" +msgstr "" + #: MethodicConfigurator/frontend_tkinter_component_editor.py:50 -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:44 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:46 msgid "A GUI for editing JSON files that contain vehicle component configurations. Not to be used directly, but through the main ArduPilot methodic configurator script." msgstr "" @@ -341,7 +417,7 @@ msgid "Length of values %u and fallbacks %u differ for %s" msgstr "" #: MethodicConfigurator/frontend_tkinter_component_editor.py:274 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:452 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:453 msgid "No values found for %s in the metadata" msgstr "" @@ -362,91 +438,202 @@ msgid "Invalid CAN_Dx_PROTOCOL %s and CAN_Px_DRIVER %s for GNSS Receiver" msgstr "" #: MethodicConfigurator/frontend_tkinter_component_editor.py:358 -msgid "Invalid non-integer value for %s_PROTOCOL %f" +msgid "Invalid non-integer value for {serial}_PROTOCOL {serial_protocol_nr}" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor.py:386 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:387 msgid "Invalid non-integer value for MOT_PWM_TYPE %f" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor.py:455 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:456 msgid "No fallback values found for %s" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor.py:558 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:579 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:590 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:612 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:619 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:652 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:668 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:686 -#: MethodicConfigurator/frontend_tkinter_component_editor.py:691 -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:191 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:561 +msgid "" +"Invalid value '{value}' for {_paths_str}\n" +"Allowed values are: {_allowed_str}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:562 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:585 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:596 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:622 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:629 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:664 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:680 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:698 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:703 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:247 msgid "Error" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor.py:590 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:579 +msgid "{_name} must be a {data_type.__name__} between {limits[0]} and {limits[1]}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:584 +msgid "" +"Invalid value '{value}' for {_paths_str}\n" +"{e}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:596 msgid "Battery Chemistry not set. Will default to Lipo." msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor.py:686 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:610 +msgid "is below the {chemistry} minimum limit of {volt_limit}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:617 +msgid "is above the {chemistry} maximum limit of {volt_limit}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:621 +msgid "" +"Invalid value '{value}' for {_path_str}\n" +"{_e}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:628 +msgid "" +"Invalid value '{value}' for {_path_str}\n" +"{_e}\n" +"Will be set to the recommended value." +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:663 +msgid "" +"Invalid value '{value}' for {_path_str}\n" +"Allowed values are: {_values_str}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:679 +msgid "Duplicate FC connection type '{value}' for {_path_str}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:698 msgid "Battery Cell Low voltage must be lower than max voltage" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor.py:691 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:703 msgid "Battery Cell Crit voltage must be lower than low voltage" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:63 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:65 msgid " - Vehicle Component Editor" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:63 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:212 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:203 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:65 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:213 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:204 msgid "Amilcar Lucas's - ArduPilot methodic configurator " msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:84 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:86 msgid "" "Please configure all vehicle component properties in this window.\n" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:85 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:87 msgid "" "Scroll down and make sure you do not miss a property.\n" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:86 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:88 msgid "Saving the result will write to the vehicle_components.json file." msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:95 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:97 msgid "Replace the vehicle.jpg file in the vehicle directory to change the vehicle image." msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:97 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:99 msgid "Add a 'vehicle.jpg' image file to the vehicle directory." msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:107 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:109 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:135 msgid "Save data and start configuration" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:108 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:110 msgid "Save component data and start parameter value configuration and tuning." msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:191 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:117 +msgid "How to use the component editor" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:125 +msgid "1. Describe " +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:126 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:131 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:364 +msgid "all" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:127 +msgid "" +" vehicle component properties in the window below\n" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:128 +msgid "2. Scroll " +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:129 +msgid "all the way down" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:130 +msgid " and make sure to edit " +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:132 +msgid "" +" fields\n" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:133 +msgid "" +"3. Do not be lazy, collect the required information and enter it\n" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:134 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:376 +msgid "4. Press the " +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:136 +msgid " only after all information is correct" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:140 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:383 +msgid "Dismiss" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:215 +msgid "ArduPilot Methodic Configurator only operates correctly if all component properties are correct. ArduPilot parameter values depend on the components used and their connections. Have you used the scrollbar on the right side of the window and entered the correct values for all components?" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:219 +msgid "Confirm that all component properties are correct" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:247 msgid "Failed to save data to file. Is the destination write protected?" msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:193 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:249 msgid "Vehicle component data saved successfully." msgstr "" -#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:206 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:262 msgid "Skip the component editor window. Only use this if all components have been configured. Default to false" msgstr "" @@ -473,11 +660,15 @@ msgid "" "You can add a custom connection to the existing ones" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:142 -msgid "Flight Controller Connection" +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:131 +msgid "Connection combobox changed to: {selected_connection}" msgstr "" #: MethodicConfigurator/frontend_tkinter_connection_selection.py:143 +msgid "Flight Controller Connection" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:144 msgid "" "Enter the connection string to the flight controller. Examples are:\n" "\n" @@ -487,90 +678,102 @@ msgid "" "udp:127.0.0.1:14551" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:160 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:150 +msgid "Will add new connection: {selected_connection} if not duplicated" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:154 +msgid "Updated connection tuples: {connection_tuples} with selected connection: {selected_connection}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:159 +msgid "Add connection canceled or string empty {selected_connection}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:164 msgid "Connecting with the FC" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:161 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:165 msgid "Connection step {} of {}" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:172 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:176 msgid "download_flight_controller_parameters" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:187 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:191 msgid "Flight controller connection" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:192 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:196 msgid "No ArduPilot flight controller was auto-detected detected yet." msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:199 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:224 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:203 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:225 msgid "" "\n" "Choose one of the following three options:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:203 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:207 msgid "Auto connection" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:207 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:211 msgid "" "Connect a flight controller to the PC,\n" "wait 7 seconds for it to fully boot and\n" "press the Auto-connect button below to connect to it" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:211 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:215 msgid "Auto-connect" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:213 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:217 msgid "Auto-connect to a 'Mavlink'-talking serial device" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:216 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:220 msgid "Manual connection" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:220 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:224 msgid "" "Connect a flight controller to the PC,\n" "wait 7 seconds for it to fully boot and\n" "manually select the fight controller connection or add a new one" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:230 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:234 msgid "No connection" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:241 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:245 msgid "Skip FC connection, just edit the .param files on disk" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:246 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:250 msgid "" "No parameter values will be fetched from the FC, default parameter values from disk will be used\n" "instead (if '00_default.param' file is present) and just edit the intermediate '.param' files on disk" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:259 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:263 msgid "Will proceed without FC connection. FC parameters will not be downloaded nor uploaded" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:260 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:264 msgid "Only the intermediate '.param' files on the PC disk will be edited" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:274 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:278 msgid "This main is for testing and development only. Usually, the ConnectionSelectionWidgets is called from another script" msgstr "" -#: MethodicConfigurator/frontend_tkinter_connection_selection.py:285 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:289 msgid "This main is for testing and development only, usually the ConnectionSelectionWindow is called from another script" msgstr "" @@ -578,195 +781,203 @@ msgstr "" msgid "Selected template directory: %s" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:155 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:97 +msgid "Select {self.label_text}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:156 msgid "Vehicle configuration directory:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:157 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:158 msgid "" "Vehicle-specific directory containing the intermediate\n" "parameter files to be uploaded to the flight controller" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:159 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:160 msgid "" "Select the vehicle-specific configuration directory containing the\n" "intermediate parameter files to be uploaded to the flight controller" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:170 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:177 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:171 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:180 msgid "Invalid Vehicle Directory Selected" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:171 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:172 msgid "" "Please do not edit the files provided 'vehicle_templates' directory\n" "as those are used as a template for new vehicles" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:213 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:179 +msgid "Selected directory must contain files matching \\d\\d_*\\.param and a {_filename} file" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:214 msgid " - Select vehicle configuration directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:220 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:221 msgid "" "No intermediate parameter files found\n" "in current working directory." msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:222 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:223 msgid "" "No intermediate parameter files found\n" "in the --vehicle-dir specified directory." msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:229 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:230 msgid "MyVehicleName" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:243 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:244 msgid "New" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:246 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:247 msgid "" "Existing vehicle template directory containing the intermediate\n" "parameter files to be copied to the new vehicle configuration directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:248 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:249 msgid "" "Select the existing vehicle template directory containing the intermediate\n" "parameter files to be copied to the new vehicle configuration directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:251 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:252 msgid "Source Template directory:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:259 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:260 msgid "Use parameter values from connected FC, not from template files" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:262 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:263 msgid "" "Use the parameter values from the connected flight controller instead of the\n" "template files when creating a new vehicle configuration directory from a template.\n" "This option is only available when a flight controller is connected" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:269 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:270 msgid "Existing directory where the new vehicle configuration directory will be created" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:270 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:271 msgid "Select the directory where the new vehicle configuration directory will be created" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:272 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:273 msgid "Destination base directory:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:278 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:279 msgid "A new vehicle configuration directory with this name will be created at the (destination) base directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:281 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:282 msgid "Destination new vehicle name:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:285 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:286 msgid "Create vehicle configuration directory from template" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:290 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:291 msgid "" "Create a new vehicle configuration directory on the (destination) base directory,\n" "copy the template files from the (source) template directory to it and\n" "load the newly created files into the application" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:296 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:297 msgid "Open" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:300 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:301 msgid "" "Use an existing vehicle configuration directory with\n" "intermediate parameter files, apm.pdef.xml and vehicle_components.json" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:311 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:312 msgid "Re-Open" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:316 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:317 msgid "Last used vehicle configuration directory:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:318 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:319 msgid "Last used vehicle configuration directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:327 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:328 msgid "Open Last Used Vehicle Configuration Directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:333 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:334 msgid "Directly open the last used vehicle configuration directory for configuring and tuning the vehicle" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:342 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:343 msgid "Vehicle template directory cannot be empty" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:342 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:345 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:343 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:346 msgid "Vehicle template directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:345 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:346 msgid "Vehicle template directory does not exist" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:349 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:350 msgid "New vehicle name cannot be empty" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:349 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:352 -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:358 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:350 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:353 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:359 msgid "New vehicle directory" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:352 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:353 msgid "New vehicle name must not contain invalid characters" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:363 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:364 msgid "Copying template files" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:406 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:407 msgid "No Last Vehicle Directory Found" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:407 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:408 msgid "" "No last opened vehicle configuration directory was found.\n" "Please select a directory manually." msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:419 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:420 msgid "This main is for testing and development only. Usually, the VehicleDirectorySelectionWindow is called from another script" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:430 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:431 msgid "This main is for testing and development only, usually the VehicleDirectorySelectionWindow is called from another script" msgstr "" -#: MethodicConfigurator/frontend_tkinter_directory_selection.py:439 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:440 msgid "No intermediate parameter files found in %s." msgstr "" @@ -786,38 +997,58 @@ msgstr "" msgid "Firmware Version: %s" msgstr "" +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:65 +msgid "Firmware first 8 hex bytes of the FC git hash: %s" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:66 +msgid "Firmware first 8 hex bytes of the ChibiOS git hash: %s" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:67 +msgid "Flight Controller HW / board version: %s" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:68 +msgid "Flight Controller USB vendor ID: %s" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:69 +msgid "Flight Controller USB product ID: %s" +msgstr "" + #: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:75 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:500 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:499 msgid "Downloading FC parameters" msgstr "" #: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:76 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:502 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:501 msgid "Downloaded {} of {} parameters" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:76 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:107 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:108 msgid "Documentation" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:111 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:112 msgid "Forum Blog:" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:113 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:114 msgid "Wiki:" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:116 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:117 msgid "External tool:" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:119 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:120 msgid "Mandatory:" msgstr "" @@ -840,247 +1071,285 @@ msgid "" " 0% you can ignore this file if it does not apply to your vehicle" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:131 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:105 +msgid "{current_file} Documentation" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:132 msgid "Documentation URL not available" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:137 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:138 msgid "About" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:152 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:145 +msgid "" +"ArduPilot Methodic Configurator Version: {_version}\n" +"\n" +"A clear configuration sequence for ArduPilot vehicles.\n" +"\n" +"Copyright © 2024 Amilcar do Carmo Lucas and ArduPilot.org\n" +"\n" +"Licensed under the GNU General Public License v3.0" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:153 msgid "User Manual" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:155 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:156 msgid "Support Forum" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:158 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:159 msgid "Report a Bug" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:161 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:162 msgid "Licenses" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:164 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:165 msgid "Source Code" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:204 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:205 msgid " - Parameter file editor and uploader" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:253 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:254 msgid "Current intermediate parameter file:" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:260 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:261 msgid "" "Select the intermediate parameter file from the list of available files in the selected vehicle directory\n" "It will automatically advance to the next file once the current file is uploaded to the fight controller" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:273 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:274 msgid "User Manual, Support Forum, Report a Bug, Licenses, Source Code" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:278 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:279 msgid "Legend" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:281 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:282 msgid "the meaning of the text background colors" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:285 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:286 msgid "Normal parameter" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:287 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:288 msgid "Calibration param" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:289 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:290 msgid "Read-only param" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:293 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:294 msgid "Default value" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:295 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:296 msgid "Not available" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:297 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:298 msgid "Not editable" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:320 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:321 msgid "See only changed parameters" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:324 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:325 msgid "Toggle to show only parameters that will change if/when uploaded to the flight controller" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:327 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:328 msgid "Annotate docs into .param files" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:331 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:332 msgid "" "Annotate ArduPilot parameter documentation metadata into the intermediate parameter files\n" "The files will be bigger, but all the existing parameter documentation will be included inside" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:336 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:376 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:337 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:377 msgid "Upload selected params to FC, and advance to next param file" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:341 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:342 msgid "" "Upload selected parameters to the flight controller and advance to the next intermediate parameter file\n" "If changes have been made to the current file it will ask if you want to save them\n" "It will reset the FC if necessary, re-download all parameters and validate their value" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:346 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:347 msgid "Skip parameter file" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:348 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:349 msgid "" "Skip to the next intermediate parameter file without uploading any changes to the flight controller\n" "If changes have been made to the current file it will ask if you want to save them" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:354 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:355 msgid "Welcome to the ArduPilot Methodic Configurator" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:362 -msgid "1. Read " -msgstr "" - #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:363 -msgid "all" +msgid "1. Read " msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:364 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:365 msgid "" " the documentation on top of the parameter table\n" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:365 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:366 msgid "2. Edit the parameter " msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:366 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:367 msgid "New Values" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:367 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:368 msgid " and" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:368 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:369 msgid " their " msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:369 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:370 msgid "" "Change Reason\n" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:370 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:371 msgid "3. Use " msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:371 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:372 #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:230 msgid "Del" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:372 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:373 msgid " and " msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:373 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:210 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:374 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:209 msgid "Add" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:374 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:375 msgid "" " buttons to delete and add parameters if necessary\n" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:375 -msgid "4. Press the " -msgstr "" - -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:377 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:378 msgid "" " button\n" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:378 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:379 msgid "5. Repeat from the top until the program automatically closes" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:382 -msgid "Dismiss" +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:402 +msgid "" +"If you proceed the {tempcal_imu_result_param_filename}\n" +"will be overwritten with the new calibration results.\n" +"Do you want to provide a .bin log file and\n" +"run the IMU temperature calibration using it?" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:403 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:411 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:406 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:410 msgid "IMU temperature calibration" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:409 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:408 msgid "ArduPilot binary log files" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:411 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:410 msgid "" "Please wait, this can take a really long time and\n" "the GUI will be unresponsive until it finishes." msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:413 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:412 msgid "Reading IMU calibration messages" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:414 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:413 msgid "Please wait, this can take a long time" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:429 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:428 +msgid "" +"This configuration step should be performed outside this tool by\n" +"{auto_changed_by}\n" +"and that should have changed the parameters on the FC.\n" +"\n" +"Should the FC values now be copied to the {selected_file} file?" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:432 msgid "Update file with values from FC?" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:443 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:442 msgid "Skip some steps?" msgstr "" +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:452 +msgid "" +"Should the {local_filename} file be downloaded from the URL\n" +"{url}?" +msgstr "" + #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:453 msgid "Download file from URL" msgstr "" +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:455 +msgid "Failed to download {local_filename} from {url}, please download it manually" +msgstr "" + #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:456 msgid "Download failed" msgstr "" +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:462 +msgid "Local file {local_filename} does not exist" +msgstr "" + #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:463 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:478 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:477 msgid "Will not upload any file" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:466 +msgid "Should the {local_filename} file be uploaded to the flight controller as {remote_filename}?" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:467 msgid "Upload file to FC" msgstr "" @@ -1093,57 +1362,67 @@ msgid "Uploaded {} of {} %" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:472 +msgid "Failed to upload {local_filename} to {remote_filename}, please upload it manually" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:473 msgid "Upload failed" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:477 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:476 msgid "No flight controller connection, will not upload any file" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:478 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:477 #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:599 msgid "No flight controller connection" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:500 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:499 msgid "Re-downloading FC parameters" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:537 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:536 #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:616 msgid "Parameter %s set to %f" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:545 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:544 msgid "Parameter %s changed from %f to %f, reset required" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:548 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:547 msgid "Parameter %s changed to %f, reset required" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:555 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:554 msgid "Parameter %s changed from %f to %f, possible reset required" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:558 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:557 msgid "Parameter %s changed to %f, possible reset required" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:561 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:560 #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:621 -msgid "Failed to set parameter %s: %s" +msgid "Failed to set parameter {param_name}: {_e}" msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:562 #: MethodicConfigurator/frontend_tkinter_parameter_editor.py:585 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:622 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:674 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:137 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:623 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:675 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:138 msgid "ArduPilot methodic configurator" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:570 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:571 +msgid "" +"{_param_list_str} parameter(s) potentially require a reset\n" +"Do you want to reset the ArduPilot?" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:572 msgid "Possible reset required" msgstr "" @@ -1176,216 +1455,342 @@ msgstr "" msgid "Uploading %d selected %s parameters to flight controller..." msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:627 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:628 msgid "Re-download all parameters from the flight controller" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:635 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:636 msgid "Parameter %s upload to the flight controller failed. Expected: %f, Actual: %f" msgstr "" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:639 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:640 msgid "Parameter %s upload to the flight controller failed. Expected: %f, Actual: N/A" -msgstr "" +msgstr "参数 %s 上传到飞行控制器失败。预期:%f,实际:N/A" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:644 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:645 msgid "Parameter upload error" +msgstr "参数上传错误" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:646 +msgid "" +"Failed to upload the following parameters to the flight controller:\n" msgstr "" +"上传以下参数到飞行控制器失败:\n" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:649 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:650 msgid "All parameters uploaded to the flight controller successfully" -msgstr "" +msgstr "所有参数成功上传到飞行控制器" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:674 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:675 msgid "Current file not found in the list of files" -msgstr "" +msgstr "在文件列表中找不到当前文件" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:681 +msgid "Do you want to write the changes to the {self.current_file} file?" +msgstr "您想将更改写入 {self.current_file} 文件吗?" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:680 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:682 msgid "One or more parameters have been edited" +msgstr "一个或多个参数已被编辑" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:702 +msgid "" +"Methodic configuration of {nr_total_params} parameters complete:\n" +"\n" +"{_nr_unchanged_params} kept their default value\n" +"\n" +"{nr_non_default__read_only_params} non-default read-only parameters - ignore these, you can not change them\n" +"\n" +"{nr_non_default__writable_calibrations} non-default writable sensor-calibrations - non-reusable between vehicles\n" +"\n" +"{nr_non_default__writable_non_calibrations} non-default writable non-sensor-calibrations - these can be reused between similar vehicles" msgstr "" +"方法配置 {nr_total_params} 个参数完成:\n" +"\n" +"{_nr_unchanged_params} 个参数保持其默认值\n" +"\n" +"{nr_non_default__read_only_params} 个非默认只读参数 - 忽略这些,您无法更改它们\n" +"\n" +"{nr_non_default__writable_calibrations} 个非默认可写传感器校准 - 不可在不同飞行器间重用\n" +"\n" +"{nr_non_default__writable_non_calibrations} 个非默认可写非传感器校准 - 可在相似飞行器间重用" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:705 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:710 msgid "Last parameter file processed" -msgstr "" +msgstr "最后处理的参数文件" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:730 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:741 +msgid "" +"{} file already exists.\n" +"Do you want to overwrite it?" +msgstr "{} 文件已存在。\n" +"您想覆盖它吗?" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:725 -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:736 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:731 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:742 msgid "Overwrite existing file" -msgstr "" +msgstr "覆盖现有文件" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:729 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:734 msgid "Summary file %s written" +msgstr "汇总文件 %s 已写入" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:745 +msgid "" +"All relevant files have been zipped into the \n" +"{zip_file_path} file.\n" +"\n" +"You can now upload this file to the ArduPilot Methodic\n" +"Configuration Blog post on discuss.ardupilot.org." msgstr "" +"所有相关文件已压缩为 \n" +"{zip_file_path} 文件。\n" +"\n" +"您现在可以将此文件上传到 ArduPilot Methodic\n" +"配置博客的 discuss.ardupilot.org。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:740 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:748 msgid "Parameter files zipped" -msgstr "" +msgstr "参数文件已压缩" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:754 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:760 msgid "Skip the welcome popup window. Only use this if you already know how to use the software. Default to false" -msgstr "" +msgstr "跳过欢迎弹出窗口。仅在您已了解如何使用该软件时使用。默认值为假" -#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:768 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:774 msgid "A GUI for editing ArduPilot param files. Not to be used directly, but through the main ArduPilot methodic configurator script." -msgstr "" +msgstr "一个用于编辑 ArduPilot 参数文件的 GUI。不要直接使用,而是通过主 ArduPilot 方法配置器脚本使用。" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:75 msgid "Error in forced parameters" -msgstr "" +msgstr "强制参数中的错误" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "-/+" -msgstr "" +msgstr "-/+" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "Change Reason" -msgstr "" +msgstr "更改原因" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "Current Value" -msgstr "" +msgstr "当前值" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "New Value" -msgstr "" +msgstr "新值" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "Parameter" -msgstr "" +msgstr "参数" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "Unit" -msgstr "" +msgstr "单位" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 msgid "Upload" -msgstr "" +msgstr "上传" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:99 msgid "Delete or add a parameter" -msgstr "" +msgstr "删除或添加参数" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:100 msgid "Parameter name must be ^[A-Z][A-Z_0-9]* and most 16 characters long" -msgstr "" +msgstr "参数名称必须是 ^[A-Z][A-Z_0-9]* 并且最多 16 个字符长" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:101 msgid "Current value on the flight controller " -msgstr "" +msgstr "飞行控制器上的当前值" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:102 msgid "New value from the above selected intermediate parameter file" -msgstr "" +msgstr "来自上述选定中间参数文件的新值" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:103 msgid "Parameter Unit" -msgstr "" +msgstr "参数单位" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:104 msgid "When selected, upload the new value to the flight controller" -msgstr "" +msgstr "选择后,将新值上传到飞行控制器" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:105 msgid "Reason why respective parameter changed" -msgstr "" +msgstr "相应参数更改的原因" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:136 -msgid "No different parameters found in %s. Skipping..." -msgstr "" +msgid "No different parameters found in {selected_file}. Skipping..." +msgstr "在 {selected_file} 中未找到不同的参数,跳过..." #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:170 msgid "Removing duplicate parameter %s" -msgstr "" +msgstr "正在移除重复参数 %s" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:171 +msgid "The parameter '{old_name}' was removed due to duplication." +msgstr "参数 '{old_name}' 因重复而被移除。" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:172 msgid "Parameter Removed" -msgstr "" +msgstr "参数已移除" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:178 msgid "Renaming parameter %s to %s" -msgstr "" +msgstr "将参数 %s 重命名为 %s" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:179 -msgid "Parameter Renamed" +msgid "" +"The parameter '{old_name}' was renamed to '{new_name}'.\n" +"to follow the flight controller connection defined in the component editor window." msgstr "" +"参数 '{old_name}' 已重命名为 '{new_name}'。\n" +"以遵循组件编辑器窗口中定义的飞行控制器连接。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:190 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:403 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:181 +msgid "Parameter Renamed" +msgstr "参数已重命名" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:189 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:407 msgid "No documentation available in apm.pdef.xml for this parameter" -msgstr "" +msgstr "此参数在 apm.pdef.xml 中没有可用的文档" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:211 +msgid "Add a parameter to the {self.current_file} file" +msgstr "将参数添加到 {self.current_file} 文件" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:217 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:323 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:529 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:325 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:545 msgid "Parameter %s not found in the %s file: %s" -msgstr "" +msgstr "在 %s 文件中找不到参数 %s: %s" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:256 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:232 +msgid "Delete {param_name} from the {self.current_file} file" +msgstr "从 {self.current_file} 文件中删除 {param_name}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:257 msgid "N/A" -msgstr "" +msgstr "不适用" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:268 +msgid "Could not solve the selected {combobox_widget} key to a float value." +msgstr "无法将选定的 {combobox_widget} 键解析为浮点值。" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:363 +msgid "{_param_name} Value: {_new_decimal_value}" +msgstr "{_param_name} 值: {_new_decimal_value}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:373 +msgid "Select {param_name} Bitmask Options" +msgstr "选择 {param_name} 位掩码选项" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:416 +msgid "When selected upload {param_name} new value to the flight controller" +msgstr "选择后将 {param_name} 新值上传到飞行控制器" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:444 +msgid "Reason why {param_name} should change to {_value}" +msgstr "更改 {param_name} 为 {_value} 的原因" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:449 +msgid "Are you sure you want to delete the {param_name} parameter?" +msgstr "您确定要删除 {param_name} 参数吗?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:464 msgid "Add Parameter to " -msgstr "" +msgstr "添加参数到 " -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:462 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:515 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:477 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:531 msgid "Operation not possible" -msgstr "" +msgstr "操作不可行" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:463 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:478 msgid "No apm.pdef.xml file and no FC connected. Not possible autocomplete parameter names." -msgstr "" +msgstr "没有 apm.pdef.xml 文件且未连接飞行控制器。无法自动完成参数名称。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:494 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:509 msgid "Parameter name can not be empty." -msgstr "" +msgstr "参数名称不能为空。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:494 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:497 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:505 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:513 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:509 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:512 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:520 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:529 msgid "Invalid parameter name." -msgstr "" +msgstr "无效的参数名称。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:497 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:512 msgid "Parameter already exists, edit it instead" -msgstr "" +msgstr "参数已存在,请编辑它。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:505 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:520 msgid "Parameter name not found in the flight controller." -msgstr "" +msgstr "飞行控制器中未找到参数名称。" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:528 +msgid "'{param_name}' not found in the apm.pdef.xml file." +msgstr "'{param_name}' 在 apm.pdef.xml 文件中未找到。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:516 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:532 msgid "Can not add parameter when no FC is connected and no apm.pdef.xml file exists." +msgstr "在没有连接飞行控制器且没有 apm.pdef.xml 文件时,无法添加参数。" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:557 +msgid "" +"The value for {param_name} {p} should be greater than {p_min}\n" msgstr "" +"{param_name} {p} 的值应该大于 {p_min}\n" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:541 -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:546 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:558 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:563 msgid "Out-of-bounds Value" +msgstr "超出范围的值" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:559 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:564 +msgid "Use out-of-bounds value?" +msgstr "使用超出范围的值吗?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:562 +msgid "" +"The value for {param_name} {p} should be smaller than {p_max}\n" msgstr "" +"{param_name} {p} 的值应该小于 {p_max}\n" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:552 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:568 +msgid "The value for {param_name} must be a valid float." +msgstr "{param_name} 的值必须是有效的浮点数。" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:569 msgid "Invalid Value" -msgstr "" +msgstr "无效的值" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:556 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:573 msgid "Parameter %s changed, will later ask if change(s) should be saved to file." -msgstr "" +msgstr "参数 %s 已更改,稍后会询问是否将更改保存到文件。" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:572 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:589 msgid "Parameter %s not found in the %s file %s: %s" -msgstr "" +msgstr "在 %s 文件 %s 中找不到参数 %s: %s" -#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:576 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:593 msgid "Parameter %s change reason changed from %s to %s, will later ask if change(s) should be saved to file." -msgstr "" +msgstr "参数 %s 的更改原因从 %s 更改为 %s,稍后会询问是否将更改保存到文件。" -#: MethodicConfigurator/frontend_tkinter_template_overview.py:52 +#: MethodicConfigurator/frontend_tkinter_template_overview.py:49 +msgid "Amilcar Lucas's - ArduPilot methodic configurator {} - Template Overview and selection" +msgstr "Amilcar Lucas 的 - ArduPilot 方法配置器 {} - 模板概述和选择" + +#: MethodicConfigurator/frontend_tkinter_template_overview.py:53 msgid "Please double-click the template below that most resembles your own vehicle components" -msgstr "" +msgstr "请双击下面最接近您自己车辆组件的模板" -#: MethodicConfigurator/frontend_tkinter_template_overview.py:156 +#: MethodicConfigurator/frontend_tkinter_template_overview.py:157 msgid "ArduPilot methodic configurator is a GUI-based tool designed to simplify the management and visualization of ArduPilot parameters. It enables users to browse through various vehicle templates, edit parameter files, and apply changes directly to the flight controller. The tool is built to semi-automate the configuration process of ArduPilot for drones by providing a clear and intuitive interface for parameter management." -msgstr "" - +msgstr "ArduPilot 方法配置器是一个基于 GUI 的工具,旨在简化 ArduPilot 参数的管理和可视化。它使用户能够浏览各种车辆模板,编辑参数文件,并将更改直接应用于飞行控制器。该工具旨在通过提供清晰和直观的参数管理界面,半自动化无人机的 ArduPilot 配置过程。" From 9fe298de49756212b49f3e30618117ba4e5cfd14 Mon Sep 17 00:00:00 2001 From: "Dr.-Ing. Amilcar do Carmo Lucas" Date: Fri, 1 Nov 2024 16:05:48 +0100 Subject: [PATCH 4/4] FEATURE: Add portuguese translation --- ...frontend_tkinter_parameter_editor_table.py | 2 +- MethodicConfigurator/internationalization.py | 11 +- .../locale/MethodicConfigurator.pot | 6 +- .../pt/LC_MESSAGES/MethodicConfigurator.mo | Bin 0 -> 57113 bytes .../pt/LC_MESSAGES/MethodicConfigurator.po | 1891 +++++++++++++++++ .../extract_missing_translations.py | 41 + .../pt/LC_MESSAGES/insert_translations.py | 45 + .../zh_CN/LC_MESSAGES/MethodicConfigurator.mo | Bin 646 -> 13046 bytes .../zh_CN/LC_MESSAGES/MethodicConfigurator.po | 4 +- windows/ardupilot_methodic_configurator.iss | 3 +- 10 files changed, 1993 insertions(+), 10 deletions(-) create mode 100644 MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.mo create mode 100644 MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.po create mode 100644 MethodicConfigurator/locale/pt/LC_MESSAGES/extract_missing_translations.py create mode 100644 MethodicConfigurator/locale/pt/LC_MESSAGES/insert_translations.py diff --git a/MethodicConfigurator/frontend_tkinter_parameter_editor_table.py b/MethodicConfigurator/frontend_tkinter_parameter_editor_table.py index c7f2687e..6e51ba22 100644 --- a/MethodicConfigurator/frontend_tkinter_parameter_editor_table.py +++ b/MethodicConfigurator/frontend_tkinter_parameter_editor_table.py @@ -177,7 +177,7 @@ def rename_fc_connection(self, selected_file): self.local_filesystem.file_parameters[selected_file].pop(old_name) logging_info(_("Renaming parameter %s to %s"), old_name, new_name) info_msg = _("The parameter '{old_name}' was renamed to '{new_name}'.\n" - "to follow the flight controller connection defined in the component editor window.") + "to obey the flight controller connection defined in the component editor window.") messagebox.showinfo(_("Parameter Renamed"), info_msg.format(**locals())) def __update_table(self, params, fc_parameters): diff --git a/MethodicConfigurator/internationalization.py b/MethodicConfigurator/internationalization.py index b164278a..317e940f 100644 --- a/MethodicConfigurator/internationalization.py +++ b/MethodicConfigurator/internationalization.py @@ -11,11 +11,12 @@ import argparse import gettext from os import path as os_path +import builtins # Do not import nor use logging functions in this file. # Logging is not yet configured when these functions are called -LANGUAGE_CHOICES = ['en', 'zh_CN'] +LANGUAGE_CHOICES = ['en', 'zh_CN', 'pt'] def identity_function(s): @@ -39,6 +40,10 @@ def load_translation() -> callable: locale_dir = os_path.join(script_dir, 'locale') translation = gettext.translation('MethodicConfigurator', localedir=locale_dir, languages=[pre_args.language], fallback=False) + translation.install() + # Do not use logging functions here the logging system has not been configured yet + # Do not translate this message, the translation will not work here anyways + print("Loaded %s translation.", pre_args.language) return translation.gettext except FileNotFoundError: # Do not use logging functions here the logging system has not been configured yet @@ -48,5 +53,5 @@ def load_translation() -> callable: # Default to identity function if _ is not already defined -if '_' not in globals(): - _ = identity_function +if '_' not in globals() and '_' not in locals() and '_' not in builtins.__dict__: + _ = load_translation() diff --git a/MethodicConfigurator/locale/MethodicConfigurator.pot b/MethodicConfigurator/locale/MethodicConfigurator.pot index 3ac1d0ec..3096e2de 100644 --- a/MethodicConfigurator/locale/MethodicConfigurator.pot +++ b/MethodicConfigurator/locale/MethodicConfigurator.pot @@ -1,5 +1,5 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION +# ArduPilot Methodic Configurator. +# Copyright (C) 2024 Amilcar Lucas, ArduPilot.org # FIRST AUTHOR , YEAR. # msgid "" @@ -1629,7 +1629,7 @@ msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:179 msgid "" "The parameter '{old_name}' was renamed to '{new_name}'.\n" -"to follow the flight controller connection defined in the component editor window." +"to obey the flight controller connection defined in the component editor window." msgstr "" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:181 diff --git a/MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.mo b/MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.mo new file mode 100644 index 0000000000000000000000000000000000000000..e28e1db9107517e36afbd71b2e21276bf2002381 GIT binary patch literal 57113 zcmd6w34k0|b*{^Ru|4eI9b?KevMj7=OWrNxWi*m(*;>Y00ox2cGd-iWdKr2dNfrZU z-$DX}Ef5ytfWzVdaacn_!T=#Afe^Nkjl>X=#{-fV2;sdvlK1`RE>+dtGa7?=?~Psh zyQ=Pb?z!ild+xcn{`RpCd0oQai;hW>Gr)}xPm&WJlq9uN^)yLdl_tq~;H$yYz~2K` zf?o$$gFgiy53V{ZNge`@g2#f_fv14m!Q;Vc@ItWZ@9zZ9;r@N#I`GTjap18llH>yL z5#agYHU54Ud@%QSf)p{i3skzl1D*{29ykPk1snmt2`as_&L%BzHFza>Dfk?)3*G_# z2;2|8{zU@;M>6`9+M=`hN!1=|Lae7?>_>j+{fILcG1^x>7Dewj0P70}Z`WkpK_klE zFt^(I9UxgG9|ZS+-vdRb4OhAH%z(=O1>iN{7eQDwdGyt;-L3#{714WN7fa0TLA?_~lQt%A$6`<<%o1n_^B~a=9*uOu0gKOVQLG{x* z_(bq9_;~Qwz|Vjm0^b838KrFCIU8O7xeFwzRP2f90)%O?*Df*rQo&!D;d^GqHQ009i_;B!D z;41JQ5LQb53VaB7CY_`No(-y>?gSqPRzdN}JScj<4x9$x2GT{7hwgQJumQY~`!1+< ze>ZqN_!Us~eBwUGM_a**xSs=02Hy)p+T>FpBupOtRM-CF9-jq1lIJe~SA(ws74H*Z z3Vs*u{D0;sf zJPv$6cro}9Q2qJ);G@7Hm?8yF2SwK_K=IEc_;~Pjp!nf~{{BlKO__WjRC`=Qqo?3D zP~jUMUk=h$l6Qe;fjPumw-D#g?|~S^xg@+2K)&~(#b2vky+qBfiD4n_nA)K zjFuf=&w#K_ayzKU;5w!x|{Q zx)VGf{DHqelR}B^Rq!hC%^v>}yqEjas*KU#x4}c;J_;{>_%rY@xamNWz#7RX!Lz~B zYOY^g39jXS1DJws5E3V^1s@9j5LEg97x)~r*pd%)bkn8`U$v#`%i!u zfZqhSf{%p=WSNYEPXNCFo&kOjEP*Gq-S}`BsPfN)$ATXRuL1u6d@Ohj#Jdzc5mfoN zf=aIfA{vqxfY*TE03QsV-gW$QCb*LO^Fi_59*pmO~ID8Bj* zcnNs&ZH^zdfe+&TS)l6E0oDHwfyaZd1=YT9@%P^V75_f)Lhv*iTl}&OybRn8s=Z$c zijIE@D&1qB?fB^g@Hp;I0Z#&-2r8e8!5hGk3c4g6!>&%6G5 z;5n`xzXG1X^S=a72EPq%2LA(8c{e=QrFR(I!2QcWh5Hk56#N$WIdIkOyaWFQRJ_}s z2k(I&1pfp)?fFiAeh2&x_YZpk;}i7$SMVI}uXvH8>x9P_gMZKa_kia;7`^T#PLKWQ z%N<=G{|Z;0ec*}2f0M`egQMJk8WjH=|4XjFo&&Drejj)PI1h?1{usOlJn@yT-|PX^ zA7(+(`J3S5z<&d`gD3nleFc0fD8Be8D7yR;_(Jf!UqQBk9{?5al2zd6 z1iuKX{r(nw6nO0Gog6<2RDQ$YW56w->U$F?exC#H1m6!n1l;uor;k1rJfHg)gJ*&t z22TaQ3f>I<0Nf4U@J82P-VTa>e+RAu{}UVr*Z!KL_cK8Clh=Vy1m6no1%DrW7kJW} zTzx(PK92k3&5r+11fS0BO`z)cVemBYZ~XIr2e)&-^Vc1J-2rao{?EaE;3;o$a;gbl z&ixy~v-KW)DfnaX6!5ukb?@H*Uc>#DK*fLT+g$x`1x1gSfoiXhfhF)C{QDE%?)dmZ zQ1pKesP_G3Q0@N#@UOuygCE!Z9d7(T@D5l0AA*~BzJbP2{Fj1jz&C=T<7Yt8^@ref z;L6`{^lpIXa{o)<82BM@1bpZ_9i6WOFX4Vacq#Zc@Hp`6;AP-9LGjh8G{P!y1*q~~ z4{F@1gR18nLG{x=^7oIu%k{Sr@B=)5A@~UJ;@@=T9|a%zAo$7OPrS#yZ-EaX-0k2H z_#*%ORp4gs-wHk+{0C6=KIXknZ#W-(GWQMetKhGJ*MZIVxpCy9;9BnQ1Fr-hcekU< zjo@MKZv&qV{s??D_^jV@{rvghH23%V`*rVk?Rywp$@6!D%IEW-_~AqL2d|PX<2=o(cX9I0XK0P~*dKA93^O zSA(P6e+#?;T=h{`uQpiW{)6BJ;3*$-{C_>Ddfx^r-H(Ddf?o%323Nz}>c1}rPXylt zo&>%hRJ}d}iobpco(G=%yKbJb0lb|1SAlB(d%+9A?|^&2(?8+*%Pd&q{wJX5S@}K6 z0=@=RdXM;h7w>X#E%$ZsIPk6D72vzTGr;@6)4~4&&jC;Wq~r4u@DlE4L4~^uR6qVS zn1bH{Zw8P11IOo6V2S$~?& z^%i(5_p2As{lM3PZwH_EX;+^WpKBU)pvv`^9#8rc*WP2G+Uu>L_~%~mBJhkqb#m%Pk1qrNjpu&|cEFE( z!P#5ae37w>`}cy+1y}r;E9X1FHQXQbCD-mH@M`Wa0Y#@dumZjre5k_xxts4D51z{X zN#K>#y9DmzzV>COSAQDZ$o5f@}weLDAt8;C0|Pz@LIEzUtzoUvqN#Lhve{ zzYr8(FMzATe+Shc&icBe(?(Ey`&@7x_yKSPybl}$pY#{ZJ-{xg_dfxZ|C7Jr;#~{g z!2Kam@jeY63qJHOUHKmlK8pJr!OOuiXzd6-k^7H=yTQKzRiEL%a`Ji(RJFT>qPk;wAsirN4t*2M81X zUcm3yadR8jC%9&~U&pnV-{0msn@hZ*a-Ro=zpMNYSTwnj=NE%lfSbWMc^T>U*oE9g};{n z@ljCy`&6#Km^*ba{q@Q!%8yD zZ}s&Tg3sX6U&DdfV*kbeJ_S6P_kRE$=fnLYzqfL|lIzi2r|aUKWW=+;Nv@4tzrp=? zxE{*y>)dVcF~6s&?*K+Cax4BN^`cS>Qm*`8+uzTFP5=8A0{j+Njq4n)XK^*Tj`i;!41SaQ zd$>06djfoje|MqB6L|J@uJ3d0=h>IRRb0QzrN62VcM`bHJ#zCZe!raSU%7sn>z}yJ z@L{h7|C;-8t_!#><$e+je<%8I|II)64ER&7+j)Muf47JGmHfU2Y=B<_^;h@r-JP?6 ze#+ncPmgC2=E+=-HhgsJwA+Quj2P^@DwinJs!Lqyan9mpXvEq^$&lC{Idi6 z{x7b}xPFuCJ}&(|#)19&eEvP(-=CjL>zDkqKLY=rYbWpi8QjGsTh&eAnP3-u5Z7^B zW$we@G5o&Q-+b2NGswrRa($0Wf4BK`^!oz;`w8GM_cw=kL!?R1)rq41-vS5su&saT21Q&Z_|C~rHhPN$8^ zWTo9Mw+<6$x>~7CwfWI()DEZRY1OG*tEE+H+N!&vR@;=lrQ#+=v#I7}w@xA5Tk6tj z&IWqMoYGEtqE;bcs9bGP%!~}7jA$vRP$guQK3zSl9kH0KGB?L z9!lFr%gR*R?zGfet5&vGrHy7sF>BR!CtcZ2Rvoe2#~ZZGyn8#{?9wPc_3~`JG&@z9 zE*+}Ztl>(@@cHK@>q_ayN_()YXd7*Rw+H+H7RaLlM9L0v@#H} zR=(}<8j1^>(B!I1tMaTaZLHigQi?^O97L{mhLpk{*fF`Nl#aD%5{s8ytRl=-%AIt& z)vVhy5xCpvRBNs{t>z5;mzKMorkZGy20NTi)?n>+GLl}qXA5lIGWHOuMp{$dv1$!k zSv{=g?NYj(2XG2y@3twWmw3*`i&b7WGgY zpF34)cd8BR2&>bHGL4z_>ye3Ox08%aP3g*s42W(|%IPXkgVL?DGpo{Sy*z_Jl0YGd zk`E+`X+mF;DrfyUggiq3m@Z9r>7|X%xYC%nlw5fF$$mtV;zDD(ze%9Ua$}NSHI=IQ zT(7FsXFG>eB}SOa)OZ$pUa<+AJyDMvfhw_cw1e=Q3ZPz*Cvq>HhLu1v*z6>21~7S@NqkJS~Qf@Wg61K3neWchxHm4Lz;dO{od}@SxA% zHCvvJ8S`%Q%sVt%5XKv7&6#wzi5M}-+@9>V+odx7W>)>C)NIW_c?}ed50!>Gm33rf zw2d5)tp;28I)t87N_R-6sw=je)18B5r1n&04%vp(Q(uRP4yf1%^@|ol{whe5G|8@B ztxc9&>DKOKxxK2*Ad%H#a2Na;q8yng-QA)1JLW2_xhkDQm2*76NR^B<;2%{lD?n^> zN}C@GC|G%_+$m?xM*CG-bp}W!kVUiB9@-6$yLJ!#YoaLSwxjqiMChG!q0^pB@>9GWt0` zG&F*stq4l1WE&$VXj>3lG+rb7aSzTfRe_fkPoVZn2YD=1d!0n zB82^Q>iLK1%oa!y8B!QdC!n=Y$&pV@8?+6tFT_!mVbtywXe?6X9D@% zI-E)Z7%%2t4eVz}dyjCB1Ma{CQU;Z>M(JS<7!sDv8Z>KHXBu{wwyVgK>hxi&OTFA+ zSdhA9l$)!zyX9K-Hm`e4r&(sPdqB-C9n=gdU`BLF8%Fw8^B@CM7~1E`t!lH|j)P3c zi-GnUr&z}199h;__T|}GsT%vsjTtqx>99QTGP+ORm(txdq*ahgPjss_(>dCedUe=q zFDg*4ZVb<9lu#>Y)l(}@wa|`9=x|Dqx$2ZjV&5Uf1oZJPG8s-Xxiek%Ju<6HMovWR za@xrngZ_q6WjaCGDYldvp)Jj`oyjE#ulg!1dcu^+oJFOd)9%Wd!e9iRsCQDuL??p(FLRlM8Elk-BiEcm_?t(Q~jI z_ngs4SM0IL&kFdXGI;>4JtKz~&Fv5-)90;*#-E!^e}LUE!xSbQPy+O*EP1 z)Jy5U{U`@MCqKh-y++YBQ$Z9Ss7$FwULP=8_GGBJn`J8I>mx_V#TA4^XQiF{MB9`u zMr~9MX$rFF80RPu_<5#6i?mF)r_83Kt09+)pD`&q05Q7tG!9n9At=*fGM$PpW4+5W zf#h2u!GqNURoDi#^JsCLY_^%Fg!DnFZ1j3R&r~M)$ydgTNLpqoIZH6 z@wW0@t=c%SYPeIb9Z&~vS6Wp@IaDWxK^J3+_LG9@ADSvkHm0qmox`(~#uQ>ry-E@^ z_68kxu3W82EanP?-q)g87~Iw;8_FG;@^Cs@VGJB?!9sJ*T1WJ$cTo;C&ubpE5g3hA z>Y#sJjJP#>F(_WWe5gO(encWl_+gt*wksW2P*V;0%~CRo@SpG|1nW9H zk@CyvfOa3n1v(|&q|r<_k6Nd2BP|4zl;m;WRM=@*Z89*~o-zq;qx%)^hPbUxRCnxR z%rJE*rOa(+pp*O8(*)_c8%DNo-?Vdede)Wc%9Q(&J-c^|ZP~hG_xRpTJ9ll_v3+$i zT2z}l75b9R<;`qDr_hvFX*J2?AT1yc2vjICd|Q!MQ{v?%=>xVjqei9_6aoz=!4#3x za+I_*6xgy)MuahMY;?`g!7`k3DU3=1k^1V`Jb;~To|8^A)jW-9qm9!Oq~V}LhoPh}sq_SvL5!I+J+s>050_fP?ZdQieapslCDJ@@b@^J4a}N*t6Nuj-99yEXNP4lE{#k|{&T5SfLn_gTay=_}h1 zq1~*ZW=Qabils+F#m5g;r;zpY=>g_+Ce@~4Z&KIbN+M=NfT@;ai151aQkI4_Lz7g` z%2KRfHjba$ZgyLfmDL#mqD{dytMRA$pd~}Wq~>{Jhnu1?N;#{9bUiI#9U&;TptrOYA>qtq=|1`*DBoA zbjfNOyImBg;Z0$Ti`KbCjW3uLgLSCKIJBM=vv+wukhzJsRmYa<{#YT5-t>!{Y=GPI zfuJpxo9sO=Ww50cWwEeEt(6(VY<6|j=7IvDDaHI6G&)_gdx+tEbe{z#Y=o)w-NSwm zp|?6ayOi7M>56PpCca#m6oJ%b1XSWawc++`WwJWWJa&o3MZxy17B#S-;2vzYOk0Rd zNAcPkpM+AWn^yow3h$Yt-tuvOV$l_ zr}B^1U3Brq>yk~aR z=P{j<4s6C^EF`(gHW^9=&_Oalv~+^TErg-b!OtetG(bD5x65-yn!`f5s>N_Y|2tZO z8PWAi3U4U9Ut@!W!H5{SKq|7<(GX~PE(vna8CY_miz@(GfQZfuL@#dUZa5ieHSA9ilLEma(}qp9|_1lr8aWtvWJK90vQO z@A{$sMEa^u@sG4BbxN4gBND;qTqFUL^0XpJYZfl`;#d}=csto#VLk{C(?;1V8&~}J zBs$Sc`%0W_*2otZcB2|7z1zL=V{cx`gu9ppW~I+9`)Y}^(C2dHDfV(pBhAL<&DB=j zmTUHg6#zt1d^lZgp-5ep?ynre5-Ib!_az9k;~7Y{zudM-@iL;(>juYghK%WhS%T~pv(4A^Mo0LgRtYlVXGqlw-kJ-j#1Y4h6=jN^Gy4G)^ zsPT>($(C(iDA|wk~EST)p~avOCSarR3ld4GqxKF zYf!;#(Lw2s(__i;Tpn~CrNOFDkJ3q|7`1WRNK33r#3c!vo3*-5i(jJbDEI1+)y~z) zmY{nqr^~EQR~?bGH1WI2iz7)U&v;ok_8t~`hmtrMC&M;!)n`##n1`>Lo^<3I?apx8cU?%kF1J`cfwF~>&WCd-q6;m*sExYp$K^udYP&9SN zAdO~YSQ-WErQW(PrTyBmUE{l-Hnu5UIenCn+c3+G?c27@(D0G0u=80J{gZJGa7`Rv z#v9BN0zER85mS|tt(tpg4@F7I4XyGZo$Rd}Zs>CM5>8RqGtJLE@RL}qq@{FMr;Oha zyl!JR0b3!DVk#1XaU8Mqh%Rw$O<7855?{7ryn|(gOMIn8x}fDDl?GWjd=-`va(%Lu zCc~?1Yo#%Rj|qkGgX7As@ys+9!inHu&MhnrH*KyGqOnYmk`WupEz6P? zCJdy36CPRV*6Syh=UnZQMOKlh!I1`nACHfklj809tmDd4Kr{M|rt?SW@#EcwH}b~7 z2P(6+V#n%bU=w3-A`l)zkNd~tjHTtNad{%d$P#KHmfjAVpF$KIa)XJqsI)6aiQQf* zM^!qX)*`to{lPg?CAdcQWTaIQkVv5bEKswi6Wttp69zA}oB zpZ=*qTV>YyT9j17t+>y*gJP&Pmxy3{*ZaQJrXWnxI>U@xkJ``e@YMCA=h9`!sU}vtiZqLYiq3o8=R$_d#av$DgS)A%|1U zCDKX;5=b$|f**0Z*>s_pRR4OS)Srf}KhmmNs;NvlpHtlI+Ep#Vs**vRwvp6-_GW2ra$tYaju$)yxNfqgi{%0dgtb?i+M^~?A zxLQe9M5ECAJ||7zU>e|#@_vmYuKKRG7L*%KPgcw&WQQm25LF0+WuF1xNV~i=MA6}4 zFN%keMX6s+fGeV8T4s78t8~9*RUkBHXk=zm<76lvW`g7klqIf3));02g1s*dCsi1GO0mtmB)iG zrxr+{hiT(lPdd6nY+}q)7~@{ zW(~|l*F+_yFP4SE!RkPiAR2dJSxCt`>AC1&tJba!+KlroW#vRu8^pcV)>-#*^fX#( zmx%TKLbI*PN5qt*ogwW5qIOmw4GEFM)N>t`mKA7l7maBb(rBj)b$I%q6bDl(Egh-V zCn=VZws+ofJ~q~z%CY|`J0M)o@WN-H%Y_8Id}PWqXbHwM17uq0lK5VlFEaVDktOG+ z&I8;rf{?a5HI1~oWQTSJwbHt@?MS1%Te?CrV>M+#-RLN7sUTyc)})b(LK5_&WQP`K zZJgdCoh}U4qlH=K#$W_caPRx09vVi{WJk9%+?*a}zk%FO_S&+#oVlF^I{HtGHIuP0 zglE4@vvRsKIyc66uSsX#ILMEc_=Q?Os^Kw=UkcrV4&YSobK9%a_I|SlG0w_5Zc7-- zuQVu|kT6@YNO&5HbI=LYX{3g@tuxDtyPPOLOEx~vGLnBF2&49NBePc!G*y-;S=lzL zYHT(&)?$H|5i*Rnk-43gQAplvs#uT;kNpS_UBuOW!T?2s@}lHzI>bu8SpwCxBar3mV=T|zvsFfN>Z9X4@2Avyq8Lc^JBMOCu1UC+hcEM537?qLE z8KFu;Aqn;~sK`c9;}j#Hw{1_wO;6)t!4wm5R7Qpv>DXSzWLIu@HqX^`D05rV=qGc! zFIhXwG}B>>KSSzh{^rIepFbnGI&>Xb-*(0lR{BC>MhvTFOje$KYe&$XJuH!Q38h1-m!#S+OAktdcU3{d%S1>Y<`8U>3G%beq;D$EnZ zO>witBsEh!R+TGqM5T`|S6L|co=&azSwV=ZfkJU{GGe=d+SfCuw)J^^&`tV6cZ%$; zxS@<$Jhv0Dq$F9rgWooEXSk7ArX!*=Yj>9Ozm9VOg(iSmg*W#u_UWD66^X}2GRzGgqgcu^gGj*_PNd0eln(cZQVnhKEF;rVw)43>#ST(+J*S!2 zo(#*eX-`QqXg&56SsrJZK1#0>cAhJIDKh`W0#j#0m&lZBN9Kv>$%A*yn9N{M?kh&G zDJGPoAlo)nJ9VkwJKRwPF${E@F0s3zQe$X6)S34$==G6+Zaac6sHeJ(8S0lePu)B< z{^Xne7D;vOGGbFClPcr)6FWwdevdI%Q-LgT(>`~(X@J_X&)dYPPqoA7LMo9b@O2zA zADpX`a{GZ%YMesB^hr8a44t251|E|>y)oMZf-SG@b5=$ND>Y&>E;eVovy0~< z*%bS1y_8)Z*Nr zdNS#Gs}-#d3SKBn&XGce(8!OYOtQ=QDW#j`!;|bb&v=-}l)f;z*46}dm)Hw)+9*k> z9La9@E564R+pJB6!$4$0lc$@Mpec4Z(hfn%LkN_P9#t~XtQxD1F#qt$mWD{DIiX!1 zgIGI1a<`=>JxEcF}^$O{$?8RYZw2G>zOJu!RO$KG{ z)Kg6l3xj2tfMZ!VCY2upW`ZVky zjiBy|Ib**t8?&Bl9%YRnH`p>|vpR{pbOsM4%sV6ZEP`2&yBbPR6+0mY6!r0kv`L5x zm0IcFYnaiy4RFeTG^(9Wsh}V3bLanvI-;A`56W;mE7L7W9Ur3 zz>IaYkJVM?gGDN~(t@aiQIoi;ud&ch4*{Q0Mz?>PX;d(=#`ZUY)oA zg`HF#3S7a;%J#i54;pvR=3N>n)@IODm-Q2+#r8Aqv0V@3lHb}B?lb^HO*TvVCo$nX zSr;>}nnFHcrn7{q@(WO{;uMS-ynLrjjuZ|RTf;cJr~yfpFhQ(VA~GwrCUXW;#D)y5 z(e>2bG%2H*8}}VK5f^cb)JmVAl+cyoFdG7(DHLhluWhlU@6uCTQ!Dn!9LWaNu!Y2r zY&{Y@j?l(5OHTi&Q2r<~BZ`wuy>^d8c{2p$mUoO^FfuP@&xO-na4CukyCMY5>_e6f(}%}*2e&m(vjVkc-7~66|(71rDtN1 zC91;|Du=WKwW{5uVQmP@bWBV^#AbSz1%=5AUQF_-$VYJ^bh>0`G}Oy;-q{>KciR@~ z9Axa}obMZM8wB$X+nf;+%M3G-B;tUaDF$xMOfid?)Vg828Uk9(-^cRFK9&MZBrtOI zc}^AHMk(YE1W5MzdAd(K8g0|)ggF}3Z}u?m)7cGiY;YwjYPGfkVkfmMUfg^lC|+(v zQq`6dnR7wbC;Q|$B}<@U_)dkAw#e9Lg8*C*rd4!5OTb6e$hWfX9+@A;lC!x!LzpEc zCi4}Eenx{{M49HYL#ddo(B*=C0!25gO-bgU7(uI9R9YDo4ORHxMsr>AGz=w|Ma}?W9%F))+b0$=Kv~3Il?|JjOln>%qu^3 zztmYfs8ca{3G3*Sal4&Yw6M(96ODDO#iPjzG9G$fv^17FoT;Pw*m}5G6=gAo2vr=D z37(zC!gyi#)Ks(KuvOKKdT^VyYmdiJ>{#AEJZ?CHVrH2po@!sOluZ!%>8wnuY~r6h zFvH21Xff<~XyTV@%8aw2&@aYoO*Ro8p-%G&drP!WPTL<58=M^H7h^+z7&LhK-W<;q zVLm6XnEc@)QWjbj+N4Ad&M=$JagS(#F+o}yx0h@Jpk|GdLQ~?L&$paAX0cCk{3tA|^*D3RfZ(PA_U>WI^uoyQSI6XCdG|_kiCQwGumhWe zFKc0W?ua+`S)j-|)J1!)w>2>n>P-(Iw}t#fyJPo;t(3 zv6!_neK%X{;~9Q-N@MzzP1{DcY`tb=?BIARQMIJ`ccJT6m9Cu7$f6KE#A58BVvjqifv*q?G3Dl1XLl<-K=7VnT8{^ zH~=oawcJoT<%x3j5M>?-`(aG}sgC4D6cTVQ^-PVNC=}%>^1>ZTMFOF$fxGu`WeWwv z!4EVz@*0l~*WUTLP4R?fHV@GR9I?E$QZ0uQmc<1bvGsIklRmD)k+&<8cI8$r=2m99 z)rGs7?WWEGa)(>@(m87*nn1ShcC}R=F4In=h58=PS@yi=Pg;gCXb_6f(UujXNQIo( zVZQM06b@4P+=olG z?o1Ba5zqDL0_DzqE*FcP^zUHVl;}&N@Grh^s-eQ zsxWBGHLZ_n28>8;W@*Ik5e}_@p)e_P(z&D@%R!cCPSW(A35`8_Z*y|tJ?Ja+u<{IX zIR=%&AllW|fo8_<^lJIv(O2x`L?Tef$lH*J$(i*U6O*ymu!#vS8+bzW80-Da5v7YF z!&_`EC;LSOK%FwyeABz0&7r#ZU(va(dEfbwNT{%oOFHt1`!iqutXch$R?M zj6$TI0g)#eznhfHTA)FU$SXYo<5b^D(;nK93#wiYl~}D1L7g1ckljBV_athTKO5&E zG~N6Tq&-JXFWfyT9>}ai>o2$oh~tFRN(Qcyb>t)1gfj3d)mlJz7>&pnB9C+4QnOhDOlV`J6_@ zQR^IJTxLe5jzSYG$~*3CYV~14J~OD}}b$Vvve5_+zrN|!_QpaLgS zQv+B;iZDkrOZSmRY=aN}9#Z1G@?}a08|S+ck)eF9?yiuidqINc3ZvtxO_#Esp_8dO z4#F|CrOF%a29&i zgc_@aR2p-};8elafEV6&<~44)KL;H^gvwH>(RmhYiXMS25~1tl6fl{e^=THH|K$5MJx}cD zN>btseYg?VRwlGAf+i*CcF-@2wMNOfo`?#qE%9{T{&sf3Orx}3t3-SSRKP4fO+mbE z+4#}MJDWigLp4FvG5<1gkqw0_HknegqDUnhQ>r#W6*Kxkh0LwPFz7wD|W%j zo1d-q)vV-^uMWNuuSj4j;3c^a@q8PhOlaNnP}ZZJa0 zGAl>rHe)VzL}`r7l`DtPP0&K~d|y~TxLRX^n+BL8?ZO?J$}av8#T!8xU2grL?Yb#j z7w{jFnFsAk$8@V8xGCli@=kOBX9$&B6Vi~0VPQAtT3e^mr&geo^05-(v=5W{1tLB6 zhj@?S6wmPNWT~qL3OQRS7Ve&_V2L&*3VR1eH2q{+w{W*AC}K}8yt~$wbw$HC9oJMU zKhvgOj4LWXLdD0G@r2o2@&0E?h$_L$<>W?2in=dMC_zJ|H2<(F3MJ+-X_!z)^Brr& zDbris0pMfVG*cA7sfpvjZ7fM_x~*=-mJ!iHi#Pq|ENW=tz;fNMX>VW#G!T;jh?5+@ z=2xmMj?;!q$+o7oJER;5gXo>jWM}y{t4=xH)}1Oh&=!Z1E!c^ez;!r0oDIzK?Bsvx zxE2ztqB~aHHe#HcKSX@+S%YI`rj3CC^186uuc8ssLaZc-c6S1ekuO6?3eGMTdA4k1 z<`A3vm%g8E;jCr6vuqXCSTk4zxAI{)8~FM~XnOAEQFakG*+;r&NPA(}7^SnuXIO;@ zqku6jYDq&sDnmgwi<4PNbL_#qM`yse-YZ4c@rE0u80yN&QiZr*`3Jc!K63WfbdbdH zwn-=N(f(D`mWd%Gj@l|PB+tB>-T)>Sj&aDlf7qnF%$`+%T+Sc$OG|(~ow%xRWf1 zGJKkC5z5%2Aa)1!dYby0*EPIj01p}Uj}q2Qk;%wJOD6f;tgM+Xe7wfa z%U%W|lS1?6*i;5|Q-!Q3E|e|x=uighfq@fHRHF6xRt82l(4hnSbuu%ia#DB}N=#rg zw9xRPN7e?tvja>E+RM0bH_HPsa*hc({=oHe#g@8gm5zpNjQtZ5M2-b10m(G@f+vm4 zm}<-XI^-ZsV|9#(8(f(-v1*RvjTtb!g2=}s`S_F8shkM)(Q<~>0lbkr-`r^%a^j>d zgWbyyGNvJ9>KJG0hof|zB+c#vA3_BkbiP5$R9$)SK|&cBqn^{YcR?ib7WPqSdy)$# zdg5Cd^vTF~_;&=>YvRw2?Ca`q79({2jPs3Ej$zf1>CNHf6w`1ck(xWV`e_D%O^4)H zM{Ane84fvzmd=-X=|j#5#;JAp^N@2pMBD5WsITmX?qBx^3~j^KCcF?7+8uSSg(Y}P*HffT#ugkb`i$}?9Y>^6$iyylRQ(XZLaS~!89zZo2^%%@9aLVd~IQ%!1WFbB)wT)?8?Py4Ds}m!C<@O+Os5L+ye9EQmQL2(`}5_id!q z4d6NYMnMAS2H5=ST3&jR)FA7fm%GYN9nRz{?3fd=^5OHArk*jCV48?(Zp?JixZL{r z{VZ~cQ>>$v51$F0u&#x&9$|NsNq&DC>jzJTun$hDFKiyQ23f`wXqQ{DL;eOy&jIYk z6W5`E6XU^s5*fxM8N+4YiR&~zNA4}$!Q`yTsp0YofpI1L+|++o&J8QI=M$?ZlfE)W zk{HaU$YOEdK-n8DN5RHn0O;EfO8bXn*U`16%X3Y>{5j1)Vgq1^mYcR@Nf)|E);nYb z^6H3I{20R_El1?a4rIc+oZ8@LBbW|k_f>V1?v~%>-|ckk+!7e0*aVuS5j7pzj3@IIX=$(x=-ijs2#` zGRK!HKtT#}Woi8?uX*gv3=HAyb`yMKEl%#J;)=u>?(Y0{PIAX6AwM+CM-Wbjx7(TQ z{La}Xa3#AxF@vMB(@QMtpqs>3N8;)3_oKUp;RxqXnZoF^qfy7Ez(plxFD_b<5|z|W zcGpQ2(%c4wwPNy(EnWtxq%+=+7S=CTXz^(2;Q5l$v_0xnvKwW}n!Q!QbCfkCt;tz$ zRT26lnAO*7&PcKRf$(lsAE9d2Sw0J;xipgj^>TTGQB-5ExULw!t>?3o5wNbsN?XS# zcMdCIOFf_NGY@MPr~wZN>gG`SBj=AEy7$=mqsM?1 zwX$%uqvxG{B0oH2N=+$Qc#|_5j;XA z4Z9+X*^|l(clYNU66_s5Lt5(0K7Bk7G@|yFJ)|I0Oa6V)WEREv_dU;VD(%y$9JRHBk0Y_&;t28aD%JjmCZ8Ll(cCgiaTv+Y zw6_#^8An~56!72bACst}_CV788jc_0Ny`cQhIBmsGE+%{mY*|3gq=rDKkpenwRQyi z=neH0a2RuB%6$(jXex$sJYihefrD zozPCB7UE;ymqFL4$nWTXp@l6<^}!)Q z?c`my7C*Y4Ow6+gkHgGO!1Kj`^WC)xp?G|KCQ?kU*VwEhCqT!rp1YV>KQu0o>__JI}3N%!e~!1?3Tmi&GE?xp)<3* z6k21+0t`6RUW4_|QW7YEF;Y&OBD_8=6}+){+*2e1)GJJ&H04URRk{-Udp-9syUtGl zWc)#?2^JvxX~(0AFz$uPEUA`3qQgh|Ml5=F_)~bD#{%b*XhGM~FN)AWzGR0plms`F z@Z9r*8e28j7UwK&@v8~ z7?I`Z5Tr`~5&F_3CRj3)*S+tG&X8Lg^3JMefH1Dh`#;!JN|9}9tYt}ec)l(91`&!K zVQ92>r-s6s@Cp{5zQgn(8Z-MS=cr{fy`U5bAR-lwv}tshv(*W|_NGRcuK@-P@5i5( zSs^ZmgvyNRzQ*K0k+{t#tcjJUc^IHKW-9}Xi-xfFfNTO&=XYco)DO;qZ+HAJ7 zi9`>f812Q>nk*OW9vSU=EM?ZM7Fo5=b=g?BTql$xoS9V30O#${uH%RcqUT2~%N%ms z>TMuc)}slJSCp7Czl7)K-cX`4JhKJ)8j2P;)A(W$TW+p}hENHMGPbxPM$;>2IEA4*t7O4woFh=* ze5@yZTcy*th&2@|d{-dwSg4Qmj*Rd<#^_v0f^qEUE2j7>l zjAs@hSdmKg%uCc<=uuE$0=q5GvYA$a`HbQ^ z@k9NO&_RVFd@f3u<@5+{F#=*{vN^;L=&l>=ujitvXS&gVuN@$Hs8_LypFuEwpdgX18ME2w9hg8}(`1%Wez;lWJ30D}n~&4LwC&Y_vFUq~k>GY>yd3?8^$y@@vv2YC+z5 zrlE!W+t_=wF@bT@8***wHTHcoFhKAe-Ew}C(cOaX>DV{uxX``cs+M7n@yv>{TafxUwz*I3f-y-+* zk0Rdv241nTwy5*+fr7Yp@3!h=7txrLeQJV;NBH6d2|EiM^v~k()GT_--Ta5#jOrYR zk28Kc+p)esk)`TbUM*B`L3L|qrk)n{&Q-xlLJMR%*1ElFXtv2}Fp{p~e7l_0-23Eu zhgDhy>mC*+DXZ?F3fn&tDblCTN*?>jWvLQw|E`I433YNa>lXeOmXmYXpafJ~CQ0py z!RVgRAYbV+2a+*5=rhacZng(nn^0_}Q1vR%{iuN%2ZFb_zF+~P4-Gu!z&y$ro+vp{ zw9|t&iDxIkkQ|wc+Oe~5L3fE!#ec3s`$JsUusxI7;{h*eWQ2@4Erka<=EXikoW&`y zbv`s{5CQ39ii5clnj4+dkg^?_S)Vid_je4^Fm+I?K0SePL>$ZHMmQ$K8-(@kU!r*P zTf?M9W;b=pfmWOS4hvgnVAntlnnTRm^#`W6%bFz zd^v;dNrOo4lNeUoTy~i|rP0v@XpshrZ@Ca)m*0LNhnS!!`R-<4$SC&2eE+r-oSGsJ zcYk_9E=2f7hU0O4CSw$Xo{B;nw<>Pva$21YExah_r=^iA6=k&FzGt5lX6xg`!aZz= zGwS1Ruf>&o{qpX5tqq&nzRHfHA>*Q*iDLSvBArVgzgpwUfgBaec zO=xb0p5xI>-;~WMOymppjGy1RaFK**l%qHr22;nvyP3V@rm0hvoUdWOvEu=9Hq45h zcb6ZeLKV)ph?~1?n`tmsqhayE6my)x;bY z&!&G2k&E}=wr^*&tDzBAdNJdQDSOTC#&XEB-u<48hSj=ls>;ghwn;FKn=TTK0E1{% ztn89DA``04Eng#T7|U%&?fp-OvdZVlwKz|Bf#c=i(gj3*?eNELNpgiRd>CQ!LOj=e z&Os;txsM%r+hC6LHYapdK@0^mUT#D+NmcIo{)br32Jl^0_a-GZ$7tV}S zMQzc43dHyui}!!Z;4@Y(=1;DQP7{EJZThmk+4w5@j7lHLj#aMl!C8?4D-1VvY%*{+rxa5 ziBrpR*?ZAV?rv#XlO9gK;6xioRqsO=4x`C3b@{2nei#|hr^$73StAwFnwHXrEu~sn zT(p^oc0nRDK(hHw)F?#Djd{+`L2O55f>DL=v69}ouFZI>wRd?qkLolH^xn-ff%mZe zZa+{XrB?&R1>gQ42KFR}wVL>Cn}$7PtWWH^Te zE12IUrE$%*qTeRK6hg}1Kyj2p%}mm|q2A8C#>X+_2l>d+{C?yB=1Yo?(koed=Nn9F z1K&Tq1E*9aw_@vTXbdAYJAJC)G)4NkycH#9ho&uDb)}}cko_e%Y7m=A*yl(xCuP_X zjatrkR!Z~BOq|E4I>;{bu;s%dw!$XYca~*Mv2xoIY4F%XGq$$bLZAW)uo^C!5DH%< z(b9utl=1E?GQs2`N1EEwlji?R$MmKP*QUh}lZ;t2PoM)!Q(Jhu1cl!$KdAAkt+@>` zosEJ5VhQxiV*JB;a$)7f4kC$ByHt13mr53my5u0P?yL#_QHtcW zAr-{!yv>IDOp-x$cC}~UDk%)D@I@55(KR_7QbX=b)+)>08Q?9a{18t=`0)|K+1EBdO!Z&y_4MUOfIl@$5S#n=nVfTZ?((`*O-oU?(Tp`YQ#I z0f1HZa7qq*J>Y{Seyp=%%WCB$H*JXeoiV*>m;J*#>xnyZlcq%&T9$Bk2%NfA?}nhz zL3`HhuTC~;QU(;>P8+q9Ili8dP2a7(oGU8SfZ62v58N7r{+13yLT@%t{ zmo}faviYfPCk-Dpu}qmq;jYD*F@rKjB=+abp+CV$Q)WqHe|54}(aMK?DrnK{S;;`s z>uA72_V=UCxQk?UmIwT3JS#AltNXsm16}KqJ9W&+%^~wYPqjy+W%$!xafiZmr6uXC z&7)yl-N|exZaMaRe}+cX@yml)FtP8PbYTzKUE}o0yQrFwiv~&i;EBx7N!TM|r=2jG z%Js&dhhkBJ^VDL;ql{?Jx*a?fI9wxUG%#qF8K3Q8j6q3tqRb5orXr~ymlydKijv8x z&Y8-;=-~^S?3klOpu-7ul7iic#$HJ<`KL047x})QW#NRvV7-NYQTCHdHxNocS?cJZ z9yg6&pb|N>Mfzq~P}5RLzbw;&eg1f1`+ka<6&F!1(CBDj+3}*2Di(SpbwP3#s0V{; z-^Bf-6nj#YF7hhw%UJgO{RCE^)DpXVs53Z6Oh?!K^V zoSH|Y1|+R7cXE!nn5~y)(RE6P>MXgFoQcfd&#urLwNc28woYw@1O3vk`}RugQ27as zX?{7kIj~62fHOsH?lkg_Z(g7e40V7e?YrFxAzBiO=ZuoLv*R-S0ps#;5Z!mJMg_w}Vn}=lJx06^3J4B`vaz zlZYB0D)eFdJWQUZ%dqMN@uQBjEK6_2$-^aV5=<^_9nQ+DDG9b%G4B#SzxfzZ(1sJ9 zk`0x*8EKG}rf0csTRdMC(rCIerZdzyW6bi-31iMMq1-*Q1``TS#4ReS7fp-4=l9ef zErosdEt!#Mtd=X1NdcWhy~wdmHY7^blA$-OHn|h({LxUhk;q0@^NL$!sI-n-@Y-ez zHk|8ymTb(FMZ^590xtv)scdYcIJTJL+FnbIe(xu7WwVk@vs1PCq@qru&0?DDU_fx1 zn{&*wv0Y-NLDaxc@q`v8Rm?BkM`eu2+q5kLxrn1ab{MxP%{mQv@+lW2vSd%b^*i_x zCHluHL$;KY1Y7IU-H1Hii8cx$dV5(@btJ26a<+tGmzA(de#?JG9MPwVhEC95xbG?Qr^hvV%8(#Dtm4h?J`P`?(HCj5yG6f8<7Z>;gEUi>bL)7U z9^%j*Qv)DOrBmD~o!7ggbR6(88hyxR;Kyh-_W0q8Nec(<{9 literal 0 HcmV?d00001 diff --git a/MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.po b/MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.po new file mode 100644 index 00000000..f4687f16 --- /dev/null +++ b/MethodicConfigurator/locale/pt/LC_MESSAGES/MethodicConfigurator.po @@ -0,0 +1,1891 @@ +# ArduPilot Methodic Configurator. +# Copyright (C) 2024 Amilcar Lucas, ArduPilot.org +# Amilcar Lucas , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2024-11-01 12:46+0100\n" +"PO-Revision-Date: 2024-11-01 12:46+0100\n" +"Last-Translator: Amilcar Lucas \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: pygettext.py 1.5\n" + + +#: MethodicConfigurator/ardupilot_methodic_configurator.py:51 +msgid "ArduPilot methodic configurator is a simple GUI with a table that lists parameters. The GUI reads intermediate parameter files from a directory and displays their parameters in a table. Each row displays the parameter name, its current value on the flight controller, its new value from the selected intermediate parameter file, and an \"Upload\" checkbox. The GUI includes \"Upload selected params to FC\" and \"Skip\" buttons at the bottom. When \"Upload Selected to FC\" is clicked, it uploads the selected parameters to the flight controller. When \"Skip\" is pressed, it skips to the next intermediate parameter file. The process gets repeated for each intermediate parameter file." +msgstr "O configurador metódico do ArduPilot é uma interface gráfica simples com uma tabela que lista os parâmetros. A interface lê arquivos de parâmetros intermediários de um diretório e exibe seus parâmetros em uma tabela. Cada linha exibe o nome do parâmetro, seu valor atual no controlador de voo, seu novo valor do arquivo de parâmetros intermediário selecionado e uma caixa de seleção \"Enviar\". A interface inclui botões \"Enviar parâmetros selecionados para o FC\" e \"Saltar\" na parte inferior. Quando o botão \"Enviar Selecionados para o FC\" é clicado, ele envia os parâmetros selecionados para o controlador de voo. Quando o botão \"Saltar\" é pressionado, ele salta para o próximo arquivo de parâmetros intermediário. O processo é repetido para cada arquivo de parâmetros intermediários." + +#: MethodicConfigurator/ardupilot_methodic_configurator.py:73 +msgid "No serial ports found" +msgstr "Nenhuma porta serial encontrada" + +#: MethodicConfigurator/ardupilot_methodic_configurator.py:82 +msgid "Vehicle type not set explicitly, auto-detected %s." +msgstr "Tipo de veículo não definido explicitamente, auto-detectado %s." + +#: MethodicConfigurator/ardupilot_methodic_configurator.py:84 +msgid "Vehicle type explicitly set to %s." +msgstr "Tipo de veículo explicitamente definido como %s." + +#: MethodicConfigurator/ardupilot_methodic_configurator.py:115 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:121 +msgid "Error in derived parameters" +msgstr "Erro nos parâmetros derivados" + +#: MethodicConfigurator/ardupilot_methodic_configurator.py:140 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:186 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:373 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:394 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:421 +msgid "Fatal error reading parameter files" +msgstr "Erro fatal lendo arquivos de parâmetros" + +#: MethodicConfigurator/argparse_check_range.py:32 +msgid "either min or inf, but not both" +msgstr "ou min ou inf, mas não ambos" + +#: MethodicConfigurator/argparse_check_range.py:34 +msgid "either max or sup, but not both" +msgstr "ou max ou sup, mas não ambos" + +#: MethodicConfigurator/argparse_check_range.py:57 +msgid "valid range: {_lo}, {_up}" +msgstr "faixa válida: {_lo}, {_up}" + +#: MethodicConfigurator/backend_filesystem.py:116 +msgid "Could not detect vehicle type. Defaulting to %s." +msgstr "Não foi possível detectar o tipo de veículo. Usando %s como padrão." + +#: MethodicConfigurator/backend_filesystem.py:237 +msgid "Error: %s is not a directory." +msgstr "Erro: %s não é um diretório." + +#: MethodicConfigurator/backend_filesystem.py:424 +msgid "Intermediate parameter files and summary files zipped to %s" +msgstr "Arquivos de parâmetros intermediários e arquivos de resumo compactados em %s" + +#: MethodicConfigurator/backend_filesystem.py:469 +msgid "Parameter %s not found in the current parameter file" +msgstr "Parâmetro %s não encontrado no arquivo de parâmetros atual" + +#: MethodicConfigurator/backend_filesystem.py:477 +msgid "Error writing last uploaded filename: %s" +msgstr "Erro ao escrever o nome do último arquivo enviado: %s" + +#: MethodicConfigurator/backend_filesystem.py:484 +msgid "last_uploaded_filename.txt not found: %s" +msgstr "last_uploaded_filename.txt não encontrado: %s" + +#: MethodicConfigurator/backend_filesystem.py:486 +msgid "Error reading last uploaded filename: %s" +msgstr "Erro ao ler o nome do último arquivo enviado: %s" + +#: MethodicConfigurator/backend_filesystem.py:501 +msgid "Starting file index %s is out of range. Starting with file %s instead." +msgstr "Índice do arquivo inicial %s está fora de alcance. Começando com o arquivo %s em vez disso." + +#: MethodicConfigurator/backend_filesystem.py:507 +msgid "Starting with the first file." +msgstr "Começando com o primeiro arquivo." + +#: MethodicConfigurator/backend_filesystem.py:510 +msgid "Starting with the first non-tcal file." +msgstr "Começando com o primeiro arquivo não-tcal." + +#: MethodicConfigurator/backend_filesystem.py:514 +msgid "Last uploaded file was %s." +msgstr "Último arquivo enviado foi %s." + +#: MethodicConfigurator/backend_filesystem.py:516 +msgid "No last uploaded file found. %s." +msgstr "Nenhum arquivo enviado encontrado. %s." + +#: MethodicConfigurator/backend_filesystem.py:521 +msgid "Last uploaded file not found in the list of files. %s." +msgstr "Último arquivo enviado não encontrado na lista de arquivos. %s." + +#: MethodicConfigurator/backend_filesystem.py:530 +msgid "Last uploaded file is the last file in the list. Starting from there." +msgstr "Último arquivo enviado é o último arquivo na lista. Começando a partir daí." + +#: MethodicConfigurator/backend_filesystem.py:594 +msgid "URL or local filename not provided." +msgstr "URL ou nome de arquivo local não fornecido." + +#: MethodicConfigurator/backend_filesystem.py:596 +msgid "Downloading %s from %s" +msgstr "Baixando %s de %s" + +#: MethodicConfigurator/backend_filesystem.py:604 +msgid "Failed to download the file" +msgstr "Falha ao baixar o arquivo" + +#: MethodicConfigurator/backend_filesystem.py:612 +msgid "The type of the vehicle. Defaults to ArduCopter" +msgstr "O tipo do veículo. Padrão para ArduCopter" + +#: MethodicConfigurator/backend_filesystem.py:616 +msgid "Directory containing vehicle-specific intermediate parameter files. Defaults to the current working directory" +msgstr "Diretório contendo arquivos de parâmetros intermediários específicos do veículo. Padrão para o diretório de trabalho atual" + +#: MethodicConfigurator/backend_filesystem.py:621 +msgid "Start directly on the nth intermediate parameter file (skips previous files). Default is to start on the file next to the last that you wrote to the flight controller.If the file does not exist, it will start on the first file." +msgstr "Começar diretamente no enésimo arquivo de parâmetros intermediários (pula arquivos anteriores). O padrão é começar no arquivo ao lado do último que você escreveu para o controlador de voo. Se o arquivo não existir, começará no primeiro arquivo." + +#: MethodicConfigurator/backend_filesystem.py:626 +msgid "Allow opening and editing template files directly. Only for software developers that know what they are doing." +msgstr "Permitir a abertura e edição de arquivos de modelo diretamente. Apenas para desenvolvedores de software que sabem o que estão fazendo." + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:60 +msgid "Configuration steps '%s' loaded from %s (overwriting default configuration steps)." +msgstr "Passos de configuração '%s' carregados de %s (substituindo passos de configuração padrão)." + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:64 +msgid "Configuration steps '%s' loaded from %s." +msgstr "Passos de configuração '%s' carregados de %s." + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:70 +msgid "Error in file '%s': %s" +msgstr "Erro no arquivo '%s': %s" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:77 +msgid "No configuration steps documentation and no forced and derived parameters will be available." +msgstr "Nenhuma documentação de passos de configuração disponível e nenhum parâmetro forçado ou derivado estará disponível." + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:89 +msgid "Error in file '%s': '%s' %s parameter is not a dictionary" +msgstr "Erro no arquivo '%s': '%s' %s parâmetro não é um dicionário" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:94 +msgid "Error in file '%s': '%s' %s parameter '%s' 'New Value' attribute not found." +msgstr "Erro no arquivo '%s': '%s' %s parâmetro '%s' atributo 'Novo Valor' não encontrado." + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:98 +msgid "Error in file '%s': '%s' %s parameter '%s' 'Change Reason' attribute not found." +msgstr "Erro no arquivo '%s': '%s' %s parâmetro '%s' atributo 'Razão da Mudança' não encontrado." + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:116 +msgid "In file '{self.configuration_steps_filename}': '{filename}' {parameter_type} parameter '{parameter}' could not be computed: 'fc_parameters' not found, is an FC connected?" +msgstr "No arquivo '{self.configuration_steps_filename}': '{filename}' parâmetro '{parameter}' {parameter_type} não pôde ser computado: 'fc_parameters' não encontrado, um FC está conectado?" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:141 +msgid "In file '{self.configuration_steps_filename}': '{filename}' {parameter_type} parameter '{parameter}' could not be computed: {_e}" +msgstr "No arquivo '{self.configuration_steps_filename}': '{filename}' parâmetro '{parameter}' {parameter_type} não pôde ser computado: {_e}" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:164 +msgid "File '{self.configuration_steps_filename}' not found. No intermediate parameter configuration steps available" +msgstr "Arquivo '{self.configuration_steps_filename}' não encontrado. Nenhum passo de configuração de parâmetros intermediários disponível" + +#: MethodicConfigurator/backend_filesystem_configuration_steps.py:169 +msgid "No documentation available for {selected_file} in the {self.configuration_steps_filename} file" +msgstr "Nenhuma documentação disponível para {selected_file} no arquivo {self.configuration_steps_filename}" + +#: MethodicConfigurator/backend_filesystem_program_settings.py:58 +msgid "Directory already exists, choose a different one" +msgstr "Diretório já existe, escolha outro." + +#: MethodicConfigurator/backend_filesystem_program_settings.py:63 +msgid "Error creating new vehicle directory: %s" +msgstr "Erro ao criar novo diretório de veículo: %s" + +#: MethodicConfigurator/backend_filesystem_program_settings.py:92 +msgid "The user configuration directory '{user_config_directory}' does not exist." +msgstr "O diretório de configuração do usuário '{user_config_directory}' não existe." + +#: MethodicConfigurator/backend_filesystem_program_settings.py:95 +msgid "The path '{user_config_directory}' is not a directory." +msgstr "O caminho '{user_config_directory}' não é um diretório." + +#: MethodicConfigurator/backend_filesystem_program_settings.py:106 +msgid "The site configuration directory '{site_config_directory}' does not exist." +msgstr "O diretório de configuração do site '{site_config_directory}' não existe." + +#: MethodicConfigurator/backend_filesystem_program_settings.py:109 +msgid "The path '{site_config_directory}' is not a directory." +msgstr "O caminho '{site_config_directory}' não é um diretório." + +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:50 +msgid "File '%s' not found in %s." +msgstr "Arquivo '%s' não encontrado em %s." + +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:52 +msgid "Error decoding JSON data from file '%s'." +msgstr "Erro ao decodificar dados JSON do arquivo '%s'." + +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:62 +msgid "Error saving JSON data to file '%s': %s" +msgstr "Erro ao salvar dados JSON no arquivo '%s': %s" + +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:75 +msgid "Firmware type {fw_type} in {self.vehicle_components_json_filename} is not supported" +msgstr "Tipo de firmware {fw_type} em {self.vehicle_components_json_filename} não é suportado" + +#: MethodicConfigurator/backend_filesystem_vehicle_components.py:89 +msgid "FW version string {version_str} on {self.vehicle_components_json_filename} is invalid" +msgstr "String da versão FW {version_str} em {self.vehicle_components_json_filename} é inválido" + +#: MethodicConfigurator/backend_flightcontroller.py:90 +msgid "You should uninstall ModemManager as it conflicts with ArduPilot" +msgstr "Você deve desinstalar o ModemManager, pois ele conflita com o ArduPilot" + +#: MethodicConfigurator/backend_flightcontroller.py:106 +msgid "Available connection ports are:" +msgstr "Portas de conexão disponíveis são:" + +#: MethodicConfigurator/backend_flightcontroller.py:110 +msgid "Add another" +msgstr "Adicionar outro" + +#: MethodicConfigurator/backend_flightcontroller.py:130 +msgid "Added connection %s" +msgstr "Conexão %s adicionada" + +#: MethodicConfigurator/backend_flightcontroller.py:132 +msgid "Did not add duplicated connection %s" +msgstr "Não foi adicionada a conexão duplicada %s" + +#: MethodicConfigurator/backend_flightcontroller.py:134 +msgid "Did not add empty connection" +msgstr "Não foi adicionada a conexão vazia" + +#: MethodicConfigurator/backend_flightcontroller.py:168 +msgid "Auto-detected device %s" +msgstr "Dispositivo auto-detectado %s" + +#: MethodicConfigurator/backend_flightcontroller.py:174 +msgid "Resolved soft link %s to %s" +msgstr "Link simbólico resolvido %s para %s" + +#: MethodicConfigurator/backend_flightcontroller.py:182 +msgid "No serial ports found. Please connect a flight controller and try again." +msgstr "Nenhuma porta serial encontrada. Por favor, conecte um controlador de voo e tente novamente." + +#: MethodicConfigurator/backend_flightcontroller.py:241 +msgid "Will connect to %s" +msgstr "Conectando a %s" + +#: MethodicConfigurator/backend_flightcontroller.py:246 +msgid "Waiting for MAVLink heartbeat" +msgstr "Aguardando o sinal de batimento cardíaco MAVLink" + +#: MethodicConfigurator/backend_flightcontroller.py:249 +msgid "No MAVLink heartbeat received, connection failed." +msgstr "Nenhum batimento cardíaco MAVLink recebido, conexão falhou." + +#: MethodicConfigurator/backend_flightcontroller.py:251 +msgid "Connection established with systemID %d, componentID %d." +msgstr "Conexão estabelecida com systemID %d, componentID %d." + +#: MethodicConfigurator/backend_flightcontroller.py:257 +msgid "Autopilot type {self.info.autopilot}" +msgstr "Tipo de piloto automático {self.info.autopilot}" + +#: MethodicConfigurator/backend_flightcontroller.py:260 +msgid "Unsupported autopilot type {self.info.autopilot}" +msgstr "Tipo de piloto automático não suportado {self.info.autopilot}" + +#: MethodicConfigurator/backend_flightcontroller.py:264 +msgid "Vehicle type: {self.info.mav_type} running {self.info.vehicle_type} firmware" +msgstr "Tipo de veículo: {self.info.mav_type} rodando firmware {self.info.vehicle_type}" + +#: MethodicConfigurator/backend_flightcontroller.py:275 +msgid "Connection failed: %s" +msgstr "Conexão falhou: %s" + +#: MethodicConfigurator/backend_flightcontroller.py:276 +msgid "Failed to connect after %d attempts." +msgstr "Falha ao conectar após %d tentativas." + +#: MethodicConfigurator/backend_flightcontroller.py:281 +msgid "" +"No AUTOPILOT_VERSION MAVLink message received, connection failed.\n" +"Only ArduPilot versions newer than 4.3.8 are supported.\n" +"Make sure parameter SERIAL0_PROTOCOL is set to 2" +msgstr "" +"Nenhuma mensagem MAVLink AUTOPILOT_VERSION recebida, conexão falhou.\n" +"Apenas versões do ArduPilot mais recentes que 4.3.8 são suportadas.\n" +"Certifique-se de que o parâmetro SERIAL0_PROTOCOL está definido como 2." + +#: MethodicConfigurator/backend_flightcontroller.py:297 +msgid "ChibiOS version missmatch: %s (BANNER) != % s (AUTOPILOT_VERSION)" +msgstr "Incompatibilidade de versão do ChibiOS: %s (BANNER) != %s (AUTOPILOT_VERSION)" + +#: MethodicConfigurator/backend_flightcontroller.py:310 +msgid "FC product mismatch: %s (BANNER) != %s (AUTOPILOT_VERSION)" +msgstr "Incompatibilidade de produto FC: %s (BANNER) != %s (AUTOPILOT_VERSION)" + +#: MethodicConfigurator/backend_flightcontroller.py:325 +msgid "Testing active, will load all parameters from the %s file" +msgstr "Teste ativo, irá carregar todos os parâmetros do arquivo %s" + +#: MethodicConfigurator/backend_flightcontroller.py:334 +msgid "MAVFTP is supported by the %s flight controller" +msgstr "MAVFTP é suportado pelo controlador de voo %s" + +#: MethodicConfigurator/backend_flightcontroller.py:339 +msgid "MAVFTP is not supported by the %s flight controller, fallback to MAVLink" +msgstr "MAVFTP não é suportado pelo controlador de voo %s, retornando ao MAVLink" + +#: MethodicConfigurator/backend_flightcontroller.py:343 +msgid "Will fetch all parameters from the %s flight controller" +msgstr "Irá buscar todos os parâmetros do controlador de voo %s" + +#: MethodicConfigurator/backend_flightcontroller.py:362 +msgid "Received parameter: %s = %s" +msgstr "Parâmetro recebido: %s = %s" + +#: MethodicConfigurator/backend_flightcontroller.py:367 +msgid "Fetched %d parameter values from the %s flight controller" +msgstr "Buscou %d valores de parâmetros do controlador de voo %s" + +#: MethodicConfigurator/backend_flightcontroller.py:371 +msgid "Error: %s" +msgstr "Erro: %s" + +#: MethodicConfigurator/backend_flightcontroller.py:426 +msgid "Reset command sent to ArduPilot." +msgstr "Comando de redefinição enviado ao ArduPilot." + +#: MethodicConfigurator/backend_flightcontroller.py:537 +msgid "MAVLink connection string to the flight controller. If set to \"none\" no connection is made. Defaults to autodetection" +msgstr "String de conexão MAVLink ao controlador de voo. Se definido para" + +#: MethodicConfigurator/backend_flightcontroller.py:547 +msgid "Flight controller reboot time. Default is %(default)s" +msgstr "Tempo de reinicialização do controlador de voo. O padrão é %(default)s" + +#: MethodicConfigurator/common_arguments.py:21 +msgid "Logging level (default is %(default)s)." +msgstr "Nível de registro (o padrão é %(default)s)." + +#: MethodicConfigurator/common_arguments.py:25 +msgid "Display version information and exit." +msgstr "Exibir informações da versão e sair." + +#: MethodicConfigurator/common_arguments.py:30 +msgid "User interface language (default is %(default)s)." +msgstr "Linguagem da interface do usuário (o padrão é %(default)s)." + +#: MethodicConfigurator/frontend_tkinter_base.py:44 +msgid "" +"No intermediate parameter files found in the selected '{_dirname}' vehicle directory.\n" +"Please select and step inside a vehicle directory containing valid ArduPilot intermediate parameter files.\n" +"\n" +"Make sure to step inside the directory (double-click) and not just select it." +msgstr "" +"Não foram encontrados arquivos de parâmetros intermediários no diretório do veículo '{_dirname}' selecionado.\n" +"Por favor, selecione e entre em um diretório de veículo que contenha arquivos de parâmetros intermediários válidos do ArduPilot.\n" +"\n" +"Certifique-se de entrar no diretório (clique duas vezes) e não o selecione apenas." + +#: MethodicConfigurator/frontend_tkinter_base.py:47 +msgid "No Parameter Files Found" +msgstr "Nenhum Arquivo de Parâmetros Encontrado" + +#: MethodicConfigurator/frontend_tkinter_base.py:51 +msgid "" +"{_error_string}\n" +"\n" +"Please connect a flight controller to the PC,\n" +"wait at least 7 seconds and retry." +msgstr "" +"{_error_string}\n" +"\n" +"Por favor ligue um controlador de voo ao PC,\n" +"espere pelo menos 7 segundos e tente de novo." + +#: MethodicConfigurator/frontend_tkinter_base.py:53 +msgid "No Connection to the Flight Controller" +msgstr "Nenhuma Conexão com o Controlador de Voo" + +#: MethodicConfigurator/frontend_tkinter_base.py:111 +msgid "param_file combobox selected string '%s' not in list %s" +msgstr "Elemento selecionado do combobox de param_file '%s' não está na lista %s" + +#: MethodicConfigurator/frontend_tkinter_base.py:114 +msgid "No param_file combobox element selected" +msgstr "Nenhum elemento do combobox de param_file selecionado" + +#: MethodicConfigurator/frontend_tkinter_base.py:248 +msgid "Please be patient, {:.1f}% of {}% complete" +msgstr "Por favor, seja paciente, {:.1f}% de {}% concluído" + +#: MethodicConfigurator/frontend_tkinter_base.py:262 +msgid "Lifting window: {_e} on file {__file__}" +msgstr "Levantar janela: {_e} no arquivo {file}" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:50 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:46 +msgid "A GUI for editing JSON files that contain vehicle component configurations. Not to be used directly, but through the main ArduPilot methodic configurator script." +msgstr "Uma GUI para edição de arquivos JSON que contêm configurações de componentes de veículos. Não deve ser usada diretamente, mas através do script principal do configurador metódico do ArduPilot." + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:271 +msgid "Length of values %u and fallbacks %u differ for %s" +msgstr "Comprimento dos valores %u e fallback %u diferem para %s" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:274 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:453 +msgid "No values found for %s in the metadata" +msgstr "Nenhum valor encontrado para %s nos metadados" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:284 +msgid "Protocol %s does not match %s in %s metadata" +msgstr "Protocolo %s não corresponde a %s nos metadados %s" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:286 +msgid "Protocol %s not found in %s metadata" +msgstr "Protocolo %s não encontrado nos metadados de %s" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:307 +msgid "Invalid non-integer value for GPS_TYPE %f" +msgstr "Valor inválido não inteiro para GPS_TYPE %f" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:326 +msgid "Invalid CAN_Dx_PROTOCOL %s and CAN_Px_DRIVER %s for GNSS Receiver" +msgstr "CAN_Dx_PROTOCOL %s e CAN_Px_DRIVER %s inválidos para o receptor GNSS" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:358 +msgid "Invalid non-integer value for {serial}_PROTOCOL {serial_protocol_nr}" +msgstr "Valor inválido não inteiro para {serial}_PROTOCOL {serial_protocol_nr}" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:387 +msgid "Invalid non-integer value for MOT_PWM_TYPE %f" +msgstr "Valor inválido não inteiro para MOT_PWM_TYPE %f" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:456 +msgid "No fallback values found for %s" +msgstr "Nenhum valor de fallback encontrado para %s" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:561 +msgid "" +"Invalid value '{value}' for {_paths_str}\n" +"Allowed values are: {_allowed_str}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:562 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:585 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:596 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:622 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:629 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:664 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:680 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:698 +#: MethodicConfigurator/frontend_tkinter_component_editor.py:703 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:247 +msgid "Error" +msgstr "Erro" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:579 +msgid "{_name} must be a {data_type.__name__} between {limits[0]} and {limits[1]}" +msgstr "{_name} deve ser um {data_type.__name__} entre {limits[0]} e {limits[1]}" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:584 +msgid "" +"Invalid value '{value}' for {_paths_str}\n" +"{e}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:596 +msgid "Battery Chemistry not set. Will default to Lipo." +msgstr "Química da bateria não definida. Será adotado o padrão Lipo." + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:610 +msgid "is below the {chemistry} minimum limit of {volt_limit}" +msgstr "está abaixo do limite mínimo de {chemistry} de {volt_limit}" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:617 +msgid "is above the {chemistry} maximum limit of {volt_limit}" +msgstr "está acima do limite máximo de {chemistry} de {volt_limit}" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:621 +msgid "" +"Invalid value '{value}' for {_path_str}\n" +"{_e}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:628 +msgid "" +"Invalid value '{value}' for {_path_str}\n" +"{_e}\n" +"Will be set to the recommended value." +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:663 +msgid "" +"Invalid value '{value}' for {_path_str}\n" +"Allowed values are: {_values_str}" +msgstr "" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:679 +msgid "Duplicate FC connection type '{value}' for {_path_str}" +msgstr "Tipo de conexão FC duplicado '{value}' para {_path_str}" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:698 +msgid "Battery Cell Low voltage must be lower than max voltage" +msgstr "A tensão baixa da célula da bateria deve ser menor que a tensão máxima" + +#: MethodicConfigurator/frontend_tkinter_component_editor.py:703 +msgid "Battery Cell Crit voltage must be lower than low voltage" +msgstr "A tensão crítica da célula da bateria deve ser menor que a tensão baixa" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:65 +msgid " - Vehicle Component Editor" +msgstr "- Editor de Componentes do Veículo" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:65 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:213 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:204 +msgid "Amilcar Lucas's - ArduPilot methodic configurator " +msgstr "Configurador metódico do ArduPilot por Amilcar Lucas " + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:86 +msgid "" +"Please configure all vehicle component properties in this window.\n" +msgstr "" +"Por favor, configure todas as propriedades dos componentes do veículo nesta janela.\n" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:87 +msgid "" +"Scroll down and make sure you do not miss a property.\n" +msgstr "" +"Role para baixo e certifique-se de não esquecer nenhuma propriedade.\n" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:88 +msgid "Saving the result will write to the vehicle_components.json file." +msgstr "Salvar o resultado irá escrever no arquivo vehicle_components.json." + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:97 +msgid "Replace the vehicle.jpg file in the vehicle directory to change the vehicle image." +msgstr "Substitua o arquivo vehicle.jpg no diretório do veículo para alterar a imagem do veículo." + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:99 +msgid "Add a 'vehicle.jpg' image file to the vehicle directory." +msgstr "Adicione um arquivo de imagem 'vehicle.jpg' ao diretório do veículo." + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:109 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:135 +msgid "Save data and start configuration" +msgstr "Salvar dados e iniciar a configuração" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:110 +msgid "Save component data and start parameter value configuration and tuning." +msgstr "Salvar dados de componentes e iniciar a configuração e ajuste dos valores de parâmetros." + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:117 +msgid "How to use the component editor" +msgstr "Como usar o editor de componentes" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:125 +msgid "1. Describe " +msgstr "1. Descrever " + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:126 +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:131 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:364 +msgid "all" +msgstr "tudo" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:127 +msgid "" +" vehicle component properties in the window below\n" +msgstr "" +"propriedades do componente do veículo na janela abaixo\n" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:128 +msgid "2. Scroll " +msgstr "2. Role " + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:129 +msgid "all the way down" +msgstr "tudo para baixo" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:130 +msgid " and make sure to edit " +msgstr " e certifique-se de editar " + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:132 +msgid "" +" fields\n" +msgstr "" +" campos\n" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:133 +msgid "" +"3. Do not be lazy, collect the required information and enter it\n" +msgstr "" +"3. Não seja preguiçoso, colete as informações necessárias e insira-as\n" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:134 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:376 +msgid "4. Press the " +msgstr "4. Pressione o " + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:136 +msgid " only after all information is correct" +msgstr " somente após todas as informações estarem corretas" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:140 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:383 +msgid "Dismiss" +msgstr "Dispensar" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:215 +msgid "ArduPilot Methodic Configurator only operates correctly if all component properties are correct. ArduPilot parameter values depend on the components used and their connections. Have you used the scrollbar on the right side of the window and entered the correct values for all components?" +msgstr "O Configurador Metódico ArduPilot opera corretamente apenas se todas as propriedades dos componentes estiverem corretas. Os valores dos parâmetros do ArduPilot dependem dos componentes utilizados e suas conexões. Você usou a barra de rolagem no lado direito da janela e inseriu os valores corretos para todos os componentes?" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:219 +msgid "Confirm that all component properties are correct" +msgstr "Confirme que todas as propriedades dos componentes estão corretas" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:247 +msgid "Failed to save data to file. Is the destination write protected?" +msgstr "Falha ao salvar dados no arquivo. O destino está protegido contra gravação?" + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:249 +msgid "Vehicle component data saved successfully." +msgstr "Dados do componente do veículo salvos com sucesso." + +#: MethodicConfigurator/frontend_tkinter_component_editor_base.py:262 +msgid "Skip the component editor window. Only use this if all components have been configured. Default to false" +msgstr "Saltar a janela do editor de componentes. Use isso somente se todos os componentes tiverem sido configurados. Padrão para falso" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:57 +msgid "list_pair_tuple must be a tuple or a dictionary, not %s" +msgstr "list_pair_tuple deve ser uma tupla ou um dicionário, não %s" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:75 +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:79 +msgid "%s combobox selected string '%s' not in list %s" +msgstr "A string selecionada do combobox %s '%s' não está na lista %s" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:85 +msgid "No %s combobox element selected" +msgstr "Nenhum elemento do combobox %s selecionado" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:116 +msgid "flight controller connection:" +msgstr "conexão do controlador de voo:" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:126 +msgid "" +"Select the flight controller connection\n" +"You can add a custom connection to the existing ones" +msgstr "" +"Selecione a conexão do controlador de voo\n" +"Você pode adicionar uma conexão personalizada às existentes." + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:131 +msgid "Connection combobox changed to: {selected_connection}" +msgstr "Combobox de conexão alterado para: {selected_connection}" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:143 +msgid "Flight Controller Connection" +msgstr "Conexão do Controlador de Voo" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:144 +msgid "" +"Enter the connection string to the flight controller. Examples are:\n" +"\n" +"COM4 (on windows)\n" +"/dev/serial/by-id/usb-xxx (on linux)\n" +"tcp:127.0.0.1:5761\n" +"udp:127.0.0.1:14551" +msgstr "" +"Digite a string de conexão com o controlador de voo. Exemplos são:\n" +"\n" +"COM4 (no Windows)\n" +"/dev/serial/by-id/usb-xxx (no Linux)\n" +"tcp:127.0.0.1:5761\n" +"udp:127.0.0.1:14551" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:150 +msgid "Will add new connection: {selected_connection} if not duplicated" +msgstr "Adicionar nova conexão: {selected_connection} se não for duplicada" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:154 +msgid "Updated connection tuples: {connection_tuples} with selected connection: {selected_connection}" +msgstr "Tuplas de conexão atualizadas: {connection_tuples} com a conexão selecionada: {selected_connection}" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:159 +msgid "Add connection canceled or string empty {selected_connection}" +msgstr "Adicionar conexão cancelada ou string vazia {selected_connection}" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:164 +msgid "Connecting with the FC" +msgstr "Conectando com o FC" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:165 +msgid "Connection step {} of {}" +msgstr "Passo de conexão {} de {}" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:176 +msgid "download_flight_controller_parameters" +msgstr "download_flight_controller_parameters" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:191 +msgid "Flight controller connection" +msgstr "Conexão do controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:196 +msgid "No ArduPilot flight controller was auto-detected detected yet." +msgstr "Nenhum controlador de voo ArduPilot foi detectado automaticamente ainda." + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:203 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:225 +msgid "" +"\n" +"Choose one of the following three options:" +msgstr "" +"\n" +"Escolha uma das três opções:" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:207 +msgid "Auto connection" +msgstr "Conexão automática" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:211 +msgid "" +"Connect a flight controller to the PC,\n" +"wait 7 seconds for it to fully boot and\n" +"press the Auto-connect button below to connect to it" +msgstr "" +"Ligue um controlador de voo ao PC,\n" +"espere 7 segundos para que arranque e\n" +"pressione o botão Conexão automática abaixo para se ligar" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:215 +msgid "Auto-connect" +msgstr "Conexão automática" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:217 +msgid "Auto-connect to a 'Mavlink'-talking serial device" +msgstr "Conectar automaticamente a um dispositivo serial que fala 'Mavlink'" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:220 +msgid "Manual connection" +msgstr "Conexão manual" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:224 +msgid "" +"Connect a flight controller to the PC,\n" +"wait 7 seconds for it to fully boot and\n" +"manually select the fight controller connection or add a new one" +msgstr "" +"Ligue um controlador de voo (FC) ao PC,\n" +"espere 7 segundos para que arranque e\n" +"selecione a ligação manualmente ou adicione uma nova" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:234 +msgid "No connection" +msgstr "Nenhuma conexão" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:245 +msgid "Skip FC connection, just edit the .param files on disk" +msgstr "Sem a conexão FC, apenas edite os arquivos .param no disco" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:250 +msgid "" +"No parameter values will be fetched from the FC, default parameter values from disk will be used\n" +"instead (if '00_default.param' file is present) and just edit the intermediate '.param' files on disk" +msgstr "" +"Não serão buscados valores de parâmetros do FC, serão utilizados os valores padrão dos parâmetros em disco\n" +"em vez disso (se o arquivo '00_default.param' estiver presente) e você pode apenas editar os arquivos intermediários '.param' no disco." + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:263 +msgid "Will proceed without FC connection. FC parameters will not be downloaded nor uploaded" +msgstr "Prosseguirá sem conexão FC. Os parâmetros do FC não serão baixados nem enviados" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:264 +msgid "Only the intermediate '.param' files on the PC disk will be edited" +msgstr "Apenas os arquivos intermediários '.param' no disco do PC serão editados" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:278 +msgid "This main is for testing and development only. Usually, the ConnectionSelectionWidgets is called from another script" +msgstr "Este main é apenas para teste e desenvolvimento. Normalmente, o ConnectionSelectionWidgets é chamado de outro script" + +#: MethodicConfigurator/frontend_tkinter_connection_selection.py:289 +msgid "This main is for testing and development only, usually the ConnectionSelectionWindow is called from another script" +msgstr "Este main é apenas para teste e desenvolvimento, normalmente o ConnectionSelectionWindow é chamado de outro script" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:95 +msgid "Selected template directory: %s" +msgstr "Diretório de modelo selecionado: %s" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:97 +msgid "Select {self.label_text}" +msgstr "Selecione {self.label_text}" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:156 +msgid "Vehicle configuration directory:" +msgstr "Diretório de configuração do veículo:" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:158 +msgid "" +"Vehicle-specific directory containing the intermediate\n" +"parameter files to be uploaded to the flight controller" +msgstr "" +"Diretório específico do veículo contendo os arquivos de\n" +"parâmetros intermediários a serem enviados para o controlador de voo." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:160 +msgid "" +"Select the vehicle-specific configuration directory containing the\n" +"intermediate parameter files to be uploaded to the flight controller" +msgstr "" +"Selecione o diretório de configuração específico do veículo contendo os\n" +"arquivos de parâmetros intermediários a serem enviados para o controlador de voo." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:171 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:180 +msgid "Invalid Vehicle Directory Selected" +msgstr "Diretório do Veículo Selecionado Inválido" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:172 +msgid "" +"Please do not edit the files provided 'vehicle_templates' directory\n" +"as those are used as a template for new vehicles" +msgstr "" +"Por favor, não edite os arquivos fornecidos no diretório 'vehicle_templates'\n" +"pois esses são usados como modelo para novos veículos." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:179 +msgid "Selected directory must contain files matching \\d\\d_*\\.param and a {_filename} file" +msgstr "O diretório selecionado deve conter arquivos correspondentes a \\d\\d_*\\.param e um arquivo {_filename}" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:214 +msgid " - Select vehicle configuration directory" +msgstr "- Selecione o diretório de configuração do veículo" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:221 +msgid "" +"No intermediate parameter files found\n" +"in current working directory." +msgstr "" +"Nenhum arquivo de parâmetro intermediário encontrado\n" +"no diretório de trabalho atual." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:223 +msgid "" +"No intermediate parameter files found\n" +"in the --vehicle-dir specified directory." +msgstr "" +"Não foram encontrados arquivos de parâmetros intermediários\n" +"no diretório especificado --vehicle-dir." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:230 +msgid "MyVehicleName" +msgstr "MeuNomeVeículo" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:244 +msgid "New" +msgstr "Novo" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:247 +msgid "" +"Existing vehicle template directory containing the intermediate\n" +"parameter files to be copied to the new vehicle configuration directory" +msgstr "" +"Diretório de modelos de veículos existente contendo os arquivos de\n" +"parâmetro intermediários a serem copiados para o novo diretório de configuração do veículo." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:249 +msgid "" +"Select the existing vehicle template directory containing the intermediate\n" +"parameter files to be copied to the new vehicle configuration directory" +msgstr "" +"Selecione o diretório de modelos de veículos existente que contém os arquivos de\n" +"parâmetros intermediários a serem copiados para o novo diretório de configuração do veículo." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:252 +msgid "Source Template directory:" +msgstr "Diretório de Template Fonte:" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:260 +msgid "Use parameter values from connected FC, not from template files" +msgstr "Use valores de parâmetros do FC conectado, não de arquivos de template" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:263 +msgid "" +"Use the parameter values from the connected flight controller instead of the\n" +"template files when creating a new vehicle configuration directory from a template.\n" +"This option is only available when a flight controller is connected" +msgstr "" +"Use os valores de parâmetros do controlador de voo conectado em vez dos\n" +"arquivos de modelo ao criar um novo diretório de configuração de veículo a partir de um modelo.\n" +"Esta opção só está disponível quando um controlador de voo está conectado." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:270 +msgid "Existing directory where the new vehicle configuration directory will be created" +msgstr "Diretório existente onde o novo diretório de configuração do veículo será criado" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:271 +msgid "Select the directory where the new vehicle configuration directory will be created" +msgstr "Selecione o diretório onde o novo diretório de configuração do veículo será criado" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:273 +msgid "Destination base directory:" +msgstr "Diretório base de destino:" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:279 +msgid "A new vehicle configuration directory with this name will be created at the (destination) base directory" +msgstr "Um novo diretório de configuração do veículo com este nome será criado no diretório base (destino)" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:282 +msgid "Destination new vehicle name:" +msgstr "Nome do novo veículo de destino:" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:286 +msgid "Create vehicle configuration directory from template" +msgstr "Criar diretório de configuração do veículo a partir do template" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:291 +msgid "" +"Create a new vehicle configuration directory on the (destination) base directory,\n" +"copy the template files from the (source) template directory to it and\n" +"load the newly created files into the application" +msgstr "" +"Crie um novo diretório de configuração de veículo no diretório base (destino),\n" +"copie os arquivos de modelo do diretório de modelo (origem) para ele e\n" +"carregue os novos arquivos criados na aplicação." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:297 +msgid "Open" +msgstr "Abrir" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:301 +msgid "" +"Use an existing vehicle configuration directory with\n" +"intermediate parameter files, apm.pdef.xml and vehicle_components.json" +msgstr "" +"Use um diretório de configuração de veículo existente com\n" +"arquivos de parâmetros intermediários, apm.pdef.xml e vehicle_components.json." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:312 +msgid "Re-Open" +msgstr "Reabrir" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:317 +msgid "Last used vehicle configuration directory:" +msgstr "Último diretório de configuração de veículo usado:" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:319 +msgid "Last used vehicle configuration directory" +msgstr "Último diretório de configuração de veículo usado" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:328 +msgid "Open Last Used Vehicle Configuration Directory" +msgstr "Abrir o Último Diretório de Configuração de Veículo Usado" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:334 +msgid "Directly open the last used vehicle configuration directory for configuring and tuning the vehicle" +msgstr "Abrir diretamente o último diretório de configuração de veículo usado para configurar e ajustar o veículo" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:343 +msgid "Vehicle template directory cannot be empty" +msgstr "O diretório de template do veículo não pode estar vazio" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:343 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:346 +msgid "Vehicle template directory" +msgstr "Diretório de template do veículo" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:346 +msgid "Vehicle template directory does not exist" +msgstr "O diretório de template do veículo não existe" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:350 +msgid "New vehicle name cannot be empty" +msgstr "O novo nome do veículo não pode estar vazio" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:350 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:353 +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:359 +msgid "New vehicle directory" +msgstr "Novo diretório de veículo" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:353 +msgid "New vehicle name must not contain invalid characters" +msgstr "O novo nome do veículo não deve conter caracteres inválidos" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:364 +msgid "Copying template files" +msgstr "Copiando arquivos de template" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:407 +msgid "No Last Vehicle Directory Found" +msgstr "Nenhum Último Diretório de Veículo Encontrado" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:408 +msgid "" +"No last opened vehicle configuration directory was found.\n" +"Please select a directory manually." +msgstr "" +"Nenhum diretório de configuração de veículo aberto anteriormente foi encontrado.\n" +"Por favor, selecione um diretório manualmente." + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:420 +msgid "This main is for testing and development only. Usually, the VehicleDirectorySelectionWindow is called from another script" +msgstr "Este programa é apenas para testes e desenvolvimento. Geralmente, a VehicleDirectorySelectionWindow é chamada de outro script" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:431 +msgid "This main is for testing and development only, usually the VehicleDirectorySelectionWindow is called from another script" +msgstr "Este programa é apenas para testes e desenvolvimento, geralmente a VehicleDirectorySelectionWindow é chamada de outro script" + +#: MethodicConfigurator/frontend_tkinter_directory_selection.py:440 +msgid "No intermediate parameter files found in %s." +msgstr "Nenhum arquivo de parâmetro intermediário encontrado em %s." + +#: MethodicConfigurator/frontend_tkinter_entry_dynamic.py:40 +msgid "List_of_items can't be 'None'" +msgstr "List_of_items não pode ser 'None'" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:35 +msgid " - Flight Controller Info" +msgstr "- Informações do Controlador de Voo" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:35 +msgid "ArduPilot methodic configurator " +msgstr "Configurador metódico do ArduPilot" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:64 +msgid "Firmware Version: %s" +msgstr "Versão do Firmware: %s" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:65 +msgid "Firmware first 8 hex bytes of the FC git hash: %s" +msgstr "Primeiros 8 bytes hexadecimais do hash git do firmware do FC: %s" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:66 +msgid "Firmware first 8 hex bytes of the ChibiOS git hash: %s" +msgstr "Primeiros 8 bytes hexadecimais do hash git do ChibiOS: %s" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:67 +msgid "Flight Controller HW / board version: %s" +msgstr "Versão de HW / placa do Controlador de Voo: %s" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:68 +msgid "Flight Controller USB vendor ID: %s" +msgstr "ID do fornecedor USB do Controlador de Voo: %s" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:69 +msgid "Flight Controller USB product ID: %s" +msgstr "ID do produto USB do Controlador de Voo: %s" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:75 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:499 +msgid "Downloading FC parameters" +msgstr "Baixando parâmetros do FC" + +#: MethodicConfigurator/frontend_tkinter_flightcontroller_info.py:76 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:501 +msgid "Downloaded {} of {} parameters" +msgstr "Baixou {} de {} parâmetros" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:76 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:108 +msgid "Documentation" +msgstr "Documentação" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:112 +msgid "Forum Blog:" +msgstr "Blog do Fórum:" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:114 +msgid "Wiki:" +msgstr "Wiki:" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:117 +msgid "External tool:" +msgstr "Ferramenta externa:" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:83 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:120 +msgid "Mandatory:" +msgstr "Obrigatório:" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:84 +msgid "ArduPilot's forum Methodic configuration Blog post relevant for the current file" +msgstr "Postagem do Blog de Configuração Metódica do fórum do ArduPilot relevante para o arquivo atual" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:85 +msgid "ArduPilot's wiki page relevant for the current file" +msgstr "Página da wiki do ArduPilot relevante para o arquivo atual" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:86 +msgid "External tool or documentation relevant for the current file" +msgstr "Ferramenta externa ou documentação relevante para o arquivo atual" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:87 +msgid "" +"Mandatory level of the current file,\n" +" 100% you MUST use this file to configure the vehicle,\n" +" 0% you can ignore this file if it does not apply to your vehicle" +msgstr "" +"Nível obrigatório do arquivo atual,\n" +" 100% você DEVE usar este arquivo para configurar o veículo,\n" +" 0% você pode ignorar este arquivo se ele não se aplicar ao seu veículo." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:105 +msgid "{current_file} Documentation" +msgstr "Documentação de {current_file}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:132 +msgid "Documentation URL not available" +msgstr "URL da documentação não disponível" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:138 +msgid "About" +msgstr "Sobre" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:145 +msgid "" +"ArduPilot Methodic Configurator Version: {_version}\n" +"\n" +"A clear configuration sequence for ArduPilot vehicles.\n" +"\n" +"Copyright © 2024 Amilcar do Carmo Lucas and ArduPilot.org\n" +"\n" +"Licensed under the GNU General Public License v3.0" +msgstr "" +"Configurador Metódico do ArduPilot Versão: {_version}\n" +"\n" +"Uma sequência de configuração clara para veículos ArduPilot.\n" +"\n" +"Copyright © 2024 Amilcar do Carmo Lucas e ArduPilot.org\n" +"\n" +"Licenciado sob a Licença Pública Geral GNU v3.0" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:153 +msgid "User Manual" +msgstr "Manual do Usuário" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:156 +msgid "Support Forum" +msgstr "Fórum de Suporte" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:159 +msgid "Report a Bug" +msgstr "Reportar um Bug" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:162 +msgid "Licenses" +msgstr "Licenças" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:165 +msgid "Source Code" +msgstr "Código Fonte" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:205 +msgid " - Parameter file editor and uploader" +msgstr "- Editor e carregador de arquivo de parâmetros" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:254 +msgid "Current intermediate parameter file:" +msgstr "Arquivo de parâmetro intermediário atual:" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:261 +msgid "" +"Select the intermediate parameter file from the list of available files in the selected vehicle directory\n" +"It will automatically advance to the next file once the current file is uploaded to the fight controller" +msgstr "" +"Selecione o arquivo de parâmetro intermediário na lista de arquivos disponíveis no diretório do veículo selecionado\n" +"Avançará automaticamente para o próximo arquivo assim que o arquivo atual for enviado para o controlador de voo." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:274 +msgid "User Manual, Support Forum, Report a Bug, Licenses, Source Code" +msgstr "Manual do Usuário, Fórum de Suporte, Reportar um Bug, Licenças, Código Fonte" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:279 +msgid "Legend" +msgstr "Legenda" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:282 +msgid "the meaning of the text background colors" +msgstr "o significado das cores de fundo do texto" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:286 +msgid "Normal parameter" +msgstr "Parâmetro normal" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:288 +msgid "Calibration param" +msgstr "Parâmetro de calibração" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:290 +msgid "Read-only param" +msgstr "Parâmetro somente leitura" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:294 +msgid "Default value" +msgstr "Valor padrão" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:296 +msgid "Not available" +msgstr "Não disponível" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:298 +msgid "Not editable" +msgstr "Não editável" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:321 +msgid "See only changed parameters" +msgstr "Veja apenas parâmetros alterados" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:325 +msgid "Toggle to show only parameters that will change if/when uploaded to the flight controller" +msgstr "Alternar para mostrar apenas parâmetros que mudarão se/quando enviados ao controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:328 +msgid "Annotate docs into .param files" +msgstr "Anotar documentos em arquivos .param" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:332 +msgid "" +"Annotate ArduPilot parameter documentation metadata into the intermediate parameter files\n" +"The files will be bigger, but all the existing parameter documentation will be included inside" +msgstr "" +"Anotar metadados de documentação de parâmetros do ArduPilot nos arquivos de parâmetros intermediários\n" +"Os arquivos serão maiores, mas toda a documentação de parâmetros existente estará incluída." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:337 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:377 +msgid "Upload selected params to FC, and advance to next param file" +msgstr "Enviar parâmetros selecionados ao FC e avançar para o próximo arquivo de parâmetros" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:342 +msgid "" +"Upload selected parameters to the flight controller and advance to the next intermediate parameter file\n" +"If changes have been made to the current file it will ask if you want to save them\n" +"It will reset the FC if necessary, re-download all parameters and validate their value" +msgstr "" +"Enviar parâmetros selecionados para o controlador de voo e avançar para o próximo arquivo de parâmetro intermediário\n" +"Se tiver havido alterações no arquivo atual, será perguntado se você deseja salvá-las\n" +"Irá reiniciar o controlador de voo, se necessário, re-baixar todos os parâmetros e validar seu valor." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:347 +msgid "Skip parameter file" +msgstr "Saltar arquivo de parâmetros" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:349 +msgid "" +"Skip to the next intermediate parameter file without uploading any changes to the flight controller\n" +"If changes have been made to the current file it will ask if you want to save them" +msgstr "" +"Salte para o próximo arquivo de parâmetro intermediário sem enviar alterações para o controlador de voo\n" +"Se tiver havido alterações no arquivo atual, será perguntado se você deseja salvá-las." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:355 +msgid "Welcome to the ArduPilot Methodic Configurator" +msgstr "Bem-vindo ao Configurador Metódico do ArduPilot" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:363 +msgid "1. Read " +msgstr "1. Leia" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:365 +msgid "" +" the documentation on top of the parameter table\n" +msgstr "" +" a documentação no topo da tabela de parâmetros\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:366 +msgid "2. Edit the parameter " +msgstr "2. Edite o parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:367 +msgid "New Values" +msgstr "Novos Valores" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:368 +msgid " and" +msgstr " e" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:369 +msgid " their " +msgstr " seus " + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:370 +msgid "" +"Change Reason\n" +msgstr "" +"Razão da Mudança\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:371 +msgid "3. Use " +msgstr "3. Use" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:372 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:230 +msgid "Del" +msgstr "Del" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:373 +msgid " and " +msgstr " e " + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:374 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:209 +msgid "Add" +msgstr "Adicionar" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:375 +msgid "" +" buttons to delete and add parameters if necessary\n" +msgstr "" +" butoes para apagar e adicionar parâmetros se necessário\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:378 +msgid "" +" button\n" +msgstr "" +" botão\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:379 +msgid "5. Repeat from the top until the program automatically closes" +msgstr "5. Repita a partir do começo até que o programa feche automaticamente" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:402 +msgid "" +"If you proceed the {tempcal_imu_result_param_filename}\n" +"will be overwritten with the new calibration results.\n" +"Do you want to provide a .bin log file and\n" +"run the IMU temperature calibration using it?" +msgstr "" +"Se você prosseguir, o {tempcal_imu_result_param_filename}\n" +"será sobrescrito com os novos resultados de calibração.\n" +"Você deseja fornecer um arquivo de log .bin e\n" +"executar a calibração da temperatura da IMU usando-o?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:406 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:410 +msgid "IMU temperature calibration" +msgstr "Calibração da temperatura do IMU" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:408 +msgid "ArduPilot binary log files" +msgstr "Arquivos de log binários do ArduPilot" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:410 +msgid "" +"Please wait, this can take a really long time and\n" +"the GUI will be unresponsive until it finishes." +msgstr "" +"Por favor, aguarde, isso pode levar um tempo realmente longo e\n" +"a interface gráfica ficará sem resposta até que termine." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:412 +msgid "Reading IMU calibration messages" +msgstr "Lendo mensagens de calibração do IMU" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:413 +msgid "Please wait, this can take a long time" +msgstr "Por favor, aguarde, isso pode levar um tempo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:428 +msgid "" +"This configuration step should be performed outside this tool by\n" +"{auto_changed_by}\n" +"and that should have changed the parameters on the FC.\n" +"\n" +"Should the FC values now be copied to the {selected_file} file?" +msgstr "" +"Esse passo de configuração deve ser realizado fora desta ferramenta por\n" +"{auto_changed_by}\n" +"e isso deve ter alterado os parâmetros no controlador de voo.\n" +"\n" +"Os valores do controlador de voo devem agora ser copiados para o arquivo {selected_file}?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:432 +msgid "Update file with values from FC?" +msgstr "Atualizar arquivo com valores do FC?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:442 +msgid "Skip some steps?" +msgstr "Saltar algumas etapas?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:452 +msgid "" +"Should the {local_filename} file be downloaded from the URL\n" +"{url}?" +msgstr "" +"O arquivo {local_filename} deve ser download do URL\n" +"{url}?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:453 +msgid "Download file from URL" +msgstr "Download arquivo do URL" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:455 +msgid "Failed to download {local_filename} from {url}, please download it manually" +msgstr "Falha ao fazer download {local_filename} de {url}, por favor, faça o download manualmente" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:456 +msgid "Download failed" +msgstr "Download falhou" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:462 +msgid "Local file {local_filename} does not exist" +msgstr "Arquivo local {local_filename} não existe" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:463 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:477 +msgid "Will not upload any file" +msgstr "Não enviará nenhum arquivo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:466 +msgid "Should the {local_filename} file be uploaded to the flight controller as {remote_filename}?" +msgstr "O arquivo {local_filename} deve ser enviado para o controlador de voo como {remote_filename}?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:467 +msgid "Upload file to FC" +msgstr "Enviar arquivo para o FC" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:468 +msgid "Uploading file" +msgstr "Enviando arquivo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:469 +msgid "Uploaded {} of {} %" +msgstr "Enviado {} de {} %" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:472 +msgid "Failed to upload {local_filename} to {remote_filename}, please upload it manually" +msgstr "Falha ao enviar {local_filename} para {remote_filename}, por favor, envie-o manualmente" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:473 +msgid "Upload failed" +msgstr "Envio falhou" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:476 +msgid "No flight controller connection, will not upload any file" +msgstr "Sem conexão com o controlador de voo, não será enviado nenhum arquivo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:477 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:599 +msgid "No flight controller connection" +msgstr "Sem conexão com o controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:499 +msgid "Re-downloading FC parameters" +msgstr "Rebaixando parâmetros do FC" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:536 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:616 +msgid "Parameter %s set to %f" +msgstr "Parâmetro %s definido para %f" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:544 +msgid "Parameter %s changed from %f to %f, reset required" +msgstr "Parâmetro %s alterado de %f para %f, reinicialização necessária" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:547 +msgid "Parameter %s changed to %f, reset required" +msgstr "Parâmetro %s alterado para %f, reinicialização necessária" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:554 +msgid "Parameter %s changed from %f to %f, possible reset required" +msgstr "Parâmetro %s alterado de %f para %f, reinicialização possivelmente necessária" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:557 +msgid "Parameter %s changed to %f, possible reset required" +msgstr "Parâmetro %s alterado para %f, reinicialização possivelmente necessária" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:560 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:621 +msgid "Failed to set parameter {param_name}: {_e}" +msgstr "Falha ao definir o parâmetro {param_name}: {_e}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:562 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:585 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:623 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:675 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:138 +msgid "ArduPilot methodic configurator" +msgstr "Configurador metódico do ArduPilot" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:571 +msgid "" +"{_param_list_str} parameter(s) potentially require a reset\n" +"Do you want to reset the ArduPilot?" +msgstr "" +"{_param_list_str} parâmetro(s) pode(m) exigir um reset\n" +"Você deseja reiniciar o ArduPilot?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:572 +msgid "Possible reset required" +msgstr "Reinicialização possivelmente necessária" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:575 +msgid "Resetting Flight Controller" +msgstr "Reiniciando Controlador de Voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:576 +msgid "Waiting for {} of {} seconds" +msgstr "Aguardando {} de {} segundos" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:597 +msgid "No parameters were yet downloaded from the flight controller, will not upload any parameter" +msgstr "Nenhum parâmetro foi baixado do controlador de voo, não será enviado nenhum parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:599 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:602 +msgid "Will not upload any parameter" +msgstr "Nenhum parâmetro será enviado" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:601 +msgid "No parameter was selected for upload, will not upload any parameter" +msgstr "Nenhum parâmetro foi selecionado para envio, não será enviado nenhum parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:602 +msgid "No parameter was selected for upload" +msgstr "Nenhum parâmetro foi selecionado para envio" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:608 +msgid "Uploading %d selected %s parameters to flight controller..." +msgstr "Enviando %d parâmetros %s selecionados para o controlador de voo..." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:628 +msgid "Re-download all parameters from the flight controller" +msgstr "Baixar novamente todos os parâmetros do controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:636 +msgid "Parameter %s upload to the flight controller failed. Expected: %f, Actual: %f" +msgstr "Falha ao enviar o parâmetro %s para o controlador de voo. Esperado: %f, Real: %f" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:640 +msgid "Parameter %s upload to the flight controller failed. Expected: %f, Actual: N/A" +msgstr "Falha ao enviar o parâmetro %s para o controlador de voo. Esperado: %f, Real: Indisponível" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:645 +msgid "Parameter upload error" +msgstr "Erro de envio de parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:646 +msgid "" +"Failed to upload the following parameters to the flight controller:\n" +msgstr "" +"Falha ao enviar os seguintes parâmetros para o controlador de voo:\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:650 +msgid "All parameters uploaded to the flight controller successfully" +msgstr "Todos os parâmetros enviados para o controlador de voo com sucesso" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:675 +msgid "Current file not found in the list of files" +msgstr "Arquivo atual não encontrado na lista de arquivos" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:681 +msgid "Do you want to write the changes to the {self.current_file} file?" +msgstr "Você deseja gravar as alterações no arquivo {self.current_file}?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:682 +msgid "One or more parameters have been edited" +msgstr "Um ou mais parâmetros foram editados" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:702 +msgid "" +"Methodic configuration of {nr_total_params} parameters complete:\n" +"\n" +"{_nr_unchanged_params} kept their default value\n" +"\n" +"{nr_non_default__read_only_params} non-default read-only parameters - ignore these, you can not change them\n" +"\n" +"{nr_non_default__writable_calibrations} non-default writable sensor-calibrations - non-reusable between vehicles\n" +"\n" +"{nr_non_default__writable_non_calibrations} non-default writable non-sensor-calibrations - these can be reused between similar vehicles" +msgstr "" +"Configuração metódica de {nr_total_params} parâmetros concluída:\n" +"\n" +"{_nr_unchanged_params} mantiveram seu valor padrão\n" +"\n" +"{nr_non_default__read_only_params} parâmetros de leitura não padrão - ignore estes, você não pode alterá-los\n" +"\n" +"{nr_non_default__writable_calibrations} calibrações de sensores graváveis não padrão - não reutilizáveis entre veículos\n" +"\n" +"{nr_non_default__writable_non_calibrations} não calibrações de sensores graváveis não padrão - estas podem ser reutilizadas entre veículos semelhantes" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:710 +msgid "Last parameter file processed" +msgstr "Último arquivo de parâmetro processado" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:730 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:741 +msgid "" +"{} file already exists.\n" +"Do you want to overwrite it?" +msgstr "" +"O arquivo {} já existe.\n" +"Você deseja sobrescrevê-lo?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:731 +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:742 +msgid "Overwrite existing file" +msgstr "Sobrescrever arquivo existente" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:734 +msgid "Summary file %s written" +msgstr "Arquivo de resumo %s escrito" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:745 +msgid "" +"All relevant files have been zipped into the \n" +"{zip_file_path} file.\n" +"\n" +"You can now upload this file to the ArduPilot Methodic\n" +"Configuration Blog post on discuss.ardupilot.org." +msgstr "" +"Todos os arquivos relevantes foram compactados no arquivo \n" +"{zip_file_path}.\n" +"\n" +"Você pode agora enviar este arquivo para o post do Blog de Configuração Metódica do ArduPilot em discuss.ardupilot.org." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:748 +msgid "Parameter files zipped" +msgstr "Arquivos de parâmetro compactados" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:760 +msgid "Skip the welcome popup window. Only use this if you already know how to use the software. Default to false" +msgstr "Ignorar a janela pop-up de boas-vindas. Use isso apenas se você já souber como usar o software. Padrão falso" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor.py:774 +msgid "A GUI for editing ArduPilot param files. Not to be used directly, but through the main ArduPilot methodic configurator script." +msgstr "Uma interface gráfica para edição de arquivos de parâmetros do ArduPilot. Não deve ser usada diretamente, mas através do script principal do configurador metódico do ArduPilot." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:75 +msgid "Error in forced parameters" +msgstr "Erro em parâmetros forçados" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "-/+" +msgstr "-/+" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "Change Reason" +msgstr "Motivo da Alteração" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "Current Value" +msgstr "Valor Atual" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "New Value" +msgstr "Novo Valor" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "Parameter" +msgstr "Parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "Unit" +msgstr "Unidade" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:98 +msgid "Upload" +msgstr "Enviar" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:99 +msgid "Delete or add a parameter" +msgstr "Excluir ou adicionar um parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:100 +msgid "Parameter name must be ^[A-Z][A-Z_0-9]* and most 16 characters long" +msgstr "O nome do parâmetro deve ser ^[A-Z][A-Z_0-9]* e ter no máximo 16 caracteres" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:101 +msgid "Current value on the flight controller " +msgstr "Valor atual no controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:102 +msgid "New value from the above selected intermediate parameter file" +msgstr "Novo valor do arquivo de parâmetros intermediários selecionado acima" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:103 +msgid "Parameter Unit" +msgstr "Unidade do Parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:104 +msgid "When selected, upload the new value to the flight controller" +msgstr "Quando selecionado, enviar o novo valor para o controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:105 +msgid "Reason why respective parameter changed" +msgstr "Motivo pelo qual o respectivo parâmetro mudou" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:136 +msgid "No different parameters found in {selected_file}. Skipping..." +msgstr "Nenhum parâmetro diferente encontrado em {selected_file}. Ignorando..." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:170 +msgid "Removing duplicate parameter %s" +msgstr "Removendo parâmetro duplicado %s" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:171 +msgid "The parameter '{old_name}' was removed due to duplication." +msgstr "O parâmetro '{old_name}' foi removido por ser duplicado." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:172 +msgid "Parameter Removed" +msgstr "Parâmetro Removido" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:178 +msgid "Renaming parameter %s to %s" +msgstr "Renomeando parâmetro %s para %s" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:179 +msgid "" +"The parameter '{old_name}' was renamed to '{new_name}'.\n" +"to obey the flight controller connection defined in the component editor window." +msgstr "" +"O parâmetro '{old_name}' foi renomeado para '{new_name}'.\n" +"Para obedecer à conexão do controlador de voo definida na janela do editor de componentes." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:181 +msgid "Parameter Renamed" +msgstr "Parâmetro Renomeado" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:189 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:407 +msgid "No documentation available in apm.pdef.xml for this parameter" +msgstr "Nenhuma documentação disponível em apm.pdef.xml para este parâmetro" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:211 +msgid "Add a parameter to the {self.current_file} file" +msgstr "Adicionar um parâmetro ao arquivo {self.current_file}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:217 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:325 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:545 +msgid "Parameter %s not found in the %s file: %s" +msgstr "Parâmetro %s não encontrado no arquivo %s: %s" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:232 +msgid "Delete {param_name} from the {self.current_file} file" +msgstr "Excluir {param_name} do arquivo {self.current_file}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:257 +msgid "N/A" +msgstr "Indisponível" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:268 +msgid "Could not solve the selected {combobox_widget} key to a float value." +msgstr "Não foi possível resolver a chave {combobox_widget} selecionada para um valor decimal." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:363 +msgid "{_param_name} Value: {_new_decimal_value}" +msgstr "{_param_name} Valor: {_new_decimal_value}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:373 +msgid "Select {param_name} Bitmask Options" +msgstr "Selecionar Opções de Bitmask para {param_name}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:416 +msgid "When selected upload {param_name} new value to the flight controller" +msgstr "Quando selecionado, envie {param_name} novo valor para o controlador de voo" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:444 +msgid "Reason why {param_name} should change to {_value}" +msgstr "Motivo pelo qual {param_name} deve mudar para {_value}" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:449 +msgid "Are you sure you want to delete the {param_name} parameter?" +msgstr "Você tem certeza de que deseja excluir o parâmetro {param_name}?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:464 +msgid "Add Parameter to " +msgstr "Adicionar Parâmetro a" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:477 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:531 +msgid "Operation not possible" +msgstr "Operação não possível" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:478 +msgid "No apm.pdef.xml file and no FC connected. Not possible autocomplete parameter names." +msgstr "Nenhum arquivo apm.pdef.xml e nenhuma FC conectada. Não é possível completar automaticamente os nomes dos parâmetros." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:509 +msgid "Parameter name can not be empty." +msgstr "O nome do parâmetro não pode estar vazio." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:509 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:512 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:520 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:529 +msgid "Invalid parameter name." +msgstr "Nome de parâmetro inválido." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:512 +msgid "Parameter already exists, edit it instead" +msgstr "O parâmetro já existe, edite-o em vez disso" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:520 +msgid "Parameter name not found in the flight controller." +msgstr "Nome do parâmetro não encontrado no controlador de voo." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:528 +msgid "'{param_name}' not found in the apm.pdef.xml file." +msgstr "'{param_name}' não encontrado no arquivo apm.pdef.xml." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:532 +msgid "Can not add parameter when no FC is connected and no apm.pdef.xml file exists." +msgstr "Não é possível adicionar parâmetro quando não há conexão com o FC e o arquivo apm.pdef.xml não existe." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:557 +msgid "" +"The value for {param_name} {p} should be greater than {p_min}\n" +msgstr "O valor de {param_name} {p} deve ser maior que {p_min}\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:558 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:563 +msgid "Out-of-bounds Value" +msgstr "Valor fora dos limites" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:559 +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:564 +msgid "Use out-of-bounds value?" +msgstr "Usar valor fora dos limites?" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:562 +msgid "" +"The value for {param_name} {p} should be smaller than {p_max}\n" +msgstr "O valor de {param_name} {p} deve ser menor que {p_max}\n" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:568 +msgid "The value for {param_name} must be a valid float." +msgstr "O valor para {param_name} deve ser um float válido." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:569 +msgid "Invalid Value" +msgstr "Valor inválido" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:573 +msgid "Parameter %s changed, will later ask if change(s) should be saved to file." +msgstr "Parâmetro %s alterado, perguntará mais tarde se a(s) alteração(ões) devem ser salvas no arquivo." + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:589 +msgid "Parameter %s not found in the %s file %s: %s" +msgstr "Parâmetro %s não encontrado no arquivo %s %s: %s" + +#: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:593 +msgid "Parameter %s change reason changed from %s to %s, will later ask if change(s) should be saved to file." +msgstr "Motivo da alteração do parâmetro %s mudou de %s para %s, perguntará mais tarde se a(s) alteração(ões) devem ser salvas no arquivo." + +#: MethodicConfigurator/frontend_tkinter_template_overview.py:49 +msgid "Amilcar Lucas's - ArduPilot methodic configurator {} - Template Overview and selection" +msgstr "Configurador metódico do ArduPilot {} por Amilcar Lucas - Sumário de templates e seleção de modelos" + +#: MethodicConfigurator/frontend_tkinter_template_overview.py:53 +msgid "Please double-click the template below that most resembles your own vehicle components" +msgstr "Por favor, clique duas vezes no modelo abaixo que mais se assemelha aos componentes do seu próprio veículo" + +#: MethodicConfigurator/frontend_tkinter_template_overview.py:157 +msgid "ArduPilot methodic configurator is a GUI-based tool designed to simplify the management and visualization of ArduPilot parameters. It enables users to browse through various vehicle templates, edit parameter files, and apply changes directly to the flight controller. The tool is built to semi-automate the configuration process of ArduPilot for drones by providing a clear and intuitive interface for parameter management." +msgstr "O configurador metódico do ArduPilot é uma GUI projetada para simplificar o gerenciamento e a visualização dos parâmetros do ArduPilot. Ele permite aos usuários navegar por vários modelos de veículos, editar arquivos de parâmetros e aplicar alterações diretamente ao controlador de voo. A ferramenta foi construída para semi-automatizar o processo de configuração do ArduPilot para drones, fornecendo uma interface clara e intuitiva para gerenciamento de parâmetros." + diff --git a/MethodicConfigurator/locale/pt/LC_MESSAGES/extract_missing_translations.py b/MethodicConfigurator/locale/pt/LC_MESSAGES/extract_missing_translations.py new file mode 100644 index 00000000..04da9f96 --- /dev/null +++ b/MethodicConfigurator/locale/pt/LC_MESSAGES/extract_missing_translations.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 + +''' +This file is part of Ardupilot methodic configurator. https://github.com/ArduPilot/MethodicConfigurator + +SPDX-FileCopyrightText: 2024 Amilcar do Carmo Lucas + +SPDX-License-Identifier: GPL-3.0-or-later +''' + +import os +import gettext + +def extract_missing_translations(po_file, output_file): + # Set up the translation catalog + language = gettext.translation('messages', localedir=os.path.dirname(po_file), languages=['zh_CN'], fallback=True) + + # Read the .po file entries + with open(po_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + missing_translations = [] + + # Iterate through lines to find untranslated msgid + for i, line in enumerate(lines): + line = line.strip() + + if line.startswith('msgid'): + msgid = line.split('"')[1] # Get the msgid string + + # Check if the translation exists + if language.gettext(msgid) == msgid: # If translation is the same as msgid, it's missing + missing_translations.append((i, msgid)) + + # Write untranslated msgids along with their indices to the output file + with open(output_file, 'w', encoding='utf-8') as f: + for index, item in missing_translations: + f.write(f'{index}:{item}\n') + +if __name__ == "__main__": + extract_missing_translations('MethodicConfigurator.po', 'missing_translations.txt') diff --git a/MethodicConfigurator/locale/pt/LC_MESSAGES/insert_translations.py b/MethodicConfigurator/locale/pt/LC_MESSAGES/insert_translations.py new file mode 100644 index 00000000..e79dd765 --- /dev/null +++ b/MethodicConfigurator/locale/pt/LC_MESSAGES/insert_translations.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 + +''' +This file is part of Ardupilot methodic configurator. https://github.com/ArduPilot/MethodicConfigurator + +SPDX-FileCopyrightText: 2024 Amilcar do Carmo Lucas + +SPDX-License-Identifier: GPL-3.0-or-later +''' + +def insert_translations(po_file, translations_file, output_file): + with open(po_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + with open(translations_file, 'r', encoding='utf-8') as f: + translations_data = f.read().strip().split('\n') + + # Prepare to insert translations + translations = [] + for data in translations_data: + index, translation = data.split(':', 1) # Split the index and the translation + translations.append((int(index), translation.strip())) # Store index and translation as tuple + + insertion_offset = 0 # To track how many lines we've inserted + # To insert the translations correctly + for index, translation in translations: + # Adjust index accounting for previously inserted lines + adjusted_index = index + insertion_offset + + # Check if the next line is an empty msgstr + if (adjusted_index + 1 < len(lines) and + lines[adjusted_index + 1].strip() == 'msgstr ""'): + # Overwrite the empty msgstr line + lines[adjusted_index + 1] = f'msgstr "{translation}"\n' + else: + # Otherwise, insert a new msgstr line + lines.insert(adjusted_index + 1, f'msgstr "{translation}"\n') + insertion_offset += 1 # Increment the offset for each insertion + + # Writing back to a new output file + with open(output_file, 'w', encoding='utf-8') as f: + f.writelines(lines) + +if __name__ == "__main__": + insert_translations('MethodicConfigurator.po', 'translations.txt', 'updated_MethodicConfigurator.po') diff --git a/MethodicConfigurator/locale/zh_CN/LC_MESSAGES/MethodicConfigurator.mo b/MethodicConfigurator/locale/zh_CN/LC_MESSAGES/MethodicConfigurator.mo index de52eb101e6a370d9bf8481cb76d35e97ee03517..4d03f40b8f85d3611b24cf3e2bbf65d003b77b62 100644 GIT binary patch literal 13046 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 delta 175 zcmeyC+QwRcPl#nI0}!wPu?!H~05K~N#{e-16acX(5ElZm5)iiou@Mlj0%99R28O#p z8YC~p#K52kqz!, 2024. # msgid "" @@ -1645,7 +1645,7 @@ msgstr "将参数 %s 重命名为 %s" #: MethodicConfigurator/frontend_tkinter_parameter_editor_table.py:179 msgid "" "The parameter '{old_name}' was renamed to '{new_name}'.\n" -"to follow the flight controller connection defined in the component editor window." +"to obey the flight controller connection defined in the component editor window." msgstr "" "参数 '{old_name}' 已重命名为 '{new_name}'。\n" "以遵循组件编辑器窗口中定义的飞行控制器连接。" diff --git a/windows/ardupilot_methodic_configurator.iss b/windows/ardupilot_methodic_configurator.iss index 7dcb4f75..a40ae4d6 100644 --- a/windows/ardupilot_methodic_configurator.iss +++ b/windows/ardupilot_methodic_configurator.iss @@ -51,6 +51,7 @@ Type: filesandordirs; Name: "{app}\_internal\MethodicConfigurator\ArduPlane_conf [Languages] Name: "en"; MessagesFile: "compiler:Default.isl" Name: "zh_CN"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" +Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" @@ -74,7 +75,7 @@ Name: "{userappdata}\.ardupilot_methodic_configurator\vehicles"; Flags: uninsnev [Icons] Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; Tasks: desktopicon; IconFilename: "{app}\MethodicConfigurator.ico"; Languages: en -Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; Tasks: desktopicon; IconFilename: "{app}\MethodicConfigurator.ico"; Parameters: "--language {language}"; Languages: zh_CN +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{userappdata}\.ardupilot_methodic_configurator"; Tasks: desktopicon; IconFilename: "{app}\MethodicConfigurator.ico"; Parameters: "--language {language}"; Languages: zh_CN pt Name: "{group}\Documentation"; Filename: "https://github.com/ArduPilot/MethodicConfigurator/blob/master/USERMANUAL.md" Name: "{group}\Vehicle Templates"; Filename: "{commonappdata}\.ardupilot_methodic_configurator\vehicle_templates" Name: "{group}\ArduPilot MethodicConfigurator Forum"; Filename: "https://discuss.ardupilot.org/t/new-ardupilot-methodic-configurator-gui/115038/"