Compare commits

..

71 Commits

Author SHA1 Message Date
David Simpson
9a16cf9e02 change MonitorService providers to injectable deps 2022-05-20 17:53:34 +02:00
Francesco Stasi
a4ff05a82b monitor service provider singleton 2022-05-19 16:56:37 +02:00
Alberto Iannaccone
0427759fdb refactor monitor settings interfaces 2022-05-19 11:19:13 +02:00
Francesco Stasi
80ade4c37e updated pseudo code 2022-05-19 10:59:20 +02:00
Francesco Stasi
355dec8aaa monitor settings provider stub 2022-05-19 10:40:01 +02:00
Alberto Iannaccone
7bf4ea0637 add MonitorSettingsProvider interface 2022-05-17 17:45:47 +02:00
Alberto Iannaccone
1982609c87 fix upload when monitor is open 2022-05-12 15:28:13 +02:00
Alberto Iannaccone
62eaeb1c74 update arduino-cli to 0.22.0 2022-05-10 15:54:04 +02:00
Alberto Iannaccone
9b58c9d0c8 delete duplex when connection is closed 2022-05-10 15:53:48 +02:00
Alberto Iannaccone
eff960bb7f fix monitor connection 2022-05-09 14:56:52 +02:00
Mark Sujew
fbe8fb421a Fix MonitorManagerProxy DI issue 2022-05-09 14:56:52 +02:00
Silvano Cerza
a8d803e7c3 Add missing binding 2022-05-09 14:56:52 +02:00
Silvano Cerza
397ca5665f coreClientProvider is now set when constructing MonitorService 2022-05-09 14:56:52 +02:00
Silvano Cerza
f9da9fc24b Delete unnecessary Symbol 2022-05-09 14:56:52 +02:00
Silvano Cerza
b97af32bb8 Fix backend logger bindings 2022-05-09 14:56:52 +02:00
Silvano Cerza
ce2f1c227a Updated MonitorWidget to use new monitor proxy 2022-05-09 14:56:52 +02:00
Silvano Cerza
7889f40834 Changed MonitorWidget and children to use new monitor proxy 2022-05-09 14:56:52 +02:00
Silvano Cerza
6b7b33356d Changed plotter contribution to use new manager proxy 2022-05-09 14:56:52 +02:00
Silvano Cerza
ad781f0bfc Remove unused file 2022-05-09 14:56:52 +02:00
Silvano Cerza
6cf61c498a More serial classes removal 2022-05-09 14:56:52 +02:00
Silvano Cerza
50239c5756 Add generic monitor settings storaging 2022-05-09 14:56:52 +02:00
Silvano Cerza
cbd5b4de1b WebSocketProvider is not injectable anymore 2022-05-09 14:56:52 +02:00
Silvano Cerza
bf958fd8cf Proxied more monitor methods to frontend 2022-05-09 14:56:52 +02:00
Silvano Cerza
ee265aec90 Changed how connection is handled on upload 2022-05-09 14:56:52 +02:00
Silvano Cerza
9058abb015 Remove several unnecessary serial monitor classes 2022-05-09 14:56:52 +02:00
Silvano Cerza
31b704cdb9 Moved settings to MonitorService 2022-05-09 14:56:52 +02:00
Silvano Cerza
61b8bdeec9 Add monitor proxy functions for the frontend 2022-05-09 14:56:52 +02:00
Silvano Cerza
c5695d3a76 Fixed WebSocketChange event signature 2022-05-09 14:56:52 +02:00
Silvano Cerza
480492a7c8 Enhance MonitorManager APIs 2022-05-09 14:56:52 +02:00
Silvano Cerza
2c95e7f033 Changed upload settings 2022-05-09 14:56:52 +02:00
Silvano Cerza
116b3d5984 Moved some interfaces 2022-05-09 14:56:52 +02:00
Silvano Cerza
750796d3a0 Rename WebSocketService to WebSocketProvider and uninjected it 2022-05-09 14:56:52 +02:00
Silvano Cerza
3133b01c4a Implement MonitorService to handle pluggable monitor lifetime 2022-05-09 14:56:52 +02:00
Silvano Cerza
ebab0b226f Scaffold interfaces and classes for pluggable monitors 2022-05-09 14:56:52 +02:00
Francesco Stasi
2b2ea72643 backend structure WIP 2022-05-09 14:56:52 +02:00
per1234
289f9d7946 Allow flexibility in OS type selections in issue forms
GitHub issue forms are used in this repository to facilitate the creation of high quality issues. These provide input
fields for each of the distinct classes of information which will be essential for the evaluation of the issues.

One of these fields is for the user's operating system. A dropdown menu is used for the selection of the high level
operating system type. Previously this only permitted the selection of a single option. A devoted contributor might have
made the effort to determine that the issue applies to multiple operating system types only to be met with the inability
to provide this information via the dedicated field.

The field also did not offer an option to indicate that the operating system was irrelevant to the issue (e.g., a
subject related to the repository assets).

Those issues are resolved by the following changes:

- Configure the field to allow multiple selections
- Add a "N/A" option to the menu
2022-05-05 02:27:22 -07:00
github-actions[bot]
905b78008d Updated translation files (#968)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-04-29 15:44:04 +02:00
Mark Sujew
11961bb7c7 Save all open editors before running Save As (#939)
* Save all open editors before running `Save As`

* Only save unsaved changes to new sketch
2022-04-29 15:42:48 +02:00
Alberto Iannaccone
2be1fac585 ignore workspace root check in changelog workflow (#960) 2022-04-20 15:23:52 +02:00
Alberto Iannaccone
b35340caa9 2.0.0-rc6 (#955) 2022-04-20 11:53:06 +02:00
Alberto Iannaccone
e6b3e2ec23 fix update version script (#958) 2022-04-19 16:04:08 +02:00
Mark Sujew
c07232698c Allow to close files in certain folders (#946)
* Allow to close files in certain folders

* Only direct children are sketch files
2022-04-19 12:00:15 +02:00
github-actions[bot]
58e992af13 Updated translation files (#959)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-04-19 11:59:58 +02:00
Alberto Iannaccone
a44b84ffd0 set the current language on the localization provider (#957) 2022-04-15 15:54:37 +02:00
Alberto Iannaccone
a3640cf812 use electron reload command when changing language (#953) 2022-04-14 09:38:23 +02:00
github-actions[bot]
03a75273e3 Updated translation files (#950)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-04-12 11:36:08 +02:00
Alberto Iannaccone
6176e50acf Enable language packs (#941)
* install language packs

* register localization contribution to backend module

* copy i18n folder to build

* fix chinese language iid
2022-04-08 14:59:11 +02:00
Alberto Iannaccone
46a3466bc5 improve check of read-only files (#918) 2022-04-07 16:45:09 +02:00
Alberto Iannaccone
aba9db6a6b Correctly print backslash-escaped characters (#943) 2022-04-06 18:05:32 +02:00
per1234
e5b34624ac Disable automatic application start after install via Windows Installer (#942)
Arduino IDE is packaged for Windows in multiple formats:

- ZIP
- NSIS
- Windows Installer (AKA "MSI")

The interactive installer of the NSIS package makes it the best option for installation by users.

The other use case for the installers is deployment by a system administrator. The Windows Installer package was added
to offer an additional installer option for this specific use case.

In this use case, a "silent install" will often be required. Previously, the Windows Installer package was configured to
start the Arduino IDE after completing the installation. This behavior is likely to be problematic for the very use case
the Windows Installer package was intended for. That configuration was not intentional, but rather a result of using
whatever setting electron-builder happened to provide as a default.

The behavior of the Windows Installer package is hereby changed to not run after installation. This also aligns it with
the behavior of the NSIS package's silent installation (running the installer with the `/S` flag).

The behavior of the NSIS installer is unchanged:

- When in interactive mode: user chooses whether to start Arduino IDE
- When in silent mode: Arduino IDE does not start after installation
2022-04-06 10:56:33 +02:00
Mark Sujew
c430cf0d88 Disable widget dragging/splitting (#940) 2022-04-05 12:21:49 +02:00
github-actions[bot]
1969e292f0 Updated translation files (#768)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2022-04-04 16:58:04 +02:00
Akos Kitta
0db119d7ba #919, #881: Fixed 3rd party URLs-related issues (#920)
* Fixed empty string to URLs conversion

Closes #919.

Signed-off-by: Akos Kitta <kittaakos@gmail.com>

* #881: Fixed height of the 3rd part URLs `textarea`

Closes #881.

Signed-off-by: Akos Kitta <kittaakos@gmail.com>
2022-04-04 16:52:55 +02:00
Francesco Spissu
c9b498fb08 add notes for Windows contributor in BUILDING.md (#926)
* add notes for Windows contributor in BUILDING.md

* rephrase notes for Windows contributor in BUILDING.md

* Update notes for Windows contributor in BUILDING.md

Co-authored-by: per1234 <accounts@perglass.com>

* move Notes for Windows contributors in Build from source section

Co-authored-by: per1234 <accounts@perglass.com>
2022-03-29 17:53:16 +02:00
Akos Kitta
78004fa4ca Minified browser code in the packaged final app. (#931)
- Also switched to minified `monaco` code,
- Removed dead code from the packaged.

Signed-off-by: Akos Kitta <kittaakos@gmail.com>
2022-03-29 17:45:54 +02:00
Mark Sujew
4de7737d14 Automatically remove editors for deleted files (#894) 2022-03-21 10:44:51 +01:00
per1234
f36df02f5d Switch to form-based GitHub issue templates
This project provides the contributors with templates for the fundamental categories of issues:

- bug report
- feature request

This is helpful to the maintainers and developers because it establishes a standardized framework for the issues and
encourages the contributors to provide the essential information.

GitHub's original issue template system is very crude, simply pre-populating the issue description field with the text
from the template file.

https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-templates

The contributor may be confused by being presented with a mass of Markdown and placeholder
content where they expected a field to write their issue. They also may find it inconvenient to manuever around the
framework content and replace the placeholder content.

A far better system is now available with GitHub's recently introduced form-based issue templates:

https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms

The user is now presented with a web form. These may include multi-line input fields that have the same formatting and
attachment capabilities as the standard GitHub Issue composer, but also additional elements such as menus and checkboxes.

The use of this form-based system should provide a much better experience for the contributors and also result in higher
quality issues.
2022-03-17 03:20:12 -07:00
per1234
753872ea2a Add links for other communication channels to the GitHub issue template chooser
The automatically created issue template chooser provides a menu of links to the available issue report templates as
well as the security policy at the start of the issue creation process.

It is also possible to add additional arbitrary items to the chooser, through GitHub's "Contact Links" feature. These
are defined in a configuration file:

https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser

These links offer the possibility to redirect support requests and other sub-optimal usages of the issues to the
appropriate location. This benefits the user by providing them with a fast and frictionless path to what they need, and
benefits the maintainers by preventing inappropriate issues.
2022-03-17 03:18:41 -07:00
Mark Sujew
ca1c24050d Fix Find Next command 2022-03-15 14:48:32 +01:00
Alberto Iannaccone
61c2b1a007 Install oktokit in changelog workflow (#901)
* install oktokit in changelog workflow

* fix how the old changelog is cut off
2022-03-14 12:05:53 +01:00
Alberto Iannaccone
8cac0872a4 Version 2.0.0-rc5 (#897) 2022-03-10 12:02:13 +01:00
Alberto Iannaccone
70f1c5f8ec Add privacy policy menu item (#883) 2022-03-09 11:46:22 +01:00
ulemons
b416e5f9e8 handling pagination in getting the sketches (#875)
Co-authored-by: Umberto Sgueglia <umberto.sgueglia@external.fcagroup.com>
2022-03-08 17:11:18 +01:00
per1234
bfe6835cab Remove irrelevant statement from EULA
When using the interactive installer, the user is presented with a dialog requested they agree to this.

The previous statement about initiation of a download constituting agreement is relevant in the context of the text's source on the arduino.cc downloads page, but not at all in the context of the installer dialog.
2022-03-08 07:54:12 -08:00
Alberto Iannaccone
9e89964df2 remove dev tools menu item (#882) 2022-03-08 07:38:00 +00:00
Alberto Iannaccone
04c3d0c1d3 Fix sketch name duplicates (#887) 2022-03-07 16:34:16 +00:00
per1234
c9996df11c Add Linux AppImage to nightly build download links
Linux x86-64 builds of the Arduino IDE are now available in AppImage format in additional to the ZIP format.

Since only the AppImage format IDE supports auto-updates (the IDE installed from the ZIP will notify of available updates, but can't auto-update), this will be the preferred format and so good beta testing coverage of it is especially important.
2022-03-07 03:30:31 -08:00
per1234
49971ada07 Remove irrelevant trigger from "Compose full changelog" workflow
The "Compose full changelog" GitHub Actions workflow generates a changelog file from the release notes and uploads this
to Arduino's server for display to the user by the IDE updater.

Previously, this workflow could be triggered by either of two events:

- Release creation
- Release edit

To reduce the possibility of endless recursion, GitHub Actions ignores events which are triggered using the
auto-generated `GITHUB_TOKEN` access token. All release creations are done automatically by the "Arduino IDE" GitHub
Actions workflow, which uses this token.

For this reason, the release creation trigger will never be used. Since the behavior of the event being ignored by
GitHub Actions under these conditions is not at all obvious, having the workflow configured for such an irrelevant
trigger can cause confusion.

The workflow will be triggered by the manual edit which is done on every release to format the raw release notes
auto-generated from the commit history. So the fact that the release creation trigger doesn't work is not a problem.
2022-03-04 00:41:24 -08:00
Mark Sujew
e6b9d4e2aa Override the RELOAD_REQUESTED_SIGNAL correctly (#880) 2022-03-03 14:37:37 +00:00
Francesco Stasi
93a374d0c6 add PR template file (#838)
* add PR template file

* Update .github/PULL_REQUEST_TEMPLATE.md

Co-authored-by: per1234 <accounts@perglass.com>

* Update .github/PULL_REQUEST_TEMPLATE.md

Co-authored-by: per1234 <accounts@perglass.com>

Co-authored-by: per1234 <accounts@perglass.com>
2022-03-03 13:54:05 +00:00
Alberto Iannaccone
0fc7c78e11 Install Node.js 14.x on compose-full-changelog workflow (#878)
* Install Node.js 14.x on compose-full-changelog workflow

* change date formate in changelog file name

* improve node js installation in workflow
2022-03-03 08:38:48 +00:00
106 changed files with 7628 additions and 3054 deletions

74
.github/ISSUE_TEMPLATE/bug-report.yml vendored Normal file
View File

@@ -0,0 +1,74 @@
name: Bug report
description: Report a problem with the code or documentation in this repository.
labels:
- "type: imperfection"
body:
- type: textarea
id: description
attributes:
label: Describe the problem
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: To reproduce
description: Provide the specific set of steps we can follow to reproduce the problem.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What would you expect to happen after following those instructions?
validations:
required: true
- type: input
id: project-version
attributes:
label: Arduino IDE version
description: |
Which version of the Arduino IDE are you using?
See **Help > About Arduino IDE** in the Arduino IDE menus (**Arduino IDE > About Arduino IDE** on macOS).
This should be the latest [nightly build](https://github.com/arduino/arduino-ide#nightly-builds).
validations:
required: true
- type: dropdown
id: os
attributes:
label: Operating system
description: Which operating system(s) are you using on your computer?
multiple: true
options:
- Windows
- Linux
- macOS
- N/A
validations:
required: true
- type: input
id: os-version
attributes:
label: Operating system version
description: Which version of the operating system are you using on your computer?
validations:
required: true
- type: textarea
id: additional
attributes:
label: Additional context
description: Add any additional information here.
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: Issue checklist
description: Please double-check that you have done each of the following things before submitting the issue.
options:
- label: I searched for previous reports in [the issue tracker](https://github.com/arduino/arduino-ide/issues?q=)
required: true
- label: I verified the problem still occurs when using the latest [nightly build](https://github.com/arduino/arduino-ide#nightly-builds)
required: true
- label: My report contains all necessary details
required: true

View File

@@ -1,32 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'type: imperfection'
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Windows]
- Version: [e.g. 2.0.0]
**Additional context**
Add any other context about the problem here.

13
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
# Source:
# https://github.com/arduino/tooling-project-assets/blob/main/issue-templates/template-choosers/general/config.yml
blank_issues_enabled: false
contact_links:
- name: Learn about using this project
url: https://github.com/arduino/arduino-ide#readme
about: Detailed usage documentation is available here.
- name: Support request
url: https://forum.arduino.cc/
about: We can help you out on the Arduino Forum!
- name: Discuss development work on the project
url: https://groups.google.com/a/arduino.cc/g/developers
about: Arduino Developers Mailing List

View File

@@ -0,0 +1,69 @@
name: Feature request
description: Suggest an enhancement to this project.
labels:
- "type: enhancement"
body:
- type: textarea
id: description
attributes:
label: Describe the request
validations:
required: true
- type: textarea
id: current
attributes:
label: Describe the current behavior
description: |
What is the current behavior of the Arduino IDE in relation to your request?
How can we reproduce that behavior?
validations:
required: true
- type: input
id: project-version
attributes:
label: Arduino IDE version
description: |
Which version of the Arduino IDE are you using?
See **Help > About Arduino IDE** in the Arduino IDE menus (**Arduino IDE > About Arduino IDE** on macOS).
This should be the latest [nightly build](https://github.com/arduino/arduino-ide#nightly-builds).
validations:
required: true
- type: dropdown
id: os
attributes:
label: Operating system
description: Which operating system(s) are you using on your computer?
multiple: true
options:
- Windows
- Linux
- macOS
- N/A
validations:
required: true
- type: input
id: os-version
attributes:
label: Operating system version
description: Which version of the operating system are you using on your computer?
validations:
required: true
- type: textarea
id: additional
attributes:
label: Additional context
description: Add any additional information here.
validations:
required: false
- type: checkboxes
id: checklist
attributes:
label: Issue checklist
description: Please double-check that you have done each of the following things before submitting the issue.
options:
- label: I searched for previous requests in [the issue tracker](https://github.com/arduino/arduino-ide/issues?q=)
required: true
- label: I verified the feature was still missing when using the latest [nightly build](https://github.com/arduino/arduino-ide#nightly-builds)
required: true
- label: My request contains all necessary details
required: true

View File

@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'type: enhancement'
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

15
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,15 @@
### Motivation
<!-- Why this pull request? -->
### Change description
<!-- What does your code do? -->
### Other information
<!-- Any additional information that could help the review process -->
### Reviewer checklist
* [ ] PR addresses a single concern.
* [ ] The PR has no duplicates (please search among the [Pull Requests](https://github.com/arduino/arduino-ide/pulls) before creating one)
* [ ] PR title and description are properly filled.
* [ ] Docs have been added / updated (for bug fixes / features)

View File

@@ -2,10 +2,13 @@ name: Compose full changelog
on:
release:
types: [created, edited]
types:
- edited
env:
CHANGELOG_ARTIFACTS: changelog
# See: https://github.com/actions/setup-node/#readme
NODE_VERSION: 14.x
jobs:
create-changelog:
@@ -15,6 +18,12 @@ jobs:
- name: Checkout
uses: actions/checkout@v2
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
- name: Get Tag
id: tag_name
run: |
@@ -23,10 +32,11 @@ jobs:
- name: Create full changelog
id: full-changelog
run: |
yarn add @octokit/rest --ignore-workspace-root-check
mkdir "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}"
# Get the changelog file name to build
CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-$(date --iso-8601=s).md"
CHANGELOG_FILE_NAME="${{ steps.tag_name.outputs.TAG_NAME }}-$(date +%s).md"
# Create manifest file pointing to latest changelog file name
echo "$CHANGELOG_FILE_NAME" >> "${{ github.workspace }}/${{ env.CHANGELOG_ARTIFACTS }}/latest.txt"

View File

@@ -66,6 +66,13 @@ Once you have all the tools installed, you can build the editor following these
yarn start
```
### Notes for Windows contributors
Windows requires the Microsoft Visual C++ (MSVC) compiler toolset to be installed on your development machine.
In case it's not already present, it can be downloaded from the "**Tools for Visual Studio 20XX**" section of the Visual Studio [downloads page](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022) via the "**Build Tools for Visual Studio 20XX**" (e.g., "**Build Tools for Visual Studio 2022**") download link.
Select "**Desktop development with C++**" from the "**Workloads**" tab during the installation procedure.
### CI
This project is built on [GitHub Actions](https://github.com/arduino/arduino-ide/actions).
@@ -82,6 +89,7 @@ This project is built on [GitHub Actions](https://github.com/arduino/arduino-ide
git push origin 1.2.3
```
## Notes for macOS contributors
Beginning in macOS 10.14.5, the software [must be notarized to run](https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution). The signing and notarization processes for the Arduino IDE are managed by our Continuous Integration (CI) workflows, implemented with GitHub Actions. On every push and pull request, the Arduino IDE is built and saved to a workflow artifact. These artifacts can be used by contributors and beta testers who don't want to set up a build system locally.
For security reasons, signing and notarization are disabled for workflow runs for pull requests from forks of this repository. This means that macOS will block you from running those artifacts.

View File

@@ -23,13 +23,14 @@ should be considered unstable:
| Platform | 32 bit | 64 bit |
| --------- | ------------------------ | ------------------------------------------------------------------------------------------------------ |
| Linux | | [Nightly Linux 64 bit] |
| Linux | | [Nightly Linux AppImage 64 bit]<br />[Nightly Linux ZIP file 64 bit] |
| Linux ARM | [🚧 Work in progress...] | [🚧 Work in progress...] |
| Windows | | [Nightly Windows 64 bit installer]<br />[Nightly Windows 64 bit MSI]<br />[Nightly Windows 64 bit ZIP] |
| macOS | | [Nightly macOS 64 bit] |
[🚧 work in progress...]: https://github.com/arduino/arduino-ide/issues/107
[nightly linux 64 bit]: https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-latest_Linux_64bit.zip
[nightly linux appimage 64 bit]: https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-latest_Linux_64bit.AppImage
[nightly linux zip file 64 bit]: https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-latest_Linux_64bit.zip
[nightly windows 64 bit installer]: https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-latest_Windows_64bit.exe
[nightly windows 64 bit msi]: https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-latest_Windows_64bit.msi
[nightly windows 64 bit zip]: https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-latest_Windows_64bit.zip

View File

@@ -1,15 +1,16 @@
{
"name": "arduino-ide-extension",
"version": "2.0.0-rc4",
"version": "2.0.0-rc6",
"description": "An extension for Theia building the Arduino IDE",
"license": "AGPL-3.0-or-later",
"scripts": {
"prepare": "yarn download-cli && yarn download-fwuploader && yarn download-ls && yarn copy-serial-plotter && yarn clean && yarn download-examples && yarn build && yarn test",
"prepare": "yarn download-cli && yarn download-fwuploader && yarn download-ls && yarn copy-serial-plotter && yarn copy-i18n && yarn clean && yarn download-examples && yarn build && yarn test",
"clean": "rimraf lib",
"compose-changelog": "node ./scripts/compose-changelog.js",
"download-cli": "node ./scripts/download-cli.js",
"download-fwuploader": "node ./scripts/download-fwuploader.js",
"copy-serial-plotter": "npx ncp ../node_modules/arduino-serial-plotter-webapp ./build/arduino-serial-plotter-webapp",
"copy-i18n": "npx ncp ../i18n ./build/i18n",
"download-ls": "node ./scripts/download-ls.js",
"download-examples": "node ./scripts/download-examples.js",
"generate-protocol": "node ./scripts/generate-protocol.js",
@@ -156,7 +157,7 @@
],
"arduino": {
"cli": {
"version": "0.21.0"
"version": "0.22.0"
},
"fwuploader": {
"version": "2.0.0"
@@ -168,4 +169,4 @@
"version": "0.6.0"
}
}
}
}

View File

@@ -20,6 +20,7 @@ import {
FrontendApplication,
FrontendApplicationContribution,
LocalStorageService,
SaveableWidget,
StatusBar,
StatusBarAlignment,
} from '@theia/core/lib/browser';
@@ -38,13 +39,14 @@ import {
import { MessageService } from '@theia/core/lib/common/message-service';
import URI from '@theia/core/lib/common/uri';
import {
EditorCommands,
EditorMainMenu,
EditorManager,
EditorOpenerOptions,
} from '@theia/editor/lib/browser';
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
import { MonacoMenus } from '@theia/monaco/lib/browser/monaco-menu';
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
import { FileNavigatorCommands, FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution';
@@ -70,6 +72,7 @@ import { SaveAsSketch } from './contributions/save-as-sketch';
import { SketchbookWidgetContribution } from './widgets/sketchbook/sketchbook-widget-contribution';
import { IDEUpdaterDialog } from './dialogs/ide-updater/ide-updater-dialog';
import { IDEUpdater } from '../common/protocol/ide-updater';
import { FileSystemFrontendContribution } from '@theia/filesystem/lib/browser/filesystem-frontend-contribution';
const INIT_LIBS_AND_PACKAGES = 'initializedLibsAndPackages';
export const SKIP_IDE_VERSION = 'skipIDEVersion';
@@ -159,6 +162,9 @@ export class ArduinoFrontendContribution
@inject(LocalStorageService)
protected readonly localStorageService: LocalStorageService;
@inject(FileSystemFrontendContribution)
protected readonly fileSystemFrontendContribution: FileSystemFrontendContribution;
@inject(IDEUpdater)
protected readonly updater: IDEUpdater;
@@ -337,6 +343,17 @@ export class ArduinoFrontendContribution
});
app.shell.leftPanelHandler.removeBottomMenu('settings-menu');
this.fileSystemFrontendContribution.onDidChangeEditorFile(e => {
if (e.type === FileChangeType.DELETED) {
const editorWidget = e.editor;
if (SaveableWidget.is(editorWidget)) {
editorWidget.closeWithoutSaving();
} else {
editorWidget.close();
}
}
});
}
onStop(): void {
@@ -469,6 +486,18 @@ export class ArduinoFrontendContribution
}
},
});
for (const command of [
EditorCommands.SPLIT_EDITOR_DOWN,
EditorCommands.SPLIT_EDITOR_LEFT,
EditorCommands.SPLIT_EDITOR_RIGHT,
EditorCommands.SPLIT_EDITOR_UP,
EditorCommands.SPLIT_EDITOR_VERTICAL,
EditorCommands.SPLIT_EDITOR_HORIZONTAL,
FileNavigatorCommands.REVEAL_IN_NAVIGATOR
]) {
registry.unregisterCommand(command);
}
}
registerMenus(registry: MenuModelRegistry) {

View File

@@ -69,20 +69,12 @@ import { ScmContribution } from './theia/scm/scm-contribution';
import { SearchInWorkspaceFrontendContribution as TheiaSearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
import { SearchInWorkspaceFrontendContribution } from './theia/search-in-workspace/search-in-workspace-frontend-contribution';
import { LibraryListWidgetFrontendContribution } from './library/library-widget-frontend-contribution';
import { SerialServiceClientImpl } from './serial/serial-service-client-impl';
import {
SerialServicePath,
SerialService,
SerialServiceClient,
} from '../common/protocol/serial-service';
import {
ConfigService,
ConfigServicePath,
} from '../common/protocol/config-service';
import { MonitorWidget } from './serial/monitor/monitor-widget';
import { MonitorViewContribution } from './serial/monitor/monitor-view-contribution';
import { SerialConnectionManager } from './serial/serial-connection-manager';
import { SerialModel } from './serial/serial-model';
import { TabBarDecoratorService as TheiaTabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator';
import { TabBarDecoratorService } from './theia/core/tab-bar-decorator';
import { ProblemManager as TheiaProblemManager } from '@theia/markers/lib/browser';
@@ -160,7 +152,7 @@ import {
OutputChannelRegistryMainImpl as TheiaOutputChannelRegistryMainImpl,
OutputChannelRegistryMainImpl,
} from './theia/plugin-ext/output-channel-registry-main';
import { ExecutableService, ExecutableServicePath } from '../common/protocol';
import { ExecutableService, ExecutableServicePath, MonitorManagerProxy, MonitorManagerProxyClient, MonitorManagerProxyFactory, MonitorManagerProxyPath } from '../common/protocol';
import { MonacoTextModelService as TheiaMonacoTextModelService } from '@theia/monaco/lib/browser/monaco-text-model-service';
import { MonacoTextModelService } from './theia/monaco/monaco-text-model-service';
import { ResponseServiceImpl } from './response-service-impl';
@@ -275,6 +267,8 @@ import {
IDEUpdaterDialogWidget,
} from './dialogs/ide-updater/ide-updater-dialog';
import { ElectronIpcConnectionProvider } from '@theia/core/lib/electron-browser/messaging/electron-ipc-connection-provider';
import { MonitorModel } from './monitor-model';
import { MonitorManagerProxyClientImpl } from './monitor-manager-proxy-client-impl';
const ElementQueries = require('css-element-queries/src/ElementQueries');
@@ -407,29 +401,31 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
.inSingletonScope();
// Serial monitor
bind(SerialModel).toSelf().inSingletonScope();
bind(FrontendApplicationContribution).toService(SerialModel);
bind(MonitorWidget).toSelf();
bind(FrontendApplicationContribution).toService(MonitorModel);
bind(MonitorModel).toSelf().inSingletonScope();
bindViewContribution(bind, MonitorViewContribution);
bind(TabBarToolbarContribution).toService(MonitorViewContribution);
bind(WidgetFactory).toDynamicValue((context) => ({
id: MonitorWidget.ID,
createWidget: () => context.container.get(MonitorWidget),
}));
// Frontend binding for the serial service
bind(SerialService)
.toDynamicValue((context) => {
const connection = context.container.get(WebSocketConnectionProvider);
const client = context.container.get<SerialServiceClient>(
SerialServiceClient
createWidget: () => {
return new MonitorWidget(
context.container.get<MonitorModel>(MonitorModel),
context.container.get<MonitorManagerProxyClient>(MonitorManagerProxyClient),
context.container.get<BoardsServiceProvider>(BoardsServiceProvider),
);
return connection.createProxy(SerialServicePath, client);
})
.inSingletonScope();
bind(SerialConnectionManager).toSelf().inSingletonScope();
}
}));
// Serial service client to receive and delegate notifications from the backend.
bind(SerialServiceClient).to(SerialServiceClientImpl).inSingletonScope();
bind(MonitorManagerProxyFactory).toFactory((context) => () => context.container.get<MonitorManagerProxy>(MonitorManagerProxy))
bind(MonitorManagerProxy).toDynamicValue((context) =>
WebSocketConnectionProvider.createProxy(context.container, MonitorManagerProxyPath, context.container.get(MonitorManagerProxyClient))
).inSingletonScope();
// Monitor manager proxy client to receive and delegate pluggable monitors
// notifications from the backend
bind(MonitorManagerProxyClient).to(MonitorManagerProxyClientImpl).inSingletonScope();
bind(WorkspaceService).toSelf().inSingletonScope();
rebind(TheiaWorkspaceService).toService(WorkspaceService);

View File

@@ -39,10 +39,6 @@ export class AddZipLibrary extends SketchContribution {
...ArduinoMenus.SKETCH__UTILS_GROUP,
'0_include',
];
// TODO: do we need it? calling `registerSubmenu` multiple times is noop, so it does not hurt.
registry.registerSubmenu(includeLibMenuPath, 'Include Library', {
order: '1',
});
registry.registerMenuAction([...includeLibMenuPath, '1_install'], {
commandId: AddZipLibrary.Commands.ADD_ZIP_LIBRARY.id,
label: nls.localize('arduino/library/addZip', 'Add .ZIP Library...'),

View File

@@ -3,7 +3,6 @@ import { OutputChannelManager } from '@theia/output/lib/browser/output-channel';
import { CoreService } from '../../common/protocol';
import { ArduinoMenus } from '../menu/arduino-menus';
import { BoardsDataStore } from '../boards/boards-data-store';
import { SerialConnectionManager } from '../serial/serial-connection-manager';
import { BoardsServiceProvider } from '../boards/boards-service-provider';
import {
SketchContribution,
@@ -18,8 +17,6 @@ export class BurnBootloader extends SketchContribution {
@inject(CoreService)
protected readonly coreService: CoreService;
@inject(SerialConnectionManager)
protected readonly serialConnection: SerialConnectionManager;
@inject(BoardsDataStore)
protected readonly boardsDataStore: BoardsDataStore;
@@ -60,9 +57,15 @@ export class BurnBootloader extends SketchContribution {
this.preferences.get('arduino.upload.verify'),
this.preferences.get('arduino.upload.verbose'),
]);
const board = {
...boardsConfig.selectedBoard,
name: boardsConfig.selectedBoard?.name || '',
fqbn,
}
this.outputChannelManager.getChannel('Arduino').clear();
await this.coreService.burnBootloader({
fqbn,
board,
programmer,
port,
verify,
@@ -85,8 +88,6 @@ export class BurnBootloader extends SketchContribution {
errorMessage = e.toString();
}
this.messageService.error(errorMessage);
} finally {
await this.serialConnection.reconnectAfterUpload();
}
}
}

View File

@@ -43,10 +43,10 @@ export class EditContributions extends Contribution {
execute: () => this.run('actions.find'),
});
registry.registerCommand(EditContributions.Commands.FIND_NEXT, {
execute: () => this.run('actions.findWithSelection'),
execute: () => this.run('editor.action.nextMatchFindAction'),
});
registry.registerCommand(EditContributions.Commands.FIND_PREVIOUS, {
execute: () => this.run('editor.action.nextMatchFindAction'),
execute: () => this.run('editor.action.previousMatchFindAction'),
});
registry.registerCommand(EditContributions.Commands.USE_FOR_FIND, {
execute: () => this.run('editor.action.previousSelectionMatchFindAction'),

View File

@@ -14,6 +14,7 @@ import {
} from './contribution';
import { nls } from '@theia/core/lib/common';
import { IDEUpdaterCommands } from '../ide-updater/ide-updater-commands';
import { ElectronCommands } from '@theia/core/lib/electron-browser/menu/electron-menu-contribution';
@injectable()
export class Help extends Contribution {
@@ -84,9 +85,17 @@ export class Help extends Contribution {
Help.Commands.VISIT_ARDUINO,
createOpenHandler('https://www.arduino.cc/')
);
registry.registerCommand(
Help.Commands.PRIVACY_POLICY,
createOpenHandler('https://www.arduino.cc/en/privacy-policy')
);
}
registerMenus(registry: MenuModelRegistry): void {
registry.unregisterMenuAction({
commandId: ElectronCommands.TOGGLE_DEVELOPER_TOOLS.id,
});
registry.registerMenuAction(ArduinoMenus.HELP__MAIN_GROUP, {
commandId: Help.Commands.GETTING_STARTED.id,
order: '0',
@@ -117,9 +126,13 @@ export class Help extends Contribution {
order: '6',
});
registry.registerMenuAction(ArduinoMenus.HELP__FIND_GROUP, {
commandId: IDEUpdaterCommands.CHECK_FOR_UPDATES.id,
commandId: Help.Commands.PRIVACY_POLICY.id,
order: '7',
});
registry.registerMenuAction(ArduinoMenus.HELP__FIND_GROUP, {
commandId: IDEUpdaterCommands.CHECK_FOR_UPDATES.id,
order: '8',
});
}
registerKeybindings(registry: KeybindingRegistry): void {
@@ -167,5 +180,10 @@ export namespace Help {
label: nls.localize('arduino/help/visit', 'Visit Arduino.cc'),
category: 'Arduino',
};
export const PRIVACY_POLICY: Command = {
id: 'arduino-privacy-policy',
label: nls.localize('arduino/help/privacyPolicy', 'Privacy Policy'),
category: 'Arduino',
};
}
}

View File

@@ -1,4 +1,4 @@
import { injectable } from 'inversify';
import { inject, injectable } from 'inversify';
import * as remote from '@theia/core/electron-shared/@electron/remote';
import * as dateFormat from 'dateformat';
import { ArduinoMenus } from '../menu/arduino-menus';
@@ -11,9 +11,22 @@ import {
KeybindingRegistry,
} from './contribution';
import { nls } from '@theia/core/lib/common';
import { ApplicationShell, NavigatableWidget, Saveable } from '@theia/core/lib/browser';
import { EditorManager } from '@theia/editor/lib/browser';
import { WindowService } from '@theia/core/lib/browser/window/window-service';
@injectable()
export class SaveAsSketch extends SketchContribution {
@inject(ApplicationShell)
protected readonly applicationShell: ApplicationShell;
@inject(EditorManager)
protected readonly editorManager: EditorManager;
@inject(WindowService)
protected readonly windowService: WindowService;
registerCommands(registry: CommandRegistry): void {
registry.registerCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH, {
execute: (args) => this.saveAs(args),
@@ -90,6 +103,9 @@ export class SaveAsSketch extends SketchContribution {
const workspaceUri = await this.sketchService.copy(sketch, {
destinationUri,
});
if (workspaceUri) {
await this.saveOntoCopiedSketch(sketch.mainFileUri, sketch.uri, workspaceUri);
}
if (workspaceUri && openAfterMove) {
if (wipeOriginal || (openAfterMove && execOnlyIfTemp)) {
try {
@@ -100,12 +116,48 @@ export class SaveAsSketch extends SketchContribution {
/* NOOP: from time to time, it's not possible to wipe the old resource from the temp dir on Windows */
}
}
this.windowService.setSafeToShutDown();
this.workspaceService.open(new URI(workspaceUri), {
preserveWindow: true,
});
}
return !!workspaceUri;
}
private async saveOntoCopiedSketch(mainFileUri: string, sketchUri: string, newSketchUri: string): Promise<void> {
const widgets = this.applicationShell.widgets;
const snapshots = new Map<string, object>();
for (const widget of widgets) {
const saveable = Saveable.getDirty(widget);
const uri = NavigatableWidget.getUri(widget);
const uriString = uri?.toString();
let relativePath: string;
if (uri && uriString!.includes(sketchUri) && saveable && saveable.createSnapshot) {
// The main file will change its name during the copy process
// We need to store the new name in the map
if (mainFileUri === uriString) {
const lastPart = new URI(newSketchUri).path.base + uri.path.ext;
relativePath = '/' + lastPart;
} else {
relativePath = uri.toString().substring(sketchUri.length);
}
snapshots.set(relativePath, saveable.createSnapshot());
}
}
await Promise.all(Array.from(snapshots.entries()).map(async ([path, snapshot]) => {
const widgetUri = new URI(newSketchUri + path);
try {
const widget = await this.editorManager.getOrCreateByUri(widgetUri);
const saveable = Saveable.get(widget);
if (saveable && saveable.applySnapshot) {
saveable.applySnapshot(snapshot);
await saveable.save();
}
} catch (e) {
console.error(e);
}
}));
}
}
export namespace SaveAsSketch {

View File

@@ -4,7 +4,6 @@ import { BoardUserField, CoreService } from '../../common/protocol';
import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus';
import { ArduinoToolbar } from '../toolbar/arduino-toolbar';
import { BoardsDataStore } from '../boards/boards-data-store';
import { SerialConnectionManager } from '../serial/serial-connection-manager';
import { BoardsServiceProvider } from '../boards/boards-service-provider';
import {
SketchContribution,
@@ -22,9 +21,6 @@ export class UploadSketch extends SketchContribution {
@inject(CoreService)
protected readonly coreService: CoreService;
@inject(SerialConnectionManager)
protected readonly serialConnection: SerialConnectionManager;
@inject(MenuModelRegistry)
protected readonly menuRegistry: MenuModelRegistry;
@@ -226,6 +222,11 @@ export class UploadSketch extends SketchContribution {
this.sourceOverride(),
]);
const board = {
...boardsConfig.selectedBoard,
name: boardsConfig.selectedBoard?.name || '',
fqbn,
}
let options: CoreService.Upload.Options | undefined = undefined;
const sketchUri = sketch.uri;
const optimizeForDebug = this.editorMode.compileForDebug;
@@ -247,7 +248,7 @@ export class UploadSketch extends SketchContribution {
const programmer = selectedProgrammer;
options = {
sketchUri,
fqbn,
board,
optimizeForDebug,
programmer,
port,
@@ -259,7 +260,7 @@ export class UploadSketch extends SketchContribution {
} else {
options = {
sketchUri,
fqbn,
board,
optimizeForDebug,
port,
verbose,
@@ -289,8 +290,6 @@ export class UploadSketch extends SketchContribution {
} finally {
this.uploadInProgress = false;
this.onDidChangeEmitter.fire();
setTimeout(() => this.serialConnection.reconnectAfterUpload(), 5000);
}
}
}

View File

@@ -110,12 +110,17 @@ export class VerifySketch extends SketchContribution {
),
this.sourceOverride(),
]);
const board = {
...boardsConfig.selectedBoard,
name: boardsConfig.selectedBoard?.name || '',
fqbn,
}
const verbose = this.preferences.get('arduino.compile.verbose');
const compilerWarnings = this.preferences.get('arduino.compile.warnings');
this.outputChannelManager.getChannel('Arduino').clear();
await this.coreService.compile({
sketchUri: sketch.uri,
fqbn,
board,
optimizeForDebug: this.editorMode.compileForDebug,
verbose,
exportBinaries,

View File

@@ -100,14 +100,29 @@ export class CreateApi {
return result;
}
async sketches(): Promise<Create.Sketch[]> {
async sketches(limit = 50): Promise<Create.Sketch[]> {
const url = new URL(`${this.domain()}/sketches`);
url.searchParams.set('user_id', 'me');
url.searchParams.set('limit', limit.toString());
const headers = await this.headers();
const result = await this.run<{ sketches: Create.Sketch[] }>(url, {
method: 'GET',
headers,
});
const result: { sketches: Create.Sketch[] } = { sketches: [] };
let partialSketches: Create.Sketch[] = [];
let currentOffset = 0;
do {
url.searchParams.set('offset', currentOffset.toString());
partialSketches = (
await this.run<{ sketches: Create.Sketch[] }>(url, {
method: 'GET',
headers,
})
).sketches;
if (partialSketches.length != 0) {
result.sketches = result.sketches.concat(partialSketches);
}
currentOffset = currentOffset + limit;
} while (partialSketches.length != 0);
result.sketches.forEach((sketch) => this.sketchCache.addSketch(sketch));
return result.sketches;
}

View File

@@ -1,5 +1,6 @@
import { nls } from '@theia/core/lib/common';
import * as React from 'react';
import { Port } from '../../../common/protocol';
import {
ArduinoFirmwareUploader,
FirmwareInfo,
@@ -20,7 +21,7 @@ export const FirmwareUploaderComponent = ({
availableBoards: AvailableBoard[];
firmwareUploader: ArduinoFirmwareUploader;
updatableFqbns: string[];
flashFirmware: (firmware: FirmwareInfo, port: string) => Promise<any>;
flashFirmware: (firmware: FirmwareInfo, port: Port) => Promise<any>;
isOpen: any;
}): React.ReactElement => {
// boolean states for buttons
@@ -81,7 +82,7 @@ export const FirmwareUploaderComponent = ({
const installStatus =
!!firmwareToFlash &&
!!selectedBoard?.port &&
(await flashFirmware(firmwareToFlash, selectedBoard?.port.address));
(await flashFirmware(firmwareToFlash, selectedBoard?.port));
setInstallFeedback((installStatus && 'ok') || 'fail');
} catch {

View File

@@ -15,6 +15,7 @@ import {
} from '../../../common/protocol/arduino-firmware-uploader';
import { FirmwareUploaderComponent } from './firmware-uploader-component';
import { UploadFirmware } from '../../contributions/upload-firmware';
import { Port } from '../../../common/protocol';
@injectable()
export class UploadFirmwareDialogWidget extends ReactWidget {
@@ -49,7 +50,7 @@ export class UploadFirmwareDialogWidget extends ReactWidget {
});
}
protected flashFirmware(firmware: FirmwareInfo, port: string): Promise<any> {
protected flashFirmware(firmware: FirmwareInfo, port: Port): Promise<any> {
this.busyCallback(true);
return this.arduinoFirmwareUploader
.flash(firmware, port)

View File

@@ -9,6 +9,7 @@ import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/file-dialog-service';
import { DisposableCollection } from '@theia/core/lib/common/disposable';
import {
AdditionalUrls,
CompilerWarningLiterals,
Network,
ProxySettings,
@@ -35,21 +36,32 @@ export class SettingsComponent extends React.Component<
if (
this.state &&
prevState &&
JSON.stringify(this.state) !== JSON.stringify(prevState)
JSON.stringify(SettingsComponent.State.toSettings(this.state)) !==
JSON.stringify(SettingsComponent.State.toSettings(prevState))
) {
this.props.settingsService.update(this.state, true);
this.props.settingsService.update(
SettingsComponent.State.toSettings(this.state),
true
);
}
}
componentDidMount(): void {
this.props.settingsService
.settings()
.then((settings) => this.setState(settings));
this.toDispose.push(
.then((settings) =>
this.setState(SettingsComponent.State.fromSettings(settings))
);
this.toDispose.pushAll([
this.props.settingsService.onDidChange((settings) =>
this.setState(settings)
)
);
this.setState((prevState) => ({
...SettingsComponent.State.merge(prevState, settings),
}))
),
this.props.settingsService.onDidReset((settings) =>
this.setState(SettingsComponent.State.fromSettings(settings))
),
]);
}
componentWillUnmount(): void {
@@ -290,8 +302,8 @@ export class SettingsComponent extends React.Component<
<input
className="theia-input stretch with-margin"
type="text"
value={this.state.additionalUrls.join(',')}
onChange={this.additionalUrlsDidChange}
value={this.state.rawAdditionalUrlsValue}
onChange={this.rawAdditionalUrlsValueDidChange}
/>
<i
className="fa fa-window-restore theia-button shrink"
@@ -475,11 +487,13 @@ export class SettingsComponent extends React.Component<
protected editAdditionalUrlDidClick = async (): Promise<void> => {
const additionalUrls = await new AdditionalUrlsDialog(
this.state.additionalUrls,
AdditionalUrls.parse(this.state.rawAdditionalUrlsValue, ','),
this.props.windowService
).open();
if (additionalUrls) {
this.setState({ additionalUrls });
this.setState({
rawAdditionalUrlsValue: AdditionalUrls.stringify(additionalUrls),
});
}
};
@@ -492,11 +506,11 @@ export class SettingsComponent extends React.Component<
}
};
protected additionalUrlsDidChange = (
protected rawAdditionalUrlsValueDidChange = (
event: React.ChangeEvent<HTMLInputElement>
): void => {
this.setState({
additionalUrls: event.target.value.split(',').map((url) => url.trim()),
rawAdditionalUrlsValue: event.target.value,
});
};
@@ -699,5 +713,48 @@ export namespace SettingsComponent {
readonly windowService: WindowService;
readonly localizationProvider: AsyncLocalizationProvider;
}
export type State = Settings & { languages: string[] };
export type State = Settings & {
rawAdditionalUrlsValue: string;
};
export namespace State {
export function fromSettings(settings: Settings): State {
return {
...settings,
rawAdditionalUrlsValue: AdditionalUrls.stringify(
settings.additionalUrls
),
};
}
export function toSettings(state: State): Settings {
const parsedAdditionalUrls = AdditionalUrls.parse(
state.rawAdditionalUrlsValue,
','
);
return {
...state,
additionalUrls: AdditionalUrls.sameAs(
state.additionalUrls,
parsedAdditionalUrls
)
? state.additionalUrls
: parsedAdditionalUrls,
};
}
export function merge(prevState: State, settings: Settings): State {
const prevAdditionalUrls = AdditionalUrls.parse(
prevState.rawAdditionalUrlsValue,
','
);
return {
...settings,
rawAdditionalUrlsValue: prevState.rawAdditionalUrlsValue,
additionalUrls: AdditionalUrls.sameAs(
prevAdditionalUrls,
settings.additionalUrls
)
? prevAdditionalUrls
: settings.additionalUrls,
};
}
}
}

View File

@@ -11,6 +11,7 @@ import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/fil
import { nls } from '@theia/core/lib/common';
import { SettingsComponent } from './settings-component';
import { AsyncLocalizationProvider } from '@theia/core/lib/common/i18n/localization';
import { AdditionalUrls } from '../../../common/protocol';
@injectable()
export class SettingsWidget extends ReactWidget {
@@ -96,7 +97,7 @@ export class SettingsDialog extends AbstractDialog<Promise<Settings>> {
this.update();
}
protected onUpdateRequest(msg: Message) {
protected onUpdateRequest(msg: Message): void {
super.onUpdateRequest(msg);
this.widget.update();
}
@@ -105,7 +106,7 @@ export class SettingsDialog extends AbstractDialog<Promise<Settings>> {
super.onActivateRequest(msg);
// calling settingsService.reset() in order to reload the settings from the preferenceService
// and update the UI including changes triggerd from the command palette
// and update the UI including changes triggered from the command palette
this.settingsService.reset();
this.widget.activate();
@@ -168,10 +169,7 @@ export class AdditionalUrlsDialog extends AbstractDialog<string[]> {
}
get value(): string[] {
return this.textArea.value
.split('\n')
.map((url) => url.trim())
.filter((url) => !!url);
return AdditionalUrls.parse(this.textArea.value, 'newline');
}
protected onAfterAttach(message: Message): void {

View File

@@ -8,15 +8,16 @@ import { ThemeService } from '@theia/core/lib/browser/theming';
import { MaybePromise } from '@theia/core/lib/common/types';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { PreferenceService, PreferenceScope } from '@theia/core/lib/browser';
import { Index } from '../../../common/types';
import {
AdditionalUrls,
CompilerWarnings,
ConfigService,
FileSystemExt,
Network,
} from '../../../common/protocol';
import { nls } from '@theia/core/lib/common';
import { CommandService, nls } from '@theia/core/lib/common';
import { AsyncLocalizationProvider } from '@theia/core/lib/common/i18n/localization';
import { ElectronCommands } from '@theia/core/lib/electron-browser/menu/electron-menu-contribution';
export const EDITOR_SETTING = 'editor';
export const FONT_SIZE_SETTING = `${EDITOR_SETTING}.fontSize`;
@@ -35,7 +36,7 @@ export const UPLOAD_VERBOSE_SETTING = `${UPLOAD_SETTING}.verbose`;
export const UPLOAD_VERIFY_SETTING = `${UPLOAD_SETTING}.verify`;
export const SHOW_ALL_FILES_SETTING = `${SKETCHBOOK_SETTING}.showAllFiles`;
export interface Settings extends Index {
export interface Settings {
editorFontSize: number; // `editor.fontSize`
themeId: string; // `workbench.colorTheme`
autoSave: 'on' | 'off'; // `editor.autoSave`
@@ -53,7 +54,7 @@ export interface Settings extends Index {
sketchbookShowAllFiles: boolean; // `arduino.sketchbook.showAllFiles`
sketchbookPath: string; // CLI
additionalUrls: string[]; // CLI
additionalUrls: AdditionalUrls; // CLI
network: Network; // CLI
}
export namespace Settings {
@@ -82,8 +83,13 @@ export class SettingsService {
@inject(AsyncLocalizationProvider)
protected readonly localizationProvider: AsyncLocalizationProvider;
@inject(CommandService)
protected commandService: CommandService;
protected readonly onDidChangeEmitter = new Emitter<Readonly<Settings>>();
readonly onDidChange = this.onDidChangeEmitter.event;
protected readonly onDidResetEmitter = new Emitter<Readonly<Settings>>();
readonly onDidReset = this.onDidResetEmitter.event;
protected ready = new Deferred<void>();
protected _settings: Settings;
@@ -167,7 +173,10 @@ export class SettingsService {
async update(settings: Settings, fireDidChange = false): Promise<void> {
await this.ready.promise;
for (const key of Object.keys(settings)) {
this._settings[key] = settings[key];
if (key in this._settings) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
(this._settings as any)[key] = (settings as any)[key];
}
}
if (fireDidChange) {
this.onDidChangeEmitter.fire(this._settings);
@@ -176,7 +185,8 @@ export class SettingsService {
async reset(): Promise<void> {
const settings = await this.loadSettings();
return this.update(settings, true);
await this.update(settings, false);
this.onDidResetEmitter.fire(this._settings);
}
async validate(
@@ -267,13 +277,16 @@ export class SettingsService {
// after saving all the settings, if we need to change the language we need to perform a reload
// Only reload if the language differs from the current locale. `nls.locale === undefined` signals english as well
if (currentLanguage !== nls.locale && !(currentLanguage === 'en' && nls.locale === undefined)) {
if (
currentLanguage !== (await this.localizationProvider.getCurrentLanguage())
) {
await this.localizationProvider.setCurrentLanguage(currentLanguage);
if (currentLanguage === 'en') {
window.localStorage.removeItem(nls.localeId);
} else {
window.localStorage.setItem(nls.localeId, currentLanguage);
}
window.location.reload();
this.commandService.executeCommand(ElectronCommands.RELOAD.id);
}
return true;

View File

@@ -0,0 +1,127 @@
import { Emitter, MessageService } from '@theia/core';
import { inject, injectable } from '@theia/core/shared/inversify';
import { Board, Port } from '../common/protocol';
import {
Monitor,
MonitorManagerProxyClient,
MonitorManagerProxyFactory,
} from '../common/protocol/monitor-service';
import {
PluggableMonitorSettings,
MonitorSettings,
} from '../node/monitor-settings/monitor-settings-provider';
@injectable()
export class MonitorManagerProxyClientImpl
implements MonitorManagerProxyClient
{
// When pluggable monitor messages are received from the backend
// this event is triggered.
// Ideally a frontend component is connected to this event
// to update the UI.
protected readonly onMessagesReceivedEmitter = new Emitter<{
messages: string[];
}>();
readonly onMessagesReceived = this.onMessagesReceivedEmitter.event;
protected readonly onWSConnectionChangedEmitter = new Emitter<boolean>();
readonly onWSConnectionChanged = this.onWSConnectionChangedEmitter.event;
// WebSocket used to handle pluggable monitor communication between
// frontend and backend.
private webSocket?: WebSocket;
private wsPort?: number;
getWebSocketPort(): number | undefined {
return this.wsPort;
}
constructor(
@inject(MessageService)
protected messageService: MessageService,
// This is necessary to call the backend methods from the frontend
@inject(MonitorManagerProxyFactory)
protected server: MonitorManagerProxyFactory
) {}
/**
* Connects a localhost WebSocket using the specified port.
* @param addressPort port of the WebSocket
*/
connect(addressPort: number): void {
if (this.webSocket) {
return;
}
try {
this.webSocket = new WebSocket(`ws://localhost:${addressPort}`);
this.onWSConnectionChangedEmitter.fire(true);
} catch {
this.messageService.error('Unable to connect to websocket');
return;
}
this.webSocket.onmessage = (res) => {
const messages = JSON.parse(res.data);
this.onMessagesReceivedEmitter.fire({ messages });
};
this.wsPort = addressPort;
}
/**
* Disconnects the WebSocket if connected.
*/
disconnect(): void {
try {
this.webSocket?.close();
this.webSocket = undefined;
this.onWSConnectionChangedEmitter.fire(false);
} catch {
this.messageService.error('Unable to close websocket');
}
}
async isWSConnected(): Promise<boolean> {
return !!this.webSocket;
}
async startMonitor(
board: Board,
port: Port,
settings?: PluggableMonitorSettings
): Promise<void> {
return this.server().startMonitor(board, port, settings);
}
getCurrentSettings(board: Board, port: Port): MonitorSettings {
return this.server().getCurrentSettings(board, port);
}
send(message: string): void {
if (!this.webSocket) {
return;
}
this.webSocket.send(
JSON.stringify({
command: Monitor.Command.SEND_MESSAGE,
data: message,
})
);
}
changeSettings(settings: MonitorSettings): void {
if (!this.webSocket) {
return;
}
this.webSocket.send(
JSON.stringify({
command: Monitor.Command.CHANGE_SETTINGS,
// TODO: This might be wrong, verify if it works
// SPOILER: It doesn't
data: settings,
})
);
}
}

View File

@@ -1,69 +1,78 @@
import { injectable, inject } from 'inversify';
import { Emitter, Event } from '@theia/core/lib/common/event';
import { SerialConfig } from '../../common/protocol';
import { Emitter, Event } from '@theia/core';
import {
FrontendApplicationContribution,
LocalStorageService,
} from '@theia/core/lib/browser';
import { BoardsServiceProvider } from '../boards/boards-service-provider';
import { inject, injectable } from '@theia/core/shared/inversify';
@injectable()
export class SerialModel implements FrontendApplicationContribution {
protected static STORAGE_ID = 'arduino-serial-model';
export class MonitorModel implements FrontendApplicationContribution {
protected static STORAGE_ID = 'arduino-monitor-model';
@inject(LocalStorageService)
protected readonly localStorageService: LocalStorageService;
@inject(BoardsServiceProvider)
protected readonly boardsServiceClient: BoardsServiceProvider;
protected readonly onChangeEmitter: Emitter<
SerialModel.State.Change<keyof SerialModel.State>
MonitorModel.State.Change<keyof MonitorModel.State>
>;
protected _autoscroll: boolean;
protected _timestamp: boolean;
protected _baudRate: SerialConfig.BaudRate;
protected _lineEnding: SerialModel.EOL;
protected _lineEnding: MonitorModel.EOL;
protected _interpolate: boolean;
constructor() {
this._autoscroll = true;
this._timestamp = false;
this._baudRate = SerialConfig.BaudRate.DEFAULT;
this._lineEnding = SerialModel.EOL.DEFAULT;
this._interpolate = false;
this._lineEnding = MonitorModel.EOL.DEFAULT;
this.onChangeEmitter = new Emitter<
SerialModel.State.Change<keyof SerialModel.State>
MonitorModel.State.Change<keyof MonitorModel.State>
>();
}
onStart(): void {
this.localStorageService
.getData<SerialModel.State>(SerialModel.STORAGE_ID)
.then((state) => {
if (state) {
this.restoreState(state);
}
});
.getData<MonitorModel.State>(MonitorModel.STORAGE_ID)
.then(this.restoreState);
}
get onChange(): Event<SerialModel.State.Change<keyof SerialModel.State>> {
get onChange(): Event<MonitorModel.State.Change<keyof MonitorModel.State>> {
return this.onChangeEmitter.event;
}
protected restoreState(state: MonitorModel.State): void {
if (!state) {
return;
}
this._autoscroll = state.autoscroll;
this._timestamp = state.timestamp;
this._lineEnding = state.lineEnding;
this._interpolate = state.interpolate;
}
protected async storeState(): Promise<void> {
return this.localStorageService.setData(MonitorModel.STORAGE_ID, {
autoscroll: this._autoscroll,
timestamp: this._timestamp,
lineEnding: this._lineEnding,
interpolate: this._interpolate,
});
}
get autoscroll(): boolean {
return this._autoscroll;
}
toggleAutoscroll(): void {
this._autoscroll = !this._autoscroll;
this.storeState();
this.storeState().then(() =>
this.storeState().then(() => {
this.onChangeEmitter.fire({
property: 'autoscroll',
value: this._autoscroll,
})
);
value: this._timestamp,
});
});
}
get timestamp(): boolean {
@@ -80,25 +89,11 @@ export class SerialModel implements FrontendApplicationContribution {
);
}
get baudRate(): SerialConfig.BaudRate {
return this._baudRate;
}
set baudRate(baudRate: SerialConfig.BaudRate) {
this._baudRate = baudRate;
this.storeState().then(() =>
this.onChangeEmitter.fire({
property: 'baudRate',
value: this._baudRate,
})
);
}
get lineEnding(): SerialModel.EOL {
get lineEnding(): MonitorModel.EOL {
return this._lineEnding;
}
set lineEnding(lineEnding: SerialModel.EOL) {
set lineEnding(lineEnding: MonitorModel.EOL) {
this._lineEnding = lineEnding;
this.storeState().then(() =>
this.onChangeEmitter.fire({
@@ -121,31 +116,13 @@ export class SerialModel implements FrontendApplicationContribution {
})
);
}
protected restoreState(state: SerialModel.State): void {
this._autoscroll = state.autoscroll;
this._timestamp = state.timestamp;
this._baudRate = state.baudRate;
this._lineEnding = state.lineEnding;
this._interpolate = state.interpolate;
}
protected async storeState(): Promise<void> {
return this.localStorageService.setData(SerialModel.STORAGE_ID, {
autoscroll: this._autoscroll,
timestamp: this._timestamp,
baudRate: this._baudRate,
lineEnding: this._lineEnding,
interpolate: this._interpolate,
});
}
}
export namespace SerialModel {
// TODO: Move this to /common
export namespace MonitorModel {
export interface State {
autoscroll: boolean;
timestamp: boolean;
baudRate: SerialConfig.BaudRate;
lineEnding: EOL;
interpolate: boolean;
}

View File

@@ -8,9 +8,9 @@ import {
TabBarToolbarRegistry,
} from '@theia/core/lib/browser/shell/tab-bar-toolbar';
import { ArduinoToolbar } from '../../toolbar/arduino-toolbar';
import { SerialModel } from '../serial-model';
import { ArduinoMenus } from '../../menu/arduino-menus';
import { nls } from '@theia/core/lib/common';
import { MonitorModel } from '../../monitor-model';
export namespace SerialMonitor {
export namespace Commands {
@@ -48,7 +48,8 @@ export class MonitorViewContribution
static readonly TOGGLE_SERIAL_MONITOR_TOOLBAR =
MonitorWidget.ID + ':toggle-toolbar';
@inject(SerialModel) protected readonly model: SerialModel;
@inject(MonitorModel)
protected readonly model: MonitorModel;
constructor() {
super({

View File

@@ -9,14 +9,14 @@ import {
Widget,
MessageLoop,
} from '@theia/core/lib/browser/widgets';
import { SerialConfig } from '../../../common/protocol/serial-service';
import { ArduinoSelect } from '../../widgets/arduino-select';
import { SerialModel } from '../serial-model';
import { SerialConnectionManager } from '../serial-connection-manager';
import { SerialMonitorSendInput } from './serial-monitor-send-input';
import { SerialMonitorOutput } from './serial-monitor-send-output';
import { BoardsServiceProvider } from '../../boards/boards-service-provider';
import { nls } from '@theia/core/lib/common';
import { MonitorManagerProxyClient } from '../../../common/protocol';
import { MonitorModel } from '../../monitor-model';
import { MonitorSettings } from '../../../node/monitor-settings/monitor-settings-provider';
@injectable()
export class MonitorWidget extends ReactWidget {
@@ -26,15 +26,6 @@ export class MonitorWidget extends ReactWidget {
);
static readonly ID = 'serial-monitor';
@inject(SerialModel)
protected readonly serialModel: SerialModel;
@inject(SerialConnectionManager)
protected readonly serialConnection: SerialConnectionManager;
@inject(BoardsServiceProvider)
protected readonly boardsServiceProvider: BoardsServiceProvider;
protected widgetHeight: number;
/**
@@ -48,7 +39,16 @@ export class MonitorWidget extends ReactWidget {
protected closing = false;
protected readonly clearOutputEmitter = new Emitter<void>();
constructor() {
constructor(
@inject(MonitorModel)
protected readonly monitorModel: MonitorModel,
@inject(MonitorManagerProxyClient)
protected readonly monitorManagerProxy: MonitorManagerProxyClient,
@inject(BoardsServiceProvider)
protected readonly boardsServiceProvider: BoardsServiceProvider
) {
super();
this.id = MonitorWidget.ID;
this.title.label = MonitorWidget.LABEL;
@@ -57,17 +57,35 @@ export class MonitorWidget extends ReactWidget {
this.scrollOptions = undefined;
this.toDispose.push(this.clearOutputEmitter);
this.toDispose.push(
Disposable.create(() => this.serialConnection.closeWStoBE())
Disposable.create(() => this.monitorManagerProxy.disconnect())
);
// Start monitor right away if there is already a board/port combination selected
const { selectedBoard, selectedPort } =
this.boardsServiceProvider.boardsConfig;
if (selectedBoard && selectedBoard.fqbn && selectedPort) {
this.monitorManagerProxy.startMonitor(selectedBoard, selectedPort);
}
this.toDispose.push(
this.boardsServiceProvider.onBoardsConfigChanged(
async ({ selectedBoard, selectedPort }) => {
if (selectedBoard && selectedBoard.fqbn && selectedPort) {
await this.monitorManagerProxy.startMonitor(
selectedBoard,
selectedPort
);
this.update();
}
}
)
);
}
@postConstruct()
protected init(): void {
this.update();
this.toDispose.push(
this.serialConnection.onConnectionChanged(() => this.clearConsole())
);
this.toDispose.push(this.serialModel.onChange(() => this.update()));
this.toDispose.push(this.monitorModel.onChange(() => this.update()));
}
clearConsole(): void {
@@ -79,11 +97,6 @@ export class MonitorWidget extends ReactWidget {
super.dispose();
}
protected onAfterAttach(msg: Message): void {
super.onAfterAttach(msg);
this.serialConnection.openWSToBE();
}
onCloseRequest(msg: Message): void {
this.closing = true;
super.onCloseRequest(msg);
@@ -119,7 +132,7 @@ export class MonitorWidget extends ReactWidget {
};
protected get lineEndings(): OptionsType<
SerialMonitorOutput.SelectOption<SerialModel.EOL>
SerialMonitorOutput.SelectOption<MonitorModel.EOL>
> {
return [
{
@@ -144,32 +157,63 @@ export class MonitorWidget extends ReactWidget {
];
}
protected get baudRates(): OptionsType<
SerialMonitorOutput.SelectOption<SerialConfig.BaudRate>
> {
const baudRates: Array<SerialConfig.BaudRate> = [
300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200,
];
return baudRates.map((baudRate) => ({
label: baudRate + ' baud',
value: baudRate,
}));
private getCurrentSettings(): MonitorSettings {
const board = this.boardsServiceProvider.boardsConfig.selectedBoard;
const port = this.boardsServiceProvider.boardsConfig.selectedPort;
if (!board || !port) {
return {};
}
return this.monitorManagerProxy.getCurrentSettings(board, port);
}
//////////////////////////////////////////////////
////////////////////IMPORTANT/////////////////////
//////////////////////////////////////////////////
// baudRates and selectedBaudRates as of now are hardcoded
// like this to retrieve the baudrate settings from the ones
// received by the monitor.
// We're doing it like since the frontend as of now doesn't
// support a fully customizable list of options that would
// be require to support pluggable monitors completely.
// As soon as the frontend UI is updated to support
// any custom settings this methods MUST be removed and
// made generic.
//
// This breaks if the user tries to open a monitor that
// doesn't support the baudrate setting.
protected get baudRates(): string[] {
const { pluggableMonitorSettings } = this.getCurrentSettings();
if (!pluggableMonitorSettings || !pluggableMonitorSettings['baudrate']) {
return [];
}
const baudRateSettings = pluggableMonitorSettings['baudrate'];
return baudRateSettings.values;
}
protected get selectedBaudRate(): string {
const { pluggableMonitorSettings } = this.getCurrentSettings();
if (!pluggableMonitorSettings || !pluggableMonitorSettings['baudrate']) {
return '';
}
const baudRateSettings = pluggableMonitorSettings['baudrate'];
return baudRateSettings.selectedValue;
}
protected render(): React.ReactNode {
const { baudRates, lineEndings } = this;
const lineEnding =
lineEndings.find((item) => item.value === this.serialModel.lineEnding) ||
lineEndings.find((item) => item.value === this.monitorModel.lineEnding) ||
lineEndings[1]; // Defaults to `\n`.
const baudRate =
baudRates.find((item) => item.value === this.serialModel.baudRate) ||
baudRates[4]; // Defaults to `9600`.
const baudRate = baudRates.find((item) => item === this.selectedBaudRate);
return (
<div className="serial-monitor">
<div className="head">
<div className="send">
<SerialMonitorSendInput
serialConnection={this.serialConnection}
boardsServiceProvider={this.boardsServiceProvider}
monitorManagerProxy={this.monitorManagerProxy}
resolveFocus={this.onFocusResolved}
onSend={this.onSend}
/>
@@ -196,8 +240,8 @@ export class MonitorWidget extends ReactWidget {
</div>
<div className="body">
<SerialMonitorOutput
serialModel={this.serialModel}
serialConnection={this.serialConnection}
monitorModel={this.monitorModel}
monitorManagerProxy={this.monitorManagerProxy}
clearConsoleEvent={this.clearOutputEmitter.event}
height={Math.floor(this.widgetHeight - 50)}
/>
@@ -208,18 +252,21 @@ export class MonitorWidget extends ReactWidget {
protected readonly onSend = (value: string) => this.doSend(value);
protected async doSend(value: string): Promise<void> {
this.serialConnection.send(value);
this.monitorManagerProxy.send(value);
}
protected readonly onChangeLineEnding = (
option: SerialMonitorOutput.SelectOption<SerialModel.EOL>
option: SerialMonitorOutput.SelectOption<MonitorModel.EOL>
) => {
this.serialModel.lineEnding = option.value;
this.monitorModel.lineEnding = option.value;
};
protected readonly onChangeBaudRate = (
option: SerialMonitorOutput.SelectOption<SerialConfig.BaudRate>
) => {
this.serialModel.baudRate = option.value;
protected readonly onChangeBaudRate = (value: string) => {
const { pluggableMonitorSettings } = this.getCurrentSettings();
if (!pluggableMonitorSettings || !pluggableMonitorSettings['baudrate'])
return;
const baudRateSettings = pluggableMonitorSettings['baudrate'];
baudRateSettings.selectedValue = value;
this.monitorManagerProxy.changeSettings(pluggableMonitorSettings);
};
}

View File

@@ -3,12 +3,14 @@ import { Key, KeyCode } from '@theia/core/lib/browser/keys';
import { Board } from '../../../common/protocol/boards-service';
import { isOSX } from '@theia/core/lib/common/os';
import { DisposableCollection, nls } from '@theia/core/lib/common';
import { SerialConnectionManager } from '../serial-connection-manager';
import { SerialPlotter } from '../plotter/protocol';
import { MonitorManagerProxyClient } from '../../../common/protocol';
import { BoardsServiceProvider } from '../../boards/boards-service-provider';
import { timeout } from '@theia/core/lib/common/promise-util';
export namespace SerialMonitorSendInput {
export interface Props {
readonly serialConnection: SerialConnectionManager;
readonly boardsServiceProvider: BoardsServiceProvider;
readonly monitorManagerProxy: MonitorManagerProxyClient;
readonly onSend: (text: string) => void;
readonly resolveFocus: (element: HTMLElement | undefined) => void;
}
@@ -26,28 +28,33 @@ export class SerialMonitorSendInput extends React.Component<
constructor(props: Readonly<SerialMonitorSendInput.Props>) {
super(props);
this.state = { text: '', connected: false };
this.state = { text: '', connected: true };
this.onChange = this.onChange.bind(this);
this.onSend = this.onSend.bind(this);
this.onKeyDown = this.onKeyDown.bind(this);
}
componentDidMount(): void {
this.props.serialConnection.isBESerialConnected().then((connected) => {
this.setState({ connected });
this.setState({ connected: true });
const checkWSConnection = new Promise<boolean>((resolve) => {
this.props.monitorManagerProxy.onWSConnectionChanged((connected) => {
this.setState({ connected });
resolve(true);
});
});
this.toDisposeBeforeUnmount.pushAll([
this.props.serialConnection.onRead(({ messages }) => {
if (
messages.command ===
SerialPlotter.Protocol.Command.MIDDLEWARE_CONFIG_CHANGED &&
'connected' in messages.data
) {
this.setState({ connected: messages.data.connected });
const checkWSTimeout = timeout(1000).then(() => false);
Promise.race<boolean>([checkWSConnection, checkWSTimeout]).then(
async (resolved) => {
if (!resolved) {
const connected =
await this.props.monitorManagerProxy.isWSConnected();
this.setState({ connected });
}
}),
]);
}
);
}
componentWillUnmount(): void {
@@ -60,7 +67,7 @@ export class SerialMonitorSendInput extends React.Component<
<input
ref={this.setRef}
type="text"
className={`theia-input ${this.state.connected ? '' : 'warning'}`}
className={`theia-input ${this.shouldShowWarning() ? 'warning' : ''}`}
placeholder={this.placeholder}
value={this.state.text}
onChange={this.onChange}
@@ -69,15 +76,22 @@ export class SerialMonitorSendInput extends React.Component<
);
}
protected shouldShowWarning(): boolean {
const board = this.props.boardsServiceProvider.boardsConfig.selectedBoard;
const port = this.props.boardsServiceProvider.boardsConfig.selectedPort;
return !this.state.connected || !board || !port;
}
protected get placeholder(): string {
const serialConfig = this.props.serialConnection.getConfig();
if (!this.state.connected || !serialConfig) {
if (this.shouldShowWarning()) {
return nls.localize(
'arduino/serial/notConnected',
'Not connected. Select a board and a port to connect automatically.'
);
}
const { board, port } = serialConfig;
const board = this.props.boardsServiceProvider.boardsConfig.selectedBoard;
const port = this.props.boardsServiceProvider.boardsConfig.selectedPort;
return nls.localize(
'arduino/serial/message',
"Message ({0} + Enter to send message to '{1}' on '{2}')",

View File

@@ -2,10 +2,10 @@ import * as React from 'react';
import { Event } from '@theia/core/lib/common/event';
import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { areEqual, FixedSizeList as List } from 'react-window';
import { SerialModel } from '../serial-model';
import { SerialConnectionManager } from '../serial-connection-manager';
import dateFormat = require('dateformat');
import { messagesToLines, truncateLines } from './monitor-utils';
import { MonitorManagerProxyClient } from '../../../common/protocol';
import { MonitorModel } from '../../monitor-model';
export type Line = { message: string; timestamp?: Date; lineLen: number };
@@ -24,7 +24,7 @@ export class SerialMonitorOutput extends React.Component<
this.listRef = React.createRef();
this.state = {
lines: [],
timestamp: this.props.serialModel.timestamp,
timestamp: this.props.monitorModel.timestamp,
charCount: 0,
};
}
@@ -58,14 +58,13 @@ export class SerialMonitorOutput extends React.Component<
componentDidMount(): void {
this.scrollToBottom();
this.toDisposeBeforeUnmount.pushAll([
this.props.serialConnection.onRead(({ messages }) => {
this.props.monitorManagerProxy.onMessagesReceived(({ messages }) => {
const [newLines, totalCharCount] = messagesToLines(
messages,
this.state.lines,
this.state.charCount
);
const [lines, charCount] = truncateLines(newLines, totalCharCount);
this.setState({
lines,
charCount,
@@ -75,9 +74,9 @@ export class SerialMonitorOutput extends React.Component<
this.props.clearConsoleEvent(() =>
this.setState({ lines: [], charCount: 0 })
),
this.props.serialModel.onChange(({ property }) => {
this.props.monitorModel.onChange(({ property }) => {
if (property === 'timestamp') {
const { timestamp } = this.props.serialModel;
const { timestamp } = this.props.monitorModel;
this.setState({ timestamp });
}
if (property === 'autoscroll') {
@@ -93,7 +92,7 @@ export class SerialMonitorOutput extends React.Component<
}
scrollToBottom = ((): void => {
if (this.listRef.current && this.props.serialModel.autoscroll) {
if (this.listRef.current && this.props.monitorModel.autoscroll) {
this.listRef.current.scrollToItem(this.state.lines.length, 'end');
}
}).bind(this);
@@ -115,8 +114,10 @@ const _Row = ({
return (
(data.lines[index].lineLen && (
<div style={style}>
{timestamp}
{data.lines[index].message}
<pre>
{timestamp}
{data.lines[index].message}
</pre>
</div>
)) ||
null
@@ -126,8 +127,8 @@ const Row = React.memo(_Row, areEqual);
export namespace SerialMonitorOutput {
export interface Props {
readonly serialModel: SerialModel;
readonly serialConnection: SerialConnectionManager;
readonly monitorModel: MonitorModel;
readonly monitorManagerProxy: MonitorManagerProxyClient;
readonly clearConsoleEvent: Event<void>;
readonly height: number;
}

View File

@@ -6,15 +6,14 @@ import {
MaybePromise,
MenuModelRegistry,
} from '@theia/core';
import { SerialModel } from '../serial-model';
import { ArduinoMenus } from '../../menu/arduino-menus';
import { Contribution } from '../../contributions/contribution';
import { Endpoint, FrontendApplication } from '@theia/core/lib/browser';
import { ipcRenderer } from '@theia/electron/shared/electron';
import { SerialConfig } from '../../../common/protocol';
import { SerialConnectionManager } from '../serial-connection-manager';
import { MonitorManagerProxyClient } from '../../../common/protocol';
import { SerialPlotter } from './protocol';
import { BoardsServiceProvider } from '../../boards/boards-service-provider';
import { MonitorModel } from '../../monitor-model';
const queryString = require('query-string');
export namespace SerialPlotterContribution {
@@ -33,14 +32,14 @@ export class PlotterFrontendContribution extends Contribution {
protected url: string;
protected wsPort: number;
@inject(SerialModel)
protected readonly model: SerialModel;
@inject(MonitorModel)
protected readonly model: MonitorModel;
@inject(ThemeService)
protected readonly themeService: ThemeService;
@inject(SerialConnectionManager)
protected readonly serialConnection: SerialConnectionManager;
@inject(MonitorManagerProxyClient)
protected readonly monitorManagerProxy: MonitorManagerProxyClient;
@inject(BoardsServiceProvider)
protected readonly boardsServiceProvider: BoardsServiceProvider;
@@ -75,7 +74,7 @@ export class PlotterFrontendContribution extends Contribution {
this.window.focus();
return;
}
const wsPort = this.serialConnection.getWsPort();
const wsPort = this.monitorManagerProxy.getWebSocketPort();
if (wsPort) {
this.open(wsPort);
} else {
@@ -84,14 +83,28 @@ export class PlotterFrontendContribution extends Contribution {
}
protected async open(wsPort: number): Promise<void> {
const board = this.boardsServiceProvider.boardsConfig.selectedBoard;
const port = this.boardsServiceProvider.boardsConfig.selectedPort;
let baudrates: number[] = [];
let currentBaudrate = -1;
if (board && port) {
const { pluggableMonitorSettings } =
this.monitorManagerProxy.getCurrentSettings(board, port);
if (pluggableMonitorSettings && 'baudrate' in pluggableMonitorSettings) {
// Convert from string to numbers
baudrates = pluggableMonitorSettings['baudrate'].values.map((b) => +b);
currentBaudrate = +pluggableMonitorSettings['baudrate'].selectedValue;
}
}
const initConfig: Partial<SerialPlotter.Config> = {
baudrates: SerialConfig.BaudRates.map((b) => b),
currentBaudrate: this.model.baudRate,
baudrates,
currentBaudrate,
currentLineEnding: this.model.lineEnding,
darkTheme: this.themeService.getCurrentTheme().type === 'dark',
wsPort,
interpolate: this.model.interpolate,
connected: await this.serialConnection.isBESerialConnected(),
connected: await this.monitorManagerProxy.isWSConnected(),
serialPort: this.boardsServiceProvider.boardsConfig.selectedPort?.address,
};
const urlWithParams = queryString.stringifyUrl(

View File

@@ -1,360 +0,0 @@
import { injectable, inject } from 'inversify';
import { Emitter, Event } from '@theia/core/lib/common/event';
import { MessageService } from '@theia/core/lib/common/message-service';
import {
SerialService,
SerialConfig,
SerialError,
Status,
SerialServiceClient,
} from '../../common/protocol/serial-service';
import { BoardsServiceProvider } from '../boards/boards-service-provider';
import {
Board,
BoardsService,
} from '../../common/protocol/boards-service';
import { BoardsConfig } from '../boards/boards-config';
import { SerialModel } from './serial-model';
import { ThemeService } from '@theia/core/lib/browser/theming';
import { CoreService } from '../../common/protocol';
import { nls } from '@theia/core/lib/common/nls';
@injectable()
export class SerialConnectionManager {
protected config: Partial<SerialConfig> = {
board: undefined,
port: undefined,
baudRate: undefined,
};
protected readonly onConnectionChangedEmitter = new Emitter<boolean>();
/**
* This emitter forwards all read events **if** the connection is established.
*/
protected readonly onReadEmitter = new Emitter<{ messages: string[] }>();
/**
* Array for storing previous serial errors received from the server, and based on the number of elements in this array,
* we adjust the reconnection delay.
* Super naive way: we wait `array.length * 1000` ms. Once we hit 10 errors, we do not try to reconnect and clean the array.
*/
protected serialErrors: SerialError[] = [];
protected reconnectTimeout?: number;
/**
* When the websocket server is up on the backend, we save the port here, so that the client knows how to connect to it
* */
protected wsPort?: number;
protected webSocket?: WebSocket;
constructor(
@inject(SerialModel) protected readonly serialModel: SerialModel,
@inject(SerialService) protected readonly serialService: SerialService,
@inject(SerialServiceClient)
protected readonly serialServiceClient: SerialServiceClient,
@inject(BoardsService) protected readonly boardsService: BoardsService,
@inject(BoardsServiceProvider)
protected readonly boardsServiceProvider: BoardsServiceProvider,
@inject(MessageService) protected messageService: MessageService,
@inject(ThemeService) protected readonly themeService: ThemeService,
@inject(CoreService) protected readonly core: CoreService,
@inject(BoardsServiceProvider)
protected readonly boardsServiceClientImpl: BoardsServiceProvider
) {
this.serialServiceClient.onWebSocketChanged(
this.handleWebSocketChanged.bind(this)
);
this.serialServiceClient.onBaudRateChanged((baudRate) => {
if (this.serialModel.baudRate !== baudRate) {
this.serialModel.baudRate = baudRate;
}
});
this.serialServiceClient.onLineEndingChanged((lineending) => {
if (this.serialModel.lineEnding !== lineending) {
this.serialModel.lineEnding = lineending;
}
});
this.serialServiceClient.onInterpolateChanged((interpolate) => {
if (this.serialModel.interpolate !== interpolate) {
this.serialModel.interpolate = interpolate;
}
});
this.serialServiceClient.onError(this.handleError.bind(this));
this.boardsServiceProvider.onBoardsConfigChanged(
this.handleBoardConfigChange.bind(this)
);
// Handles the `baudRate` changes by reconnecting if required.
this.serialModel.onChange(async ({ property }) => {
if (
property === 'baudRate' &&
(await this.serialService.isSerialPortOpen())
) {
const { boardsConfig } = this.boardsServiceProvider;
this.handleBoardConfigChange(boardsConfig);
}
// update the current values in the backend and propagate to websocket clients
this.serialService.updateWsConfigParam({
...(property === 'lineEnding' && {
currentLineEnding: this.serialModel.lineEnding,
}),
...(property === 'interpolate' && {
interpolate: this.serialModel.interpolate,
}),
});
});
this.themeService.onDidColorThemeChange((theme) => {
this.serialService.updateWsConfigParam({
darkTheme: theme.newTheme.type === 'dark',
});
});
}
/**
* Updated the config in the BE passing only the properties that has changed.
* BE will create a new connection if needed.
*
* @param newConfig the porperties of the config that has changed
*/
async setConfig(newConfig: Partial<SerialConfig>): Promise<void> {
let configHasChanged = false;
Object.keys(this.config).forEach((key: keyof SerialConfig) => {
if (newConfig[key] !== this.config[key]) {
configHasChanged = true;
this.config = { ...this.config, [key]: newConfig[key] };
}
});
if (configHasChanged) {
this.serialService.updateWsConfigParam({
currentBaudrate: this.config.baudRate,
serialPort: this.config.port?.address,
});
if (isSerialConfig(this.config)) {
this.serialService.setSerialConfig(this.config);
}
}
}
getConfig(): Partial<SerialConfig> {
return this.config;
}
getWsPort(): number | undefined {
return this.wsPort;
}
protected handleWebSocketChanged(wsPort: number): void {
this.wsPort = wsPort;
}
get serialConfig(): SerialConfig | undefined {
return isSerialConfig(this.config)
? (this.config as SerialConfig)
: undefined;
}
async isBESerialConnected(): Promise<boolean> {
return await this.serialService.isSerialPortOpen();
}
openWSToBE(): void {
if (!isSerialConfig(this.config)) {
this.messageService.error(
`Please select a board and a port to open the serial connection.`
);
}
if (!this.webSocket && this.wsPort) {
try {
this.webSocket = new WebSocket(`ws://localhost:${this.wsPort}`);
this.webSocket.onmessage = (res) => {
const messages = JSON.parse(res.data);
this.onReadEmitter.fire({ messages });
};
} catch {
this.messageService.error(`Unable to connect to websocket`);
}
}
}
closeWStoBE(): void {
if (this.webSocket) {
try {
this.webSocket.close();
this.webSocket = undefined;
} catch {
this.messageService.error(`Unable to close websocket`);
}
}
}
/**
* Handles error on the SerialServiceClient and try to reconnect, eventually
*/
async handleError(error: SerialError): Promise<void> {
if (!(await this.serialService.isSerialPortOpen())) return;
const { code, config } = error;
const { board, port } = config;
const options = { timeout: 3000 };
switch (code) {
case SerialError.ErrorCodes.CLIENT_CANCEL: {
console.debug(
`Serial connection was canceled by client: ${Serial.Config.toString(
this.config
)}.`
);
break;
}
case SerialError.ErrorCodes.DEVICE_BUSY: {
this.messageService.warn(
nls.localize(
'arduino/serial/connectionBusy',
'Connection failed. Serial port is busy: {0}',
port.address
),
options
);
this.serialErrors.push(error);
break;
}
case SerialError.ErrorCodes.DEVICE_NOT_CONFIGURED: {
this.messageService.info(
nls.localize(
'arduino/serial/disconnected',
'Disconnected {0} from {1}.',
Board.toString(board, {
useFqbn: false,
}),
port.address
),
options
);
break;
}
case undefined: {
this.messageService.error(
nls.localize(
'arduino/serial/unexpectedError',
'Unexpected error. Reconnecting {0} on port {1}.',
Board.toString(board),
port.address
),
options
);
console.error(JSON.stringify(error));
break;
}
}
if ((await this.serialService.clientsAttached()) > 0) {
if (this.serialErrors.length >= 10) {
this.messageService.warn(
nls.localize(
'arduino/serial/failedReconnect',
'Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.',
Board.toString(board, {
useFqbn: false,
}),
port.address
)
);
this.serialErrors.length = 0;
} else {
const attempts = this.serialErrors.length || 1;
if (this.reconnectTimeout !== undefined) {
// Clear the previous timer.
window.clearTimeout(this.reconnectTimeout);
}
const timeout = attempts * 1000;
this.messageService.warn(
nls.localize(
'arduino/serial/reconnect',
'Reconnecting {0} to {1} in {2} seconds...',
Board.toString(board, {
useFqbn: false,
}),
port.address,
attempts.toString()
)
);
this.reconnectTimeout = window.setTimeout(
() => this.reconnectAfterUpload(),
timeout
);
}
}
}
async reconnectAfterUpload(): Promise<void> {
try {
if (isSerialConfig(this.config)) {
await this.boardsServiceClientImpl.waitUntilAvailable(
Object.assign(this.config.board, { port: this.config.port }),
10_000
);
this.serialService.connectSerialIfRequired();
}
} catch (waitError) {
this.messageService.error(
nls.localize(
'arduino/sketch/couldNotConnectToSerial',
'Could not reconnect to serial port. {0}',
waitError.toString()
)
);
}
}
/**
* Sends the data to the connected serial port.
* The desired EOL is appended to `data`, you do not have to add it.
* It is a NOOP if connected.
*/
async send(data: string): Promise<Status> {
if (!(await this.serialService.isSerialPortOpen())) {
return Status.NOT_CONNECTED;
}
return new Promise<Status>((resolve) => {
this.serialService
.sendMessageToSerial(data + this.serialModel.lineEnding)
.then(() => resolve(Status.OK));
});
}
get onConnectionChanged(): Event<boolean> {
return this.onConnectionChangedEmitter.event;
}
get onRead(): Event<{ messages: any }> {
return this.onReadEmitter.event;
}
protected async handleBoardConfigChange(
boardsConfig: BoardsConfig.Config
): Promise<void> {
const { selectedBoard: board, selectedPort: port } = boardsConfig;
const { baudRate } = this.serialModel;
const newConfig: Partial<SerialConfig> = { board, port, baudRate };
this.setConfig(newConfig);
}
}
export namespace Serial {
export namespace Config {
export function toString(config: Partial<SerialConfig>): string {
if (!isSerialConfig(config)) return '';
const { board, port } = config;
return `${Board.toString(board)} ${port.address}`;
}
}
}
function isSerialConfig(config: Partial<SerialConfig>): config is SerialConfig {
return !!config.board && !!config.baudRate && !!config.port;
}

View File

@@ -1,48 +0,0 @@
import { injectable } from 'inversify';
import { Emitter } from '@theia/core/lib/common/event';
import {
SerialServiceClient,
SerialError,
SerialConfig,
} from '../../common/protocol/serial-service';
import { SerialModel } from './serial-model';
@injectable()
export class SerialServiceClientImpl implements SerialServiceClient {
protected readonly onErrorEmitter = new Emitter<SerialError>();
readonly onError = this.onErrorEmitter.event;
protected readonly onWebSocketChangedEmitter = new Emitter<number>();
readonly onWebSocketChanged = this.onWebSocketChangedEmitter.event;
protected readonly onBaudRateChangedEmitter =
new Emitter<SerialConfig.BaudRate>();
readonly onBaudRateChanged = this.onBaudRateChangedEmitter.event;
protected readonly onLineEndingChangedEmitter =
new Emitter<SerialModel.EOL>();
readonly onLineEndingChanged = this.onLineEndingChangedEmitter.event;
protected readonly onInterpolateChangedEmitter = new Emitter<boolean>();
readonly onInterpolateChanged = this.onInterpolateChangedEmitter.event;
notifyError(error: SerialError): void {
this.onErrorEmitter.fire(error);
}
notifyWebSocketChanged(message: number): void {
this.onWebSocketChangedEmitter.fire(message);
}
notifyBaudRateChanged(message: SerialConfig.BaudRate): void {
this.onBaudRateChangedEmitter.fire(message);
}
notifyLineEndingChanged(message: SerialModel.EOL): void {
this.onLineEndingChangedEmitter.fire(message);
}
notifyInterpolateChanged(message: boolean): void {
this.onInterpolateChangedEmitter.fire(message);
}
}

View File

@@ -57,3 +57,7 @@
display: flex;
justify-content: center;
}
.p-Widget.dialogOverlay .dialogBlock .dialogContent.additional-urls-dialog {
display: block;
}

View File

@@ -9,6 +9,7 @@ import {
} from '@theia/core/lib/browser/connection-status-service';
import {
ApplicationShell as TheiaApplicationShell,
DockPanel,
Panel,
Widget,
} from '@theia/core/lib/browser';
@@ -16,6 +17,7 @@ import { Sketch } from '../../../common/protocol';
import { SaveAsSketch } from '../../contributions/save-as-sketch';
import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl';
import { nls } from '@theia/core/lib/common';
import URI from '@theia/core/lib/common/uri';
@injectable()
export class ApplicationShell extends TheiaApplicationShell {
@@ -40,6 +42,9 @@ export class ApplicationShell extends TheiaApplicationShell {
// Make the editor un-closeable asynchronously.
this.sketchesServiceClient.currentSketch().then((sketch) => {
if (sketch) {
if (!this.isSketchFile(widget.editor.uri, sketch.uri)) {
return;
}
if (Sketch.isInSketch(widget.editor.uri, sketch)) {
widget.title.closable = false;
}
@@ -48,6 +53,14 @@ export class ApplicationShell extends TheiaApplicationShell {
}
}
private isSketchFile(uri: URI, sketchUriString: string): boolean {
const sketchUri = new URI(sketchUriString);
if (uri.parent.isEqual(sketchUri)) {
return true;
}
return false;
}
async addWidget(
widget: Widget,
options: Readonly<TheiaApplicationShell.WidgetOptions> = {}
@@ -74,6 +87,11 @@ export class ApplicationShell extends TheiaApplicationShell {
return super.addWidget(widget, { ...options, ref });
}
handleEvent(): boolean {
// NOOP, dragging has been disabled
return false
}
// Avoid hiding top panel as we use it for arduino toolbar
protected createTopPanel(): Panel {
const topPanel = super.createTopPanel();
@@ -101,3 +119,16 @@ export class ApplicationShell extends TheiaApplicationShell {
);
}
}
const originalHandleEvent = DockPanel.prototype.handleEvent;
DockPanel.prototype.handleEvent = function (event) {
switch (event.type) {
case 'p-dragenter':
case 'p-dragleave':
case 'p-dragover':
case 'p-drop':
return;
}
originalHandleEvent(event);
};

View File

@@ -11,7 +11,15 @@ export class CommonFrontendContribution extends TheiaCommonFrontendContribution
registerCommands(commandRegistry: CommandRegistry): void {
super.registerCommands(commandRegistry);
for (const command of [CommonCommands.CONFIGURE_DISPLAY_LANGUAGE]) {
for (const command of [
CommonCommands.CONFIGURE_DISPLAY_LANGUAGE,
CommonCommands.CLOSE_TAB,
CommonCommands.CLOSE_SAVED_TABS,
CommonCommands.CLOSE_OTHER_TABS,
CommonCommands.CLOSE_ALL_TABS,
CommonCommands.COLLAPSE_PANEL,
CommonCommands.TOGGLE_MAXIMIZED,
]) {
commandRegistry.unregisterCommand(command);
}
}
@@ -32,10 +40,6 @@ export class CommonFrontendContribution extends TheiaCommonFrontendContribution
CommonCommands.SELECT_ICON_THEME,
CommonCommands.SELECT_COLOR_THEME,
CommonCommands.ABOUT_COMMAND,
CommonCommands.CLOSE_TAB,
CommonCommands.CLOSE_OTHER_TABS,
CommonCommands.CLOSE_ALL_TABS,
CommonCommands.COLLAPSE_PANEL,
CommonCommands.SAVE_WITHOUT_FORMATTING, // Patched for https://github.com/eclipse-theia/theia/pull/8877
]) {
registry.unregisterMenuAction(command);

View File

@@ -0,0 +1,2 @@
export const REMOTE_SKETCHBOOK_FOLDER = 'RemoteSketchbook';
export const ARDUINO_CLOUD_FOLDER = 'ArduinoCloud';

View File

@@ -1,3 +1,5 @@
import { Port } from "./boards-service";
export const ArduinoFirmwareUploaderPath =
'/services/arduino-firmware-uploader';
export const ArduinoFirmwareUploader = Symbol('ArduinoFirmwareUploader');
@@ -10,7 +12,7 @@ export type FirmwareInfo = {
};
export interface ArduinoFirmwareUploader {
list(fqbn?: string): Promise<FirmwareInfo[]>;
flash(firmware: FirmwareInfo, port: string): Promise<string>;
flash(firmware: FirmwareInfo, port: Port): Promise<string>;
uploadCertificates(command: string): Promise<any>;
updatableBoards(): Promise<string[]>;
availableFirmwares(fqbn: string): Promise<FirmwareInfo[]>;

View File

@@ -116,7 +116,7 @@ export interface Config {
readonly sketchDirUri: string;
readonly dataDirUri: string;
readonly downloadsDirUri: string;
readonly additionalUrls: string[];
readonly additionalUrls: AdditionalUrls;
readonly network: Network;
readonly daemon: Daemon;
}
@@ -141,3 +141,32 @@ export namespace Config {
);
}
}
export type AdditionalUrls = string[];
export namespace AdditionalUrls {
export function parse(value: string, delimiter: ',' | 'newline'): string[] {
return value
.trim()
.split(delimiter === ',' ? delimiter : /\r?\n/)
.map((url) => url.trim())
.filter((url) => !!url);
}
export function stringify(additionalUrls: AdditionalUrls): string {
return additionalUrls.join(',');
}
export function sameAs(left: AdditionalUrls, right: AdditionalUrls): boolean {
if (left.length !== right.length) {
return false;
}
const localeCompare = (left: string, right: string) =>
left.localeCompare(right);
const normalize = (url: string) => url.toLowerCase();
const normalizedLeft = left.map(normalize).sort(localeCompare);
const normalizedRight = right.map(normalize).sort(localeCompare);
for (let i = 0; i < normalizedLeft.length; i++) {
if (normalizedLeft[i] !== normalizedRight[i]) {
return false;
}
}
return true;
}
}

View File

@@ -1,5 +1,5 @@
import { BoardUserField } from '.';
import { Port } from '../../common/protocol/boards-service';
import { Board, Port } from '../../common/protocol/boards-service';
import { Programmer } from './boards-service';
export const CompilerWarningLiterals = [
@@ -33,7 +33,7 @@ export namespace CoreService {
* `file` URI to the sketch folder.
*/
readonly sketchUri: string;
readonly fqbn?: string | undefined;
readonly board?: Board;
readonly optimizeForDebug: boolean;
readonly verbose: boolean;
readonly sourceOverride: Record<string, string>;
@@ -42,7 +42,7 @@ export namespace CoreService {
export namespace Upload {
export interface Options extends Compile.Options {
readonly port?: Port | undefined;
readonly port?: Port;
readonly programmer?: Programmer | undefined;
readonly verify: boolean;
readonly userFields: BoardUserField[];
@@ -51,8 +51,8 @@ export namespace CoreService {
export namespace Bootloader {
export interface Options {
readonly fqbn?: string | undefined;
readonly port?: Port | undefined;
readonly board?: Board;
readonly port?: Port;
readonly programmer?: Programmer | undefined;
readonly verbose: boolean;
readonly verify: boolean;

View File

@@ -6,10 +6,10 @@ export * from './core-service';
export * from './filesystem-ext';
export * from './installable';
export * from './library-service';
export * from './serial-service';
export * from './searchable';
export * from './sketches-service';
export * from './examples-service';
export * from './executable-service';
export * from './response-service';
export * from './notification-service';
export * from './monitor-service';

View File

@@ -0,0 +1,92 @@
import { Event, JsonRpcServer } from '@theia/core';
import {
PluggableMonitorSettings,
MonitorSettings,
} from '../../node/monitor-settings/monitor-settings-provider';
import { Board, Port } from './boards-service';
export const MonitorManagerProxyFactory = Symbol('MonitorManagerProxyFactory');
export type MonitorManagerProxyFactory = () => MonitorManagerProxy;
export const MonitorManagerProxyPath = '/services/monitor-manager-proxy';
export const MonitorManagerProxy = Symbol('MonitorManagerProxy');
export interface MonitorManagerProxy
extends JsonRpcServer<MonitorManagerProxyClient> {
startMonitor(
board: Board,
port: Port,
settings?: PluggableMonitorSettings
): Promise<void>;
changeMonitorSettings(
board: Board,
port: Port,
settings: PluggableMonitorSettings
): Promise<void>;
stopMonitor(board: Board, port: Port): Promise<void>;
getCurrentSettings(board: Board, port: Port): PluggableMonitorSettings;
}
export const MonitorManagerProxyClient = Symbol('MonitorManagerProxyClient');
export interface MonitorManagerProxyClient {
onMessagesReceived: Event<{ messages: string[] }>;
onWSConnectionChanged: Event<boolean>;
connect(addressPort: number): void;
disconnect(): void;
getWebSocketPort(): number | undefined;
isWSConnected(): Promise<boolean>;
startMonitor(
board: Board,
port: Port,
settings?: PluggableMonitorSettings
): Promise<void>;
getCurrentSettings(board: Board, port: Port): MonitorSettings;
send(message: string): void;
changeSettings(settings: MonitorSettings): void;
}
export interface PluggableMonitorSetting {
// The setting identifier
readonly id: string;
// A human-readable label of the setting (to be displayed on the GUI)
readonly label: string;
// The setting type (at the moment only "enum" is avaiable)
readonly type: string;
// The values allowed on "enum" types
readonly values: string[];
// The selected value
selectedValue: string;
}
export namespace Monitor {
export enum Command {
SEND_MESSAGE = 'MONITOR_SEND_MESSAGE',
CHANGE_SETTINGS = 'MONITOR_CHANGE_SETTINGS',
}
export type Message = {
command: Monitor.Command;
data: string;
};
}
export interface Status {}
export type OK = Status;
export interface ErrorStatus extends Status {
readonly message: string;
}
export namespace Status {
export function isOK(status: Status & { message?: string }): status is OK {
return !!status && typeof status.message !== 'string';
}
export const OK: OK = {};
export const NOT_CONNECTED: ErrorStatus = { message: 'Not connected.' };
export const ALREADY_CONNECTED: ErrorStatus = {
message: 'Already connected.',
};
export const CONFIG_MISSING: ErrorStatus = {
message: 'Serial Config missing.',
};
export const UPLOAD_IN_PROGRESS: ErrorStatus = {
message: 'Upload in progress.',
};
}

View File

@@ -1,102 +0,0 @@
import { JsonRpcServer } from '@theia/core/lib/common/messaging/proxy-factory';
import { Board, Port } from './boards-service';
import { Event } from '@theia/core/lib/common/event';
import { SerialPlotter } from '../../browser/serial/plotter/protocol';
import { SerialModel } from '../../browser/serial/serial-model';
export interface Status {}
export type OK = Status;
export interface ErrorStatus extends Status {
readonly message: string;
}
export namespace Status {
export function isOK(status: Status & { message?: string }): status is OK {
return !!status && typeof status.message !== 'string';
}
export const OK: OK = {};
export const NOT_CONNECTED: ErrorStatus = { message: 'Not connected.' };
export const ALREADY_CONNECTED: ErrorStatus = {
message: 'Already connected.',
};
export const CONFIG_MISSING: ErrorStatus = {
message: 'Serial Config missing.',
};
}
export const SerialServicePath = '/services/serial';
export const SerialService = Symbol('SerialService');
export interface SerialService extends JsonRpcServer<SerialServiceClient> {
clientsAttached(): Promise<number>;
setSerialConfig(config: SerialConfig): Promise<void>;
sendMessageToSerial(message: string): Promise<Status>;
updateWsConfigParam(config: Partial<SerialPlotter.Config>): Promise<void>;
isSerialPortOpen(): Promise<boolean>;
connectSerialIfRequired(): Promise<void>;
disconnect(reason?: SerialError): Promise<Status>;
uploadInProgress: boolean;
}
export interface SerialConfig {
readonly board: Board;
readonly port: Port;
/**
* Defaults to [`SERIAL`](MonitorConfig#ConnectionType#SERIAL).
*/
readonly type?: SerialConfig.ConnectionType;
/**
* Defaults to `9600`.
*/
readonly baudRate?: SerialConfig.BaudRate;
}
export namespace SerialConfig {
export const BaudRates = [
300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200,
] as const;
export type BaudRate = typeof SerialConfig.BaudRates[number];
export namespace BaudRate {
export const DEFAULT: BaudRate = 9600;
}
export enum ConnectionType {
SERIAL = 0,
}
}
export const SerialServiceClient = Symbol('SerialServiceClient');
export interface SerialServiceClient {
onError: Event<SerialError>;
onWebSocketChanged: Event<number>;
onLineEndingChanged: Event<SerialModel.EOL>;
onBaudRateChanged: Event<SerialConfig.BaudRate>;
onInterpolateChanged: Event<boolean>;
notifyError(event: SerialError): void;
notifyWebSocketChanged(message: number): void;
notifyLineEndingChanged(message: SerialModel.EOL): void;
notifyBaudRateChanged(message: SerialConfig.BaudRate): void;
notifyInterpolateChanged(message: boolean): void;
}
export interface SerialError {
readonly message: string;
/**
* If no `code` is available, clients must reestablish the serial connection.
*/
readonly code: number | undefined;
readonly config: SerialConfig;
}
export namespace SerialError {
export namespace ErrorCodes {
/**
* The frontend has refreshed the browser, for instance.
*/
export const CLIENT_CANCEL = 1;
/**
* When detaching a physical device when the duplex channel is still opened.
*/
export const DEVICE_NOT_CONFIGURED = 2;
/**
* Another serial connection was opened on this port. For another electron-instance, Java IDE.
*/
export const DEVICE_BUSY = 3;
}
}

View File

@@ -11,12 +11,13 @@ import { FrontendApplicationContribution } from '@theia/core/lib/browser/fronten
import { Sketch, SketchesService } from '../../common/protocol';
import { ConfigService } from './config-service';
import { SketchContainer } from './sketches-service';
import {
ARDUINO_CLOUD_FOLDER,
REMOTE_SKETCHBOOK_FOLDER,
} from '../../browser/utils/constants';
const READ_ONLY_FILES = [
'thingProperties.h',
'thingsProperties.h',
'sketch.json',
];
const READ_ONLY_FILES = ['sketch.json'];
const READ_ONLY_FILES_REMOTE = ['thingProperties.h', 'thingsProperties.h'];
@injectable()
export class SketchesServiceClientImpl
@@ -178,7 +179,17 @@ export class SketchesServiceClientImpl
if (toCheck.scheme === 'user-storage') {
return false;
}
if (READ_ONLY_FILES.includes(toCheck?.path?.base)) {
const isCloudSketch = toCheck
.toString()
.includes(`${REMOTE_SKETCHBOOK_FOLDER}/${ARDUINO_CLOUD_FOLDER}`);
const filesToCheck = [
...READ_ONLY_FILES,
...(isCloudSketch ? READ_ONLY_FILES_REMOTE : []),
];
if (filesToCheck.includes(toCheck?.path?.base)) {
return true;
}
const readOnly = !this.workspaceService

View File

@@ -1,7 +1,3 @@
export type RecursiveRequired<T> = {
[P in keyof T]-?: RecursiveRequired<T[P]>;
};
export interface Index {
[key: string]: any;
}

View File

@@ -81,11 +81,9 @@ export class IDEUpdaterImpl implements IDEUpdater {
? await fetch(`${CHANGELOG_BASE_URL}/${latestChangelogFileName}`)
: null;
const changelog = response?.ok ? await response?.text() : null;
const currentVersionHeader = `\n\n---\n\n## ${this.updater.currentVersion}\n\n`;
// We only want to see the release notes of newer versions
const currentVersionIndex = changelog?.indexOf(
`\r\n\r\n---\r\n\r\n## ${this.updater.currentVersion}\r\n\r\n`
);
const currentVersionIndex = changelog?.indexOf(currentVersionHeader);
const newChangelog =
currentVersionIndex && currentVersionIndex > 0
? changelog?.slice(0, currentVersionIndex)

View File

@@ -18,6 +18,7 @@ import { URI } from '@theia/core/shared/vscode-uri';
import * as electronRemoteMain from '@theia/core/electron-shared/@electron/remote/main';
import { Deferred } from '@theia/core/lib/common/promise-util';
import * as os from '@theia/core/lib/common/os';
import { RELOAD_REQUESTED_SIGNAL, Restart } from '@theia/core/lib/electron-common/messaging/electron-messages';
app.commandLine.appendSwitch('disable-http-cache');
@@ -157,7 +158,9 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
app.on('second-instance', this.onSecondInstance.bind(this));
app.on('window-all-closed', this.onWindowAllClosed.bind(this));
ipcMain.on('restart', ({ sender }) => {
ipcMain.on(RELOAD_REQUESTED_SIGNAL, event => this.handleReload(event));
ipcMain.on(Restart, ({ sender }) => {
this.restart(sender.id);
});
}

View File

@@ -12,7 +12,6 @@ import { Event, Emitter } from '@theia/core/lib/common/event';
import { environment } from '@theia/application-package/lib/environment';
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
import { LocalizationProvider } from '@theia/core/lib/node/i18n/localization-provider';
import { ArduinoDaemon, NotificationServiceServer } from '../common/protocol';
import { DaemonLog } from './daemon-log';
import { CLI_CONFIG } from './cli-config';
@@ -32,9 +31,6 @@ export class ArduinoDaemonImpl
@inject(NotificationServiceServer)
protected readonly notificationService: NotificationServiceServer;
@inject(LocalizationProvider)
protected readonly localizationProvider: LocalizationProvider;
protected readonly toDispose = new DisposableCollection();
protected readonly onDaemonStartedEmitter = new Emitter<void>();
protected readonly onDaemonStoppedEmitter = new Emitter<void>();

View File

@@ -3,10 +3,10 @@ import {
FirmwareInfo,
} from '../common/protocol/arduino-firmware-uploader';
import { injectable, inject, named } from 'inversify';
import { ExecutableService } from '../common/protocol';
import { SerialService } from '../common/protocol/serial-service';
import { ExecutableService, Port } from '../common/protocol';
import { getExecPath, spawnCommand } from './exec-util';
import { ILogger } from '@theia/core/lib/common/logger';
import { MonitorManager } from './monitor-manager';
@injectable()
export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader {
@@ -19,8 +19,8 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader {
@named('fwuploader')
protected readonly logger: ILogger;
@inject(SerialService)
protected readonly serialService: SerialService;
@inject(MonitorManager)
protected readonly monitorManager: MonitorManager;
protected onError(error: any): void {
this.logger.error(error);
@@ -69,26 +69,28 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader {
return await this.list(fqbn);
}
async flash(firmware: FirmwareInfo, port: string): Promise<string> {
async flash(firmware: FirmwareInfo, port: Port): Promise<string> {
let output;
const board = {
name: firmware.board_name,
fqbn: firmware.board_fqbn,
}
try {
this.serialService.uploadInProgress = true;
await this.serialService.disconnect();
this.monitorManager.notifyUploadStarted(board, port);
output = await this.runCommand([
'firmware',
'flash',
'--fqbn',
firmware.board_fqbn,
'--address',
port,
port.address,
'--module',
`${firmware.module}@${firmware.firmware_version}`,
]);
} catch (e) {
throw e;
} finally {
this.serialService.uploadInProgress = false;
this.serialService.connectSerialIfRequired();
this.monitorManager.notifyUploadFinished(board, port);
return output;
}
}

View File

@@ -40,16 +40,7 @@ import {
ArduinoDaemon,
ArduinoDaemonPath,
} from '../common/protocol/arduino-daemon';
import {
SerialServiceImpl,
SerialServiceName,
} from './serial/serial-service-impl';
import {
SerialService,
SerialServicePath,
SerialServiceClient,
} from '../common/protocol/serial-service';
import { MonitorClientProvider } from './serial/monitor-client-provider';
import { ConfigServiceImpl } from './config-service-impl';
import { EnvVariablesServer as TheiaEnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { EnvVariablesServer } from './theia/env-variables/env-variables-server';
@@ -90,8 +81,24 @@ import {
} from '../common/protocol/authentication-service';
import { ArduinoFirmwareUploaderImpl } from './arduino-firmware-uploader-impl';
import { PlotterBackendContribution } from './plotter/plotter-backend-contribution';
import WebSocketServiceImpl from './web-socket/web-socket-service-impl';
import { WebSocketService } from './web-socket/web-socket-service';
import { ArduinoLocalizationContribution } from './arduino-localization-contribution';
import { LocalizationContribution } from '@theia/core/lib/node/i18n/localization-contribution';
import { MonitorManagerProxyImpl } from './monitor-manager-proxy-impl';
import { MonitorManager, MonitorManagerName } from './monitor-manager';
import {
MonitorManagerProxy,
MonitorManagerProxyClient,
MonitorManagerProxyPath,
} from '../common/protocol/monitor-service';
import { MonitorService, MonitorServiceName } from './monitor-service';
import { MonitorSettingsProvider } from './monitor-settings/monitor-settings-provider';
import { MonitorSettingsProviderImpl } from './monitor-settings/monitor-settings-provider-impl';
import {
MonitorServiceFactory,
MonitorServiceFactoryOptions,
} from './monitor-service-factory';
import WebSocketProviderImpl from './web-socket/web-socket-provider-impl';
import { WebSocketProvider } from './web-socket/web-socket-provider';
export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(BackendApplication).toSelf().inSingletonScope();
@@ -175,9 +182,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
})
);
// Shared WebSocketService for the backend. This will manage all websocket conenctions
bind(WebSocketService).to(WebSocketServiceImpl).inSingletonScope();
// Shared Arduino core client provider service for the backend.
bind(CoreClientProvider).toSelf().inSingletonScope();
@@ -203,19 +207,57 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
// #endregion Theia customizations
// a single MonitorManager is responsible for handling the actual connections to the pluggable monitors
bind(MonitorManager).toSelf().inSingletonScope();
// monitor service & factory bindings
bind(MonitorSettingsProviderImpl).toSelf().inSingletonScope();
bind(MonitorSettingsProvider).toService(MonitorSettingsProviderImpl);
bind(WebSocketProviderImpl).toSelf();
bind(WebSocketProvider).toService(WebSocketProviderImpl);
bind(MonitorServiceFactory).toFactory(
({ container }) =>
(options: MonitorServiceFactoryOptions) => {
const logger = container.get<ILogger>(ILogger);
const monitorSettingsProvider = container.get<MonitorSettingsProvider>(
MonitorSettingsProvider
);
const webSocketProvider =
container.get<WebSocketProvider>(WebSocketProvider);
const { board, port, coreClientProvider } = options;
return new MonitorService(
logger,
monitorSettingsProvider,
webSocketProvider,
board,
port,
coreClientProvider
);
}
);
// Serial client provider per connected frontend.
bind(ConnectionContainerModule).toConstantValue(
ConnectionContainerModule.create(({ bind, bindBackendService }) => {
bind(MonitorClientProvider).toSelf().inSingletonScope();
bind(SerialServiceImpl).toSelf().inSingletonScope();
bind(SerialService).toService(SerialServiceImpl);
bindBackendService<SerialService, SerialServiceClient>(
SerialServicePath,
SerialService,
(service, client) => {
service.setClient(client);
client.onDidCloseConnection(() => service.dispose());
return service;
bind(MonitorManagerProxyImpl).toSelf().inSingletonScope();
bind(MonitorManagerProxy).toService(MonitorManagerProxyImpl);
bindBackendService<MonitorManagerProxy, MonitorManagerProxyClient>(
MonitorManagerProxyPath,
MonitorManagerProxy,
(monitorMgrProxy, client) => {
monitorMgrProxy.setClient(client);
// when the client close the connection, the proxy is disposed.
// when the MonitorManagerProxy is disposed, it informs the MonitorManager
// telling him that it does not need an address/board anymore.
// the MonitorManager will then dispose the actual connection if there are no proxies using it
client.onDidCloseConnection(() => monitorMgrProxy.dispose());
return monitorMgrProxy;
}
);
})
@@ -305,14 +347,22 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
.inSingletonScope()
.whenTargetNamed('config');
// Logger for the serial service.
// Logger for the monitor manager and its services
bind(ILogger)
.toDynamicValue((ctx) => {
const parentLogger = ctx.container.get<ILogger>(ILogger);
return parentLogger.child(SerialServiceName);
return parentLogger.child(MonitorManagerName);
})
.inSingletonScope()
.whenTargetNamed(SerialServiceName);
.whenTargetNamed(MonitorManagerName);
bind(ILogger)
.toDynamicValue((ctx) => {
const parentLogger = ctx.container.get<ILogger>(ILogger);
return parentLogger.child(MonitorServiceName);
})
.inSingletonScope()
.whenTargetNamed(MonitorServiceName);
bind(DefaultGitInit).toSelf();
rebind(GitInit).toService(DefaultGitInit);
@@ -340,4 +390,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(PlotterBackendContribution).toSelf().inSingletonScope();
bind(BackendApplicationContribution).toService(PlotterBackendContribution);
bind(ArduinoLocalizationContribution).toSelf().inSingletonScope();
bind(LocalizationContribution).toService(ArduinoLocalizationContribution);
});

View File

@@ -0,0 +1,152 @@
import {
LocalizationContribution,
LocalizationRegistry,
} from '@theia/core/lib/node/i18n/localization-contribution';
import { injectable } from 'inversify';
@injectable()
export class ArduinoLocalizationContribution
implements LocalizationContribution
{
async registerLocalizations(registry: LocalizationRegistry): Promise<void> {
registry.registerLocalizationFromRequire(
'af',
require('../../build/i18n/af.json')
);
registry.registerLocalizationFromRequire(
'en',
require('../../build/i18n/en.json')
);
registry.registerLocalizationFromRequire(
'fr',
require('../../build/i18n/fr.json')
);
registry.registerLocalizationFromRequire(
'ko',
require('../../build/i18n/ko.json')
);
registry.registerLocalizationFromRequire(
'pt',
require('../../build/i18n/pt.json')
);
registry.registerLocalizationFromRequire(
'uk_UA',
require('../../build/i18n/uk_UA.json')
);
registry.registerLocalizationFromRequire(
'ar',
require('../../build/i18n/ar.json')
);
registry.registerLocalizationFromRequire(
'es',
require('../../build/i18n/es.json')
);
registry.registerLocalizationFromRequire(
'he',
require('../../build/i18n/he.json')
);
registry.registerLocalizationFromRequire(
'my_MM',
require('../../build/i18n/my_MM.json')
);
registry.registerLocalizationFromRequire(
'ro',
require('../../build/i18n/ro.json')
);
registry.registerLocalizationFromRequire(
'zh-cn',
require('../../build/i18n/zh.json')
);
registry.registerLocalizationFromRequire(
'bg',
require('../../build/i18n/bg.json')
);
registry.registerLocalizationFromRequire(
'eu',
require('../../build/i18n/eu.json')
);
registry.registerLocalizationFromRequire(
'hu',
require('../../build/i18n/hu.json')
);
registry.registerLocalizationFromRequire(
'ne',
require('../../build/i18n/ne.json')
);
registry.registerLocalizationFromRequire(
'ru',
require('../../build/i18n/ru.json')
);
registry.registerLocalizationFromRequire(
'zh_TW',
require('../../build/i18n/zh_TW.json')
);
registry.registerLocalizationFromRequire(
'de',
require('../../build/i18n/de.json')
);
registry.registerLocalizationFromRequire(
'fa',
require('../../build/i18n/fa.json')
);
registry.registerLocalizationFromRequire(
'it',
require('../../build/i18n/it.json')
);
registry.registerLocalizationFromRequire(
'nl',
require('../../build/i18n/nl.json')
);
registry.registerLocalizationFromRequire(
'sv_SE',
require('../../build/i18n/sv_SE.json')
);
registry.registerLocalizationFromRequire(
'el',
require('../../build/i18n/el.json')
);
registry.registerLocalizationFromRequire(
'fil',
require('../../build/i18n/fil.json')
);
registry.registerLocalizationFromRequire(
'ja',
require('../../build/i18n/ja.json')
);
registry.registerLocalizationFromRequire(
'pl',
require('../../build/i18n/pl.json')
);
registry.registerLocalizationFromRequire(
'tr',
require('../../build/i18n/tr.json')
);
}
}

View File

@@ -24,7 +24,7 @@ import { ArduinoCoreServiceClient } from './cli-protocol/cc/arduino/cli/commands
import { firstToUpperCase, firstToLowerCase } from '../common/utils';
import { Port } from './cli-protocol/cc/arduino/cli/commands/v1/port_pb';
import { nls } from '@theia/core';
import { SerialService } from './../common/protocol/serial-service';
import { MonitorManager } from './monitor-manager';
@injectable()
export class CoreServiceImpl extends CoreClientAware implements CoreService {
@@ -34,8 +34,8 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
@inject(NotificationServiceServer)
protected readonly notificationService: NotificationServiceServer;
@inject(SerialService)
protected readonly serialService: SerialService;
@inject(MonitorManager)
protected readonly monitorManager: MonitorManager;
protected uploading = false;
@@ -45,7 +45,7 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
compilerWarnings?: CompilerWarnings;
}
): Promise<void> {
const { sketchUri, fqbn, compilerWarnings } = options;
const { sketchUri, board, compilerWarnings } = options;
const sketchPath = FileUri.fsPath(sketchUri);
await this.coreClientProvider.initialized;
@@ -55,8 +55,8 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
const compileReq = new CompileRequest();
compileReq.setInstance(instance);
compileReq.setSketchPath(sketchPath);
if (fqbn) {
compileReq.setFqbn(fqbn);
if (board?.fqbn) {
compileReq.setFqbn(board.fqbn);
}
if (compilerWarnings) {
compileReq.setWarnings(compilerWarnings.toLowerCase());
@@ -139,11 +139,9 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
await this.compile(Object.assign(options, { exportBinaries: false }));
this.uploading = true;
this.serialService.uploadInProgress = true;
const { sketchUri, board, port, programmer } = options;
await this.monitorManager.notifyUploadStarted(board, port);
await this.serialService.disconnect();
const { sketchUri, fqbn, port, programmer } = options;
const sketchPath = FileUri.fsPath(sketchUri);
await this.coreClientProvider.initialized;
@@ -153,8 +151,8 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
const req = requestProvider();
req.setInstance(instance);
req.setSketchPath(sketchPath);
if (fqbn) {
req.setFqbn(fqbn);
if (board?.fqbn) {
req.setFqbn(board.fqbn);
}
const p = new Port();
if (port) {
@@ -209,23 +207,22 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
throw new Error(errorMessage);
} finally {
this.uploading = false;
this.serialService.uploadInProgress = false;
this.monitorManager.notifyUploadFinished(board, port);
}
}
async burnBootloader(options: CoreService.Bootloader.Options): Promise<void> {
this.uploading = true;
this.serialService.uploadInProgress = true;
await this.serialService.disconnect();
const { board, port, programmer } = options;
await this.monitorManager.notifyUploadStarted(board, port);
await this.coreClientProvider.initialized;
const coreClient = await this.coreClient();
const { client, instance } = coreClient;
const { fqbn, port, programmer } = options;
const burnReq = new BurnBootloaderRequest();
burnReq.setInstance(instance);
if (fqbn) {
burnReq.setFqbn(fqbn);
if (board?.fqbn) {
burnReq.setFqbn(board.fqbn);
}
const p = new Port();
if (port) {
@@ -267,7 +264,7 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
throw new Error(errorMessage);
} finally {
this.uploading = false;
this.serialService.uploadInProgress = false;
await this.monitorManager.notifyUploadFinished(board, port);
}
}

View File

@@ -0,0 +1,92 @@
import { inject, injectable } from '@theia/core/shared/inversify';
import {
MonitorManagerProxy,
MonitorManagerProxyClient,
Status,
} from '../common/protocol';
import { Board, Port } from '../common/protocol';
import { MonitorManager } from './monitor-manager';
import { PluggableMonitorSettings } from './monitor-settings/monitor-settings-provider';
@injectable()
export class MonitorManagerProxyImpl implements MonitorManagerProxy {
protected client: MonitorManagerProxyClient;
constructor(
@inject(MonitorManager)
protected readonly manager: MonitorManager
) {}
dispose(): void {
this.client?.disconnect();
}
/**
* Start a pluggable monitor and/or change its settings.
* If settings are defined they'll be set before starting the monitor,
* otherwise default ones will be used by the monitor.
* @param board board connected to port
* @param port port to monitor
* @param settings map of supported configuration by the monitor
*/
async startMonitor(
board: Board,
port: Port,
settings?: PluggableMonitorSettings
): Promise<void> {
if (settings) {
await this.changeMonitorSettings(board, port, settings);
}
const status = await this.manager.startMonitor(board, port);
if (status === Status.ALREADY_CONNECTED || status === Status.OK) {
// Monitor started correctly, connect it with the frontend
this.client.connect(this.manager.getWebsocketAddressPort(board, port));
}
}
/**
* Changes the settings of a running pluggable monitor, if that monitor is not
* started this function is a noop.
* @param board board connected to port
* @param port port monitored
* @param settings map of supported configuration by the monitor
*/
async changeMonitorSettings(
board: Board,
port: Port,
settings: PluggableMonitorSettings
): Promise<void> {
if (!this.manager.isStarted(board, port)) {
// Monitor is not running, no need to change settings
return;
}
return this.manager.changeMonitorSettings(board, port, settings);
}
/**
* Stops a running pluggable monitor.
* @param board board connected to port
* @param port port monitored
*/
async stopMonitor(board: Board, port: Port): Promise<void> {
return this.manager.stopMonitor(board, port);
}
/**
* Returns the current settings by the pluggable monitor connected to specified
* by board/port combination.
* @param board board connected to port
* @param port port monitored
* @returns a map of MonitorSetting
*/
getCurrentSettings(board: Board, port: Port): PluggableMonitorSettings {
return this.manager.currentMonitorSettings(board, port);
}
setClient(client: MonitorManagerProxyClient | undefined): void {
if (!client) {
return;
}
this.client = client;
}
}

View File

@@ -0,0 +1,213 @@
import { ILogger } from '@theia/core';
import { inject, injectable, named } from '@theia/core/shared/inversify';
import { Board, Port, Status } from '../common/protocol';
import { CoreClientAware } from './core-client-provider';
import { MonitorService } from './monitor-service';
import { MonitorServiceFactory } from './monitor-service-factory';
import { PluggableMonitorSettings } from './monitor-settings/monitor-settings-provider';
type MonitorID = string;
export const MonitorManagerName = 'monitor-manager';
@injectable()
export class MonitorManager extends CoreClientAware {
// Map of monitor services that manage the running pluggable monitors.
// Each service handles the lifetime of one, and only one, monitor.
// If either the board or port managed changes, a new service must
// be started.
private monitorServices = new Map<MonitorID, MonitorService>();
@inject(MonitorServiceFactory)
private monitorServiceFactory: MonitorServiceFactory;
constructor(
@inject(ILogger)
@named(MonitorManagerName)
protected readonly logger: ILogger
) {
super();
}
/**
* Used to know if a monitor is started
* @param board board connected to port
* @param port port to monitor
* @returns true if the monitor is currently monitoring the board/port
* combination specifed, false in all other cases.
*/
isStarted(board: Board, port: Port): boolean {
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServices.get(monitorID);
if (monitor) {
return monitor.isStarted();
}
return false;
}
/**
* Start a pluggable monitor that receives and sends messages
* to the specified board and port combination.
* @param board board connected to port
* @param port port to monitor
* @returns a Status object to know if the process has been
* started or if there have been errors.
*/
async startMonitor(board: Board, port: Port): Promise<Status> {
const monitorID = this.monitorID(board, port);
let monitor = this.monitorServices.get(monitorID);
if (!monitor) {
monitor = this.createMonitor(board, port);
}
return await monitor.start(monitorID);
}
/**
* Stop a pluggable monitor connected to the specified board/port
* combination. It's a noop if monitor is not running.
* @param board board connected to port
* @param port port monitored
*/
async stopMonitor(board: Board, port: Port): Promise<void> {
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServices.get(monitorID);
if (!monitor) {
// There's no monitor to stop, bail
return;
}
return await monitor.stop();
}
/**
* Returns the port of the WebSocket used by the MonitorService
* that is handling the board/port combination
* @param board board connected to port
* @param port port to monitor
* @returns port of the MonitorService's WebSocket
*/
getWebsocketAddressPort(board: Board, port: Port): number {
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServices.get(monitorID);
if (!monitor) {
return -1;
}
return monitor.getWebsocketAddressPort();
}
/**
* Notifies the monitor service of that board/port combination
* that an upload process started on that exact board/port combination.
* This must be done so that we can stop the monitor for the time being
* until the upload process finished.
* @param board board connected to port
* @param port port to monitor
*/
async notifyUploadStarted(board?: Board, port?: Port): Promise<void> {
if (!board || !port) {
// We have no way of knowing which monitor
// to retrieve if we don't have this information.
return;
}
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServices.get(monitorID);
if (!monitor) {
// There's no monitor running there, bail
return;
}
monitor.setUploadInProgress(true);
return await monitor.pause();
}
/**
* Notifies the monitor service of that board/port combination
* that an upload process started on that exact board/port combination.
* @param board board connected to port
* @param port port to monitor
* @returns a Status object to know if the process has been
* started or if there have been errors.
*/
async notifyUploadFinished(board?: Board, port?: Port): Promise<Status> {
if (!board || !port) {
// We have no way of knowing which monitor
// to retrieve if we don't have this information.
return Status.NOT_CONNECTED;
}
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServices.get(monitorID);
if (!monitor) {
// There's no monitor running there, bail
return Status.NOT_CONNECTED;
}
monitor.setUploadInProgress(false);
return await monitor.start(monitorID);
}
/**
* Changes the settings of a pluggable monitor even if it's running.
* If monitor is not running they're going to be used as soon as it's started.
* @param board board connected to port
* @param port port to monitor
* @param settings monitor settings to change
*/
changeMonitorSettings(
board: Board,
port: Port,
settings: PluggableMonitorSettings
) {
const monitorID = this.monitorID(board, port);
let monitor = this.monitorServices.get(monitorID);
if (!monitor) {
monitor = this.createMonitor(board, port);
monitor.changeSettings(settings);
}
}
/**
* Returns the settings currently used by the pluggable monitor
* that's communicating with the specified board/port combination.
* @param board board connected to port
* @param port port monitored
* @returns map of current monitor settings
*/
currentMonitorSettings(board: Board, port: Port): PluggableMonitorSettings {
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServices.get(monitorID);
if (!monitor) {
return {};
}
return monitor.currentSettings();
}
/**
* Creates a MonitorService that handles the lifetime and the
* communication via WebSocket with the frontend.
* @param board board connected to specified port
* @param port port to monitor
* @returns a new instance of MonitorService ready to use.
*/
private createMonitor(board: Board, port: Port): MonitorService {
const monitorID = this.monitorID(board, port);
const monitor = this.monitorServiceFactory({
board,
port,
coreClientProvider: this.coreClientProvider,
});
this.monitorServices.set(monitorID, monitor);
monitor.onDispose(
(() => {
this.monitorServices.delete(monitorID);
}).bind(this)
);
return monitor;
}
/**
* Utility function to create a unique ID for a monitor service.
* @param board
* @param port
* @returns a unique monitor ID
*/
private monitorID(board: Board, port: Port): MonitorID {
return `${board.fqbn}-${port.address}-${port.protocol}`;
}
}

View File

@@ -0,0 +1,18 @@
import { Board, Port } from '../common/protocol';
import { CoreClientProvider } from './core-client-provider';
import { MonitorService } from './monitor-service';
export const MonitorServiceFactory = Symbol('MonitorServiceFactory');
export interface MonitorServiceFactory {
(options: {
board: Board;
port: Port;
coreClientProvider: CoreClientProvider;
}): MonitorService;
}
export interface MonitorServiceFactoryOptions {
board: Board;
port: Port;
coreClientProvider: CoreClientProvider;
}

View File

@@ -0,0 +1,425 @@
import { ClientDuplexStream } from '@grpc/grpc-js';
import { Disposable, Emitter, ILogger } from '@theia/core';
import { inject, named } from '@theia/core/shared/inversify';
import { Board, Port, Status, Monitor } from '../common/protocol';
import {
EnumerateMonitorPortSettingsRequest,
EnumerateMonitorPortSettingsResponse,
MonitorPortConfiguration,
MonitorPortSetting,
MonitorRequest,
MonitorResponse,
} from './cli-protocol/cc/arduino/cli/commands/v1/monitor_pb';
import { CoreClientAware, CoreClientProvider } from './core-client-provider';
import { WebSocketProvider } from './web-socket/web-socket-provider';
import { Port as gRPCPort } from 'arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/port_pb';
import {
PluggableMonitorSettings,
MonitorSettingsProvider,
} from './monitor-settings/monitor-settings-provider';
export const MonitorServiceName = 'monitor-service';
export class MonitorService extends CoreClientAware implements Disposable {
// Bidirectional gRPC stream used to receive and send data from the running
// pluggable monitor managed by the Arduino CLI.
protected duplex: ClientDuplexStream<MonitorRequest, MonitorResponse> | null;
// Settings used by the currently running pluggable monitor.
// They can be freely modified while running.
protected settings: PluggableMonitorSettings;
// List of messages received from the running pluggable monitor.
// These are flushed from time to time to the frontend.
protected messages: string[] = [];
// Handles messages received from the frontend via websocket.
protected onMessageReceived?: Disposable;
// Sends messages to the frontend from time to time.
protected flushMessagesInterval?: NodeJS.Timeout;
// Triggered each time the number of clients connected
// to the this service WebSocket changes.
protected onWSClientsNumberChanged?: Disposable;
// Used to notify that the monitor is being disposed
protected readonly onDisposeEmitter = new Emitter<void>();
readonly onDispose = this.onDisposeEmitter.event;
protected uploadInProgress = false;
constructor(
@inject(ILogger)
@named(MonitorServiceName)
protected readonly logger: ILogger,
@inject(MonitorSettingsProvider)
protected readonly monitorSettingsProvider: MonitorSettingsProvider,
@inject(WebSocketProvider)
protected readonly webSocketProvider: WebSocketProvider,
private readonly board: Board,
private readonly port: Port,
protected readonly coreClientProvider: CoreClientProvider
) {
super();
this.onWSClientsNumberChanged =
this.webSocketProvider.onClientsNumberChanged(async (clients: number) => {
if (clients === 0) {
// There are no more clients that want to receive
// data from this monitor, we can freely close
// and dispose it.
this.dispose();
}
});
}
setUploadInProgress(status: boolean): void {
this.uploadInProgress = status;
}
getWebsocketAddressPort(): number {
return this.webSocketProvider.getAddress().port;
}
dispose(): void {
this.stop();
this.onDisposeEmitter.fire();
}
/**
* isStarted is used to know if the currently running pluggable monitor is started.
* @returns true if pluggable monitor communication duplex is open,
* false in all other cases.
*/
isStarted(): boolean {
return !!this.duplex;
}
/**
* Start and connects a monitor using currently set board and port.
* If a monitor is already started or board fqbn, port address and/or protocol
* are missing nothing happens.
* @param id
* @returns a status to verify connection has been established.
*/
async start(monitorID: string): Promise<Status> {
if (this.duplex) {
return Status.ALREADY_CONNECTED;
}
if (!this.board?.fqbn || !this.port?.address || !this.port?.protocol) {
return Status.CONFIG_MISSING;
}
if (this.uploadInProgress) {
return Status.UPLOAD_IN_PROGRESS;
}
this.logger.info('starting monitor');
// get default monitor settings from the CLI
const defaultSettings = await this.portMonitorSettings(
this.port.protocol,
this.board.fqbn
);
// get actual settings from the settings provider
this.settings = await this.monitorSettingsProvider.getSettings(
monitorID,
defaultSettings
);
await this.coreClientProvider.initialized;
const coreClient = await this.coreClient();
const { client, instance } = coreClient;
this.duplex = client.monitor();
this.duplex
.on('close', () => {
this.duplex = null;
this.logger.info(
`monitor to ${this.port?.address} using ${this.port?.protocol} closed by client`
);
})
.on('end', () => {
this.duplex = null;
this.logger.info(
`monitor to ${this.port?.address} using ${this.port?.protocol} closed by server`
);
})
.on('error', (err: Error) => {
this.logger.error(err);
// TODO
// this.theiaFEClient?.notifyError()
})
.on(
'data',
((res: MonitorResponse) => {
if (res.getError()) {
// TODO: Maybe disconnect
this.logger.error(res.getError());
return;
}
const data = res.getRxData();
const message =
typeof data === 'string'
? data
: new TextDecoder('utf8').decode(data);
this.messages.push(...splitLines(message));
}).bind(this)
);
const req = new MonitorRequest();
req.setInstance(instance);
if (this.board?.fqbn) {
req.setFqbn(this.board.fqbn);
}
if (this.port?.address && this.port?.protocol) {
const port = new gRPCPort();
port.setAddress(this.port.address);
port.setProtocol(this.port.protocol);
req.setPort(port);
}
const config = new MonitorPortConfiguration();
for (const id in this.settings) {
const s = new MonitorPortSetting();
s.setSettingId(id);
s.setValue(this.settings[id].selectedValue);
config.addSettings(s);
}
req.setPortConfiguration(config);
const connect = new Promise<Status>((resolve) => {
if (this.duplex?.write(req)) {
this.startMessagesHandlers();
this.logger.info(
`started monitor to ${this.port?.address} using ${this.port?.protocol}`
);
resolve(Status.OK);
return;
}
this.logger.warn(
`failed starting monitor to ${this.port?.address} using ${this.port?.protocol}`
);
resolve(Status.NOT_CONNECTED);
});
const connectTimeout = new Promise<Status>((resolve) => {
setTimeout(async () => {
this.logger.warn(
`timeout starting monitor to ${this.port?.address} using ${this.port?.protocol}`
);
resolve(Status.NOT_CONNECTED);
}, 1000);
});
// Try opening a monitor connection with a timeout
return await Promise.race([connect, connectTimeout]);
}
/**
* Pauses the currently running monitor, it still closes the gRPC connection
* with the underlying monitor process but it doesn't stop the message handlers
* currently running.
* This is mainly used to handle upload with the board/port combination
* the monitor is listening to.
* @returns
*/
async pause(): Promise<void> {
return new Promise(async (resolve) => {
if (!this.duplex) {
this.logger.warn(
`monitor to ${this.port?.address} using ${this.port?.protocol} already stopped`
);
return resolve();
}
// It's enough to close the connection with the client
// to stop the monitor process
this.duplex.end();
this.logger.info(
`stopped monitor to ${this.port?.address} using ${this.port?.protocol}`
);
this.duplex.on('end', resolve);
});
}
/**
* Stop the monitor currently running
*/
async stop(): Promise<void> {
return this.pause().finally(this.stopMessagesHandlers.bind(this));
}
/**
* Send a message to the running monitor, a well behaved monitor
* will then send that message to the board.
* We MUST NEVER send a message that wasn't a user's input to the board.
* @param message string sent to running monitor
* @returns a status to verify message has been sent.
*/
async send(message: string): Promise<Status> {
if (!this.duplex) {
return Status.NOT_CONNECTED;
}
await this.coreClientProvider.initialized;
const coreClient = await this.coreClient();
const { instance } = coreClient;
const req = new MonitorRequest();
req.setInstance(instance);
req.setTxData(new TextEncoder().encode(message));
return new Promise<Status>((resolve) => {
if (this.duplex) {
this.duplex?.write(req, () => {
resolve(Status.OK);
});
return;
}
this.stop().then(() => resolve(Status.NOT_CONNECTED));
});
}
/**
*
* @returns map of current monitor settings
*/
currentSettings(): PluggableMonitorSettings {
return this.settings;
}
// TODO: move this into MonitoSettingsProvider
/**
* Returns the possible configurations used to connect a monitor
* to the board specified by fqbn using the specified protocol
* @param protocol the protocol of the monitor we want get settings for
* @param fqbn the fqbn of the board we want to monitor
* @returns a map of all the settings supported by the monitor
*/
private async portMonitorSettings(
protocol: string,
fqbn: string
): Promise<PluggableMonitorSettings> {
await this.coreClientProvider.initialized;
const coreClient = await this.coreClient();
const { client, instance } = coreClient;
const req = new EnumerateMonitorPortSettingsRequest();
req.setInstance(instance);
req.setPortProtocol(protocol);
req.setFqbn(fqbn);
const res = await new Promise<EnumerateMonitorPortSettingsResponse>(
(resolve, reject) => {
client.enumerateMonitorPortSettings(req, (err, resp) => {
if (!!err) {
reject(err);
}
resolve(resp);
});
}
);
const settings: PluggableMonitorSettings = {};
for (const iterator of res.getSettingsList()) {
settings[iterator.getSettingId()] = {
id: iterator.getSettingId(),
label: iterator.getLabel(),
type: iterator.getType(),
values: iterator.getEnumValuesList(),
selectedValue: iterator.getValue(),
};
}
return settings;
}
/**
* Set monitor settings, if there is a running monitor they'll be sent
* to it, otherwise they'll be used when starting one.
* Only values in settings parameter will be change, other values won't
* be changed in any way.
* @param settings map of monitor settings to change
* @returns a status to verify settings have been sent.
*/
async changeSettings(settings: PluggableMonitorSettings): Promise<Status> {
const config = new MonitorPortConfiguration();
for (const id in settings) {
const s = new MonitorPortSetting();
s.setSettingId(id);
s.setValue(settings[id].selectedValue);
config.addSettings(s);
this.settings[id] = settings[id];
}
if (!this.duplex) {
return Status.NOT_CONNECTED;
}
await this.coreClientProvider.initialized;
const coreClient = await this.coreClient();
const { instance } = coreClient;
const req = new MonitorRequest();
req.setInstance(instance);
req.setPortConfiguration(config);
this.duplex.write(req);
return Status.OK;
}
/**
* Starts the necessary handlers to send and receive
* messages to and from the frontend and the running monitor
*/
private startMessagesHandlers(): void {
if (!this.flushMessagesInterval) {
const flushMessagesToFrontend = () => {
if (this.messages.length) {
this.webSocketProvider.sendMessage(JSON.stringify(this.messages));
this.messages = [];
}
};
this.flushMessagesInterval = setInterval(flushMessagesToFrontend, 32);
}
if (!this.onMessageReceived) {
this.onMessageReceived = this.webSocketProvider.onMessageReceived(
(msg: string) => {
const message: Monitor.Message = JSON.parse(msg);
switch (message.command) {
case Monitor.Command.SEND_MESSAGE:
this.send(message.data);
break;
case Monitor.Command.CHANGE_SETTINGS:
const settings: PluggableMonitorSettings = JSON.parse(
message.data
);
this.changeSettings(settings);
break;
}
}
);
}
}
/**
* Stops the necessary handlers to send and receive messages to
* and from the frontend and the running monitor
*/
private stopMessagesHandlers(): void {
if (this.flushMessagesInterval) {
clearInterval(this.flushMessagesInterval);
this.flushMessagesInterval = undefined;
}
if (this.onMessageReceived) {
this.onMessageReceived.dispose();
this.onMessageReceived = undefined;
}
}
}
/**
* Splits a string into an array without removing newline char.
* @param s string to split into lines
* @returns an lines array
*/
function splitLines(s: string): string[] {
return s.split(/(?<=\n)/);
}

View File

@@ -0,0 +1,145 @@
import * as fs from 'fs';
import { join } from 'path';
import { injectable, inject, postConstruct } from 'inversify';
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { FileUri } from '@theia/core/lib/node/file-uri';
import { promisify } from 'util';
import {
PluggableMonitorSettings,
MonitorSettingsProvider,
} from './monitor-settings-provider';
import { Deferred } from '@theia/core/lib/common/promise-util';
const MONITOR_SETTINGS_FILE = 'pluggable-monitor-settings.json';
@injectable()
export class MonitorSettingsProviderImpl implements MonitorSettingsProvider {
@inject(EnvVariablesServer)
protected readonly envVariablesServer: EnvVariablesServer;
protected ready = new Deferred<void>();
// this is populated with all settings coming from the CLI. This should never be modified
// // as it is used to double check the monitorSettings attribute
// private monitorDefaultSettings: PluggableMonitorSettings;
// this contains actual values coming from the stored file and edited by the user
// this is a map with MonitorId as key and PluggableMonitorSetting as value
private monitorSettings: Record<string, PluggableMonitorSettings>;
private pluggableMonitorSettingsPath: string;
@postConstruct()
protected async init(): Promise<void> {
// get the monitor settings file path
const configDirUri = await this.envVariablesServer.getConfigDirUri();
this.pluggableMonitorSettingsPath = join(
FileUri.fsPath(configDirUri),
MONITOR_SETTINGS_FILE
);
// read existing settings
await this.readFile();
console.log(this.monitorSettings);
this.ready.resolve();
}
async getSettings(
monitorId: string,
defaultSettings: PluggableMonitorSettings
): Promise<PluggableMonitorSettings> {
// wait for the service to complete the init
await this.ready.promise;
const { matchingSettings } = this.longestPrefixMatch(monitorId);
return this.reconcileSettings(matchingSettings, defaultSettings);
}
async setSettings(
monitorId: string,
settings: PluggableMonitorSettings
): Promise<PluggableMonitorSettings> {
// wait for the service to complete the init
await this.ready.promise;
const newSettings = this.reconcileSettings(
settings,
this.monitorSettings[monitorId]
);
this.monitorSettings[monitorId] = newSettings;
await this.writeFile();
return newSettings;
}
private reconcileSettings(
newSettings: PluggableMonitorSettings,
defaultSettings: PluggableMonitorSettings
): PluggableMonitorSettings {
// TODO: implement
return newSettings;
}
private async readFile(): Promise<void> {
const rawJson = await promisify(fs.readFile)(
this.pluggableMonitorSettingsPath,
{
encoding: 'utf-8',
flag: 'a+', // a+ = append and read, creating the file if it doesn't exist
}
);
if (!rawJson) {
this.monitorSettings = {};
}
try {
this.monitorSettings = JSON.parse(rawJson);
} catch (error) {
console.error(
'Could not parse the pluggable monitor settings file. Using empty file.'
);
this.monitorSettings = {};
}
}
private async writeFile() {
await promisify(fs.writeFile)(
this.pluggableMonitorSettingsPath,
JSON.stringify(this.monitorSettings)
);
}
private longestPrefixMatch(id: string): {
matchingPrefix: string;
matchingSettings: PluggableMonitorSettings;
} {
const separator = '-';
const idTokens = id.split(separator);
let matchingPrefix = '';
let matchingSettings: PluggableMonitorSettings = {};
const monitorSettingsKeys = Object.keys(this.monitorSettings);
for (let i = 0; i < idTokens.length; i++) {
const prefix = idTokens.slice(0, i + 1).join(separator);
for (let k = 0; k < monitorSettingsKeys.length; k++) {
if (monitorSettingsKeys[k].startsWith(prefix)) {
matchingPrefix = prefix;
matchingSettings = this.monitorSettings[monitorSettingsKeys[k]];
break;
}
}
if (matchingPrefix.length) {
break;
}
}
return { matchingPrefix, matchingSettings };
}
}

View File

@@ -0,0 +1,20 @@
import { MonitorModel } from '../../browser/monitor-model';
import { PluggableMonitorSetting } from '../../common/protocol';
export type PluggableMonitorSettings = Record<string, PluggableMonitorSetting>;
export interface MonitorSettings {
pluggableMonitorSettings?: PluggableMonitorSettings;
monitorUISettings?: Partial<MonitorModel.State>;
}
export const MonitorSettingsProvider = Symbol('MonitorSettingsProvider');
export interface MonitorSettingsProvider {
getSettings(
monitorId: string,
defaultSettings: PluggableMonitorSettings
): Promise<PluggableMonitorSettings>;
setSettings(
monitorId: string,
settings: PluggableMonitorSettings
): Promise<PluggableMonitorSettings>;
}

View File

@@ -1,26 +0,0 @@
import * as grpc from '@grpc/grpc-js';
import { injectable } from 'inversify';
import { MonitorServiceClient } from '../cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb';
import * as monitorGrpcPb from '../cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb';
import { GrpcClientProvider } from '../grpc-client-provider';
@injectable()
export class MonitorClientProvider extends GrpcClientProvider<MonitorServiceClient> {
createClient(port: string | number): MonitorServiceClient {
// https://github.com/agreatfool/grpc_tools_node_protoc_ts/blob/master/doc/grpcjs_support.md#usage
const MonitorServiceClient = grpc.makeClientConstructor(
// @ts-expect-error: ignore
monitorGrpcPb['cc.arduino.cli.monitor.v1.MonitorService'],
'MonitorServiceService'
) as any;
return new MonitorServiceClient(
`localhost:${port}`,
grpc.credentials.createInsecure(),
this.channelOptions
);
}
close(client: MonitorServiceClient): void {
client.close();
}
}

View File

@@ -1,397 +0,0 @@
import { ClientDuplexStream } from '@grpc/grpc-js';
import { TextEncoder } from 'util';
import { injectable, inject, named } from 'inversify';
import { Struct } from 'google-protobuf/google/protobuf/struct_pb';
import { ILogger } from '@theia/core/lib/common/logger';
import {
SerialService,
SerialServiceClient,
SerialConfig,
SerialError,
Status,
} from '../../common/protocol/serial-service';
import {
StreamingOpenRequest,
StreamingOpenResponse,
MonitorConfig as GrpcMonitorConfig,
} from '../cli-protocol/cc/arduino/cli/monitor/v1/monitor_pb';
import { MonitorClientProvider } from './monitor-client-provider';
import { Board } from '../../common/protocol/boards-service';
import { WebSocketService } from '../web-socket/web-socket-service';
import { SerialPlotter } from '../../browser/serial/plotter/protocol';
import { Disposable } from '@theia/core/shared/vscode-languageserver-protocol';
export const SerialServiceName = 'serial-service';
interface ErrorWithCode extends Error {
readonly code: number;
}
namespace ErrorWithCode {
export function toSerialError(
error: Error,
config: SerialConfig
): SerialError {
const { message } = error;
let code = undefined;
if (is(error)) {
// TODO: const `mapping`. Use regex for the `message`.
const mapping = new Map<string, number>();
mapping.set(
'1 CANCELLED: Cancelled on client',
SerialError.ErrorCodes.CLIENT_CANCEL
);
mapping.set(
'2 UNKNOWN: device not configured',
SerialError.ErrorCodes.DEVICE_NOT_CONFIGURED
);
mapping.set(
'2 UNKNOWN: error opening serial connection: Serial port busy',
SerialError.ErrorCodes.DEVICE_BUSY
);
code = mapping.get(message);
}
return {
message,
code,
config,
};
}
function is(error: Error & { code?: number }): error is ErrorWithCode {
return typeof error.code === 'number';
}
}
@injectable()
export class SerialServiceImpl implements SerialService {
protected theiaFEClient?: SerialServiceClient;
protected serialConfig?: SerialConfig;
protected serialConnection?: {
duplex: ClientDuplexStream<StreamingOpenRequest, StreamingOpenResponse>;
config: SerialConfig;
};
protected messages: string[] = [];
protected onMessageReceived: Disposable | null;
protected onWSClientsNumberChanged: Disposable | null;
protected flushMessagesInterval: NodeJS.Timeout | null;
uploadInProgress = false;
constructor(
@inject(ILogger)
@named(SerialServiceName)
protected readonly logger: ILogger,
@inject(MonitorClientProvider)
protected readonly serialClientProvider: MonitorClientProvider,
@inject(WebSocketService)
protected readonly webSocketService: WebSocketService
) { }
async isSerialPortOpen(): Promise<boolean> {
return !!this.serialConnection;
}
setClient(client: SerialServiceClient | undefined): void {
this.theiaFEClient = client;
this.theiaFEClient?.notifyWebSocketChanged(
this.webSocketService.getAddress().port
);
// listen for the number of websocket clients and create or dispose the serial connection
this.onWSClientsNumberChanged =
this.webSocketService.onClientsNumberChanged(async () => {
await this.connectSerialIfRequired();
});
}
public async clientsAttached(): Promise<number> {
return this.webSocketService.getConnectedClientsNumber.bind(
this.webSocketService
)();
}
public async connectSerialIfRequired(): Promise<void> {
if (this.uploadInProgress) return;
const clients = await this.clientsAttached();
clients > 0 ? await this.connect() : await this.disconnect();
}
dispose(): void {
this.logger.info('>>> Disposing serial service...');
if (this.serialConnection) {
this.disconnect();
}
this.logger.info('<<< Disposed serial service.');
this.theiaFEClient = undefined;
}
async setSerialConfig(config: SerialConfig): Promise<void> {
this.serialConfig = config;
await this.disconnect();
await this.connectSerialIfRequired();
}
async updateWsConfigParam(
config: Partial<SerialPlotter.Config>
): Promise<void> {
const msg: SerialPlotter.Protocol.Message = {
command: SerialPlotter.Protocol.Command.MIDDLEWARE_CONFIG_CHANGED,
data: config,
};
this.webSocketService.sendMessage(JSON.stringify(msg));
}
private async connect(): Promise<Status> {
if (!this.serialConfig) {
return Status.CONFIG_MISSING;
}
this.logger.info(
`>>> Creating serial connection for ${Board.toString(
this.serialConfig.board
)} on port ${this.serialConfig.port.address}...`
);
if (this.serialConnection) {
return Status.ALREADY_CONNECTED;
}
const client = await this.serialClientProvider.client();
if (!client) {
return Status.NOT_CONNECTED;
}
if (client instanceof Error) {
return { message: client.message };
}
const duplex = client.streamingOpen();
this.serialConnection = { duplex, config: this.serialConfig };
const serialConfig = this.serialConfig;
duplex.on(
'error',
((error: Error) => {
const serialError = ErrorWithCode.toSerialError(error, serialConfig);
if (serialError.code !== SerialError.ErrorCodes.CLIENT_CANCEL) {
this.disconnect(serialError).then(() => {
if (this.theiaFEClient) {
this.theiaFEClient.notifyError(serialError);
}
});
}
if (serialError.code === undefined) {
// Log the original, unexpected error.
this.logger.error(error);
}
}).bind(this)
);
this.updateWsConfigParam({ connected: !!this.serialConnection });
const flushMessagesToFrontend = () => {
if (this.messages.length) {
this.webSocketService.sendMessage(JSON.stringify(this.messages));
this.messages = [];
}
};
this.onMessageReceived = this.webSocketService.onMessageReceived(
(msg: string) => {
try {
const message: SerialPlotter.Protocol.Message = JSON.parse(msg);
switch (message.command) {
case SerialPlotter.Protocol.Command.PLOTTER_SEND_MESSAGE:
this.sendMessageToSerial(message.data);
break;
case SerialPlotter.Protocol.Command.PLOTTER_SET_BAUDRATE:
this.theiaFEClient?.notifyBaudRateChanged(
parseInt(message.data, 10) as SerialConfig.BaudRate
);
break;
case SerialPlotter.Protocol.Command.PLOTTER_SET_LINE_ENDING:
this.theiaFEClient?.notifyLineEndingChanged(message.data);
break;
case SerialPlotter.Protocol.Command.PLOTTER_SET_INTERPOLATE:
this.theiaFEClient?.notifyInterpolateChanged(message.data);
break;
default:
break;
}
} catch (error) { }
}
);
// empty the queue every 32ms (~30fps)
this.flushMessagesInterval = setInterval(flushMessagesToFrontend, 32);
duplex.on(
'data',
((resp: StreamingOpenResponse) => {
const raw = resp.getData();
const message =
typeof raw === 'string' ? raw : new TextDecoder('utf8').decode(raw);
// split the message if it contains more lines
const messages = stringToArray(message);
this.messages.push(...messages);
}).bind(this)
);
const { type, port } = this.serialConfig;
const req = new StreamingOpenRequest();
const monitorConfig = new GrpcMonitorConfig();
monitorConfig.setType(this.mapType(type));
monitorConfig.setTarget(port.address);
if (this.serialConfig.baudRate !== undefined) {
monitorConfig.setAdditionalConfig(
Struct.fromJavaScript({ BaudRate: this.serialConfig.baudRate })
);
}
req.setConfig(monitorConfig);
if (!this.serialConnection) {
return await this.disconnect();
}
const writeTimeout = new Promise<Status>((resolve) => {
setTimeout(async () => {
resolve(Status.NOT_CONNECTED);
}, 1000);
});
const writePromise = (serialConnection: any) => {
return new Promise<Status>((resolve) => {
serialConnection.duplex.write(req, () => {
const boardName = this.serialConfig?.board
? Board.toString(this.serialConfig.board, {
useFqbn: false,
})
: 'unknown board';
const portName = this.serialConfig?.port
? this.serialConfig.port.address
: 'unknown port';
this.logger.info(
`<<< Serial connection created for ${boardName} on port ${portName}.`
);
resolve(Status.OK);
});
});
};
const status = await Promise.race([
writeTimeout,
writePromise(this.serialConnection),
]);
if (status === Status.NOT_CONNECTED) {
this.disconnect();
}
return status;
}
public async disconnect(reason?: SerialError): Promise<Status> {
return new Promise<Status>((resolve) => {
try {
if (this.onMessageReceived) {
this.onMessageReceived.dispose();
this.onMessageReceived = null;
}
if (this.flushMessagesInterval) {
clearInterval(this.flushMessagesInterval);
this.flushMessagesInterval = null;
}
if (
!this.serialConnection &&
reason &&
reason.code === SerialError.ErrorCodes.CLIENT_CANCEL
) {
resolve(Status.OK);
return;
}
this.logger.info('>>> Disposing serial connection...');
if (!this.serialConnection) {
this.logger.warn('<<< Not connected. Nothing to dispose.');
resolve(Status.NOT_CONNECTED);
return;
}
const { duplex, config } = this.serialConnection;
this.logger.info(
`<<< Disposed serial connection for ${Board.toString(config.board, {
useFqbn: false,
})} on port ${config.port.address}.`
);
duplex.cancel();
} finally {
this.serialConnection = undefined;
this.updateWsConfigParam({ connected: !!this.serialConnection });
this.messages.length = 0;
setTimeout(() => {
resolve(Status.OK);
}, 200);
}
});
}
async sendMessageToSerial(message: string): Promise<Status> {
if (!this.serialConnection) {
return Status.NOT_CONNECTED;
}
const req = new StreamingOpenRequest();
req.setData(new TextEncoder().encode(message));
return new Promise<Status>((resolve) => {
if (this.serialConnection) {
this.serialConnection.duplex.write(req, () => {
resolve(Status.OK);
});
return;
}
this.disconnect().then(() => resolve(Status.NOT_CONNECTED));
});
}
protected mapType(
type?: SerialConfig.ConnectionType
): GrpcMonitorConfig.TargetType {
switch (type) {
case SerialConfig.ConnectionType.SERIAL:
return GrpcMonitorConfig.TargetType.TARGET_TYPE_SERIAL;
default:
return GrpcMonitorConfig.TargetType.TARGET_TYPE_SERIAL;
}
}
}
// converts 'ab\nc\nd' => [ab\n,c\n,d]
function stringToArray(string: string, separator = '\n') {
const retArray: string[] = [];
let prevChar = separator;
for (let i = 0; i < string.length; i++) {
const currChar = string[i];
if (prevChar === separator) {
retArray.push(currChar);
} else {
const lastWord = retArray[retArray.length - 1];
retArray[retArray.length - 1] = lastWord + currChar;
}
prevChar = currChar;
}
return retArray;
}

View File

@@ -30,10 +30,11 @@ const WIN32_DRIVE_REGEXP = /^[a-zA-Z]:\\/;
const prefix = '.arduinoIDE-unsaved';
@injectable()
export class SketchesServiceImpl
extends CoreClientAware
implements SketchesService
{
export class SketchesServiceImpl extends CoreClientAware
implements SketchesService {
private sketchSuffixIndex = 1;
private lastSketchBaseName: string;
@inject(ConfigService)
protected readonly configService: ConfigService;
@@ -303,22 +304,31 @@ export class SketchesServiceImpl
monthNames[today.getMonth()]
}${today.getDate()}`;
const config = await this.configService.getConfiguration();
const user = FileUri.fsPath(config.sketchDirUri);
const sketchbookPath = FileUri.fsPath(config.sketchDirUri);
let sketchName: string | undefined;
for (let i = 97; i < 97 + 26; i++) {
const sketchNameCandidate = `${sketchBaseName}${String.fromCharCode(i)}`;
// Note: we check the future destination folder (`directories.user`) for name collision and not the temp folder!
if (await promisify(fs.exists)(path.join(user, sketchNameCandidate))) {
continue;
}
sketchName = sketchNameCandidate;
break;
// If it's another day, reset the count of sketches created today
if (this.lastSketchBaseName !== sketchBaseName) this.sketchSuffixIndex = 1;
let nameFound = false;
while (!nameFound) {
const sketchNameCandidate = `${sketchBaseName}${sketchIndexToLetters(
this.sketchSuffixIndex++
)}`;
// Note: we check the future destination folder (`directories.user`) for name collision and not the temp folder!
const sketchExists = await promisify(fs.exists)(
path.join(sketchbookPath, sketchNameCandidate)
);
if (!sketchExists) {
nameFound = true;
sketchName = sketchNameCandidate;
}
}
if (!sketchName) {
throw new Error('Cannot create a unique sketch name');
}
this.lastSketchBaseName = sketchBaseName;
const sketchDir = path.join(parentPath, sketchName);
const sketchFile = path.join(sketchDir, `${sketchName}.ino`);
@@ -507,3 +517,23 @@ interface SketchContainerWithDetails extends SketchContainer {
readonly children: SketchContainerWithDetails[];
readonly sketches: SketchWithDetails[];
}
/*
* When a new sketch is created, add a suffix to distinguish it
* from other new sketches I created today.
* If 'sketch_jul8a' is already used, go with 'sketch_jul8b'.
* If 'sketch_jul8b' already used, go with 'sketch_jul8c'.
* When it reacheas 'sketch_jul8z', go with 'sketch_jul8aa',
* and so on.
*/
function sketchIndexToLetters(num: number): string {
let out = '';
let pow;
do {
pow = Math.floor(num / 26);
const mod = num % 26;
out = (mod ? String.fromCharCode(96 + mod) : (--pow, 'z')) + out;
num = pow;
} while (pow > 0);
return out;
}

View File

@@ -1,10 +1,10 @@
import { Emitter } from '@theia/core';
import { injectable } from 'inversify';
import { injectable } from '@theia/core/shared/inversify';
import * as WebSocket from 'ws';
import { WebSocketService } from './web-socket-service';
import { WebSocketProvider } from './web-socket-provider';
@injectable()
export default class WebSocketServiceImpl implements WebSocketService {
export default class WebSocketProviderImpl implements WebSocketProvider {
protected wsClients: WebSocket[];
protected server: WebSocket.Server;

View File

@@ -1,8 +1,8 @@
import { Event } from '@theia/core/lib/common/event';
import * as WebSocket from 'ws';
export const WebSocketService = Symbol('WebSocketService');
export interface WebSocketService {
export const WebSocketProvider = Symbol('WebSocketProvider');
export interface WebSocketProvider {
getAddress(): WebSocket.AddressInfo;
sendMessage(message: string): void;
onMessageReceived: Event<string>;

View File

@@ -1,22 +0,0 @@
import { SerialConfig } from '../../../common/protocol/serial-service';
import { aBoard, anotherBoard, anotherPort, aPort } from './boards';
export const aSerialConfig: SerialConfig = {
board: aBoard,
port: aPort,
baudRate: 9600,
};
export const anotherSerialConfig: SerialConfig = {
board: anotherBoard,
port: anotherPort,
baudRate: 9600,
};
export class WebSocketMock {
readonly url: string;
constructor(url: string) {
this.url = url;
}
close() {}
}

View File

@@ -0,0 +1,35 @@
import { expect } from 'chai';
import { AdditionalUrls } from '../../common/protocol';
describe('config-service', () => {
describe('additionalUrls', () => {
it('should consider additional URLs same as if they differ in case', () => {
expect(AdditionalUrls.sameAs(['aaaa'], ['AAAA'])).to.be.true;
});
it('should consider additional URLs same as if they have a different order', () => {
expect(AdditionalUrls.sameAs(['bbbb', 'aaaa'], ['aaaa', 'bbbb'])).to.be
.true;
});
it('should parse an empty string as an empty array', () => {
expect(AdditionalUrls.parse('', ',')).to.be.empty;
});
it('should parse a blank string as an empty array', () => {
expect(AdditionalUrls.parse(' ', ',')).to.be.empty;
});
it('should parse urls with commas', () => {
expect(AdditionalUrls.parse(' ,a , b , c, ', ',')).to.be.deep.equal([
'a',
'b',
'c',
]);
});
it("should parse urls with both '\\n' and '\\r\\n' line endings", () => {
expect(
AdditionalUrls.parse(
'a ' + '\r\n' + ' b ' + '\n' + ' c ' + '\r\n' + ' ' + '\n' + '',
'newline'
)
).to.be.deep.equal(['a', 'b', 'c']);
});
});
});

View File

@@ -1,167 +0,0 @@
import { SerialServiceImpl } from './../../node/serial/serial-service-impl';
import { IMock, It, Mock } from 'typemoq';
import { createSandbox } from 'sinon';
import * as sinonChai from 'sinon-chai';
import { expect, use } from 'chai';
use(sinonChai);
import { ILogger } from '@theia/core/lib/common/logger';
import { MonitorClientProvider } from '../../node/serial/monitor-client-provider';
import { WebSocketService } from '../../node/web-socket/web-socket-service';
import { MonitorServiceClient } from '../../node/cli-protocol/cc/arduino/cli/monitor/v1/monitor_grpc_pb';
import { Status } from '../../common/protocol';
describe('SerialServiceImpl', () => {
let subject: SerialServiceImpl;
let logger: IMock<ILogger>;
let serialClientProvider: IMock<MonitorClientProvider>;
let webSocketService: IMock<WebSocketService>;
beforeEach(() => {
logger = Mock.ofType<ILogger>();
logger.setup((b) => b.info(It.isAnyString()));
logger.setup((b) => b.warn(It.isAnyString()));
logger.setup((b) => b.error(It.isAnyString()));
serialClientProvider = Mock.ofType<MonitorClientProvider>();
webSocketService = Mock.ofType<WebSocketService>();
subject = new SerialServiceImpl(
logger.object,
serialClientProvider.object,
webSocketService.object
);
});
context('when a serial connection is requested', () => {
const sandbox = createSandbox();
beforeEach(() => {
subject.uploadInProgress = false;
sandbox.spy(subject, 'disconnect');
sandbox.spy(subject, 'updateWsConfigParam');
});
afterEach(function () {
sandbox.restore();
});
context('and an upload is in progress', () => {
beforeEach(async () => {
subject.uploadInProgress = true;
});
it('should not change the connection status', async () => {
await subject.connectSerialIfRequired();
expect(subject.disconnect).to.have.callCount(0);
});
});
context('and there is no upload in progress', () => {
beforeEach(async () => {
subject.uploadInProgress = false;
});
context('and there are 0 attached ws clients', () => {
it('should disconnect', async () => {
await subject.connectSerialIfRequired();
expect(subject.disconnect).to.have.been.calledOnce;
});
});
context('and there are > 0 attached ws clients', () => {
beforeEach(() => {
webSocketService
.setup((b) => b.getConnectedClientsNumber())
.returns(() => 1);
});
it('should not call the disconenct', async () => {
await subject.connectSerialIfRequired();
expect(subject.disconnect).to.have.callCount(0);
});
});
});
});
context('when a disconnection is requested', () => {
const sandbox = createSandbox();
beforeEach(() => { });
afterEach(function () {
sandbox.restore();
});
context('and a serialConnection is not set', () => {
it('should return a NOT_CONNECTED status', async () => {
const status = await subject.disconnect();
expect(status).to.be.equal(Status.NOT_CONNECTED);
});
});
context('and a serialConnection is set', async () => {
beforeEach(async () => {
sandbox.spy(subject, 'updateWsConfigParam');
await subject.disconnect();
});
it('should dispose the serialConnection', async () => {
const serialConnectionOpen = await subject.isSerialPortOpen();
expect(serialConnectionOpen).to.be.false;
});
it('should call updateWsConfigParam with disconnected status', async () => {
expect(subject.updateWsConfigParam).to.be.calledWith({
connected: false,
});
});
});
});
context('when a new config is passed in', () => {
const sandbox = createSandbox();
beforeEach(async () => {
subject.uploadInProgress = false;
webSocketService
.setup((b) => b.getConnectedClientsNumber())
.returns(() => 1);
serialClientProvider
.setup((b) => b.client())
.returns(async () => {
return {
streamingOpen: () => {
return {
on: (str: string, cb: any) => { },
write: (chunk: any, cb: any) => {
cb();
},
cancel: () => { },
};
},
} as MonitorServiceClient;
});
sandbox.spy(subject, 'disconnect');
await subject.setSerialConfig({
board: { name: 'test' },
port: { id: 'test|test', address: 'test', addressLabel: 'test', protocol: 'test', protocolLabel: 'test' },
});
});
afterEach(function () {
sandbox.restore();
subject.dispose();
});
it('should disconnect from previous connection', async () => {
expect(subject.disconnect).to.be.called;
});
it('should create the serialConnection', async () => {
const serialConnectionOpen = await subject.isSerialPortOpen();
expect(serialConnectionOpen).to.be.true;
});
});
});

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "browser-app",
"version": "2.0.0-rc4",
"version": "2.0.0-rc6",
"license": "AGPL-3.0-or-later",
"dependencies": {
"@theia/core": "1.22.1",
@@ -20,7 +20,7 @@
"@theia/process": "1.22.1",
"@theia/terminal": "1.22.1",
"@theia/workspace": "1.22.1",
"arduino-ide-extension": "2.0.0-rc4"
"arduino-ide-extension": "2.0.0-rc6"
},
"devDependencies": {
"@theia/cli": "1.22.1"
@@ -60,4 +60,4 @@
}
}
}
}
}

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "electron-app",
"version": "2.0.0-rc4",
"version": "2.0.0-rc6",
"license": "AGPL-3.0-or-later",
"main": "src-gen/frontend/electron-main.js",
"dependencies": {
@@ -22,7 +22,7 @@
"@theia/process": "1.22.1",
"@theia/terminal": "1.22.1",
"@theia/workspace": "1.22.1",
"arduino-ide-extension": "2.0.0-rc4"
"arduino-ide-extension": "2.0.0-rc6"
},
"devDependencies": {
"@theia/cli": "1.22.1",
@@ -64,4 +64,4 @@
}
}
}
}
}

View File

@@ -1,5 +1,3 @@
Terms of Service
By downloading the software from this page, you agree to the specified terms.
The Arduino software is provided to you "as is" and we make no express or implied warranties whatsoever with respect to its functionality, operability, or use, including, without limitation, any implied warranties of merchantability, fitness for a particular purpose, or infringement. We expressly disclaim any liability whatsoever for any direct, indirect, consequential, incidental or special damages, including, without limitation, lost revenues, lost profits, losses resulting from business interruption or loss of data, regardless of the form of action or legal theory under which the liability may be asserted, even if advised of the possibility or likelihood of such damages.

View File

@@ -20,8 +20,7 @@
"shelljs": "^0.8.3"
},
"scripts": {
"build": "yarn download:plugins && theia build --mode development && yarn patch",
"build:publish": "yarn download:plugins && theia build --mode production && yarn patch",
"build": "yarn download:plugins && theia build --mode production && yarn patch",
"rebuild": "yarn theia rebuild:electron",
"package": "cross-env DEBUG=* && electron-builder --publish=never",
"package:publish": "cross-env DEBUG=* && electron-builder --publish=always",
@@ -107,6 +106,9 @@
"category": "Development",
"icon": "resources/icons"
},
"msi": {
"runAfterFinish": false
},
"nsis": {
"oneClick": false,
"installerHeaderIcon": "resources/icon.ico",
@@ -149,6 +151,12 @@
"vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/vscode-arduino-tools-0.0.2-beta.2.vsix",
"vscode-builtin-json": "https://open-vsx.org/api/vscode/json/1.46.1/file/vscode.json-1.46.1.vsix",
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix",
"cortex-debug": "https://open-vsx.org/api/marus25/cortex-debug/0.3.10/file/marus25.cortex-debug-0.3.10.vsix"
"cortex-debug": "https://open-vsx.org/api/marus25/cortex-debug/0.3.10/file/marus25.cortex-debug-0.3.10.vsix",
"vscode-language-pack-nl": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-nl/1.48.3/file/MS-CEINTL.vscode-language-pack-nl-1.48.3.vsix",
"vscode-language-pack-fr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-fr/1.53.2/file/MS-CEINTL.vscode-language-pack-fr-1.53.2.vsix",
"vscode-language-pack-zh-hans": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.53.2/file/MS-CEINTL.vscode-language-pack-zh-hans-1.53.2.vsix",
"vscode-language-pack-de": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-de/1.53.2/file/MS-CEINTL.vscode-language-pack-de-1.53.2.vsix",
"vscode-language-pack-ja":"https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ja/1.53.2/file/MS-CEINTL.vscode-language-pack-ja-1.53.2.vsix",
"vscode-language-pack-tr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-tr/1.53.2/file/MS-CEINTL.vscode-language-pack-tr-1.53.2.vsix"
}
}

View File

@@ -74,6 +74,7 @@
'yarn.lock',
'package.json',
'lerna.json',
'i18n'
]) {
cp('-rf', path(rootPath, name), path('..', workingCopy));
}
@@ -227,8 +228,7 @@ ${fs.readFileSync(path('..', 'build', 'package.json')).toString()}
'Installing dependencies'
);
exec(
`yarn --network-timeout 1000000 --cwd ${path('..', 'build')} build${isElectronPublish ? ':publish' : ''
}`,
`yarn --network-timeout 1000000 --cwd ${path('..', 'build')} build`,
`Building the ${productName} application`
);
exec(
@@ -488,7 +488,6 @@ ${fs.readFileSync(path('..', 'build', 'package.json')).toString()}
)}.`
);
shell.exit(1);
process.exit(1);
}
if (expectedVersion) {
if (!versions.has(expectedVersion)) {
@@ -497,7 +496,6 @@ ${fs.readFileSync(path('..', 'build', 'package.json')).toString()}
}'.`
);
shell.exit(1);
process.exit(1);
}
}
}

350
i18n/af.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "Dit lyk of jy van af lyn is. Sonder 'n internetverbinding kan die Arduino CLI moontlik nie die nodige hulpbronne aflaai nie en kan dit wanfunksionering veroorsaak. Koppel asseblief aan die internet en herbegin die toepassing.",
"noBoardSelected": "Geen bord geselekteer",
"selectedOn": "aan {0}",
"notConnected": "[nie gekoppel]",
"serialMonitor": "Seriaal Monitor",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Later",
"selectBoard": "Kies Bord",
"unknown": "Onbekend",
"processing": "Verwerking",
"saveChangesToSketch": "Wil jy veranderinge aan hierdie skets stoor voordat jy toemaak?",
"loseChanges": "As jy nie stoor nie, sal jou veranderinge verlore gaan."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Volgende Weergawe",
"downloadButton": "Aflaai",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Skets",
"tools": "Gereedskap"
},
"debug": {
"optimizeForDebugging": "Geoptimaliseerd vir ontfouting",
"debugWithMessage": "Ontfouting {0}",
"noPlatformInstalledFor": "Platform is nie geïnstalleer vir ' {0} '",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "Die OAuth2 domein.",
"auth.audience": "Die OAuth2 gehoor.",
"auth.registerUri": "Die URI wat gebruik word vir nuwe registrasies.",
"network": "Netwerk",
"sketchbook.location": "Sketsboek ligging",
"browse": "Snuffel",
"files.inside.sketches": "Toon lêers binne in Sketse aan",
"editorFontSize": "Editor lettertipe grootte",
"interfaceScale": "Koppelvlak skaal",
"showVerbose": "Wys ontfoutings uitset tydens",
"compilerWarnings": "Compiler warnings",
"automatic": "Automaties",
"compile": "saamstel",
"upload": "oplaai",
"verifyAfterUpload": "Verifieer kode na oplaai ",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Kies",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
},
"cloud": {
"signIn": "TEKEN AAN",
"signOut": "Teken Uit",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Skakel:",
"embed": "Embed:",
"cloudSketchbook": "Wolk Skets",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Opsies...",
"share": "Deel...",
"remote": "Remote",
"emptySketchbook": "Jou Sketsboek is leeg",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Trek",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Stoot",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Aflyn",
"profilePicture": "Profiel foto"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programeerder",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Herselekteer later",
"noneSelected": "Geen bord gekies nie.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Kies ander bord en poort...",
"boardListItem": "{0} by {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Board Info",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Vervang",
"fileAdded": "Een lêer by skets gevoeg"
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"sketch": {
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "Skets",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"commentUncomment": "Comment/Uncomment",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"decreaseFontSize": "Decrease Font Size",
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} by {1}",
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Kies Bord",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
"dontAskAgain": "Don't ask again"
},
"userFields": {
"cancel": "Cancel",
"upload": "Upload"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Tydstempel",
"noLineEndings": "No Line Ending",
"newLine": "Nuwe lyn",
"carriageReturn": "Wagterugkeer",
"newLineCarriageReturn": "Beide NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Konneksie het gevaal. Seriaal poort is besig: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Weergawe {0}",
"moreInfo": "Meer inligting",
"install": "INSTALLEER",
"filterSearch": "Filter your search..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Enige ongestoorde veranderinge sal nie gestoor word nie."
},
"compile": {
"error": "Compilation error: {0}"
},
"upload": {
"error": "{0} error: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Aflyn",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
},
"debug": {
"start": "Begin...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
},
"workspace": {
"fileNewName": "Naam vir nuwe lêer",
"invalidFilename": "Ongeldige lêernaam",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "Nuwe naam vir lêer",
"deleteCurrentSketch": "Wil jy die huidige skets uitvee?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GAAN NA WOLK"
}
}

View File

@@ -1,314 +1,330 @@
{
"arduino": {
"common": {
"offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.",
"noBoardSelected": "No board selected",
"selectedOn": "on {0}",
"notConnected": "[not connected]",
"offlineIndicator": "انت غير متصل بالانترنت على الارجح , بدون الاتصال بالانترنت لن تستطيع واجهة سطر الاوامر الخاصة بالاردوينو \"Arduino CLI\" تحميل الموارد المطلوبة و من الممكن ان تسبب باخطاء , الرجاء الاتصال بالانترنت و اعادة تشغيل البرنامج",
"noBoardSelected": "لم يتم اختيار اي لوحة",
"selectedOn": "{0} شغّل",
"notConnected": "[غير متصل]",
"serialMonitor": "مراقب المنفذ التسلسلي \"سيريال بورت\"\n ",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Later",
"selectBoard": "Select Board",
"unknown": "Unknown",
"processing": "Processing",
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"loseChanges": "If you don't save, your changes will be lost."
"oldFormat": "ال '{0}' ما زالت تستخدم صيغة `.pde` القديمة . هل تريد الانتقال الى صيغة `.ino`  الجديدة ؟",
"later": "لاحقا",
"selectBoard": "اختر لوحة",
"unknown": "غير معروف",
"processing": "تتم المعالجة",
"saveChangesToSketch": "هل تريد حفظ التغييرات على هذا الملف قبل الخروج ؟",
"loseChanges": "اذا لم تقم بالحفظ ستزول كل التغييرات التي قمت بها "
},
"ide-updater": {
"errorCheckingForUpdates": "حدث خطأ اثناء البحث عن تحديثات للـ Arduino IDE \n{0}",
"notNowButton": "ليس الان",
"versionDownloaded": "لقد تم تحميل {0} Arduino IDE",
"closeToInstallNotice": "اغلق البرمجية و حّدث الجهاز الخاص بك ",
"closeAndInstallButton": "قم بالاغلاق و التحديث",
"downloadingNotice": "يتم تحميل اخر نسخة من Arduino IDE",
"updateAvailable": "يوجد تحديث",
"newVersionAvailable": "نسخة جديدة من {0} Arduino IDE قابلة للتحميل",
"skipVersionButton": "تخطى النسخة",
"downloadButton": "حمّل",
"goToDownloadPage": "يوجد تحديث للArduino IDE . لكننا غير قادرين على تنزيله و تثبيته تلقائيا . الرجاء الذهاب الى صفحة التحميلات و تنزيل احدث نسخة من هناك.",
"goToDownloadButton": "اذهب الى التحميلات",
"ideUpdaterDialog": "التحديثات للبرنامج",
"noUpdatesAvailable": "لا يوجد تحديثات اخيرة متوافرة لل Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"sketch": "مشروع",
"tools": "ادوات"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
"optimizeForDebugging": "التحسين من اجل التصحيح البرمجي",
"debugWithMessage": "تصحيح برمجي - {0}",
"noPlatformInstalledFor": "المنصة غير مثبتة ل '{0}'",
"debuggingNotSupported": "'{0}' لا يقبل التصحيح البرمجي"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"language.log": "\"True\" اذا كان مخدم اللغات الخاص بArduino يستطيع توليد سجلات الى ملف المشروع , و الا \"False\", و هي كذلك بشكل افتراضي.",
"compile.verbose": "True لخرج الترجمة المطول . False افتراضيا",
"compile.warnings": "يخبر gcc اي مستوى انذار سيتم استخدامه , قيمته 'None' افتراضيا",
"upload.verbose": "True لخرج الرفع المطول . False افتراضيا",
"window.autoScale": "True اذا كان مقياس الواجهة يتزامن تلقائيا مع حجم الخط ",
"window.zoomLevel": "تعديل درجة التكبير للنافذة . الحجم الاصلي 0 و كل زيادة فوقه (مثلا 1) او اقل (مثلا -1) تمثل تكبير بدرجة 20% اكبر او اصغر . تستطيع ايضا ادخال فواصل لتعديل درجة التكبير بدقة اكبر",
"ide.updateChannel": "انشر القناة للحصول على تحديثات من . 'stable' هو النسخة الثابتة .'nightly' هي اخر نسخة تطويرية ",
"board.certificates": "قائمة الشهادات التي يمكن رفعها الى اللوحات",
"sketchbook.showAllFiles": "True لعرض كل مجلدات مشاريع داخل المشروع . False افتراضيا",
"cloud.enabled": "True اذا كانت مهام المزامنة مفعلة . True افتراضيا",
"cloud.pull.warn": "True اذا كان يجب تحذير المستخدمين قبل سحب مشروع من السحابة . True افتراضيا",
"cloud.push.warn": "True اذا كان يجب تحذير المستخدمين قبل دفع مشروع الى السحابة . True افتراضيا",
"cloud.pushpublic.warn": "True اذا كان يجب تحذير المستخدمين قبل دفع مشروع عام الى السحابة . True افتراضيا",
"cloud.sketchSyncEnpoint": "الوجهة المستخدمة لدفع و سحب المشاريع من الخلفية . تشير افتراضيا الى Arduino Cloud API.",
"auth.clientID": "ID الخاص بعميل OAuth2",
"auth.domain": "نطاق OAuth2",
"auth.audience": "جمهور OAuth2",
"auth.registerUri": "عنوان URL المستخدم لتسجيل مستخدم جديد",
"network": "شبكة",
"sketchbook.location": "Sketchbook location",
"sketchbook.location": "موقع ملف المشاريع",
"browse": "استعرض",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"files.inside.sketches": "اظهر الملفات داخل المشاريع",
"editorFontSize": "حجم خط المحرّر",
"interfaceScale": "مقياس الواجهة",
"showVerbose": "اظهر خرج مطوّل خلال",
"compilerWarnings": "تحذيرات المترجم",
"automatic": "تلقائي",
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "افحص التحديثات عند التشغيل",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "تدبير عناوين اللوحات الإضافية",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
"compile": "الترجمة",
"upload": "الرفع",
"verifyAfterUpload": "التحقق من الكود بعد الرفع",
"editorQuickSuggestions": "اقتراحات المحرّر السريعة",
"additionalManagerURLs": "مدير اللوحات الاضافية",
"noProxy": "لا يوجد وكيل",
"manualProxy": "اعدادات الوكيل يدوياً",
"newSketchbookLocation": "اختر مكان المشروع الجديد",
"choose": "اختر",
"enterAdditionalURLs": "قم بادخال عناوين URL الاضافية , واحد لكل صف",
"unofficialBoardSupport": "انقر لعرض قائمة عناوين URL للوحات المدعومة بشكل غير رسمي",
"invalid.sketchbook.location": "موقع ملف المشروع غير صالح : {0}",
"invalid.editorFontSize": "حجم خط المحرّر غير صالح . يجب ان يكون عدد موجب",
"invalid.theme": "سمة غير صالحة"
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Options...",
"share": "Share...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"profilePicture": "Profile picture"
"signIn": "تسجيل الدخول",
"signOut": "تسجيل الخروج",
"chooseSketchVisibility": "اختر خصوصية مشروعك:",
"privateVisibility": "خاص . وحدك فقط من يستطيع رؤية المشروع",
"publicVisibility": "عام. اي شخص معه الرابط يستطيع رؤية المشروع",
"link": "الرابط:",
"embed": "تضمين:",
"cloudSketchbook": "مشاريع على السحابة",
"shareSketch": "مشاركة المشروع",
"showHideRemoveSketchbook": "اظهار/اخفاء المشاريع عن بعد",
"pullSketch": "سحب المشروع",
"openInCloudEditor": "الفتح في المحرّر السحابي",
"options": "اعدادات...",
"share": "مشاركة...",
"remote": "عن بعد",
"emptySketchbook": "ملف المشاريع الخاص بك فارغ",
"visitArduinoCloud": "قم بزيارة Arduino Cloud من اجل انشاء ملف مشاريع على السحابة",
"signInToCloud": "تسجيل الدخول الى Arduino Cloud",
"syncEditSketches": "المزامنة و التعديل على مشاريعك في Arduino Cloud",
"learnMore": "تعرف على المزيد",
"continue": "استئناف",
"pushSketch": "دفع المشروع",
"pushSketchMsg": "هذا مشروع عام . قبل دفعه , تاكد من عدم وجود اي معلومات حساسة داخل ملف arduino_secrets.h . تستطيع جعل المشروع خاصا من لوحة المشاركة",
"pull": "اسحب",
"pullSketchMsg": "سحب هذا المشروع من Cloud سيقوم بالكتابة فوق النسخة المحلية . هل تريد الاكمال ؟",
"donePulling": "تم السحب بنجاح '{0}'",
"notYetPulled": "تعذر الدفع الى Cloud . انها لم تسحب الى الان",
"push": "ادفع",
"pullFirst": "عليك السحب اولا لكي تصبح قادرا على الدفع الى السحابة",
"donePushing": "تم الدفع بنجاح '{0}'",
"connected": "متصل",
"offline": "غير متصل",
"profilePicture": "صورة الملف الشخصي"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"installManually": "ثبّت يدويا",
"installNow": "نواة \"{0} {1}\" يجب تثبيتها للوحة \"{2}\" التي تم اختيارها . هل تريد تثبيتها الان ؟",
"configDialogTitle": "اختر لوحات اخرى و المنفذ",
"configDialog1": "اختر لوحة و منفذ معا اذا اردت ان ترفع السكتش",
"configDialog2": "اذا قمت باختيار لوحة فقط ستسطيع ان تترجم لكن بدون ان ترفع المشروع",
"pleasePickBoard": "من فضلك اختر لوحة متصلة على المنفذ الذي اخترته",
"showAllAvailablePorts": "يظهر كل المنافذ المتاحة عند تفعيله",
"programmer": "المبرمجة",
"succesfullyInstalledPlatform": "تم تثبيت المنصة {0}:{1} بنجاح",
"succesfullyUninstalledPlatform": "تم الغاء تثبيت المنصة {0}:{1} بنجاح",
"couldNotFindPreviouslySelected": "تعذر ايجاد اللوحة '{0}' المختارة مسبقا في المنصة المثبتة '{1}' . الرجاء اعادة اختيار اللوحة التي تريد استعمالها يدويا . هل تريد باعادة الاختيار الان؟",
"reselectLater": "اعد الاختيار لاحقا",
"noneSelected": "لم يتم اختيار اي لوحة",
"noPortsSelected": "لا يوجد اية منافذ متاحة للوحة '{0}'",
"noFQBN": "FQBN غير متاح للوحة المختارة \"{0}\" . هل قمت بتثبيت النواة المعنية ؟",
"openBoardsConfig": "قم باختيار لوحة و منفذ مختلفين",
"boardListItem": "{0} في {1}",
"selectBoardForInfo": "الرجاء اختيار لوحة من احل الحصول على معلومات اللوحة",
"platformMissing": "المنصة للّوحة المختارة '{0}' غير مثبتة",
"selectPortForInfo": "الرجاء اختيار منفذ من اجل الحصول على معلومات اللوحة",
"boardInfo": "معلومات اللوحة",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
"board": "اللوحة {0}",
"port": "المنفذ {0}",
"getBoardInfo": "الحصول على معلومات اللوحة",
"inSketchbook": "(داخل ملف المشاريع)"
},
"boardsManager": "مدير اللوحة",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"label": "حول {0}",
"detail": "النسخة : {0}\nالتاريخ : {1} {2} \nنسخة موجه سطر الاوامر CLI {3}{4} [{5}] \n{6}"
},
"contributions": {
"addFile": "اضف ملف...",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
"replaceTitle": "استبدال",
"fileAdded": "تمت اضافة ملف واحد الى المشروع"
},
"replaceMsg": "Replace the existing version of {0}?",
"replaceMsg": "هل تريد استبدال النسخة الحالية من {0} ؟",
"library": {
"addZip": "اضف مكتبة .ZIP ...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
"zipLibrary": "المكتبة",
"overwriteExistingLibrary": "هل تريد الكتابة فوق المكتبة الحالية ؟",
"successfullyInstalledZipLibrary": "تم تثبيت المكتبة من الارشيف {0} بنجاح",
"namedLibraryAlreadyExists": "يوجد ملف مكتبة باسم {0} مسبقا . هل تريد الكتابة فوقه ؟",
"libraryAlreadyExists": "المكتبة موجودة مسبقا . هل تريد الكتابة فوقها ؟",
"include": "ضمّن مكتبة",
"manageLibraries": "ادارة المكتبات",
"arduinoLibraries": "مكتبات Arduino",
"contributedLibraries": "المكتبات التي سوهم بها",
"title": "مدير المكتبات",
"needsOneDependency": "المكتبة <b>{0}:{1}</b> تحتاج الى تبعات اخرى غير مثبتة حاليا",
"needsMultipleDependencies": "المكتبة <b>{0}:{1}</b> تحتاج الى تبعات اخرى غير مثبتة حاليا",
"installOneMissingDependency": "هل تريد تثبيت التبعية المفقودة ؟",
"installMissingDependencies": "هل تريد تثبيت التبعيات المفقودة؟",
"dependenciesForLibrary": "تبعيات المكتبة {0}:{1}",
"installAll": "تثبيت الكل",
"installOnly": "تثبيت {0} فقط",
"installedSuccessfully": "تم تثبيت المكتبة {0}:{1} بنجاح",
"uninstalledSuccessfully": "تم الغاء تثبيت المكتبة {0}:{1} بنجاح"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"selectZip": "اختر ملف .zip يحوي المكتبة التي تريد اضافتها",
"sketch": {
"archiveSketch": "ارشفة الشيفرة البرمجية",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"saveSketchAs": "حفظ ملف المشروع باسم ...",
"createdArchive": "تم انشاء ارشيف '{0}'",
"new": "جديد",
"openRecent": "فُتِحَ مؤخرا ",
"showFolder": "اعرض ملف المشروع",
"sketch": "مشروع",
"moving": "يتم النقل",
"movingMsg": "الملف \"{0}\" يجب ان يكون داخل مجلد مشروع مسمى \"{1}\"\nهل انشئ المجلد , ثم انقل الملف و اكمل ؟",
"cantOpen": "المجلد المسمى \"{0}\" موجود مسبقا. لا يمكن فتح الشيفرة البرمجية",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"saveFolderAs": "احفظ مجلد المشروع باسم",
"sketchbook": "مجلد المشاريع",
"upload": "رفع",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
"uploadUsingProgrammer": "الرفع باستخدام مبرمجة",
"userFieldsNotFoundError": "تعذر ايجاد حقول المستخدم للوحة المتصلة",
"doneUploading": "تم الرفع بنجاح.",
"configureAndUpload": "تهيئة و رفع",
"verifyOrCompile": "تحقق/ترجم",
"exportBinary": "تصدير الملف الثنائي المترجم",
"verify": "تحقق",
"doneCompiling": "تمت الترجمة بنجاح.",
"couldNotConnectToSerial": "لا يمكن الاتصال بالمنفذ التسلسلي {0}",
"openSketchInNewWindow": "فتح المشروع في نافذة جديدة",
"openFolder": "فتح المجلد",
"titleLocalSketchbook": "مجلد المشاريع المحلي",
"titleSketchbook": "مجلد المشاريع",
"close": "هل انت متاكد بانك تريد اغلاق المشروع ؟"
},
"bootloader": {
"burnBootloader": "ثبت محمل برنامج الإقلاع",
"doneBurningBootloader": "Done burning bootloader."
"doneBurningBootloader": "تم حرق محمل الاقلاع"
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"copyForForum": "النسخ من اجل المنتدى ",
"commentUncomment": "ملاحظة/ الغاء الملاحظة",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"increaseIndent": "زيادة مسافة البادئة",
"decreaseIndent": "تقليل مسافة البادئة",
"increaseFontSize": "تكبير حجم الخط",
"decreaseFontSize": "تصغير حجم الخط",
"autoFormat": "تنسيق تلقائي"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"menu": "أمثلة",
"couldNotInitializeExamples": "تعذرت تهيئة الامثلة المدمجة",
"builtInExamples": "الأمثلة المدمجة",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
"customLibrary": "امثلة من مكتبات مخصصة",
"for": "امثلة ل {0}",
"forAny": "أمثلة لأي لوحة"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"search": "البحث على Arduino.cc",
"keyword": "ادخل كلمة مفتاحية",
"gettingStarted": "البدء",
"environment": "البيئة",
"troubleshooting": "استكشاف الاخطاء و اصلاحها",
"reference": "مراجع",
"findInReference": "ايجاد في مرجع",
"faq": "اسئلة متكررة",
"visit": "زيارة Arduino.cc",
"privacyPolicy": "سياسة الخصوصية"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"uploadRootCertificates": "رفع شهادات SSL Root",
"openContext": "افتح المحتوى",
"remove": "حذف",
"upload": "رفع",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
"addURL": "اضف URL لجلب شهادات SSL",
"enterURL": "ادخل URL",
"selectCertificateToUpload": "1. اختر شهادة لرفعها",
"addNew": "اضافة جديد",
"selectDestinationBoardToUpload": "2. اختر وجهة اللوحة و ارفع الشهادة",
"uploadingCertificates": "جار رفع الشهادة",
"certificatesUploaded": "تم رفع الشهادات",
"uploadFailed": "فشل الرفع . الرجاء اعادة المحاولة لاحقا",
"selectBoard": "اختر لوحة ...",
"boardAtPort": "{0} في {1}",
"noSupportedBoardConnected": "لا يوجد اية لوحة مدعومة متصلة "
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"updater": "محدث البرامج الثابتة ل WiFi101 / WiFiNINA ",
"selectBoard": "اختر لوحة",
"checkUpdates": "التحقق من التحديثات",
"selectVersion": "اختر نسخة البرامج الثابتة",
"install": "تنصيب",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"failedInstall": "Installation failed. Please try again."
"overwriteSketch": "التثبيت سيكتب فوق المشروع على اللوحة",
"installingFirmware": "جار تثبيت البرامج الثابتة",
"successfullyInstalled": "تم تثبيت البرامج الثابتة بنجاح",
"failedInstall": "فشل التثبيت. الرجاء اعادة المحاولة لاحقا"
},
"dialog": {
"dontAskAgain": "Don't ask again"
"dontAskAgain": "لا تسأل مرة اخرى"
},
"userFields": {
"cancel": "Cancel",
"cancel": "الغاء",
"upload": "رفع"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"toggleTimestamp": "تبديل الطابع الزمني",
"autoscroll": "تمرير تلقائي",
"timestamp": "الطابع الزمني",
"noLineEndings": "نهاية السطر غير موجودة",
"newLine": "سطر جديد",
"carriageReturn": "اعادة الحمل",
"newLineCarriageReturn": "كلاهما NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"newLineCarriageReturn": " NL & CR معاً",
"notConnected": "غير متصل . اختر لوحة و منفذ للاتصال تلقائيا",
"message": "الرسالة ({0} + ادخل لارسال رسالة الى '{1}' على '{2}')",
"connectionBusy": "تعذر الاتصال . المنفذ التسلسلي مشغول : {0}",
"disconnected": "انقطع اتصال {0} من {1}",
"unexpectedError": "خطأ غير متوقع . جار اعادة اتصال {0} على المنفذ {1}",
"failedReconnect": "فشل اعادة الاتصال بالمنفذ التسلسلي {0}بعد 10 محاولات متتالية . المنفذ التسلسلي{1} مشغول",
"reconnect": "جار اعادة اتصال {0} الى {1} خلال {2} ثانية"
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"uninstall": "الغاء التثبيت",
"uninstallMsg": "هل تريد الغاء تثبيت {0}؟",
"by": "بواسطة",
"version": "النسخة {0}",
"moreInfo": "More info",
"moreInfo": "عرض المزيد",
"install": "تنصيب",
"filterSearch": "ترشيح بحثك..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "تعذر حفظ المشروع . الرجاء نسخ عملك الغير محفوظ الى محرر النصوص المفضل لديك و اعادة تشغيل Arduino IDE",
"unsavedChanges": "اي تغييرات لم تحفظ لن يتم حفظها"
},
"compile": {
"error": "Compilation error: {0}"
"error": "خطا في الترجمة : {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "خطا {0} : {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
"error": "خطا اثناء حرق محمل الاقلاع : {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
"couldNotSave": "تعذر حفظ المشروع . الرجاء نسخ عملك الغير محفوظ الى محرر النصوص المفضل لديك و اعادة تشغيل Arduino IDE",
"offline": "غير متصل",
"daemonOffline": "CLI Daemon غير متصل",
"cannotConnectBackend": "تعذر الاتصال بالخلفية",
"cannotConnectDaemon": "تعذر الاتصال ب CLI daemon"
},
"debug": {
"start": "Start...",
"start": "البدء...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
@@ -316,19 +332,19 @@
"unsavedTitle": "Unsaved {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
"expand": "توسيع",
"collapse": "تقليص"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"invalidExtension": "\".{0}\" امتداد غير صالح",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"newFileName": "الاسم الجديد لملف",
"deleteCurrentSketch": "هل تريد حذف المشروع الحالي؟",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
"GoToCloud": "الانتقال الى السحابة"
}
}

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Искате ли да запазите промените в тази скица, преди да затворите?",
"loseChanges": "Ако не запазите, промените ви ще бъдат загубени."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Скица",
"tools": "Инструменти"
@@ -31,7 +47,7 @@
"upload.verbose": "True за подробен изход за качване. False по подразбиране.",
"window.autoScale": "True , ако потребителският интерфейс автоматично се мащабира с размера на шрифта.",
"window.zoomLevel": "Регулирайте нивото на увеличение на прозореца. Оригиналният размер е 0 и всяко увеличение над (напр. 1) или под (напр. -1) представлява увеличение с 20% по-голямо или по-малко. Можете също да въведете десетични знаци, за да регулирате нивото на увеличение по-финно.",
"ide.autoUpdate": "True, за да активирате автоматичните проверки за актуализация. IDE ще проверява за актуализации автоматично и периодично.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Списък със сертификати, които могат да бъдат качени на платката",
"sketchbook.showAllFiles": "True , за да се покажат всички файлове вътре в скицата. По подразбиране е false.",
"cloud.enabled": "True , ако функциите за синхронизиране на скицата са активирани. По подразбиране е true.",
@@ -55,7 +71,6 @@
"compile": "компилиране",
"upload": "качване",
"verifyAfterUpload": "Потвърдете кода след качване",
"checkForUpdates": "Проверете за актуализации при стартиране",
"editorQuickSuggestions": "Бързи предложения на редактора",
"additionalManagerURLs": "Допълнителни URL адреси на мениджър на платки",
"noProxy": "Без прокси",
@@ -108,7 +123,7 @@
"installNow": "Ядрото „{0} {1}“ трябва да бъде инсталирано за текущо избраната платка „{2}“. Искате ли да го инсталирате сега?",
"configDialogTitle": "Изберете друга платка и порт",
"configDialog1": "Изберете както платка, така и порт, ако искате да качите скица.",
"configDialog2": "Ако изберете само платка, ще можете само да компилирате, но не и да качвате скицата си.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Моля, изберете платка, свързана към порта, който сте избрали.",
"showAllAvailablePorts": "Показва всички налични портове, когато е активиран",
"programmer": "Програматор",
@@ -173,7 +188,7 @@
"showFolder": "Показване на папка за скици",
"sketch": "Скица",
"moving": "Преместване",
"movingMsg": "Файлът „{0}“ трябва да бъде в папка на скица, наречена „{1}.\nСъздай тази папка, премести файла и продължи?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "Папка с име „{0}“ вече съществува. Не може да се отвори скица.",
"saveFolderAs": "Запазете папката със скица като...",
"sketchbook": "Скицник",
@@ -223,7 +238,8 @@
"reference": "Референция",
"findInReference": "Намерете в Референцията",
"faq": "Често задавани въпроси",
"visit": "Посетете Arduino.cc"
"visit": "Посетете Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Качете SSL коренни сертификати",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "Няма свързана поддържана платка"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Обновяване на фърмуера",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Изберете платка",
"checkUpdates": "Проверете актуализации",
"selectVersion": "Изберете версия на фърмуера",
"install": "Инсталирай",
"overwriteSketch": "Инсталацията ще презапише скицата на платката.",
"installingFirmware": "Инсталиране на фърмуер.",
"successfullyInstalled": "Фърмуерът е инсталиран успешно.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Неуспешно инсталиране. Моля, опитайте отново."
},
"dialog": {
@@ -269,7 +285,7 @@
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Както NL, така и CR",
"notConnected": "Няма връзка. Изберете платка и порт за автоматично свързване.",
"message": "Съобщение ({0} + Enter, за да изпратите съобщение до „{1}“ на „{2}",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Свързването е неуспешно. Серийният порт е зает: {0}",
"disconnected": "Прекъснато е връзката на {0} с {1}.",
"unexpectedError": "Неочаквана грешка. Повторно свързване на {0} на порт {1}.",

350
i18n/ca.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.",
"noBoardSelected": "No board selected",
"selectedOn": "on {0}",
"notConnected": "[not connected]",
"serialMonitor": "Serial Monitor",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Later",
"selectBoard": "Select Board",
"unknown": "Unknown",
"processing": "Processing",
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"loseChanges": "If you don't save, your changes will be lost."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "Tools"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"network": "Network",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"automatic": "Automatic",
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Options...",
"share": "Share...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"profilePicture": "Profile picture"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Board Info",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"sketch": {
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"commentUncomment": "Comment/Uncomment",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"decreaseFontSize": "Decrease Font Size",
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
"dontAskAgain": "Don't ask again"
},
"userFields": {
"cancel": "Cancel",
"upload": "Upload"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Version {0}",
"moreInfo": "More info",
"install": "INSTALL",
"filterSearch": "Filter your search..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
},
"compile": {
"error": "Compilation error: {0}"
},
"upload": {
"error": "{0} error: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
}
}

350
i18n/cs.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "Nejspíše nejste online. Bez Internetového připojení nebude Arduino CLI schopno stáhnout potřebné zdroje a toto může způsobit chybu. Prosím připojte se k Internetu a restartujte aplikaci.",
"noBoardSelected": "Nebyla zvolena deska",
"selectedOn": "zapnuto{0}",
"notConnected": "[nepřipojen]",
"serialMonitor": "Seriový monitor",
"oldFormat": "{0}používá stále starý formát `.pde`. Chcete ho převést na soubor s příponou `.ino`?",
"later": "Později",
"selectBoard": "Zvolte desku",
"unknown": "Neznámý",
"processing": "Zpracovávám",
"saveChangesToSketch": "Chcete uložit změny před ukončením programu?",
"loseChanges": "Pokud projekt neuložíte, změny budou ztraceny. "
},
"ide-updater": {
"errorCheckingForUpdates": "Nastala chyba při kontrole aktualizací Arduino IDE{0}",
"notNowButton": "Nyní ne",
"versionDownloaded": "Arduino IDE {0}bylo staženo.",
"closeToInstallNotice": "Vypněte program a nainstalujte update na Váš stroj. ",
"closeAndInstallButton": "Zavřít a nainstalovat",
"downloadingNotice": "Stahuji poslední verzi Arduino IDE.",
"updateAvailable": "Je dostupná aktualizace",
"newVersionAvailable": "Je k dispozici nová verze Arduino IDE ({0}).",
"skipVersionButton": "přeskočit verzi",
"downloadButton": "Stáhnout",
"goToDownloadPage": "Je dostupná aktualizace pro Arduino IDE, ale nepodařilo se jej stáhnout a nainstalovat automaticky. Prosím navštivte stránku pro stažení a stáhněte prosím jeho poslední verzi ručně. ",
"goToDownloadButton": "přejit do stažených",
"ideUpdaterDialog": "Softwarová aktualizace",
"noUpdatesAvailable": "Nejsou k dispozici žádné aktualizace pro Arduino ID"
},
"menu": {
"sketch": "Sketch",
"tools": "Nástroje"
},
"debug": {
"optimizeForDebugging": "optimalizovat pro Debugging",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platforma není nainstalována pro '{0}'",
"debuggingNotSupported": "Debugging není podporován s '{0}'"
},
"preferences": {
"language.log": "Ano pokud by jazykový server pro Arduino měl generovat logovací soubory do složky se sketchi, jinak ne. Ne je výchozí hodnota.",
"compile.verbose": "Ano pro podrobný výstup při kompilaci. Ne je výchozí hodnota. ",
"compile.warnings": "Řekne gcc který stupeň varování se má použít. \"Žádný\" je výchozí hodnota. ",
"upload.verbose": "Ano pro podrobný výstup při nahrávání. Ne je výchozí hodnota. ",
"window.autoScale": "Ano pokud se měřítko uživatelského prostředí automaticky mění s velikostí písma. ",
"window.zoomLevel": "Přizpůsobení přiblížení okna. Originální velikost je 0, zvýšení (např. o 1) nebo snížení (např. o -1) znamená 20% přiblížení nebo oddálení. Můžete použít desetinná čísla pro jemnější přizpůsobení.",
"ide.updateChannel": "Výběr kanálu pro aktualizace. 'stable' pro stabilní vydání, 'nightly' pro nejnovější vývojové verze.",
"board.certificates": "Seznam certifikátů, které mohou být nahrány na desky",
"sketchbook.showAllFiles": "Ano pro zobrazení všech souborů sketche. Ne je výchozí hodnota. ",
"cloud.enabled": "Ano pokud je povolená automatická synchronizace sketche. Ano je výchozí hodnota. ",
"cloud.pull.warn": "Ano pokud by měl být uživatel varován před stahováním cloud sketche. Ano je výchozí hodnota. ",
"cloud.push.warn": "Ano pokud by měl být uživatel varován před odesláním cloud sketche. Ano je výchozí hodnota. ",
"cloud.pushpublic.warn": "Ano pokud by měl být uživatel varován před odesláním veřejné sketche do cloudu. Ano je výchozí hodnota. ",
"cloud.sketchSyncEnpoint": "Endpoint použitý pro stahování a odesílání sketchí z backendu. Ve výchozím stavu je toto směrováno na Arduino Cloud API.",
"auth.clientID": "OAuth2 klient ID",
"auth.domain": "Doména OAuth2 ",
"auth.audience": "OAuth2 audience",
"auth.registerUri": "URL použita při registraci nového uživatele. ",
"network": "Síť",
"sketchbook.location": "Umístění sketche",
"browse": "Procházet",
"files.inside.sketches": "Zobrazit soubory uvnitř sketche",
"editorFontSize": "Editor velikosti fontu",
"interfaceScale": "Měřítko prostředí",
"showVerbose": "Zobrazit podrobný výstup během",
"compilerWarnings": "Varování kompileru",
"automatic": "Automaticky",
"compile": "kompilovat",
"upload": "nahrát",
"verifyAfterUpload": "Kontrolovat kód po nahrání",
"editorQuickSuggestions": "Rychlá nápověda v editoru",
"additionalManagerURLs": "Další URL pro manager desek",
"noProxy": "Bez proxy",
"manualProxy": "Ruční nastavení proxy",
"newSketchbookLocation": "Zvolit nové umístění projektů",
"choose": "Zvolit",
"enterAdditionalURLs": "Vložte další URL, jednu pro každý řádek",
"unofficialBoardSupport": "Zde klikněte pro seznam adres neoficiálně podporovaných desek",
"invalid.sketchbook.location": "Neplatné umístění projektů:{0}",
"invalid.editorFontSize": "Neplatná velikost editoru písem: Toto číslo musí být kladné.",
"invalid.theme": "Neplatné téma."
},
"cloud": {
"signIn": "Přihlásit se",
"signOut": "Odhlásit se",
"chooseSketchVisibility": "Zvolte viditelnost sketche:",
"privateVisibility": "Soukromá. Pouze vy můžete vidět tuto sketch.",
"publicVisibility": "Veřejná. Kdokoli s odkazem může vidět tuto sketch.",
"link": "Adresa: ",
"embed": "Vložit: ",
"cloudSketchbook": "Cloudové umístění projektů",
"shareSketch": "Sdílet sketch",
"showHideRemoveSketchbook": "Zobrazit/skrýt vzdálenou sketch",
"pullSketch": "Stáhnout sketch",
"openInCloudEditor": "Otevřít v cloudovém editoru",
"options": "Možnosti...",
"share": "Sdílet...",
"remote": "Vzdálený",
"emptySketchbook": "Umístění projektů je prázdné",
"visitArduinoCloud": "Navštivte Arduino Cloud pro vytvoření cloudové sketche",
"signInToCloud": "Přihlásit se do Arduino Cloud",
"syncEditSketches": "Synchronizovat a editovat sketche v Arduino Cloud",
"learnMore": "Zjistit více",
"continue": "Pokračovat",
"pushSketch": "Odeslat sketch",
"pushSketchMsg": "Toto je veřejná sketch. Před odesláním se prosím ujistěte že jsou smazané citlivé informace ze souboru arduino_secrets.h . Tuto sketch můžete změnit na soukromou v panelu pro sdílení. ",
"pull": "Stáhnout",
"pullSketchMsg": "Stažením této sketche z cloudu přepíšete její lokální verzi. Chcete opravdu pokračovat?",
"donePulling": "Stahování dokončeno {0}.",
"notYetPulled": "Nemohu odeslat do cloudu jelikož z něj ještě nebylo staženo.",
"push": "Odeslat",
"pullFirst": "Nejprve musíte stáhnout z cloudu, aby bylo možno do něj odeslat.",
"donePushing": "Odesílání dokončeno {0}.",
"connected": "Připojen",
"offline": "Nepřipojen",
"profilePicture": "Profilový obrázek"
},
"board": {
"installManually": "Instalovat ručně",
"installNow": "\"{0}{1}\" jádro musí být instalováno pro aktuálně zvolenou \"{2}\" desku. Chcete ho nyní nainstalovat?",
"configDialogTitle": "Zvolte desku a port",
"configDialog1": "Pokud chcete nahrát sketch, musíte zvolit jak desku tak i port.",
"configDialog2": "Pokud zvolíte jen desku, budete schopni kompilovat sketch, ale nebudete ji moci nahrát do desky.",
"pleasePickBoard": "Vyberte prosím desku která je připojená k zvolenému portu. ",
"showAllAvailablePorts": "Zobrazit všechny dostupné porty (pokud je zaškrtnuto)",
"programmer": "Programátor",
"succesfullyInstalledPlatform": "Platforma {0}:{1} byla úspěšně nainstalována.",
"succesfullyUninstalledPlatform": "Platforma {0}:{1} byla úspěšně odinstalována.",
"couldNotFindPreviouslySelected": "Dříve zvolená deska '{0}' v instalované platformě '{1}' nebyla nalezena. Zvolte prosím manuálně desku kterou chcete použít. Chcete tuto desku zvolit nyní? ",
"reselectLater": "Zvolit později",
"noneSelected": "Nebyla zvolena deska.",
"noPortsSelected": "Nebyl zvolen port pro desku '{0}'.",
"noFQBN": "FQBN není dostupné pro zvolenou desku \"{0}\". Máte nainstalované příslušné jádro? ",
"openBoardsConfig": "Zvolte jinou desku a port...",
"boardListItem": "{0}v{1}",
"selectBoardForInfo": "Prosím zvolte desku pro získání informací o desce.",
"platformMissing": "Platforma pro zvolenou desku '{0}' není nainstalována.",
"selectPortForInfo": "Prosím zvolte port pro získání informací o desce.",
"boardInfo": "Info o desce",
"board": "Deska {0}",
"port": "Port {0}",
"getBoardInfo": "Získat info o desce.",
"inSketchbook": "(v projektech)"
},
"boardsManager": "Manažér desek",
"about": {
"label": "O {0}",
"detail": "Verze: {0}\nDatum: {1}[2]\nVerze CLI: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Přidat soubor",
"replaceTitle": "Vyměnit",
"fileAdded": "Soubor byl přidán do sketche."
},
"replaceMsg": "Vyměnit existující verzi {0}?",
"library": {
"addZip": "Přidat .ZIP knihovnu...",
"zipLibrary": "Knihovna",
"overwriteExistingLibrary": "Chcete přepsat existující knihovnu? ",
"successfullyInstalledZipLibrary": "Knihovna byla úspěšně nainstalována z archívu {0}",
"namedLibraryAlreadyExists": "Knihovna s názvem {0}již existuje. Chcete jí přepsat? ",
"libraryAlreadyExists": "Knihovna již existuje. Chcete jí přepsat?",
"include": "Zahrnout knihovnu",
"manageLibraries": "Spravovat knihovny...",
"arduinoLibraries": "Arduino knihovny",
"contributedLibraries": "Přispěné knihovny",
"title": "Manažér knihoven",
"needsOneDependency": "Knihovna <b>{0}:{1}</b>vyžaduje další závislost která není nainstalovaná:",
"needsMultipleDependencies": "Knihovna <b>{0}:{1}</b>vyžaduje další jinou závislost která není nainstalovaná:",
"installOneMissingDependency": "Chcete nainstalovat chybějící závislost? ",
"installMissingDependencies": "Chcete nainstalovat všechny chybějící závislosti? ",
"dependenciesForLibrary": "Závislosti pro knihovny {0}:{1}",
"installAll": "Instalovat vše",
"installOnly": "Instalovat pouze {0}",
"installedSuccessfully": "Knihovna {0}:{1}byla úspěšně nainstalována",
"uninstalledSuccessfully": "Knihovna {0}:{1}byla úspěšně odinstalována"
},
"selectZip": "Zvolte ZIP soubor s knihovnou kterou chcete přidat",
"sketch": {
"archiveSketch": "Archivovat sketch",
"saveSketchAs": "Uložit složku sketche jako...",
"createdArchive": "Vytvořen archív '{0}'.",
"new": "Nový",
"openRecent": "Otevřít nedávné",
"showFolder": "Zobrazit složku sketche",
"sketch": "Sketch",
"moving": "Přesouvám",
"movingMsg": "Soubor \"{0}\" musí být uvnitř složky která je shodná názvem \"{1}\".\nVytvořit složku, přesunout tam- soubor a pokračovat? ",
"cantOpen": "Složka s názvem \"{0}\" již existuje, proto nemohu otevřít sketch. ",
"saveFolderAs": "Uložit složku sketche jako...",
"sketchbook": "Projekty",
"upload": "Nahrát",
"uploadUsingProgrammer": "Nahrát pomocí programátoru",
"userFieldsNotFoundError": "Nemohu nalézt uživatelská pole pro připojenou desku",
"doneUploading": "Nahrávání dokončeno. ",
"configureAndUpload": "Nastavit a nahrát",
"verifyOrCompile": "Ověřit/Kompilovat",
"exportBinary": "Exportovat kompilované soubory",
"verify": "Ověřit",
"doneCompiling": "Ověřování dokončeno.",
"couldNotConnectToSerial": "Nebylo možné se opět připojit k seriovému portu. {0}",
"openSketchInNewWindow": "Otevřít sketch v novém okně",
"openFolder": "Otevřít složku",
"titleLocalSketchbook": "Složka lokálních projektů",
"titleSketchbook": "Projekty",
"close": "Opravdu chcete zavřít tuto sketch? "
},
"bootloader": {
"burnBootloader": "Nahrát zavaděč",
"doneBurningBootloader": "Nahrání zavaděče bylo dokončeno. "
},
"editor": {
"copyForForum": "Kopírovat pro forum (Markdown)",
"commentUncomment": "Komentovat/Odkomentovat",
"increaseIndent": "Zvětšit odrážku",
"decreaseIndent": "Zmenšit odrážku",
"increaseFontSize": "Zvýšit velikost písma",
"decreaseFontSize": "Zmenšit velikost písma",
"autoFormat": "Automatické formátování"
},
"examples": {
"menu": "Příklady",
"couldNotInitializeExamples": "Nebylo možné inicializovat vestavěné příklady.",
"builtInExamples": "Vestavěné příklady.",
"customLibrary": "Příklady pro vlastní knihovny",
"for": "Příklady pro {0}",
"forAny": "Příklady pro všechny desky"
},
"help": {
"search": "Hledat na Arduino.cc",
"keyword": "Napište klíčové slovo",
"gettingStarted": "Začínáme",
"environment": "Prostředí",
"troubleshooting": "Řešení problémů",
"reference": "Reference",
"findInReference": "Hledat v referencích",
"faq": "Často kladené otázky",
"visit": "Navštívit Arduino.cc",
"privacyPolicy": "Zásady ochrany osobních údajů"
},
"certificate": {
"uploadRootCertificates": "Nahrát certifikát SSL",
"openContext": "Otevřít kontext",
"remove": "Odstranit",
"upload": "Nahrát",
"addURL": "Přidat URL pro získání SSL certifikátu",
"enterURL": "Vložit URL",
"selectCertificateToUpload": "1. Zvolit certifikát pro nahrání",
"addNew": "Přidat nový",
"selectDestinationBoardToUpload": "2. Zvolit cílovou desku a nahrát certifikát",
"uploadingCertificates": "Nahrávám certifikát.",
"certificatesUploaded": "Certifikáty nahrány. ",
"uploadFailed": "Nahrání se nezdařilo. Prosím zkuste to později. ",
"selectBoard": "Zvolte desku...",
"boardAtPort": "{0}v{1}",
"noSupportedBoardConnected": "Není připojena žádná podporovaná deska"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Zvolit desku",
"checkUpdates": "Zkontrolovat aktualizace",
"selectVersion": "Zvolit verzi firmwaru",
"install": "Instalovat",
"overwriteSketch": "Instalace přepíše sketch na desce.",
"installingFirmware": "Instaluji firmware.",
"successfullyInstalled": "Firmware byl úspěšně nainstalován. ",
"failedInstall": "Instalace se nezdařila. Prosím zkuste to později. "
},
"dialog": {
"dontAskAgain": "Znovu se neptat"
},
"userFields": {
"cancel": "Zrušit",
"upload": "Nahrát"
},
"serial": {
"toggleTimestamp": "Přepnout časovou značku",
"autoscroll": "Autoscroll",
"timestamp": "Časová značka",
"noLineEndings": "Bez konce řádku",
"newLine": "Nový řádek (NL)",
"carriageReturn": "Enter (CR)",
"newLineCarriageReturn": "Oba NL & CR",
"notConnected": "Nepřipojen. Zvolte desku a port pro automatické připojení.",
"message": "Zpráva ({0}+ Enter pro odeslání zprávy do '{1}' na '{2}')",
"connectionBusy": "Připojení se nezdařilo, sériový port je zaneprázdněn: {0}",
"disconnected": "Odpojen {0}od {1}.",
"unexpectedError": "Nastala neočekávaná chyba. Opět připojuji {0} na portu {1}.",
"failedReconnect": "Nepodařilo se připojit {0}k sériovému portu po 10 pokusech po sobě. Sériový port {1} je zaneprázdněn. ",
"reconnect": "Opětovné připojení {0} k {1}za [2] vteřin..."
},
"component": {
"uninstall": "Odinstalovat",
"uninstallMsg": "Chcete odinstalovat {0}?",
"by": "od",
"version": "Verze {0}",
"moreInfo": "Více informací",
"install": "Instalovat",
"filterSearch": "Filtrovat vyhledávání... "
},
"electron": {
"couldNotSave": "Nebylo možné uložit sketch. Zkopírujte prosím neuloženou práci do Vašeho oblíbeného textového editoru a restartujte IDE. ",
"unsavedChanges": "Jakékoli změny nebudou uloženy. "
},
"compile": {
"error": "Chyba kompilace: {0}"
},
"upload": {
"error": "{0}chyba: {1}"
},
"burnBootloader": {
"error": "Chyba během nahrávání zavaděče: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Nebylo možné uložit sketch. Zkopírujte prosím neuloženou práci do Vašeho oblíbeného textového editoru a restartujte IDE. ",
"offline": "Nepřipojen",
"daemonOffline": "CLI Daemon nepřipojen",
"cannotConnectBackend": "Nebylo možné se připojit k backendu. ",
"cannotConnectDaemon": "Nebylo možné se připojit k CLI Daemon."
},
"debug": {
"start": "Start...",
"typeNotSupported": "Typ \"{0}\" debugovacího spojení není podporován, ",
"startError": "Vyskytla se chyba při spouštění debugovacího spojení, zkontrolujte prosím log pro více informací. "
},
"editor": {
"unsavedTitle": "Neuloženo {0}"
},
"messages": {
"expand": "Rozšířit",
"collapse": "Složit"
},
"workspace": {
"fileNewName": "Název pro nový soubor",
"invalidFilename": "Neplatný název souboru.",
"invalidExtension": ".{0}je neplatná přípona",
"newFileName": "Nový název souboru",
"deleteCurrentSketch": "Opravdu chcete vymazat aktuální sketch? ",
"sketchDirectoryError": "Vyskytla se chyba při vytváření složky pro sketch. Více informací naleznete v logu. Aplikace nebude pravděpodobně pracovat správně. "
}
},
"cloud": {
"GoToCloud": "Přejdi do Cloudu"
}
}

View File

@@ -3,7 +3,7 @@
"common": {
"offlineIndicator": "Anscheinend bist du offline. Ohne eine aktive Internetverbindung kann das Arduino CLI nicht die nötigen Ressourcen herunterladen, was zu Problemen führen kann. Bitte überprüfe deine Internetverbindung und starte das Programm neu. ",
"noBoardSelected": "Kein Board ausgewählt",
"selectedOn": "bei {0}",
"selectedOn": "an {0}",
"notConnected": "[keine Verbindung]",
"serialMonitor": "Serieller Monitor",
"oldFormat": "Der Sketch '{0}' verwendet noch das alte '.pde' Format. Möchtest du auf die neuere '.ino' Endung wechseln?",
@@ -12,7 +12,23 @@
"unknown": "unbekannt",
"processing": "Verarbeiten",
"saveChangesToSketch": "Änderungen zu diesem Sketch vor dem Schließen sichern?",
"loseChanges": "Wenn du nicht sicherst, werden deine Änderungen gelöscht."
"loseChanges": "Wenn du nicht speicherst, werden deine Änderungen gelöscht."
},
"ide-updater": {
"errorCheckingForUpdates": "Fehler bei der Suche nach IDE Updates{0}",
"notNowButton": "Später",
"versionDownloaded": "Arduino IDE {0} wurde heruntergeladen",
"closeToInstallNotice": "Schließe die Software und installiere das Update auf deinem Computer",
"closeAndInstallButton": "Schließen und Installieren",
"downloadingNotice": "Die neueste Version der Arduino IDE wird heruntergeladen",
"updateAvailable": "Update Verfügbar",
"newVersionAvailable": "Eine neue Version der Arduino IDE ({0}) ist zum Download verfügbar",
"skipVersionButton": "Version Überspringen",
"downloadButton": "Download",
"goToDownloadPage": "Eine Update für die Arduino IDE ist verfügbar, konnte aber nicht automatisch heruntergeladen und installiert werden. Bitte gehen sie zur Download-Seite und laden sie dort die neueste Version herunter",
"goToDownloadButton": "Zum Download Wechseln",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "Es gibt keine neuen Updates für die Arduino IDE"
},
"menu": {
"sketch": "Sketch",
@@ -31,7 +47,7 @@
"upload.verbose": "Wahr für ausführliche Ausgaben während dem Hochladen. Standardmäßig Falsch.",
"window.autoScale": "Ist wahr, wenn die Benutzeroberfläche automatisch mit der Schriftgröße skaliert wird.",
"window.zoomLevel": "Stelle die Zoomstufe des Fensters ein. Der Standardwert ist 0, jede Vergrößerung (z.B.: 1) oder Verringerung (z.B.: -1) um eins steht für 20% Vergrößerung bzw. Verkleinerung des Fensters. Du kannst auch Kommazahlen eingeben, um die Zoomstufe feiner einzustellen.\n ",
"ide.autoUpdate": "Wahr, um automatisch auf Updates zu überprüfen. Die IDE wird automatisch regelmäßig auf Updates prüfen.",
"ide.updateChannel": "Von welchem Kannal die Updates kommen sollen. 'stabil' ist die stabile Version, 'nächtlich' ist die neueste Entwicklerversion",
"board.certificates": "Liste der Zertifikate, welche zu den Boards hochgeladen werden können.",
"sketchbook.showAllFiles": "Wahr, um alle Dateien im Sketch anzuzeigen. Standardmäßig Falsch.",
"cloud.enabled": "Wahr, wenn die Sketch-Syncfunctionen aktiv sind. Standardeinstellung ist wahr.",
@@ -55,7 +71,6 @@
"compile": "Kompilieren",
"upload": "Hochladen",
"verifyAfterUpload": "Code nach Hochladen überprüfen ",
"checkForUpdates": "Beim Start nach Updates suchen",
"editorQuickSuggestions": "Schnelle Editor Vorschläge",
"additionalManagerURLs": "Zusätzliche Boardverwalter-URLs",
"noProxy": "Kein Proxy",
@@ -85,7 +100,7 @@
"share": "Teilen....",
"remote": "Remote",
"emptySketchbook": "Dein Sketchbook ist leer",
"visitArduinoCloud": "Besuche Arduino Cloud um Cloud Sketche zu erstellen.",
"visitArduinoCloud": "Besuche Arduino Cloud um Cloud Sketche zu erstellen.",
"signInToCloud": "Anmelden zur Arduino Cloud",
"syncEditSketches": "Synchronisiere und editiere deine Arduino Cloud Sketches.",
"learnMore": "Mehr erfahren",
@@ -173,7 +188,7 @@
"showFolder": "Zeige Sketch Ordner",
"sketch": "Sketch",
"moving": "Übertragen...",
"movingMsg": "Die Datei \"{0}\" muss sich in einem Sketch Ordner \"{1}\" befinden.\nDiesen Ordner erstellen, Datei verschieben und fortfahren?",
"movingMsg": "Die Datei \"{0}\" muss sich in einen Sketch Ordner \"{1}\" befinden.\nOrdner erstellen, Datei verschieben und fortfahren?",
"cantOpen": "Ein Ordner mit dem Namen \"{0}\" ist bereits vorhanden. Der Sketch kann nicht geöffnet werden.",
"saveFolderAs": "Sketch Ordner speichern als...",
"sketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Referenz",
"findInReference": "Referenzsuche",
"faq": "Häufig gestellte Fragen",
"visit": "Besuche Arduino.cc"
"visit": "Besuche Arduino.cc",
"privacyPolicy": "Datenschutzbestimmungen"
},
"certificate": {
"uploadRootCertificates": "SSL Root Zertifikat hochladen",
@@ -243,7 +259,7 @@
"noSupportedBoardConnected": "Kein unterstütztes Board angeschlossen"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Aktualisierer",
"updater": "WiFi101 / WiFiNINA Firmware Aktualisierer",
"selectBoard": "Board auswählen",
"checkUpdates": "Nach Updates Suchen",
"selectVersion": "Firmware Version wählen",
@@ -269,7 +285,7 @@
"carriageReturn": "Zeilenumbruch",
"newLineCarriageReturn": "Sowohl NL als auch CR",
"notConnected": "Nicht verbunden. Wählen Sie ein Board und einen Port, um automatisch zu verbinden.",
"message": "Nachricht ({0} + Enter, um Nachricht an '{1}' auf '{2}' zu senden",
"message": "Nachricht ({0} + Enter, um Nachricht an '{1}' auf '{2}') zu senden",
"connectionBusy": "Verbindung fehlgeschlagen. Serieller port ist belegt: {0}",
"disconnected": "{0} von {1} getrennt.",
"unexpectedError": "100%match\nUnerwarteter Fehler. {0} wird am Port {1} erneut verbunden.",

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Θέτε να αποθηκεύσετε τις αλλαγές σε αυτο το σχέδιο πριν κλείσετε; ",
"loseChanges": "Αν δεν αποθηκεύσετε, οι αλλαγές σας θα χαθούν."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Σχέδιο",
"tools": "Εργαλεία"
@@ -31,7 +47,7 @@
"upload.verbose": "Αληθές για λεπτομερή έξοδο ανεβάσματος. Ψευδές απο προεπιλογή.",
"window.autoScale": "Αληθές αν η διεπαφή χρήστη κλιμακλωνεται αυτόματα μαζί με το μέγεθος γραμματοσειράς.",
"window.zoomLevel": "Ρύθμιση του επιπέδου μεγέθυνσης του παραθύρου. Το αρχικό μέγεθος ειναι 0 και κάθε αύξηση (π.χ. 1) ή μείωση (π.χ. -1) αναπαριστά μεγέθυνση 20% μεγαλύτερη ή μικρότερη. Μπορούν να εισαχθούν και δεκαδικά για προσαρμογή της μεγέθυνσης με μεγαλύτερη λεπτομέρεια.",
"ide.autoUpdate": "Αληθές για ενεργοποίηση αυτομάτων ελέγχων ενημερώσεων. Το IDE θα ελέγχει για ενημερώσεις αυτόματα και τακτικά.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Λίστα πιστοποιητικών που μπορούν να ανέβουν σε πλακέτες",
"sketchbook.showAllFiles": "Αληθές για εμφάνιση όλων των αρχείων σχεδίου μεσα στο σχέδιο. Είναι ψευδές απο προεπιλογή.",
"cloud.enabled": "Αληθές αν οι λειτουγίες συγχονισμού σχεδίου είναι ενεργοποιημένες. Προεπιλογή ως αληθές.",
@@ -55,8 +71,7 @@
"compile": "μεταγλώττιση",
"upload": "ανέβασμα",
"verifyAfterUpload": "Επιβεβαίωση κώδικα μετά το ανέβασμα",
"checkForUpdates": "Έλεγχος ενημερώσεων κατά την εκκίνηση",
"editorQuickSuggestions": "Editor Quick Suggestions",
"editorQuickSuggestions": "Επιμελιτής γρήγορων προτάσεων",
"additionalManagerURLs": "Πρόσθετοι Σύνδεσμοι Διαχειριστή Πλακετών",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
@@ -108,7 +123,7 @@
"installNow": "Ο πυρήνας \"{0} {1}\" πρέπει να εγκατασταθεί για την επιλεγμένη πλακέτα {2}. Θέλεις να την εγκαταστήσεις τώρα;",
"configDialogTitle": "Επιλέξτε Άλλη Πλακέτα & Θύρα",
"configDialog1": "Επίλεξε και Πλακέτα και Θύρα αν θέλεις να ανεβάσεις ένα σχέδιο.",
"configDialog2": "Αν επιλέξεις μονο Πλακέτα θα μπορείς να κάνεις μόνο μεταγγλώτιση, αλλά οχι να ανεβάσεις το σχέδιο.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Πσρακαλώ επίλεξε μια πλακέτα που συνδέθηκε στην θύρα που έχεις επιλέξει.",
"showAllAvailablePorts": "Εμφανίζει όλες τις διαθέσιμες θύρες όταν είναι ενεργοποιημένο.",
"programmer": "Προγραμματιστής",
@@ -136,30 +151,30 @@
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
"addFile": "Προσθήκη αρχείου",
"replaceTitle": "Αντικατάσταση",
"fileAdded": "Ένα αρχείο προστέθηκε στον κώδικα."
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"addZip": "Προσθέστε μια βιβλιοθήκη μορφής .ZIP",
"zipLibrary": "Διαχειριστής βιβλιοθήκης",
"overwriteExistingLibrary": "Θέλετε να αντικαταστήσετε αυτή τη βιβλιοθήκη;",
"successfullyInstalledZipLibrary": "Επιτυχής εγκατάσταση βιβλιοθήκης απο το αρχείο {0}",
"namedLibraryAlreadyExists": "Μια βιβλιοθήκη με όνομα {0} υπάρχει ήδη. Θέλετε να γίνει αντικατάσταση;",
"libraryAlreadyExists": "Μια βιβλιοθήκη υπάρχει ήδη. Θέλετε να την αντικαταστήσετε;",
"include": "Συμπεριλάβετε βιβλιοθήκη",
"manageLibraries": "Διαχείριση βιβλιοθηκών...",
"arduinoLibraries": "Βιβλιοθήκες Arduino",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"title": "Διαχειριστής βιβλιοθηκών",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installAll": "Εγκατάσταση όλων",
"installOnly": "Εγκατάσταση {0} μόνο",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
@@ -168,27 +183,27 @@
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"new": "Νέο",
"openRecent": "Άνοιγμα πρόσφατου",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"sketch": "Σχέδιο",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"upload": "Ανέβασμα",
"uploadUsingProgrammer": "Ανέβασμα μέσω προγραμματιστή",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"doneUploading": "Ολοκλήρωση ανεβάσματος",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"verifyOrCompile": "Επικύρωση",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"verify": "Επαλήθευση",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"openFolder": "Άνοιγμα φακέλου",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
@@ -207,33 +222,34 @@
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"menu": "Παραδείγματα",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"for": "Παραδείγματα για {0}",
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"search": "Αναζήτηση στο Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"environment": "Περιβάλλον",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"visit": "Επίσκεψη Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"remove": "Αφαίρεση",
"upload": "Ανέβασμα",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"addNew": "Προσθήκη Νέου",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
@@ -243,46 +259,46 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Επιλογή Πλακέτας",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"install": "Εγκατάσταση",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
"dontAskAgain": "Don't ask again"
},
"userFields": {
"cancel": "Cancel",
"upload": "Upload"
"cancel": "Ακύρωση",
"upload": "Ανέβασμα"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"newLine": "Νέα γραμμή",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"unexpectedError": "Απρόσμενο σφάλμα. Επανασύνδεση {0} στην θύρα {1}",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
},
"component": {
"uninstall": "Uninstall",
"uninstall": "Απεγκατάσταση",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Version {0}",
"moreInfo": "More info",
"install": "INSTALL",
"by": "από",
"version": "Έκδοση {0}",
"moreInfo": "Περισσότερες πληροφορίες",
"install": "ΕΓΚΑΤΑΣΤΑΣΗ",
"filterSearch": "Filter your search..."
},
"electron": {
@@ -290,10 +306,10 @@
"unsavedChanges": "Οι μη αποθηκευμένες αλλαγές θα χαθούν."
},
"compile": {
"error": "Compilation error: {0}"
"error": "Σφάλμα μεταγλώττισης: {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "{0} σφάλμα: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
@@ -320,11 +336,11 @@
"collapse": "Ελαχιστοποίηση"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"fileNewName": "Όνομα για το νεό αρχείο",
"invalidFilename": "Μη-έγκυρο όνομα αρχείου",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "Νέο όνομα για το αρχείο",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"deleteCurrentSketch": "Θέλεις να διαγράψεις το υπάρχον σχέδιο;",
"sketchDirectoryError": "Υπήρξε ένα λάθος κατά τη δημιουργία του φακέλου. Για περισσότερες λεπτομέρειες δείτε το αρχείο καταγραφής. Η εφαρμογή πιθανόν δε θα δουλέψει όπως αναμένεται."
}
},

View File

@@ -238,7 +238,8 @@
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",

View File

@@ -3,332 +3,348 @@
"common": {
"offlineIndicator": "Al parecer no estás en línea. Sin una conexión a internet, el CLI de Arduino no podrá descargar los recursos necesarios, lo cual puede ocasionar fallos. Por favor, conecte a internet y reinicie la aplicación.",
"noBoardSelected": "Ninguna placa seleccionada.",
"selectedOn": "on {0}",
"notConnected": "[not connected]",
"selectedOn": "on 1{0}\n ",
"notConnected": "[no conectado]",
"serialMonitor": "Monitor Serie",
"oldFormat": "El '{0}' aún usa el antiguo formato `.pde` . ¿Deseas cambiar a la nueva extensión `.ino`?.",
"later": "Later",
"oldFormat": "La página '{0}' sigue utilizando el formato antiguo `.pde`. ¿Quieres cambiar a la nueva extensión `.ino`?",
"later": "Más tarde",
"selectBoard": "Seleccionar Placa",
"unknown": "Unknown",
"unknown": "Desconocido",
"processing": "Procesando",
"saveChangesToSketch": "¿Deseas guardar los cambios en este código antes de cerrar?",
"loseChanges": "Si no guardas, perderás los cambios."
"saveChangesToSketch": "¿Quieres guardar los cambios en este sketch antes de cerrar?",
"loseChanges": "Si no guardas, tus cambios se perderán."
},
"ide-updater": {
"errorCheckingForUpdates": "Error al comprobar las actualizaciones del IDE de Arduino.\n{0}",
"notNowButton": "Ahora no",
"versionDownloaded": "Arduino IDE 1{0} se ha descargado.",
"closeToInstallNotice": "Cierra el programa e instala la actualización en tu máquina.",
"closeAndInstallButton": "Cerrar e instalar",
"downloadingNotice": "Descargando la última versión del Arduino IDE.",
"updateAvailable": "Actualización disponible",
"newVersionAvailable": "Una nueva versión del Arduino IDE ({0}) está disponible para descargar.",
"skipVersionButton": "Omitir versión",
"downloadButton": "Descargar",
"goToDownloadPage": "Una nueva versión del Arduino IDE está disponible, pero no es posible descargarla e instalarla automáticamente. Por favor, diríjase a la página de descarga y descargue la última versión desde allí.",
"goToDownloadButton": "Actualización de Software",
"ideUpdaterDialog": "Actualización de Software",
"noUpdatesAvailable": "No hay actualizaciones recientes disponibles para el Arduino IDE"
},
"menu": {
"sketch": "Programa",
"sketch": "Sketch",
"tools": "Herramientas"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"optimizeForDebugging": "Optimizar para depuración",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "La plataforma no está instalada para '{0}'",
"debuggingNotSupported": "La depuracion no esta soportada por '{0}'"
"debuggingNotSupported": "La depuración no está soportada por '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "Verdadero si la sincronización de código está activada. Valor verdadero por defecto.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"language.log": "Verdadero si el Servidor de Lenguaje Arduino debe generar archivos de registro en la carpeta del sketch. En caso contrario, falso. Por defecto es falso.",
"compile.verbose": "Verdadero para compilación detallada. Falso por defecto",
"compile.warnings": "Indica a gcc qué nivel de advertencia usar. Por defecto es \"Ninguno\"",
"upload.verbose": "Verdadero para una salida verbosa de la carga. Falso por defecto.",
"window.autoScale": "Verdadero si la interfaz de usuario se escala automáticamente con el tamaño de la fuente.",
"window.zoomLevel": "Ajusta el nivel de zoom de la ventana. El tamaño original es 0 y cada incremento por encima (p. ej. 1) o por debajo (p. ej. -1) representa un zoom un 20 % más grande o más pequeño. También puedes introducir decimales para ajustar el nivel de zoom con una granularidad más fina.",
"ide.updateChannel": "Canal de publicación desde el que se actualiza. 'stable' es la versión estable, 'nightly' es la última versión de desarrollo.",
"board.certificates": "Listado de certificados que pueden ser cargados en las placas",
"sketchbook.showAllFiles": "Verdadero para mostrar todos los archivos de bocetos dentro del boceto. Por defecto es falso.",
"cloud.enabled": "Verdadero si las funciones de sincronización del sketch están activadas. Verdadero por defecto.",
"cloud.pull.warn": "Verdadero si se debe advertir a los usuarios antes de sacar un boceto de la nube. El valor predeterminado es verdadero.",
"cloud.push.warn": "Verdadero si se debe advertir a los usuarios antes de enviar un boceto a la nube. El valor predeterminado es verdadero.",
"cloud.pushpublic.warn": "Verdadero si se debe advertir a los usuarios antes de enviar un boceto público a la nube. El valor predeterminado es verdadero.",
"cloud.sketchSyncEnpoint": "El punto final utilizado para empujar y extraer bocetos de un backend. Por defecto, apunta a la API de Arduino Cloud.",
"auth.clientID": "El ID del cliente OAuth2.",
"auth.domain": "El dominio de OAuth2.",
"auth.audience": "El público de OAuth2.",
"auth.registerUri": "URI usada para registrar un nuevo usuario",
"network": "Red",
"sketchbook.location": "Sketchbook location",
"sketchbook.location": "Ruta del Sketchbook",
"browse": "Explorar",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"files.inside.sketches": "Ver los ficheros dentro de los bocetos",
"editorFontSize": "Tamaño de letra del editor",
"interfaceScale": "Escala de la interfaz",
"showVerbose": "Mostrar salida verbosa durante",
"compilerWarnings": "alertas de compilación",
"automatic": "Automático",
"compile": "Compliar",
"upload": "Subir",
"verifyAfterUpload": "Verificar código después de subir",
"checkForUpdates": "Comprobar actualizaciones al iniciar",
"upload": "Carga",
"verifyAfterUpload": "Verificar el código después de cargarlo",
"editorQuickSuggestions": "Sugerencias rápidas del editor",
"additionalManagerURLs": "Gestor de URLs Adicionales de Tarjetas",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Tamaño de fuente invalido. Debe ser un entero positivo.",
"invalid.theme": "Tema no valido."
"additionalManagerURLs": "URLs adicionales de gestor de placas",
"noProxy": "Sin Proxy",
"manualProxy": "Configuración manual del proxy",
"newSketchbookLocation": "Selecciona la nueva ruta del sketchbook",
"choose": "Elija",
"enterAdditionalURLs": "Introduzca otras URLs, una por fila",
"unofficialBoardSupport": "Pulsa para listar las URLs de las tarjetas no oficiales",
"invalid.sketchbook.location": "Ruta del sketchbook no válida: {0}",
"invalid.editorFontSize": "Tamaño de fuente del editor no válido. Debe ser un número entero positivo.",
"invalid.theme": "Tema no válido."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"signIn": "Iniciar sesión",
"signOut": "Cerrar sesión",
"chooseSketchVisibility": "Elige la visibilidad de tu Sketch:",
"privateVisibility": "Privado: Solo tú puedes ver el código.",
"publicVisibility": "Público: Cualquiera con el enlace puede ver el código.",
"link": "Enlace:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Compartir código",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"embed": "Incrustado:",
"cloudSketchbook": "Libro de bocetos en la nube",
"shareSketch": "Compartir Sketch",
"showHideRemoveSketchbook": "Mostrar/Ocultar Sketchbook Remoto",
"pullSketch": "Descargar boceto",
"openInCloudEditor": "Abrir en editor web",
"options": "Opciones...",
"share": "Compartir...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"remote": "Remoto",
"emptySketchbook": "Tu Sketchbook está vacío",
"visitArduinoCloud": "Visita Arduino Cloud para crear Cloud Sketches. ",
"signInToCloud": "Iniciar sesión en Arduino Cloud",
"syncEditSketches": "Sincroniza y edita tus Arduino Cloud Sketches",
"learnMore": "Aprender más",
"continue": "Continuar",
"pushSketch": "Pulsa para listar las URLs de la tarjetas no oficiales",
"pushSketchMsg": "Este es un Sketch público. Antes de enviarlo, asegúrate de que cualquier información sensible está definida en los archivos arduino_secrets.h. Puedes hacer que un Sketch sea privado desde el panel Compartir.",
"pull": "Descargar",
"pullSketchMsg": "Descarga finalizada",
"donePulling": "Extracción de '{0}' realizada.",
"notYetPulled": "No se puede cargar a las nube. Todavía no ha sido descargado",
"push": "Cargar",
"pullFirst": "Tiene que descargarlo primero, para poder cargarlo en la nube",
"donePushing": "Envío a '{0}' realizado.",
"connected": "Conectado",
"offline": "Offline",
"offline": "Desconectado",
"profilePicture": "Foto de perfil"
},
"board": {
"installManually": "Instalar manualmente",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"installNow": "Hay que instalar el núcleo \"{0} {1} \" para la placa \"{2}\" actualmente seleccionada. ¿Quieres instalarlo ahora?",
"configDialogTitle": "Seleccione otra placa y puerto",
"configDialog1": "Selecciona tanto una placa como un puerto si quieres cargar un sketch.",
"configDialog2": "Si seleccionas solo una placa podrás compilar, pero no cargar tu sketch.",
"pleasePickBoard": "Por favor, elija una placa conectada al puerto que haya seleccionado.",
"showAllAvailablePorts": "Muestra todos los puertos disponibles cuando está activado",
"programmer": "Programador",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Obtén información de la placa",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
"succesfullyInstalledPlatform": "Plataforma {0}:{1} instalada correctamente",
"succesfullyUninstalledPlatform": "Plataforma {0}:{1} desinstalada correctamente",
"couldNotFindPreviouslySelected": "No se ha podido encontrar la placa previamente seleccionada '{0}' en la plataforma instalada '{1}'. Por favor, vuelve a seleccionar manualmente la placa que quieres utilizar. ¿Quieres volver a seleccionarla ahora?",
"reselectLater": "Vuelve a seleccionar más tarde",
"noneSelected": "Ninguna placa seleccionada.",
"noPortsSelected": "No se han seleccionado puertos para la placa: '{0}'.",
"noFQBN": "El FQBN no está disponible para la placa seleccionada \"{0}\". ¿Tienes instalado el núcleo correspondiente?",
"openBoardsConfig": "Seleccione otra placa y puerto...",
"boardListItem": "{0} en {1}",
"selectBoardForInfo": "Por favor, seleccione una placa para obtener información sobre ella.",
"platformMissing": "La plataforma seleccionada para la placa '{0}' no está instalada.",
"selectPortForInfo": "Por favor, seleccione un puerto para obtener información sobre la placa.",
"boardInfo": "Información de la placa",
"board": "Placa{0}",
"port": "Puerto {0}",
"getBoardInfo": "Obtener información de la placa",
"inSketchbook": " (en el Sketchbook)"
},
"boardsManager": "Gestor de tarjetas",
"boardsManager": "Gestor de placas",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"label": "Acerca de {0}",
"detail": "Versión: {0}\nFecha: {1}{2}\nVersión del CLI: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Añadir fichero...",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
"replaceTitle": "Reemplazar",
"fileAdded": "Un archivo añadido al sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"replaceMsg": "¿Sustituir la versión existente de {0}?",
"library": {
"addZip": "Añadir biblioteca .ZIP...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
"zipLibrary": "Biblioteca",
"overwriteExistingLibrary": "¿Quieres sobrescribir la biblioteca existente?",
"successfullyInstalledZipLibrary": "Biblioteca instalada correctamente desde el archivo {0}",
"namedLibraryAlreadyExists": "Ya existe una carpeta de la biblioteca llamada {0}. ¿Quieres sobrescribirla?",
"libraryAlreadyExists": "Ya existe una biblioteca. ¿Quieres sobrescribirla?",
"include": "Incluir biblioteca",
"manageLibraries": "Gestionar bibliotecas...",
"arduinoLibraries": "Bibliotecas de Arduino",
"contributedLibraries": "Bibliotecas aportadas",
"title": "Gestor de Bibliotecas",
"needsOneDependency": "La biblioteca <b>{0}:{1}</b> necesita otra dependencia que actualmente no está instalada:",
"needsMultipleDependencies": "La biblioteca <b>{0}:{1}</b> necesita otras dependencias que actualmente no están instaladas:",
"installOneMissingDependency": "¿Quieres instalar la dependencia faltante?",
"installMissingDependencies": "¿Quieres instalar todas las dependencias faltantes?",
"dependenciesForLibrary": "Dependencias para la biblioteca {0}:{1}",
"installAll": "Instalar todo",
"installOnly": "Instalar {0} solamente",
"installedSuccessfully": "Biblioteca {0}:{1} instalada correctamente",
"uninstalledSuccessfully": "Biblioteca {0}:{1} desinstalada correctamente"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"selectZip": "Seleccione un archivo zip que contenga la biblioteca que deseas añadir",
"sketch": {
"archiveSketch": "Archivo de programa",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"saveSketchAs": "Guardar carpeta de sketch como...",
"createdArchive": "Archivo '{0}' creado.",
"new": "Nuevo",
"openRecent": "Abierto recientemente",
"showFolder": "Mostrar carpeta de Sketch",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"moving": "Moviendo",
"movingMsg": "El archivo \"{0}\" tiene que estar dentro de una carpeta de bocetos llamada \"{1}\".\n¿Crear esta carpeta, mover el archivo y continuar?",
"cantOpen": "Ya existe una carpeta con el nombre \"{0}\". No se puede abrir.",
"saveFolderAs": "Save sketch folder as...",
"saveFolderAs": "Guardar carpeta de sketch como...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"upload": "Cargar",
"uploadUsingProgrammer": "Cargar usando el programador",
"userFieldsNotFoundError": "No se pueden encontrar campos de usuario para la placa conectada",
"doneUploading": "Carga completada.",
"configureAndUpload": "Configurar y subir",
"verifyOrCompile": "Verificar/Compilar",
"exportBinary": "Exportar binario compilado",
"verify": "Verificar",
"doneCompiling": "Compilación completada.",
"couldNotConnectToSerial": "No se ha podido reconectar al puerto serie. {0}",
"openSketchInNewWindow": "Abrir Sketch en una ventana nueva",
"openFolder": "Abrir carpeta",
"titleLocalSketchbook": "Sketchbook Local",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
"close": "¿Estás seguro de que quieres cerrar el sketch?"
},
"bootloader": {
"burnBootloader": "Quemar Bootloader",
"doneBurningBootloader": "Done burning bootloader."
"burnBootloader": "Grabar Bootloader",
"doneBurningBootloader": "Finalizada la grabación del bootloader."
},
"editor": {
"copyForForum": "Copiar al Foro (Markdown)",
"commentUncomment": "Comentar / Descomentar",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"increaseIndent": "Aumentar sangría",
"decreaseIndent": "Disminuir sangría",
"increaseFontSize": "Aumentar tamaño de fuente",
"decreaseFontSize": "Reducir Tamaño de Fuente",
"autoFormat": "Auto Formato"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"menu": "Ejemplos",
"couldNotInitializeExamples": "No se han podido inicializar los ejemplos integrados.",
"builtInExamples": "Ejemplos Construidos ",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
"customLibrary": "Ejemplos de bibliotecas personalizadas",
"for": "Ejemplos para {0}",
"forAny": "Ejemplos para cualquier placa"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visitar Arduino.cc"
"search": "Buscar en Arduino.cc",
"keyword": "Escribe una palabra clave",
"gettingStarted": "Primeros pasos",
"environment": "Entorno de desarrollo (IDE)",
"troubleshooting": "Resolución de problemas",
"reference": "Referencia",
"findInReference": "Buscar en la referencia",
"faq": "Preguntas frecuentes",
"visit": "Visitar Arduino.cc",
"privacyPolicy": "Política de privacidad"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Subir",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
"uploadRootCertificates": "Cargar certificados raíz SSL",
"openContext": "Contexto abierto",
"remove": "Eliminar",
"upload": "Cargar",
"addURL": "Añadir URL para obtener el certificado SSL",
"enterURL": "Introduce la URL",
"selectCertificateToUpload": "1. Seleccione el certificado que desea cargar",
"addNew": "Añadir nuevo",
"selectDestinationBoardToUpload": "2. Seleccione la placa de destino y cargue el certificado",
"uploadingCertificates": "Cargando certificados.",
"certificatesUploaded": "Certificados cargados.",
"uploadFailed": "Carga fallida. Por favor, inténtalo de nuevo.",
"selectBoard": "Selecciona una placa...",
"boardAtPort": "{0} en {1}",
"noSupportedBoardConnected": "No hay ninguna placa compatible conectada"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"updater": "Actualizador de Firmware de WiFi101 / WiFiNINA",
"selectBoard": "Seleccionar Placa",
"checkUpdates": "Comprobar actualizaciones",
"selectVersion": "Seleccionar la versión del firmware",
"install": "Instalar",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"failedInstall": "Installation failed. Please try again."
"overwriteSketch": "La instalación sobrescribirá el Sketch de la placa.",
"installingFirmware": "Instalando el firmware.",
"successfullyInstalled": "Firmware instalado correctamente.",
"failedInstall": "Instalación fallida, Por favor, inténtalo de nuevo."
},
"dialog": {
"dontAskAgain": "Don't ask again"
"dontAskAgain": "No volver a preguntar"
},
"userFields": {
"cancel": "Cancel",
"upload": "Subir"
"cancel": "Cancelar",
"upload": "Cargar"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"toggleTimestamp": "Alternar la marca de tiempo",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"timestamp": "Marca de tiempo",
"noLineEndings": "Sin ajuste de línea",
"newLine": "Nueva línea",
"carriageReturn": "Retorno de carro",
"newLineCarriageReturn": "Ambos NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"notConnected": "No conectado. Selecciona una placa y un puerto para conectarte automáticamente.",
"message": "Mensaje ({0} + Enter para enviar el mensaje a '{1}' en '{2}')",
"connectionBusy": "Error en la conexión. El puerto serie está ocupado: {0}",
"disconnected": "Desconectado {0} de {1}.",
"unexpectedError": "Error inesperado. Reconectando {0} en el puerto {1}.",
"failedReconnect": "Fallo al reconectar {0} al puerto serie después de 10 intentos consecutivos. El puerto serie {1} está ocupado.",
"reconnect": "Reconectando {0} a {1} en {2} segundos..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"uninstall": "Desinstalar",
"uninstallMsg": "¿Quieres desinstalar {0}?",
"by": "de",
"version": "Versión {0}",
"moreInfo": "More info",
"moreInfo": "Más información",
"install": "Instalar",
"filterSearch": "Filtre su búsqueda..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "No se ha podido guardar el sketch. Por favor, copia tu trabajo no guardado en tu editor de texto favorito y reinicia el IDE.",
"unsavedChanges": "Los cambios no guardados no serán guardados."
},
"compile": {
"error": "Compilation error: {0}"
"error": "Error de compilación: {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "1{0} error: 2{1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
"error": "Error al grabar el bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
"couldNotSave": "No se ha podido guardar el sketch. Por favor, copia tu trabajo no guardado en tu editor de texto favorito y reinicia el IDE.",
"offline": "Desconectado",
"daemonOffline": "Demonio del CLI fuera de línea",
"cannotConnectBackend": "No se puede conectar al backend.",
"cannotConnectDaemon": "No se puede conectar con el demonio del CLI."
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
"start": "Empezar...",
"typeNotSupported": "El tipo de sesión de depuración \"{0}\" no es compatible.",
"startError": "Se ha producido un error al iniciar la sesión de depuración, consulte los logs para obtener más detalles."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
"unsavedTitle": "Sin guardar {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
"expand": "Expandir",
"collapse": "Contraer"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"fileNewName": "Nombre del nuevo archivo",
"invalidFilename": "Nombre de archivo no válido.",
"invalidExtension": "\".{0}\" no es una extensión válida",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
"newFileName": "Nuevo nombre para el archivo",
"deleteCurrentSketch": "¿Quieres borrar el sketch actual?",
"sketchDirectoryError": "Se ha producido un error al crear el directorio de bocetos. Consulta el log para obtener más detalles. Es probable que la aplicación no funcione como se espera."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
"GoToCloud": "IR AL CLOUD"
}
}

View File

@@ -3,7 +3,7 @@
"common": {
"offlineIndicator": "Deskonektatuta zaudela dirudi. Interneterako konexiorik gabe, baliteke Arduino CLI ez izatea gai beharrezko baliabideak deskargatzeko, eta funtzionamendu txarra eragin lezake. Mesedez, konektatu Internetera eta berrabiarazi aplikazioa.",
"noBoardSelected": "Plakarik ez da hautatu",
"selectedOn": "on {0}",
"selectedOn": "Non: {0}",
"notConnected": "[konektatu gabe]",
"serialMonitor": "Serieko monitorea",
"oldFormat": "'{0}' programak `.pde` formatu zaharra erabiltzen du oraindik. `.ino` luzapen berrira aldatu nahi duzu?",
@@ -14,6 +14,22 @@
"saveChangesToSketch": "Programa honi egindako aldaketak gorde nahi dituzu itxi aurretik?",
"loseChanges": "Ez baduzu gordetzen, aldaketak galduko dira."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Orain ez",
"versionDownloaded": "Arduino IDE {0} deskargatu da.",
"closeToInstallNotice": "Itxi softwarea eta instalatu eguneratzea zure makinan.",
"closeAndInstallButton": "Itxi eta instalatu",
"downloadingNotice": "Arduino IDEren azken bertsioa deskargatzen",
"updateAvailable": "Eguneratzea eskuragarri",
"newVersionAvailable": "Arduino IDEren bertsio berri bat ({0}) eskuragarri dago deskargatzeko.",
"skipVersionButton": "Saltatu bertsioa",
"downloadButton": "Software eguneratzea",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software eguneratzea",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Programa",
"tools": "Tresnak"
@@ -21,28 +37,28 @@
"debug": {
"optimizeForDebugging": "Optimizatu arazketarako",
"debugWithMessage": "Araztu - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
"noPlatformInstalledFor": "Plataforma ez dago instalatuta honentzat: '{0}'",
"debuggingNotSupported": "Ez dauka arazketarako euskarririk: '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"language.log": "Egia Arduino Language Server-ek egunkari-fitxategiak sortu behar baditu programaren karpetan. Bestela, gezurra. Lehenetsia gezurra da.",
"compile.verbose": "Egia konpilazioaren irteera xehatua izateko. Lehenetsia Gezurra.",
"compile.warnings": "gcc-ri ze abisu maila erabili esaten dio. 'None' da lehenetsia",
"upload.verbose": "Egia kargaren irteera xehatua izateko. Lehenetsia Gezurra.",
"window.autoScale": "Egia erabiltzaile interfazea letra-tamainarekin automatikoki eskalatzen bada.",
"window.zoomLevel": "Doitu leihoaren zoom maila. Jatorrizko tamaina 0 da eta goraka (1) edo beheraka (-1) egindako aldaketa bakoitzak zooma %20 handitzea edo txikiagotzea eragiten du. Zoom maila zehaztasun handiagoarekin doitzeko zenbaki hamartarrak erabili ditzakezu.",
"ide.updateChannel": "Eguneratzea ze argitalpen kanaletik hartu behar den. 'stable' argitalpen egonkorra da, 'nightly' garapeneko azken eraikitzea.",
"board.certificates": "Plaketara kargatu daitezkeen ziurtagirien zerrenda",
"sketchbook.showAllFiles": "Egia programaren barruko programa-fitxategi guztiak erakusteko. Lehenetsia gezurra da.",
"cloud.enabled": "Egia programaren sinkronizazio-funtzioak gaituta badaude. Lehenetsia egia da.",
"cloud.pull.warn": "Egia bada erabiltzaileek abisua jasoko dute programa bat hodeitik kargatu aurretik. Lehenetsia egia da.",
"cloud.push.warn": "Egia bada erabiltzaileek abisua jasoko dute programa bat hodeian gorde aurretik. Lehenetsia egia da.",
"cloud.pushpublic.warn": "Egia bada erabiltzaileek abisua jasoko dute programa publiko bat hodeian gorde aurretik. Lehenetsia egia da.",
"cloud.sketchSyncEnpoint": "Zerbitzari batean programak gorde eta kargatzeko amaiera-puntua. Lehenetsia Arduino Cloud API da.",
"auth.clientID": "OAuth2 bezeroaren IDa",
"auth.domain": "OAuth2 domeinua.",
"auth.audience": "OAuth2 audientzia.",
"auth.registerUri": "The URI used to register a new user.",
"auth.registerUri": "Erabiltzaile berri bat erregistratzeko erabilitako URIa.",
"network": "Sarea",
"sketchbook.location": "Programa bildumaren kokalekua",
"browse": "Arakatu",
@@ -55,7 +71,6 @@
"compile": "konpilazioa",
"upload": "karga",
"verifyAfterUpload": "Egiaztatu kodea kargatu ondoren",
"checkForUpdates": "Egiaztatu eguneratzerik baden abioan",
"editorQuickSuggestions": "Editorearen iradokizun azkarrak",
"additionalManagerURLs": "Plaka kudeatzaile gehigarrien URLak:",
"noProxy": "Proxyrik ez",
@@ -66,64 +81,64 @@
"unofficialBoardSupport": "Egin klik ofizialak ez diren plaken laguntza-URL zerrenda ikusteko",
"invalid.sketchbook.location": "Programa bildumaren kokaleku baliogabea: {0}",
"invalid.editorFontSize": "Editorearen letra-tamaina baliogabea. Osoko zenbaki positibo bat izan behar du.",
"invalid.theme": "Invalid theme."
"invalid.theme": "Itxura baliogabea."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"signIn": "HASI SAIOA",
"signOut": "Amaitu saioa",
"chooseSketchVisibility": "Aukeratu zure programaren ikusgaitasuna:",
"privateVisibility": "Pribatua. Zuk soilik ikus dezakezu programa.",
"publicVisibility": "Publikoa. Esteka duen edozeinek ikus dezake programa.",
"link": "Esteka:",
"embed": "Embed:",
"embed": "Kapsulatu:",
"cloudSketchbook": "Hodeiko programa bilduma",
"shareSketch": "Partekatu programa",
"showHideRemoveSketchbook": "Erakutsi/Ezkutatu urruneko programa bilduma",
"pullSketch": "Pull Sketch",
"pullSketch": "Gorde hodeian",
"openInCloudEditor": "Ireki hodeiko editorean",
"options": "Aukerak...",
"share": "Partekatu...",
"remote": "Remote",
"remote": "Urrunekoa",
"emptySketchbook": "Zure programa bilduma hutsik dago",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"visitArduinoCloud": "Bisitatu Arduino Cloud hodeiko programak sortzeko.",
"signInToCloud": "Hasi saioa Arduino Cloud-en",
"syncEditSketches": "Sinkronizatu eta editatu zure Arduino Cloud-eko programak",
"learnMore": "Ikasi gehiago",
"continue": "Jarraitu",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"pushSketch": "Kargatu hodeitik",
"pushSketchMsg": "Hau programa publiko bat da. Hodeian gorde aurretik, ziurtatu isilpeko informazioa arduino_secrets.h fitxategietan definituta dagoela. Programa pribatu bihurtu dezakezu Partekatu paneletik.",
"pull": "Ekarri hodeitik",
"pullSketchMsg": "Programa hau Hodeitik kargatzeak bertsio lokala gainidatziko du. Ziur zaude jarraitu nahi duzula?",
"donePulling": "Hodeitik kargatzea burututa: '{0}'.",
"notYetPulled": "Ezin da Hodeian gorde. Ez da Hodeitik kargatu oraindik.",
"push": "Gorde hodeian",
"pullFirst": "Lehenengo Hodeitik kargatu behar duzu, gero Hodeian gorde ahal izateko.",
"donePushing": "Hodeian gordetzea burututa: '{0}'.",
"connected": "Konektatuta",
"offline": "Offline",
"profilePicture": "Profile picture"
"offline": "Lineaz kanpo",
"profilePicture": "Profileko irudia"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"installManually": "Instalatu eskuz",
"installNow": "\"{0} {1}\" nukleoa instalatu behar da unean hautatutako \"{2}\" plakarentzat. Orain instalatu nahi duzu?",
"configDialogTitle": "Hautatu beste plaka eta ataka bat",
"configDialog1": "Hautatu plaka bat eta ataka bat programa bat kargatu nahi baduzu.",
"configDialog2": "Plaka bakarrik hautatzen baduzu, programa konpilatu ahal izango duzu, baina ez kargatu.",
"pleasePickBoard": "Aukeratu hautatu duzun atakara konektatutako plaka bat.",
"showAllAvailablePorts": "Gaituta dagoenean erabilgarri dauden ataka guztiak erakusten ditu",
"programmer": "Programatzailea",
"succesfullyInstalledPlatform": "{0}:{1} plataforma behar bezala instalatu da",
"succesfullyUninstalledPlatform": "{0}:{1} plataforma behar bezala desinstalatu da",
"couldNotFindPreviouslySelected": "Ezin izan da aurkitu aurrez hautatutako '{0}' plaka instalatutako '{1}' plataforman. Hautatu berriz eskuz erabili nahi duzun plaka. Orain berriz hautatu nahi duzu?",
"reselectLater": "Hautatu berriz geroago",
"noneSelected": "Plakarik ez da hautatu",
"noPortsSelected": "Ez da atakarik hautatu plakarentzat: '{0}'",
"noFQBN": "FQBN ez dago erabilgarri hautatutako \"{0}\" plakarentzat. Dagokion nukleoa instalatuta daukazu?",
"openBoardsConfig": "Hautatu beste plaka eta ataka bat...",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardListItem": "{0} hemen: {1}",
"selectBoardForInfo": "Hautatu plaka bat plakaren informazioa eskuratzeko.",
"platformMissing": "Hautatutako '{0}' plakarentzako plataforma ez dago instalatuta.",
"selectPortForInfo": "Hautatu ataka bat plakaren informazioa eskuratzeko.",
"boardInfo": "Plakaren informazioa",
"board": "{0} plaka",
"port": "{0} ataka",
@@ -132,74 +147,74 @@
},
"boardsManager": "Plaka kudeatzailea",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"label": "{0}ri buruz",
"detail": "Bertsioa: {0}\nData: {1}{2}\nCLI bertsioa: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Gehitu fitxategia",
"replaceTitle": "Ordezkatu",
"fileAdded": "Fitxategi bat gehitu da programara."
},
"replaceMsg": "Replace the existing version of {0}?",
"replaceMsg": "Lehendik dagoen {0} bertsioa ordezkatu?",
"library": {
"addZip": "Gehitu .ZIP liburutegia...",
"zipLibrary": "Liburutegia",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"overwriteExistingLibrary": "Lehendik dagoen liburutegia gainidatzi nahi duzu?",
"successfullyInstalledZipLibrary": "Liburutegia behar bezala instalatu da {0} artxibotik",
"namedLibraryAlreadyExists": "{0} izeneko liburutegi-karpeta bat badago dagoeneko. Gainidatzi nahi duzu?",
"libraryAlreadyExists": "Liburutegi bat badago dagoeneko. Gainidatzi nahi duzu?",
"include": "Hartu barne liburutegia",
"manageLibraries": "Kudeatu liburutegiak...",
"arduinoLibraries": "Arduino liburutegiak",
"contributedLibraries": "Contributed libraries",
"contributedLibraries": "Hirugarrengoen liburutegiak",
"title": "Liburutegi kudeatzailea",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
"needsOneDependency": "<b>{0}:{1}</b> liburutegiak instalatu gabeko beste mendekotasun bat behar du:",
"needsMultipleDependencies": "<b>{0}:{1}</b> liburutegiak instalatu gabeko beste mendekotasun batzuk behar ditu:",
"installOneMissingDependency": "Falta den mendekotasuna instalatu nahi duzu?",
"installMissingDependencies": "Falta diren mendekotasun guztiak instalatu nahi dituzu?",
"dependenciesForLibrary": "{0} liburutegiaren mendekotasunak: {1}",
"installAll": "Instalatu guztiak",
"installOnly": "Instalatu {0} bakarrik",
"installedSuccessfully": "{0}:{1} liburutegia behar bezala instalatu da",
"uninstalledSuccessfully": "{0}:{1} liburutegia behar bezala desinstalatu da"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"selectZip": "Hautatu gehitu nahi duzun liburutegia daukan zip fitxategia",
"sketch": {
"archiveSketch": "Artxibatu programa",
"saveSketchAs": "Gorde programen karpeta honela...",
"createdArchive": "'{0}' artxiboa sortu da.",
"new": "Berria",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"openRecent": "Ireki azkenaldikoa",
"showFolder": "Erakutsi programen karpeta",
"sketch": "Programa",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"moving": "Lekuz aldatzen",
"movingMsg": "\"{0}\" fitxategiak \"{1}\" izeneko programa-karpetaren barruan egon behar du.\nSortu karpeta, eraman fitxategia bertara eta jarraitu?",
"cantOpen": "\"{0}\" izeneko karpeta badago dagoeneko. Ezin da programa ireki.",
"saveFolderAs": "Gorde programen karpeta honela...",
"sketchbook": "Programa bilduma",
"upload": "Kargatu",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"uploadUsingProgrammer": "Kargatu programatzailea erabiliz",
"userFieldsNotFoundError": "Ezin dira erabiltzaile eremuak aurkitu konektatutako plakarentzat",
"doneUploading": "Karga burutu da.",
"configureAndUpload": "Konfiguratu eta kargatu",
"verifyOrCompile": "Egiaztatu/Konpilatu",
"exportBinary": "Esportatu konpilatutako bitarra",
"verify": "Egiaztatu",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"doneCompiling": "Konpilazioa burutu da.",
"couldNotConnectToSerial": "Ezin izan da serieko atakara berriz konektatu. {0}",
"openSketchInNewWindow": "Ireki programa leiho berrian",
"openFolder": "Ireki karpeta",
"titleLocalSketchbook": "Programa bilduma lokala",
"titleSketchbook": "Programa bilduma",
"close": "Ziur zaude programa itxi nahi duzula?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
"burnBootloader": "Kargatu abiarazte-kudeatzailea",
"doneBurningBootloader": "Abiarazte-kudeatzailearen karga burutu da."
},
"editor": {
"copyForForum": "Kopiatu fororako (Markdown)",
"commentUncomment": "Comment/Uncomment",
"commentUncomment": "Iruzkindu/Desiruzkindu",
"increaseIndent": "Handitu koska",
"decreaseIndent": "Txikiagotu koska",
"increaseFontSize": "Handitu letra-tamaina",
@@ -208,53 +223,54 @@
},
"examples": {
"menu": "Adibideak",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
"couldNotInitializeExamples": "Ezin izan dira hasieratu integratutako adibideak.",
"builtInExamples": "Integratutako adibideak",
"customLibrary": "Liburutegi pertsonalizatuetako adibideak",
"for": "Honen adibideak: {0}",
"forAny": "Edozein plakarentzako adibideak"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"search": "Bilatu Arduino.cc-n",
"keyword": "Idatzi gako-hitz bat",
"gettingStarted": "Erabiltzen hasi",
"environment": "Ingurunea",
"troubleshooting": "Troubleshooting",
"troubleshooting": "Arazoak konpontzen",
"reference": "Erreferentzia",
"findInReference": "Bilatu erreferentzian",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"faq": "Maiz egindako galderak",
"visit": "Bisitatu Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"uploadRootCertificates": "Kargatu SSL erro-ziurtagiriak",
"openContext": "Ireki testuingurua",
"remove": "Kendu",
"upload": "Kargatu",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addURL": "Gehitu URLa SSL ziurtagiria eskuratzeko",
"enterURL": "Idatzi URLa",
"selectCertificateToUpload": "1. Hautatu ziurtagiria kargatzeko",
"addNew": "Gehitu berria",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"selectDestinationBoardToUpload": "2. Hautatu helburuko plaka eta kargatu ziurtagiria",
"uploadingCertificates": "Ziurtagiriak kargatzen.",
"certificatesUploaded": "Ziurtagiriak kargatuta.",
"uploadFailed": "Upload failed. Please try again.",
"uploadFailed": "Kargak huts egin du. Mesedez saiatu berriro.",
"selectBoard": "Hautatu plaka bat...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
"boardAtPort": "{0} hemen: {1}",
"noSupportedBoardConnected": "Ez dago euskarridun plakarik konektatuta"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA firmware eguneratzailea",
"selectBoard": "Hautatu plaka",
"checkUpdates": "Egiaztatu eguneraketak",
"checkUpdates": "Egiaztatu eguneratzeak",
"selectVersion": "Hautatu firmware bertsioa",
"install": "Instalatu",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"failedInstall": "Installation failed. Please try again."
"overwriteSketch": "Instalazioak plakako programa gainidatziko du.",
"installingFirmware": "Firmwarea instalatzen.",
"successfullyInstalled": "Firmwarea behar bezala instalatu da.",
"failedInstall": "Instalazioak huts egin du. Mesedez saiatu berriro."
},
"dialog": {
"dontAskAgain": "Don't ask again"
"dontAskAgain": "Ez galdetu berriro"
},
"userFields": {
"cancel": "Utzi",
@@ -262,55 +278,55 @@
},
"serial": {
"toggleTimestamp": "Txandakatu denbora-zigilua",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"autoscroll": "Korritze automatikoa",
"timestamp": "Denbora-zigilua",
"noLineEndings": "Lerro amaierarik ez",
"newLine": "Lerro berria",
"carriageReturn": "Orga-itzulera",
"newLineCarriageReturn": "NL & CR biak",
"notConnected": "Ez dago konektatuta. Hautatu plaka eta ataka automatikoki konektatzeko.",
"message": "Mezua ({0} + Enter honi mezua bidaltzeko: '{1}' hemen: '{2}')",
"connectionBusy": "Konexioak huts egin du. Serieko ataka lanpetuta dago: {0}",
"disconnected": "{0} deskonektatu da hemendik: {1}.",
"unexpectedError": "Ustekabeko errorea. {0} berriz konektatzen {1} atakan.",
"failedReconnect": "Huts egin du {0} serieko atakara berriz konektatzeko 10 saiakeraren ondoren. {1} serieko ataka lanpetuta dago.",
"reconnect": "Berriz konektatuko da {0} {1} atakan {2} segundo barru..."
},
"component": {
"uninstall": "Desinstalatu",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"uninstallMsg": "{0} desinstalatu nahi duzu?",
"by": "Egilea:",
"version": "{0} bertsioa",
"moreInfo": "Informazio gehiago",
"install": "INSTALATU",
"filterSearch": "Filter your search..."
"filterSearch": "Iragazi zure bilaketa..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "Ezin izan da programa gorde. Kopiatu gorde gabeko zure lana zure testu-editore gogokoenera eta berrabiarazi IDEa.",
"unsavedChanges": "Gorde gabeko aldaketak galduko dira."
},
"compile": {
"error": "Compilation error: {0}"
"error": "Konpilazio-errorea: {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "{0} errorea: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
"error": "Errorea abiarazte-kudeatzailea kargatzean: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
"couldNotSave": "Ezin izan da programa gorde. Kopiatu gorde gabeko zure lana zure testu-editore gogokoenera eta berrabiarazi IDEa.",
"offline": "Lineaz kanpo",
"daemonOffline": "CLI daemon-a lineaz kanpo",
"cannotConnectBackend": "Ezin izan da atzeko aldera konektatu.",
"cannotConnectDaemon": "Ezin izan da CLI daemon-era konektatu."
},
"debug": {
"start": "Hasi...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
"typeNotSupported": "\"{0}\" motako arazketa saioak ez du euskarririk.",
"startError": "Errore bat gertatu da arazketa saioa hastean. Ikusi egunkariak xehetasun gehiagorako."
},
"editor": {
"unsavedTitle": "Gorde gabe {0}"
@@ -322,10 +338,10 @@
"workspace": {
"fileNewName": "Fitxategi berriaren izena",
"invalidFilename": "Fitxategi-izen baliogabea.",
"invalidExtension": ".{0} is not a valid extension",
"invalidExtension": "{0} ez da baliozko luzapen bat.",
"newFileName": "Fitxategiaren izen berria",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
"deleteCurrentSketch": "Uneko programa ezabatu nahi duzu?",
"sketchDirectoryError": "Errore bat gertatu da programaren direktorioa sortzean. Ikusi egunkaria xehetasun gehiagorako. Aplikazioak ez du espero bezala funtzionatuko."
}
},
"cloud": {

View File

@@ -1,334 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.",
"offlineIndicator": "به نظر می رسد آفلاین هستید. بدون اتصال به اینترنت، رابط ترمینال آردوینو ممکن است نتواند منابع مورد نیاز را دانلود کند و باعث اختلال در عملکرد شود. لطفاً به اینترنت متصل شوید و برنامه را مجدداً راه اندازی کنید.",
"noBoardSelected": "بردی انتخاب نشده",
"selectedOn": "روشن {0}",
"notConnected": "[not connected]",
"serialMonitor": "Serial Monitor",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"notConnected": "[متصل نشد]",
"serialMonitor": "نمایشگر ترمینال سریال",
"oldFormat": "'{0}' هنوز از قالب قدیمی `.pde` استفاده می کند. آیا می‌خواهید به برنامه افزودنی «.ino» جدید بروید؟",
"later": "بعدا",
"selectBoard": "انتخاب برد",
"unknown": "نامعلوم",
"processing": "در حال محاسبه",
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"saveChangesToSketch": "آیا می خواهید قبل از بسته شدن، تغییرات را در این طرح ذخیره کنید؟",
"loseChanges": "اگر ذخیره نکنید، تغییراتتون اعمال نمی شوند."
},
"ide-updater": {
"errorCheckingForUpdates": "خطا در حلقه بررسی برای وجود بروزرسانی برای آردوینو رخ داد. {0}",
"notNowButton": "الان ممکن نیست",
"versionDownloaded": "آردوینو {0} دانلود شده بوده است.",
"closeToInstallNotice": "نرم افزار را ببندید و به روز رسانی را روی دستگاه خود نصب کنید.",
"closeAndInstallButton": "بستن و نصب",
"downloadingNotice": "در حال بارگیری آخرین نسخه از آردوینو",
"updateAvailable": "به روز رسانی موجود است",
"newVersionAvailable": "ورژن جدید ای دی ای آردوینو ({0}) آماده نصب است.",
"skipVersionButton": "نسخه بعدی",
"downloadButton": "دانلود",
"goToDownloadPage": "یک به‌روزرسانی برای آردوینو در دسترس است، اما نمی‌توانیم آن را به‌طور خودکار دانلود و نصب کنیم. لطفا به صفحه دانلود بروید و آخرین نسخه را از آنجا دانلود کنید.",
"goToDownloadButton": "برو به بارگیری ",
"ideUpdaterDialog": "به روز رسانی نرم افزار",
"noUpdatesAvailable": "هیچ به روز رسانی جدیدی برای آردوینو موجود نیست"
},
"menu": {
"sketch": "Sketch",
"sketch": "طرح",
"tools": "ابزار ها"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
"optimizeForDebugging": "بهینه کردن برای رفع خطا",
"debugWithMessage": "رفع خطا {0}",
"noPlatformInstalledFor": "دستگاه مورد نظر برای {0} نصب نشده است",
"debuggingNotSupported": "رفع خطا توسط {0} پشتیبانی نمی شود."
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"language.log": "اگر سرور زبان آردوینو باید فایل های گزارش را در پوشه طرح ایجاد کند درست می باشد. در غیر این صورت، نادرست است. به طور پیش فرض نادرست است.",
"compile.verbose": "برای خروجی کامپایل پرمخاطب درست است. به طور پیش فرض نادرست است",
"compile.warnings": "به gcc می گوید از کدام سطح هشدار استفاده کند. به طور پیش فرض \"هیچ\" است",
"upload.verbose": "برای خروجی آپلود پرمخاطب درست است. به طور پیش فرض نادرست است.",
"window.autoScale": "اگر رابط کاربری به طور خودکار با اندازه فونت تغییر کند درست است.",
"window.zoomLevel": "سطح بزرگنمایی پنجره را تنظیم کنید. اندازه اصلی 0 است و هر افزایش به بالاتر (مثلاً 1) یا پایین تر (مثلاً -1) نشان دهنده بزرگنمایی 20٪ بزرگتر یا کوچکتر است. همچنین می توانید اعداد اعشاری را وارد کنید تا سطح زوم را با دقت دقیق تر تنظیم کنید.",
"ide.updateChannel": "برای به روز رسانی کانال را منتشر کنید 'stable' نسخه پایدار است، 'nightly' جدیدترین ساخت توسعه است.",
"board.certificates": "فهرست گواهی‌هایی که می‌توان در تابلوها بارگذاری کرد",
"sketchbook.showAllFiles": "همه فایل‌های طرح را در داخل طرح نشان دهد درست است. به طور پیش فرض نادرست است.",
"cloud.enabled": "اگر فعال بودن توابع همگام سازی طرح درست می باشد ، پیش فرض ها درست است",
"cloud.pull.warn": "اگر هشدار دادن به کاربران قبل از کشیدن یک طرح ابری درست می باشد ، پیش فرض ها صحیح است.",
"cloud.push.warn": "اگر هشدار دادن به کاربران قبل از ارسال یک طرح ابری درست است پیش فرض ها درست می باشد",
"cloud.pushpublic.warn": "اگر هشدار دادن به کاربران قبل از ارسال یک طرح عمومی به فضای درست می باشد پیش فرض ها درست است.",
"cloud.sketchSyncEnpoint": "نقطه ای برای ارسال و دریافت طرح ها استفاده می شود . به طور پیش فرض به رابط ابر آردوینو استفاده می کند.",
"auth.clientID": "شناسه مشتری OAuth2(احراز هویت اینترنتی).",
"auth.domain": "دامنه OAuth2(احراز هویت اینترنتی).",
"auth.audience": "حضار OAuth2(احراز هویت اینترنتی).",
"auth.registerUri": "لینک برای ثبت یک کاربر جدید استفاده می شود.",
"network": "نتورک",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"sketchbook.location": "مکان منبع طرح ها",
"browse": "مرور کردن",
"files.inside.sketches": "نمایش فایل ها در داخل طرح ها",
"editorFontSize": "اندازه فونت ویرایشگر",
"interfaceScale": "مقیاس رابط",
"showVerbose": "نمایش خروجی پرمخاطب در طول",
"compilerWarnings": "هشدار های کامپایلر",
"automatic": "اتوماتیک",
"compile": "compile",
"compile": "کامپایل",
"upload": "آپلود",
"verifyAfterUpload": "تائید کد بعد از آپلود",
"checkForUpdates": "Check for updates on startup",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"editorQuickSuggestions": "پیشنهادات سریع ویرایشگر",
"additionalManagerURLs": "نشانی‌های اینترنتی مدیر تابلوهای افزوده",
"noProxy": "بدون پروکسی",
"manualProxy": "پیکربندی دستی پروکسی",
"newSketchbookLocation": "مکان جدید منبع طرح ها را مشخص کنید",
"choose": "انتخاب",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
"enterAdditionalURLs": "نشانی‌های وب اضافی، یکی برای هر ردیف وارد کنید",
"unofficialBoardSupport": "برای لیستی از آدرس های اینترنتی پشتیبانی هیئت مدیره غیررسمی کلیک کنید",
"invalid.sketchbook.location": "مکان نامعتبر منبع طرح ها: {0}",
"invalid.editorFontSize": "اندازه فونت ویرایشگر نامعتبر است. باید یک عدد صحیح مثبت باشد.",
"invalid.theme": "طرح زمینه موجود نیست"
},
"cloud": {
"signIn": "ورود کاربر",
"signOut": "خروج کاربر",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"chooseSketchVisibility": "قابلیت مشاهده طرح خود را انتخاب کنید:",
"privateVisibility": "خصوصی است. فقط شما می توانید طرح را مشاهده کنید.",
"publicVisibility": "عمومی است. هر کسی که پیوند را داشته باشد می تواند طرح را مشاهده کند.",
"link": "لینک:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"embed": "قرار دادن:",
"cloudSketchbook": "منبع ابری طرح ها",
"shareSketch": "اشتراک طرح",
"showHideRemoveSketchbook": "نمایش/پنهان کردن از راه دور منبع طرح ها",
"pullSketch": "دریافت طرح",
"openInCloudEditor": "در ویرایشگر ابری باز کن",
"options": "تنظیمات...",
"share": "اشتراک گذاری...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"remote": "از راه دور",
"emptySketchbook": "طرح شما خالی است",
"visitArduinoCloud": "بازدید از ابر آردوینو برای ساخت ابر طرح ها",
"signInToCloud": "ورود به ابر آردوینو",
"syncEditSketches": "طرح های ابر آردوینو خود را همگام سازی و ویرایش کنید",
"learnMore": "یادگیری بیشتر",
"continue": "ادامه",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"pushSketch": "ارسال طرح",
"pushSketchMsg": "این یک طرح عمومی است. قبل از ارسال، مطمئن شوید که اطلاعات حساس در فایل‌های arduino_secrets.h تعریف شده است. می‌توانید از پانل اشتراک‌گذاری یک طرح را خصوصی کنید.",
"pull": "دریافت",
"pullSketchMsg": "با بیرون کشیدن این طرح از ابر، نسخه محلی آن بازنویسی می شود. آیا مطمئن هستید که میخواهید ادامه دهید؟",
"donePulling": "پایان دریافت {0}",
"notYetPulled": "نمی توان به ابر ارسال کرد. هنوز دریافت نشده است.",
"push": "ارسال",
"pullFirst": "ابتدا باید دریافت کنید تا بتوانید به سمت ابر ارسال کنید.",
"donePushing": "پایان ارسال {0}",
"connected": "متصل",
"offline": "آفلاین",
"profilePicture": "عکس پروفایل"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"installManually": "دستی نصب کن",
"installNow": "هسته \"{0}{1}\" باید برای برد \"{2}\" انتخاب شده فعلی نصب شود. آیا الان می خواهید نصبش کنید؟",
"configDialogTitle": "انتخاب یک بورد و پورت دیگر",
"configDialog1": "اگر می‌خواهید طرحی را آپلود کنید، هم یک تابلو و هم یک پورت انتخاب کنید.",
"configDialog2": "اگر فقط تابلو را انتخاب کنید، می توانید کامپایل کنید، اما نمی توانید طرح خود را آپلود کنید.",
"pleasePickBoard": "لطفاً یک برد متصل به پورتی که انتخاب کرده اید را انتخاب کنید.",
"showAllAvailablePorts": "نمایش تمام پورت های موجود در صورت فعال بودن",
"programmer": "برنامه ریز",
"succesfullyInstalledPlatform": "نصب پلتفرم موفقیت آمیز بود {0}:{1}",
"succesfullyUninstalledPlatform": "لغو نصب پلتفرم موفقیت آمیز بود. {0}:{1}",
"couldNotFindPreviouslySelected": "نمی توان برد انتخاب شده قبلی '{0}' در پلتفرم نصب شده '{1}' را پیدا کرد. لطفاً تابلویی را که می‌خواهید استفاده کنید، مجدداً به‌صورت دستی انتخاب کنید. آیا اکنون می خواهید آن را مجدداً انتخاب کنید؟",
"reselectLater": "بعدا انتخاب کنید",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"noneSelected": "هیچ بردی انتخاب نشده است.",
"noPortsSelected": "هیچ پورتی برای برد انتخاب نشده است.{0}",
"noFQBN": "FQBN برای برد انتخاب شده \"{0}\" موجود نیست. آیا هسته مربوطه را نصب کرده اید؟",
"openBoardsConfig": "انتخاب سایر برد ها و پورت ها",
"boardListItem": "{0} در {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"selectBoardForInfo": "لطفاً یک برد را برای به دست آوردن اطلاعات هیئت مدیره انتخاب کنید.",
"platformMissing": "پلت فرم برای برد انتخابی '{0}' نصب نشده است.",
"selectPortForInfo": "لطفاً یک پورت را برای به دست آوردن اطلاعات هیئت مدیره انتخاب کنید.",
"boardInfo": "مشخصات برد",
"board": "بورد {0}",
"port": "پورت {0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
"getBoardInfo": "دریافت راهنمای برد",
"inSketchbook": "(در منبع طرح ها)"
},
"boardsManager": "Boards Manager",
"boardsManager": "مدیریت برد ها",
"about": {
"label": "درباره {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"detail": "نسخه :{0}\nتاریخ: {1} {2}\nنسخه CLI : {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "فایل اظافه کن",
"replaceTitle": "جایگذاری",
"fileAdded": "One file added to the sketch."
"fileAdded": "یک فایل به طرح افزوده شد."
},
"replaceMsg": "Replace the existing version of {0}?",
"replaceMsg": "آیا می خواهید نسخه موجود را با {0} جایگزین کنید؟",
"library": {
"addZip": "Add .ZIP Library...",
"addZip": "اضافه کتابخانه ی .zip شده",
"zipLibrary": "کتابخانه",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"overwriteExistingLibrary": "آیا می خواهید کتابخانه موجود را بازنویسی کنید؟",
"successfullyInstalledZipLibrary": "نصب کتابخانه از {0} موفقیت امیز بود.",
"namedLibraryAlreadyExists": "یک پوشه کتابخانه به نام {0} از قبل وجود دارد. آیا می خواهید آن را بازنویسی کنید؟",
"libraryAlreadyExists": "یک کتابخانه از قبل وجود دارد. آیا میخواهید آن را بازنویسی کنید؟",
"include": "اضافه کتابخانه",
"manageLibraries": "مدیریت کتابخانه ها...",
"arduinoLibraries": "کتابخانه های آردوینو",
"contributedLibraries": "کتابخانه های اشتراکی",
"title": "اداره کتابخانه ها",
"needsOneDependency": "کتابخانه <b>{0}:{1}</b> به وابستگی دیگری نیاز دارد که در حال حاضر نصب نشده است:",
"needsMultipleDependencies": "کتابخانه <b>{0}:{1}</b> به برخی وابستگی های دیگر نیاز دارد که در حال حاضر نصب نشده اند:",
"installOneMissingDependency": "آیا می خواهید وابستگی از دست رفته را نصب کنید؟",
"installMissingDependencies": "آیا می خواهید تمام وابستگی های از دست رفته را نصب کنید؟",
"dependenciesForLibrary": "وابستگی های کتابخانه {0}:{1}",
"installAll": "نصب همه",
"installOnly": "فقط {0} را نصب کن",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
"installedSuccessfully": "نصب کتابخانه {0}:{1} موفقیت آمیز بود.",
"uninstalledSuccessfully": "لغو نصب کتابخانه {0}:{1} موفقیت آمیز بود."
},
"selectZip": "Select a zip file containing the library you'd like to add",
"selectZip": "یک فایل فشرده حاوی کتابخانه ای را که می خواهید اضافه کنید انتخاب کنید",
"sketch": {
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"archiveSketch": "آرشیو طرح",
"saveSketchAs": "ذخیره پوشه طرح در ...",
"createdArchive": "آرشیو {0} ایجاد شد.",
"new": "جدید",
"openRecent": "باز کردن آخرین ها",
"showFolder": "نمایش پوشه ظرح",
"sketch": "طرح",
"moving": "جابجا کردن",
"movingMsg": "فایل \"{0}\" باید داخل یک پوشه طرح به نام \"{1}\" باشد.\nاین پوشه را ایجاد کنید، فایل را منتقل کنید و ادامه دهید؟",
"cantOpen": "پوشه ای با نام \"{0}\" از قبل وجود دارد. طرح را نمی توان باز کرد",
"saveFolderAs": "ذخیره پوشه طرح در ...",
"sketchbook": "منبع طرح ها",
"upload": "آپلود",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
"uploadUsingProgrammer": "بارگذاری با استفاده از پروگرامر",
"userFieldsNotFoundError": "عدم یافت شدن فیلد های کاربر برای برد متصل",
"doneUploading": "پایان بارگذاری",
"configureAndUpload": "پیکربندی و بارگذاری",
"verifyOrCompile": "تائید / کامپایل",
"exportBinary": "دریافت خروجی باینری کامپایل شده",
"verify": "تائید",
"doneCompiling": "پایان کامپایل کردن",
"couldNotConnectToSerial": "ابر نتوانست دوباره به پورت سریال {0} متصل شود.",
"openSketchInNewWindow": "باز کردن طرح در پنجره جدید.",
"openFolder": "بازکردن پوشه",
"titleLocalSketchbook": "منبع طرح محلی",
"titleSketchbook": "منبع طرح ها",
"close": "آیا شما می خواهید این طرح را ببندید؟"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
"burnBootloader": "بارگذاری بوت لودر.",
"doneBurningBootloader": "اتمام بارگذاری بوت لودر."
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"commentUncomment": "Comment/Uncomment",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"decreaseFontSize": "Decrease Font Size",
"autoFormat": "Auto Format"
"copyForForum": "کپی از انجمن (Markdown)",
"commentUncomment": "نظر / لغو نظر",
"increaseIndent": "افزودن دندانه",
"decreaseIndent": "برداشتن دندانه",
"increaseFontSize": "افزایش اندازه فونت",
"decreaseFontSize": "کاهش اندازه فونت",
"autoFormat": "دندانه گذاری خودکار"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
"menu": "مثال ها",
"couldNotInitializeExamples": "ابر نمی تواند نمونه های داخلی را مقدار دهی اولیه کند.",
"builtInExamples": "نمونه های داخلی",
"customLibrary": "مثال از کتابخانه شخصی",
"for": "مثال برای {0}",
"forAny": "مثال برای همه برد ها"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"search": "جستجو در Arduino.cc",
"keyword": "کلید واژه را بنویسید",
"gettingStarted": "آغاز کار",
"environment": "محیط",
"troubleshooting": "عیب یابی",
"reference": "دستورالعمل",
"findInReference": "جستجو در دستورالعمل",
"faq": "سوالات سریع پاسخ داده شده",
"visit": "بازدید از Arduino.cc",
"privacyPolicy": "حریم خصوصی"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"uploadRootCertificates": "بارگذاری سند ریشه SSL",
"openContext": "زمینه باز",
"remove": "حذف",
"upload": "آپلود",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"addURL": "افزودن لینک به سند واکشی SSL",
"enterURL": "لینک را بنویسید.",
"selectCertificateToUpload": "1. انتخاب سند برای بارگذاری",
"addNew": "افزودن جدید",
"selectDestinationBoardToUpload": "2. انتخاب برد مورد نظر و بارگذاری سند",
"uploadingCertificates": "در حال بارگذاری سند.",
"certificatesUploaded": "سند بارگذاری شد.",
"uploadFailed": "آپلود ناموفق بود. لطفا دوباره سعی کنید.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
"selectBoard": "انتخاب یک برد ...",
"boardAtPort": "{0} در {1}",
"noSupportedBoardConnected": "برد متصل شده پشتیبانی نمی شود."
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"updater": "بروزرسان درایور WiFi101 / WiFiNINA",
"selectBoard": "انتخاب برد",
"checkUpdates": "بررسی بروزرسانی",
"selectVersion": "انتخاب نسخه درایور",
"install": "نصب",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"failedInstall": "Installation failed. Please try again."
"overwriteSketch": "نصب کردن، طرح را روی برد بازنویسی می کند.",
"installingFirmware": "در حال نصب درایور.",
"successfullyInstalled": "نصب درایور موفقیت آمیز بود.",
"failedInstall": "نصب ناموفق بود. دوباره تلاش کنید."
},
"dialog": {
"dontAskAgain": "Don't ask again"
"dontAskAgain": "نمی تواند بپرسد."
},
"userFields": {
"cancel": "لغو",
"upload": "Upload"
"upload": "بارگذاری"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"toggleTimestamp": "اتصال برچسب زمان",
"autoscroll": "پیمایش خودکار",
"timestamp": "برچسب زمانی",
"noLineEndings": "بدون پایان خط",
"newLine": "خط جدید",
"carriageReturn": "رفتن به سر سطر",
"newLineCarriageReturn": "هم NL و هم CR",
"notConnected": "متصل نشد. برد و پورت را انتخاب کنید تا بطور خودکار متصل شود.",
"message": "پیام ( {0} + بزنید تا پیام به '{1}' بر '{2}' ارسال شود)",
"connectionBusy": "اتصال ناموفق بود. پورت سریال مشغول به {0} است.",
"disconnected": "{0} از {1} قطع شد.",
"unexpectedError": "خطای غیر منتظره. اتصال مجدد {0} در پورت {1}.",
"failedReconnect": "اتصال دوباره {0} به پورت سریال بعد از 10 تلاش متوالی ناموفق بود. {1} پورت سریال مشغول است.",
"reconnect": "اتصال دوباره {0} به {1} در {2} ثانیه ..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Version {0}",
"moreInfo": "More info",
"install": "INSTALL",
"filterSearch": "Filter your search..."
"uninstall": "لغو نصب",
"uninstallMsg": "آیا شما می خواهید {0} را لغو نصب کنید؟",
"by": "توسط",
"version": "ورژن {0}",
"moreInfo": "اطلاعات بیشتر",
"install": "نصب",
"filterSearch": "محدود کردن جستجوی شما ..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "ابر طرح را ذخیره نکرد. لطفا کار ذخیره نشده خود را به ویرایشگر متن مورد علاقه خود کپی کنید، و آردوینو را دوباره راه اندازی کنید.",
"unsavedChanges": "هر تغییری که انجام می دهید ذخیره نمی شود."
},
"compile": {
"error": "Compilation error: {0}"
"error": "خطای کامپایل : {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "خطا {0} : {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
"error": "خطای حیاتی حلقه بوت لودر : {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
"couldNotSave": "ابر طرح را ذخیره نکرد. لطفا کار ذخیره نشده خود را به ویرایشگر متن مورد علاقه خود کپی کنید، و آردوینو را دوباره راه اندازی کنید.",
"offline": "آفلاین",
"daemonOffline": "CLI آفلاین پس زمینه",
"cannotConnectBackend": "اتصال به سرور ناموفق بود.",
"cannotConnectDaemon": "نمی توان به CLI پس زمینه متصل شد."
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
"start": "شروع...",
"typeNotSupported": "جلسه رفع خطا \"{0}\" پشتیبانی نمی شود.",
"startError": "یک خطا در آغاز جلسه رفع خطا بود، تاریخچه بقیه جزئیات را بررسی کنید."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
"unsavedTitle": "ذخیره نشده {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
"expand": "باز کردن.",
"collapse": "فروکش"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
"fileNewName": "نام برای فایل جدید",
"invalidFilename": "عدم وجود نام برای فایل",
"invalidExtension": "افزونه {0} نادرست است.",
"newFileName": "نام جدید برای فایل",
"deleteCurrentSketch": "آیا می خواهید طرح کنونی را حذف کنید؟",
"sketchDirectoryError": "یک خطا در ساخت دیکشنری طرح بود، تاریخچه بقیه جزئیات را بررسی کنید. نرم افزار شاید نتواند پیش بینی شده کار کند."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
"GoToCloud": "برو به ابر"
}
}

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Gusto mo bang i-save ang mga pagbabago sa sketch na ito bago tuluyang isara? ",
"loseChanges": "Kung hindi ka magsi-save, mawawala ang iyong mga binago. "
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "Mga Tools"
@@ -31,7 +47,7 @@
"upload.verbose": "True para sa verbose upload output. Ito ay naka-false by default.",
"window.autoScale": "True kung nais mong awtomatikong mag-adjust ang scaling ng user interface depende sa laki ng font o letra sa screen.",
"window.zoomLevel": "Baguhin ang lebel ng pagka-zoom ng window. Ang orihinal na laki ay 0 at bawat dagdag (halimbawa +1) o bawas (halimbawa -1) ay katumbas ng 20% na pagtaas o pagbaba sa zoom. Pwede kang mag-enter ng decimals para mas makontrol mo ang pag-adjust ng lebel ng zoom. ",
"ide.autoUpdate": "True kung gusto mong awtomatikong maghanap ng updates. Ang IDE ay awtomatikong maghahanap ng updates pana-panahon. ",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Listahan ng mga sertipikong maaaring ma-upload sa ma board.",
"sketchbook.showAllFiles": "True para ipakita lahat ng sketch files sa loob ng isang sketch. Ito ay false by default.",
"cloud.enabled": "True kapag ang sketch sync function ay gumagana. Ito ay true by default.",
@@ -55,7 +71,6 @@
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "Check for updates on startup",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
@@ -108,7 +123,7 @@
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
@@ -173,7 +188,7 @@
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
@@ -269,7 +285,7 @@
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",

View File

@@ -1,12 +1,12 @@
{
"arduino": {
"common": {
"offlineIndicator": "Il semblerais que vous êtes hors-ligne. Sans connexion internet, l'Arduino CLI sera incapable de télécharger les ressources nécessaire et de communiquer avec le cloud. Merci de vous reconnectez et de redémarrer l'application.",
"offlineIndicator": "Il semblerait que vous êtes déconnecté. Sans connexion internet la CLI d'Arduino pourrait ne pas être en mesure de télécharger les resources requises, ce qui pourrait provoquer des dysfonctionnements. Merci de vous connecter à Internet et de redémarrer l'application.",
"noBoardSelected": "Aucune carte sélectionnée.",
"selectedOn": "sur [0]",
"selectedOn": "sur {0}",
"notConnected": "[hors ligne]",
"serialMonitor": "Moniteur série",
"oldFormat": "Le \"[0]\" continue d'utiliser l'ancien format `.pde`. Souhaitez-vous utiliser le nouveau format `.ino`?",
"oldFormat": "Le '{0}' utilise toujours l'ancien format `.pde`. Souhaitez-vous utiliser le nouveau format `.ino`?",
"later": "Plus tard",
"selectBoard": "Selectionner une carte",
"unknown": "Inconnu",
@@ -14,14 +14,30 @@
"saveChangesToSketch": "Souhaitez-vous enregistrer les modifications apportées au croquis avant la fermeture ?",
"loseChanges": "Si vous n'enregistrez pas, les modifications apportées seront perdues."
},
"ide-updater": {
"errorCheckingForUpdates": "Erreur lors de la vérification de la mise à jour de l'IDE Arduino.\n{0}",
"notNowButton": "Pas maintenant",
"versionDownloaded": "L'IDE Arduino {0} a été téléchargé.",
"closeToInstallNotice": "Fermez le logiciel et installez la mise à jour sur votre machine.",
"closeAndInstallButton": "Fermer et installer",
"downloadingNotice": "Téléchargement de la dernière version de l'IDE Arduino.",
"updateAvailable": "Mise à jour disponible",
"newVersionAvailable": "Une nouvelle version de l'IDE Arduino ({0}) est disponible en téléchargement.",
"skipVersionButton": "Ignorer la version",
"downloadButton": "Télécharger",
"goToDownloadPage": "Une mise à jour pour l'IDE Arduino est disponible, mais nous ne sommes pas en mesure de la télécharger et de l'installer automatiquement. Veuillez vous rendre sur la page de téléchargement et télécharger la dernière version à partir de là.",
"goToDownloadButton": "Aller au téléchargement",
"ideUpdaterDialog": "Mise à jour logicielle",
"noUpdatesAvailable": "Il n'y a pas de mises à jour récentes disponibles pour l'IDE Arduino"
},
"menu": {
"sketch": "Croquis",
"tools": "Outils"
},
"debug": {
"optimizeForDebugging": "Optimisé pour le déboggage.",
"debugWithMessage": "Débogage - [0]",
"noPlatformInstalledFor": "la plateforme n'est pas installée pour '{0}'",
"debugWithMessage": "Débogage - {0}",
"noPlatformInstalledFor": "La plateforme n'est pas installée pour '{0}'",
"debuggingNotSupported": "Le débogage n'est pas supporté pour '{0}'"
},
"preferences": {
@@ -31,7 +47,7 @@
"upload.verbose": "Vrai si le téléchargement en mode verbose. Faux par défaut.",
"window.autoScale": "Vrai si l'interface utilisateur s'ajuste avec la taille de la police.",
"window.zoomLevel": "Ajuste le zoom de la fenêtre. La taille originale est 0 et chaque augmentation (par exemple 1) ou diminution (par exemple -1) représentent un zoom de plus ou moins 20 %. Vous pouvez également entrer des décimales pour ajuster plus finement le zoom. ",
"ide.autoUpdate": "Vrai pour activer les mise à jour automatiques. L'IDE va vérifier automatiquement et de manière périodique les mise à jour.",
"ide.updateChannel": "Canal de mise à jour à partir de 'stable' est la version stable, 'nightly' est la dernière version de développement.",
"board.certificates": "Liste des certificats pouvant être téléversé vers les cartes.",
"sketchbook.showAllFiles": "Vrai pour montrer tous les fichiers croquis à l'intérieur du croquis. La valeur par défaut est faux.",
"cloud.enabled": "Vrai si les fonctions de synchronisation de croquis est activé. Par défaut, la valeur est vrai.",
@@ -55,7 +71,6 @@
"compile": "compiler",
"upload": "téléverser",
"verifyAfterUpload": "Vérifier le code après le téléversement",
"checkForUpdates": "Vérifier les mises à jour au démarrage",
"editorQuickSuggestions": "Suggestion rapide pour l'éditeur",
"additionalManagerURLs": "URL de gestionnaire de cartes supplémentaires",
"noProxy": "Aucun proxy",
@@ -108,7 +123,7 @@
"installNow": "Le \"{0} {1}\" core doit être installé pour la carte sélectionnée \"{2}\". Souhaitez vous l'installer maintenant ?",
"configDialogTitle": "Sélectionner une autre carte et un autre port",
"configDialog1": "Sélectionnez une carte et un port si vous souhaitez téléverser un croquis.",
"configDialog2": "Si vous sélectionnez seulement une carte, vous pourrez seulement capable de compliquer votre croquis, mais pas de le téléverser.",
"configDialog2": "Si vous sélectionnez seulement une carte, vous pourrez compiler votre croquis, mais pas le téléverser.",
"pleasePickBoard": "Merci de sélectionner une carte connecté au port que vous avez sélectionné.",
"showAllAvailablePorts": "Affiche les ports disponibles quand activer.",
"programmer": "Programmeur",
@@ -223,7 +238,8 @@
"reference": "Référence",
"findInReference": "Trouver dans Référence",
"faq": "Questions fréquemment posées",
"visit": "Visitez Arduino.cc"
"visit": "Visitez Arduino.cc",
"privacyPolicy": "Politique de confidentialité"
},
"certificate": {
"uploadRootCertificates": "Téléverser les certificats racine SSL",

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"loseChanges": "If you don't save, your changes will be lost."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "לא עכשיו",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "סגור את התוכנה והתקן את העדכון על המכונה שלך.",
"closeAndInstallButton": "סגור והתקן",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "נמצא עדכון",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "דלג גרסה",
"downloadButton": "הורד",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "עדכון תוכנה",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "כלים"
@@ -31,7 +47,7 @@
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
@@ -55,7 +71,6 @@
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "Check for updates on startup",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
@@ -108,7 +123,7 @@
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "בחר לוח ופורט אחר...",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "הצג את כל הפורטים הזמינים כשמופעל",
"programmer": "Programmer",
@@ -173,7 +188,7 @@
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "מעביר",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "שאלות נפוצות",
"visit": "בקר ב Arduino.cc"
"visit": "בקר ב Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "בחר לוח",
"checkUpdates": "בדוק עדכונים",
"selectVersion": "Select firmware version",
"install": "התקן",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
@@ -269,7 +285,7 @@
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "{0} נותק מ {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",

350
i18n/hi.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.",
"noBoardSelected": "No board selected",
"selectedOn": "on {0}",
"notConnected": "[not connected]",
"serialMonitor": "Serial Monitor",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Later",
"selectBoard": "Select Board",
"unknown": "Unknown",
"processing": "Processing",
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"loseChanges": "If you don't save, your changes will be lost."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "Tools"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"network": "Network",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"automatic": "Automatic",
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Options...",
"share": "Share...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"profilePicture": "Profile picture"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Board Info",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"sketch": {
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"commentUncomment": "Comment/Uncomment",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"decreaseFontSize": "Decrease Font Size",
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
"dontAskAgain": "Don't ask again"
},
"userFields": {
"cancel": "Cancel",
"upload": "Upload"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Version {0}",
"moreInfo": "More info",
"install": "INSTALL",
"filterSearch": "Filter your search..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
},
"compile": {
"error": "Compilation error: {0}"
},
"upload": {
"error": "{0} error: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
}
}

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Menteni szeretnéd a vázlat módosításait a bezárás előtt? ",
"loseChanges": "Ha nem mented, akkor a módosítások elvesznek. "
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "Eszközök"
@@ -31,7 +47,7 @@
"upload.verbose": "Kipipálva: a részletes feltöltési üzenetek kiírása a képernyőre. Alapértelmezés szerint hamis/nincs kipipálva.",
"window.autoScale": "Kipipálva, ha a felhasználói felület automatikusan méreteződik a betűmérettel együtt. ",
"window.zoomLevel": "Ablak nagyítási szintjének megadása. Az eredeti méret: 0, és minden lépés növelése (pl. 1) vagy csökkentése (pl. -1) 20%-kal nagyobb vagy kisebb nagyítást jelent. Tizedesjegyeket is meg lehet adni a nagyítási szint finomabb beállításához. ",
"ide.autoUpdate": "Kipipálva: engedélyezi az automatikus frissítést. A keretrendszer automatikusan és rendszeresen ellenőrzi a megjelenő frissítéseket.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Az alaplapokra feltölthető tanúsítványok listája",
"sketchbook.showAllFiles": "Kipipálva: az összes vázlatfájl/sketch megjelenítése a vázlaton/sketch-en belül. Alapértelmezés szerint: nincs kipipálva.",
"cloud.enabled": "Kipipálva: a vázlat/sketch-szinkronizálás engedélyezve van. Alapértelmezés: kipipálva. ",
@@ -55,7 +71,6 @@
"compile": "fordítás",
"upload": "feltöltés",
"verifyAfterUpload": "Kód ellenőrzése feltöltés után",
"checkForUpdates": "Frissítések ellenőrzése a program indításakor",
"editorQuickSuggestions": "Szerkesztői gyorstippek",
"additionalManagerURLs": "Kiegészítő alaplapok URL-jei",
"noProxy": "Nincs proxy",
@@ -108,7 +123,7 @@
"installNow": "A \"{0} {1}\" támogatást telepíteni kell az aktuálisan kiválasztott \"{2}\" alaplaphoz. Most szeretnéd telepíteni? ",
"configDialogTitle": "Egyéb Alaplap és Port választása",
"configDialog1": "Válassz ki egy alaplapot és egy portot is - csak ekkor lehetséges a feltöltés. ",
"configDialog2": "Ha csak az alaplap van kiválasztva, akkor csak lefordítani lehet a vázlatot/sketch-et - feltölteni az alaplapra nem.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Válassz alaplapot, amely a kiválasztott porthoz csatlakozik. ",
"showAllAvailablePorts": "Elérhető portok mutatása - ha engedélyezett",
"programmer": "Programozó",
@@ -173,7 +188,7 @@
"showFolder": "Vázlat-/sketch-mappa megjelenítése",
"sketch": "Vázlat/sketch",
"moving": "Mozgatás",
"movingMsg": "A/az {0} fájlnak egy {1} nevű vázlat-/sketch-mappában kell lennie. Létrehozzam ezt a mappát, áthelyezzem a fájlt, és folytassam a műveletet?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "Már létezik a/az {0} nevű mappa. A vázlat/sketch nem nyitható meg. ",
"saveFolderAs": "Vázlat-/sketch-mappa mentése másként... ",
"sketchbook": "Vázlatfüzet/sketchbook ",
@@ -223,7 +238,8 @@
"reference": "Referencia ",
"findInReference": "Keresse meg a Referenciákban",
"faq": "Gyakran ismételt kérdések",
"visit": "Arduino.cc meglátogatása"
"visit": "Arduino.cc meglátogatása",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "SSL gyökér-/root-tanúsítványok feltöltése ",
@@ -269,7 +285,7 @@
"carriageReturn": "Kocsi vissza",
"newLineCarriageReturn": "Mindkettő: Új sor és Kocsi vissza - NL&CR",
"notConnected": "Nincs kapcsolat. Válassz ki egy alaplapot és egy portot az automatikus csatlakozáshoz. ",
"message": "Üzenet ({0} + Enter az üzenet elküldéséhez az {1} itt: {2}",
"message": "Üzenet ({0} + Enter az üzenet elküldéséhez az {1} itt: {2})",
"connectionBusy": "Kapcsolat nem jött létre. A {0} soros port foglalt.",
"disconnected": "Megszakadt a/az {0} és a/az {1} kapcsolata. ",
"unexpectedError": "Váratlan hiba. A/az {0} újracsatlakozása a/az {1} porton. ",

View File

@@ -6,14 +6,30 @@
"selectedOn": "su {0}",
"notConnected": "[non connesso]",
"serialMonitor": "Monitor seriale",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Dopo",
"oldFormat": "Il '{0}' utilizza ancora il vecchio formato `.pde` . Vuoi sostituirlo con la nuova estensione `.ino?",
"later": "Salta",
"selectBoard": "Seleziona Scheda",
"unknown": "Sconosciuto",
"processing": "In elaborazione",
"saveChangesToSketch": "Vuoi salvare i cambiamenti a questo sketch prima di chiudere?",
"loseChanges": "Se non salvi, tutti i cambiamenti saranno persi."
},
"ide-updater": {
"errorCheckingForUpdates": "Si è verificato un errore durante il controllo degli aggiornamenti per Arduino IDE {0} .",
"notNowButton": "Non ora",
"versionDownloaded": "L'Arduino IDE ( 1 {0} ) è stato correttamente scaricato.",
"closeToInstallNotice": "Chiudi il software e installa laggiornamento sulla tua macchina",
"closeAndInstallButton": "Chiudi e Installa",
"downloadingNotice": "Stai scaricando lultima versione dellArduino IDE",
"updateAvailable": "Aggiornamento disponibile",
"newVersionAvailable": "La nuova versione (1{0}) di Arduino IDE è disponibile per il download.",
"skipVersionButton": "Salta questa versione",
"downloadButton": "Scarica",
"goToDownloadPage": "E' disponibile un nuovo aggiornamento per Arduino IDE, ma attualmente non è possibile scaricarlo ne tantomeno installarlo in modalità automatica. Si consiglia di andare sul sito ufficiale e dalla pagina download scaricare l'ultima versione disponibile. ",
"goToDownloadButton": "Clicca per scaricare",
"ideUpdaterDialog": "Aggiornamento software",
"noUpdatesAvailable": "Non ci sono aggiornamenti recenti per Arduino IDE "
},
"menu": {
"sketch": "Sketch",
"tools": "Strumenti"
@@ -25,24 +41,24 @@
"debuggingNotSupported": "Il debug non è supportato da '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"language.log": "Imposta su True se vuoi che l'Arduino Language Server generi il file di log all'interno della cartella dello sketch. Diversamente, imposta su false. L'impostazione predefinita è false.",
"compile.verbose": "Vero per compilazione esplicita. Falso come opzione predefinita",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"compile.warnings": "Indica a gcc il livello di avviso che deve mostrare. Il valore predefinito è 'None' ",
"upload.verbose": " Seleziona Vero per un rapporto dettagliato durante l'upload. Il valore predefinito è impostato su falso",
"window.autoScale": "Impostato su True l'interfaccia scala automaticamente in base alla dimensione del font .",
"window.zoomLevel": "Regola il livello di zoom della finestra. La dimensione originale è 0 e ogni incremento sopra (es. 1) o sotto (es. -1) rappresenta lo zoom del 20% in più o in meno. Puoi anche inserire i decimali per regolare il livello di zoom con una granularità più fine.",
"ide.autoUpdate": "Vero per abilitare i controlli automatici degli aggiornamenti. L'IDE controllerà gli aggiornamenti periodicamente in automatico.",
"ide.updateChannel": "Canale di rilascio per le versioni aggiornate. 'stable' è per le versioni stabili, 'nightly' è per l'ultima versione in sviluppo.",
"board.certificates": "Lista dei certificati che possono essere caricati nelle schede",
"sketchbook.showAllFiles": "Vero per mostrare tutti i file relativi contenuti all'interno dello sketch. L'opzione predefinita è falso.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"cloud.enabled": "Imposta su true per abilitare le funzioni di sincronia dello sketch. Il valore predefinito è true.",
"cloud.pull.warn": "Imposta su true se gli utenti devono essere avvisato dopo avere effettuato il pull dello sketch sul cloud. Il valore predefinito è true.",
"cloud.push.warn": "Imposta su True se gli utenti devono essere avvisati prima di eseguire l'invio di uno sketch cloud. Il valore predefinito è true.",
"cloud.pushpublic.warn": "True se gli utenti devono essere avvisati prima di eseguire l'invio di uno sketch pubblico nel cloud. Il valore predefinito è true.",
"cloud.sketchSyncEnpoint": "La destinazione utilizzata per inviare e richiedere gli schizzi da un back-end. L'impostazione predefinita utilizza Arduino Cloud API.",
"auth.clientID": "il Client ID OAuth2.",
"auth.domain": "Dominio OAuth2.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"auth.audience": "Protocollo pubblico OAuth2",
"auth.registerUri": "L'indirizzo utilizzato per la registrazione di un nuovo utente.",
"network": "Rete",
"sketchbook.location": "Percorso della cartella degli sketch",
"browse": "Sfoglia",
@@ -55,147 +71,146 @@
"compile": "compilazione",
"upload": "caricamento",
"verifyAfterUpload": "Verifica il codice dopo il caricamento",
"checkForUpdates": "Controlla aggiornamenti all'avvio",
"editorQuickSuggestions": "Editor Quick Suggestions",
"editorQuickSuggestions": "Suggerimenti rapidi dell'editor",
"additionalManagerURLs": "URL aggiuntive per il Gestore schede",
"noProxy": "Nessun proxy",
"manualProxy": "Configurazione manuale del proxy",
"newSketchbookLocation": "Seleziona un percorso per il nuovo sketchbook",
"choose": "Scegli",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"enterAdditionalURLs": "Aggiungi degli URLs aggiuntivi, uno per ogni riga",
"unofficialBoardSupport": "Clicca per ottenere la lista di collegamenti per le schede di terze parti, non schede ufficiali.",
"invalid.sketchbook.location": "Posizione dello sketchbook non valida: {0}",
"invalid.editorFontSize": "Dimensione del carattere dell'editor non valida. Deve essere un numero intero positivo.",
"invalid.theme": "Tema non valido"
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"signIn": "COLLEGATI",
"signOut": "Disconnetti",
"chooseSketchVisibility": "Scegli a chi far vedere il tuo Sketch:",
"privateVisibility": "Privato. Solo tu potrai vedere lo sketch.",
"publicVisibility": "Pubblico. Chiunque abbia il link può vedere lo Sketch.",
"link": "Link:",
"embed": "Embed:",
"embed": "Includi:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Condividi sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"showHideRemoveSketchbook": "Mostra/Nascondi la raccolta Remota degli Schetch",
"pullSketch": "Richiedi lo Sketch",
"openInCloudEditor": "Apri nell'editor del Cloud",
"options": "Opzioni...",
"share": "Condividi...",
"remote": "Remoto",
"emptySketchbook": "Lo Sketchbook è vuoto",
"visitArduinoCloud": "Visita Arduino Cloud per creare Cloud Sketch ",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"signInToCloud": "Effettua la registrazione su Arduino Cloud",
"syncEditSketches": "Sincronizza e modifica la tua raccolta di Sketches sul Cloud Arduino",
"learnMore": "Più informazioni",
"continue": "Continua",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"pushSketch": "Invia lo Sketch",
"pushSketchMsg": "Questo è uno sketch pubblico. Prima di inviarlo, verifica che tutte le informazioni sensibili siano all'interno di arduino_secrets.h. Eventualmente puoi rendere lo sketch privato dal Pannello di Condivisione.",
"pull": "Richiedi",
"pullSketchMsg": "Richiedendo questo Sketch tramite il Cloud, lo stesso sovrascriverà quello presente in locale. Sei sicuro di dover continuare?",
"donePulling": "Pulling terminato {0}.",
"notYetPulled": "Sul Cloud non puoi effettuare il push se non hai ancora fatto il pull",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"pullFirst": "Nel Cloud devi prima effettuare il Pull per poi poter eseguire il Push.",
"donePushing": "Invio terminato {0}.",
"connected": "Connesso",
"offline": "Fuori linea",
"profilePicture": "Profile picture"
"profilePicture": "Immagine profilo"
},
"board": {
"installManually": "Installa manualmente",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"installNow": "Il \"{0} {1}\" core non è installato per la scheda \"{2}\" . Vuoi installarlo ora?",
"configDialogTitle": "Seleziona un'altra scheda o porta",
"configDialog1": "Seleziona una scheda ed una porta se vuoi inviare lo sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"configDialog2": "Se selezioni solo una Board potrai compilare, ma non caricare il tuo sketch.",
"pleasePickBoard": "Scegli la scheda collegata alla porta che hai selezionato.",
"showAllAvailablePorts": "Quando abilitato, mostra tutte le porte disponibili",
"programmer": "Programmatore",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"succesfullyInstalledPlatform": "Piattaforma installata correttamente {0}:{1}",
"succesfullyUninstalledPlatform": "Piattaforma disinstallata correttamente {0}:{1}",
"couldNotFindPreviouslySelected": "Impossibile trovare la scehda selezionata '{0}' nelle piattaforme installate '{1}'. Scegli nuovamente la scheda che vuoi utilizzare. Vuoi sceglierla ora?",
"reselectLater": "Riselezionare più tardi",
"noneSelected": "Nessuna scheda selezionata.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port",
"noPortsSelected": "Nessuna porta selezionata per la scheda: '{0}'.",
"noFQBN": "La FQBN non è disponibile per la scheda selezionata\"{0}\". Sei sicuro che il core specifico sia stato installato?",
"openBoardsConfig": "Scegli un'altra scheda e un altra porta...",
"boardListItem": "{0} a {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"selectBoardForInfo": "Seleziona la scheda per la quale desideri informazioni.",
"platformMissing": "La piattaforma per la scheda '{0}' non è installata.",
"selectPortForInfo": "Selezionare la porta per ottenere info sulla scheda.",
"boardInfo": "Informazioni sulla scheda",
"board": "Scheda{0}",
"port": "Porta{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
"getBoardInfo": "Acquisisci informazioni sulla Scheda",
"inSketchbook": " (nella raccolta sketch)"
},
"boardsManager": "Gestore schede",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"label": "Informazioni su {0}",
"detail": "Versione: {0}\nData: {1}{2}\nVersione CLI : {3}{4} [{5}]\n{6}"
},
"contributions": {
"addFile": "Aggiungi file...",
"replaceTitle": "Sostituisci",
"fileAdded": "One file added to the sketch."
"fileAdded": "Aggiunto un file allo sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"replaceMsg": "Sostituisce la versione esistente con la versione 1{0} ?",
"library": {
"addZip": "Aggiungi libreria da file .ZIP...",
"zipLibrary": "Libreria",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"overwriteExistingLibrary": "Vuoi sovrascrivere la libreria esistente?",
"successfullyInstalledZipLibrary": "La libreria è stata installata con successo dalla cartella {0}",
"namedLibraryAlreadyExists": "La cartella con nome {0} esiste già. Vuoi sovrascriverla?",
"libraryAlreadyExists": "Libreria già presente. Vuoi sovrascriverla?",
"include": "Includi Libreria",
"manageLibraries": "Gestisci Librerie",
"arduinoLibraries": "Librerie Arduino",
"contributedLibraries": "Contributed libraries",
"contributedLibraries": "Librerie di terze parti",
"title": "Gestore Librerie",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"needsOneDependency": "La libreria <b>{0}:{1}</b> necessità di dipendenze che attualmente non sono installate:",
"needsMultipleDependencies": "La libreria <b>{0}:{1}</b> di altre dipendenze che al momento non risultano installate:",
"installOneMissingDependency": "Vorresti installare le dipendenze mancanti?",
"installMissingDependencies": "Vorresti installare tutte le dipendenze mancanti?",
"dependenciesForLibrary": "Dipendenze per la libreria {0}:{1}",
"installAll": "Installa tutto",
"installOnly": "Installa {0} solamente",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
"installedSuccessfully": "Libreria installata correttamente 1{0} : 2{1} ",
"uninstalledSuccessfully": "Libreria disinstallata con successo 1{0} : 2{1}"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"selectZip": "Scegli il file zip che contiene la libreria che vuoi aggiungere",
"sketch": {
"archiveSketch": "Archivia sketch",
"saveSketchAs": "Salva la cartella dello sketch come...",
"createdArchive": "Created archive '{0}'.",
"createdArchive": "Creato l'archivio '{0}'.",
"new": "Nuovo",
"openRecent": "Apri recenti",
"showFolder": "Mostra la cartella dello Sketch",
"sketch": "Sketch",
"moving": "Spostando",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "Il file \"{0}\" deve essere all'interno della cartella \"{1}\".\nCreare questa cartella, spostare il file e continuare?",
"cantOpen": "Una cartella di nome \"{0}\" esiste già. Impossibile aprire lo sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"saveFolderAs": "Salva la cartella sketch come...",
"sketchbook": "Raccolta degli sketch",
"upload": "Caricare",
"uploadUsingProgrammer": "Carica tramite Programmatore",
"userFieldsNotFoundError": "Non è possibile trovare i campi utente per connettere la scheda",
"doneUploading": "Caricamento terminato.",
"configureAndUpload": "Configurare e caricare",
"verifyOrCompile": "Verifica/Compila",
"exportBinary": "Esporta sketch compilato",
"verify": "Verifica",
"doneCompiling": "Compilazione completata.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"couldNotConnectToSerial": "Non è possibile riconnettersi alla porta seriale. 1{0}",
"openSketchInNewWindow": "Apri lo sketch in una Nuova Finestra.",
"openFolder": "Apri Cartella",
"titleLocalSketchbook": "Local Sketchbook",
"titleLocalSketchbook": "Cartella degli sketch locali",
"titleSketchbook": "Sketchbook",
"close": "Sei sicuro di voler chiudere lo sketch?"
},
"bootloader": {
"burnBootloader": "Scrivi il bootloader",
"doneBurningBootloader": "Done burning bootloader."
"doneBurningBootloader": "La scritture de bootloader è terminata."
},
"editor": {
"copyForForum": "Copia per il forum (Markdown)",
@@ -208,49 +223,50 @@
},
"examples": {
"menu": "Esempi",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"couldNotInitializeExamples": "Impossibile inizializzare gli esempi incorporati.",
"builtInExamples": "Esempi integrati",
"customLibrary": "Examples from Custom Libraries",
"customLibrary": "Esempi da librerie di terzi",
"for": "Esempi per {0}",
"forAny": "Esempi per tutte le schede"
},
"help": {
"search": "Cerca su Arduino.cc",
"keyword": "Digita una parola chiave",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"gettingStarted": "Guida introduttiva",
"environment": "Ambiente di sviluppo",
"troubleshooting": "Risoluzione dei problemi",
"reference": "Riferimenti",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"findInReference": "Trova riferimento alla selezione",
"faq": "Domande poste frequentemente",
"visit": "Vai al sito Arduino.cc",
"privacyPolicy": "Politica sulla riservatezza"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"uploadRootCertificates": "Carica i tuoi certificati SSL Root",
"openContext": "Apri una contestazione",
"remove": "Rimuovi",
"upload": "Carica",
"addURL": "Add URL to fetch SSL certificate",
"addURL": "Aggiungi un URL per acquisire il certificato SSL",
"enterURL": "Inserisci URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"selectCertificateToUpload": "1. Scegli il certificato da caricare",
"addNew": "Aggiungi nuovo",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectDestinationBoardToUpload": "2. Scegli la scheda e carica i certificati",
"uploadingCertificates": "Caricamento dei certificati.",
"certificatesUploaded": "Certificati caricati.",
"uploadFailed": "Caricamento fallito. Si prega di riprovare.",
"selectBoard": "Seleziona una scheda...",
"boardAtPort": "{0} a {1}",
"noSupportedBoardConnected": "No supported board connected"
"noSupportedBoardConnected": "La scheda collegata non è supportata."
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Aggiornamento Frmware",
"selectBoard": "Seleziona la scheda",
"checkUpdates": "Verifica aggiornamenti",
"selectVersion": "Selezione la versione del firmware",
"install": "Installa",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"overwriteSketch": "L'installazione sovrascriverà lo sketch presente nella scheda.",
"installingFirmware": "Installazione del firmware",
"successfullyInstalled": "Firmware installato con successo",
"successfullyInstalled": "Firmware correttamente installato.",
"failedInstall": "Installazione fallita. Riprova"
},
"dialog": {
@@ -261,39 +277,39 @@
"upload": "Carica"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"toggleTimestamp": "Alterna il Timestamp",
"autoscroll": "Scorrimento automatico",
"timestamp": "Timestamp",
"timestamp": "Marca temporale",
"noLineEndings": "Nessun fine riga",
"newLine": "A capo (NL)",
"carriageReturn": "Ritorno carrello (CR)",
"newLineCarriageReturn": "Entrambi NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"notConnected": "Non collegato. Scegli una scheda e la porta di comunicazione per una connessione automatica.",
"message": "Messaggio({0} + Invio per inviare il messaggio a '{1}' su '{2}')",
"connectionBusy": "Connessione fallita. La porta seriale è occupata: 1{0}",
"disconnected": "Disconnesso 1{0} da 2{1} .",
"unexpectedError": "Errore imprevisto. Riconnessione 1{0} nella porta 2{1} .",
"failedReconnect": "Connessione alla porta seriale 1 {0} fallita dopo 10 tentativi. La 2{1} porta seriale è occupata.",
"reconnect": "Riconnessione da 1 {0} a 2 {1} tra {2} secondi..."
},
"component": {
"uninstall": "Disinstalla",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"uninstallMsg": "Vuoi veramente disinstallare 1 {0} ?",
"by": "da",
"version": "Versione {0}",
"moreInfo": "Maggiori informazioni",
"install": "Installa",
"filterSearch": "Filtra la tua ricerca..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "Non è stato possibile salvare lo sketch. Si consiglia di copiarlo è salvarlo su un file di testo e solo successivamente riavviare l' Arduino IDE. ",
"unsavedChanges": "Eventuali modifiche non salvate verranno perse"
},
"compile": {
"error": "Errore di compilazione: {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "1 {0} errore: 2 {1}"
},
"burnBootloader": {
"error": "Errore durante la scrittura del bootloader: {0}"
@@ -301,19 +317,19 @@
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"couldNotSave": "Non è stato possibile salvare lo sketch. Si consiglia di copiarlo è salvarlo su un file di testo e solo successivamente riavviare l' Arduino IDE. ",
"offline": "Disconnesso",
"daemonOffline": "Il CLI Daemon è disconnesso",
"cannotConnectBackend": "Non reisco a collegarmi al backend",
"cannotConnectDaemon": "Non riesco a collegarmi al demone CLI"
},
"debug": {
"start": "Inizio...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
"typeNotSupported": "Il tipo di sessione di debug \" 1 {0} \" non è supportato. ",
"startError": "Si è verificato un problema all'avvio del debug, per ulteriori controlla i logs"
},
"editor": {
"unsavedTitle": "Unsaved {0}"
"unsavedTitle": "Non salvato 1{0}"
},
"messages": {
"expand": "Espandi",
@@ -324,8 +340,8 @@
"invalidFilename": "Nome del file invalido",
"invalidExtension": "\".{0}\" non è un'estensione valida",
"newFileName": "Nuovo nome del file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
"deleteCurrentSketch": "Vuoi eliminare lo sketch attuale?",
"sketchDirectoryError": "Si è verificato un errore durante la creazione della directory degli sketch. Per ulteriori dettagli guarda il file di log. Probabilmente l'applicazione non funzionerà come previsto."
}
},
"cloud": {

View File

@@ -3,332 +3,348 @@
"common": {
"offlineIndicator": "オフラインのようです。 インターネットに接続していないと、Arduino CLIが必要なリソースをダウンロードできず、誤動作を引き起こす可能性があります。 インターネットに接続して、アプリケーションを再起動してください。",
"noBoardSelected": "ボード未選択",
"selectedOn": "on {0}",
"selectedOn": "{0}",
"notConnected": "[未接続]",
"serialMonitor": "シリアルモニタ",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Later",
"oldFormat": "'{0}'はまだ古い`.pde`形式を使用しています。新しい`.ino`拡張子に切り替えますか?",
"later": "後で",
"selectBoard": "ボードを選択",
"unknown": "不明",
"processing": "Processing",
"processing": "処理中",
"saveChangesToSketch": "閉じる前に、このスケッチへの変更を保存しますか?",
"loseChanges": "保存しないと、変更が失われます。"
},
"ide-updater": {
"errorCheckingForUpdates": "Arduino IDEの更新を確認中にエラーが発生しました。\n{0}",
"notNowButton": "今はしない",
"versionDownloaded": "Arduino IDE {0}がダウンロードされました。",
"closeToInstallNotice": "ソフトウェアを終了してアップデートをインストールする。",
"closeAndInstallButton": "終了してインストール",
"downloadingNotice": "Arduino IDEの最新版をダウンロード中です。",
"updateAvailable": "アップデートがあります",
"newVersionAvailable": "新しいバージョンのArduino IDE{0})をダウンロードできます。",
"skipVersionButton": "バージョンをスキップ",
"downloadButton": "ダウンロード",
"goToDownloadPage": "Arduino IDEのアップデートがありますが、自動でダウンロードしてインストールすることはできません。ダウンロードページに移動して、そこから最新版をダウンロードしてください。",
"goToDownloadButton": "ダウンロードに移動",
"ideUpdaterDialog": "ソフトウェア・アップデート",
"noUpdatesAvailable": "Arduino IDEに最近のアップデートはありません"
},
"menu": {
"sketch": "スケッチ",
"tools": "ツール"
},
"debug": {
"optimizeForDebugging": "デバッグに最適化",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
"debugWithMessage": "デバッグ - {0}",
"noPlatformInstalledFor": "'{0}'用にプラットフォームがインストールされていません。",
"debuggingNotSupported": "デバッグは'{0}'ではサポートされていません。"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"language.log": "Arduino Language Serverがスケッチフォルダにログファイルを生成した方がよい場合はtrue。それ以外はfalse。デフォルトではfalse。",
"compile.verbose": "コンパイル時に詳細な出力を行うにはtrueを指定。デフォルトではfalse。",
"compile.warnings": "使用する警告レベルをgccに指示します。デフォルトでは「なし」です。",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"upload.verbose": "書き込み時に詳細な出力を行うにはtrueを指定。デフォルトではfalse。",
"window.autoScale": "ユーザーインターフェイスをフォントサイズに合わせて自動的に拡大縮小させるにはtrueを指定。",
"window.zoomLevel": "ウィンドウの拡大率を調整します。元のサイズは0で、数値を上1か下-1に変えるごとに20拡大率が変わります。小数を入力して、拡大率をより細かく調整することもできます。",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"ide.updateChannel": "アップデート元のリリースチャンネル。stableは安定版リリース、nightlyは最新の開発用ビルドです。",
"board.certificates": "ボードに書き込みできる証明書の一覧",
"sketchbook.showAllFiles": "スケッチ内のすべてのスケッチファイルを表示するにはtrueを指定。デフォルトではfalse。",
"cloud.enabled": "スケッチの同期機能が有効な場合にはtrueを指定。デフォルトではtrue",
"cloud.pull.warn": "クラウドスケッチをプルする前に、ユーザーに警告を表示するにはtrueを指定。デフォルトではtrue",
"cloud.push.warn": "クラウドスケッチをプッシュする前に、ユーザーに警告を表示するにはtrueを指定。デフォルトではtrue",
"cloud.pushpublic.warn": "パブリックスケッチをクラウドにプッシュする前に、ユーザーに警告を表示するにはtrueを指定。デフォルトではtrue",
"cloud.sketchSyncEnpoint": "バックエンドからスケッチをプッシュ/プルするために使用されるエンドポイント。デフォルトではArduino Cloud APIを指します。",
"auth.clientID": "OAuth2クライアントID",
"auth.domain": "OAuth2ドメイン。",
"auth.audience": "OAuth2オーディエンス。",
"auth.registerUri": "新規ユーザーの登録用URI。",
"network": "ネットワーク",
"sketchbook.location": "スケッチブックの場所",
"browse": "参照",
"files.inside.sketches": "Show files inside Sketches",
"files.inside.sketches": "スケッチ内のファイルを表示",
"editorFontSize": "エディターのフォントサイズ",
"interfaceScale": "インターフェイスのスケール",
"showVerbose": "Show verbose output during",
"showVerbose": "より詳細な情報を表示する",
"compilerWarnings": "コンパイラの警告",
"automatic": "自動",
"compile": "compile",
"compile": "コンパイル",
"upload": "書き込み",
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "起動時に最新バージョンの有無をチェックする",
"verifyAfterUpload": "書き込み後にコードを検証する",
"editorQuickSuggestions": "エディターのクイックサジェスト",
"additionalManagerURLs": "追加のボードマネージャのURL",
"noProxy": "プロキシなし",
"manualProxy": "手動プロキシ設定",
"newSketchbookLocation": "新しいスケッチブックの場所を選択",
"choose": "選択",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
"enterAdditionalURLs": "追加のURLを1行ずつ入力",
"unofficialBoardSupport": "クリックして非公式ボードをサポートするURLのリストを表示",
"invalid.sketchbook.location": "スケッチブックの場所が無効です: {0}",
"invalid.editorFontSize": "エディタのフォントサイズが無効です。正の整数でなければなりません。",
"invalid.theme": "無効なテーマです。"
},
"cloud": {
"signIn": "サインイン",
"signOut": "サインアウト",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"embed": "Embed:",
"chooseSketchVisibility": "スケッチの可視性を選択:",
"privateVisibility": "プライベート。自分だけがスケッチを見られる。",
"publicVisibility": "パブリック。リンクを知る誰でもスケッチを見られる。",
"link": "リンク:",
"embed": "埋め込み:",
"cloudSketchbook": "クラウドスケッチブック",
"shareSketch": "スケッチを共有",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"showHideRemoveSketchbook": "リモートスケッチブックの表示・非表示",
"pullSketch": "スケッチをプルする",
"openInCloudEditor": "クラウドエディタで開く",
"options": "オプション…",
"share": "共有...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"remote": "リモート",
"emptySketchbook": "スケッチブックは空です",
"visitArduinoCloud": "Arduino Cloudにアクセスしてクラウドスケッチを作成する",
"signInToCloud": "Arduino Cloudにサインインする",
"syncEditSketches": "Arduinoクラウドスケッチの同期と編集",
"learnMore": "詳細はこちら",
"continue": "続ける",
"pushSketch": "スケッチをプッシュする",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pushSketchMsg": "これはパブリックなスケッチです。プッシュする前に、すべての機密情報がarduino_secrets.hファイルで定義されていることを確認してください。共有パネルでスケッチをプライベートにできます。",
"pull": "プル",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"pullSketchMsg": "このスケッチをクラウドからプルするとローカル版が上書きされます。本当に続行しますか?",
"donePulling": "{0}’のプルが完了しました。",
"notYetPulled": "クラウドにプッシュできません。まだプルされていません。",
"push": "プッシュ",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"pullFirst": "クラウドにプッシュできるようにするには、まずプルしなければなりません。",
"donePushing": "{0}’のプッシュが完了しました。",
"connected": "接続済み",
"offline": "オフライン",
"profilePicture": "Profile picture"
"profilePicture": "プロフィール画像"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"installManually": "手動でインストール",
"installNow": "現在選択されているボード\"{2}\"用にコア\"{0} {1}\"をインストールする必要があります。今すぐインストールしますか?",
"configDialogTitle": "他のボードとポートを選択",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"configDialog1": "スケッチを書き込みたい場合には、ボードとポートの両方を選択してください。",
"configDialog2": "ボードのみを選択した場合、コンパイルはできますが、スケッチの書き込みはできません。",
"pleasePickBoard": "選択したポートに接続されているボードを選んでください。",
"showAllAvailablePorts": "有効な場合、利用可能なすべてのポートを表示",
"programmer": "書き込み装置",
"succesfullyInstalledPlatform": "プラットフォーム{0}:{1}のインストールに成功しました",
"succesfullyUninstalledPlatform": "プラットフォーム{0}:{1}のアンインストールに成功しました",
"couldNotFindPreviouslySelected": "インストールされているプラットフォーム'{1}'で、以前に選択したボード'{0}'が見つかりませんでした。使用したいボードを手動で選択し直してください。今すぐ選択し直しますか?",
"reselectLater": "後で選択しなおす",
"noneSelected": "ボード未選択です。",
"noPortsSelected": "ボード用に選択されたポートがありません: '{0}'.",
"noFQBN": "選択されたボード\"{0}\"にはFQBNがありません。対応するコアをインストール済みですか",
"openBoardsConfig": "他のボードとポートを選択…",
"boardListItem": "{1}の{0}",
"selectBoardForInfo": "ボード情報を得るには、ボードを選択してください。",
"platformMissing": "選択したボード'{0}'用のプラットフォームがインストールされていません。",
"selectPortForInfo": "ボード情報を得るには、ポートを選択してください。",
"boardInfo": "ボード情報",
"board": "Board{0}",
"port": "Port{0}",
"board": "ボード{0}",
"port": "ポート{0}",
"getBoardInfo": "ボード情報を取得",
"inSketchbook": " (in Sketchbook)"
"inSketchbook": "(スケッチブック内)"
},
"boardsManager": "ボードマネージャ",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"label": "{0}について",
"detail": "バージョン: {0}\n日付: {1}{2}\nCLIバージョン: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "ファイルを追加...",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
"replaceTitle": "置換",
"fileAdded": "スケッチにファイルが1つ追加されました。"
},
"replaceMsg": "Replace the existing version of {0}?",
"replaceMsg": "{0}の既存のバージョンを置き換えますか?",
"library": {
"addZip": ".ZIP形式のライブラリをインストール...",
"zipLibrary": "ライブラリ",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"overwriteExistingLibrary": "既存のライブラリを上書きしますか?",
"successfullyInstalledZipLibrary": "アーカイブ{0}からライブラリのインストールに成功しました。",
"namedLibraryAlreadyExists": "{0}という名前のライブラリフォルダはすでに存在しています。上書きしますか?",
"libraryAlreadyExists": "ライブラリはすでに存在しています。上書きしますか?",
"include": "ライブラリをインクルード",
"manageLibraries": "ライブラリを管理...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"arduinoLibraries": "Arduinoライブラリ",
"contributedLibraries": "提供されたライブラリ",
"title": "ライブラリマネージャー",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
"needsOneDependency": "ライブラリ<b>{0}:{1}</b>には、現在インストールされていない別の依存関係が必要です:",
"needsMultipleDependencies": "ライブラリ<b>{0}:{1}</b>には、現在インストールされていない複数の依存関係が必要です:",
"installOneMissingDependency": "不足している依存関係をインストールしますか?",
"installMissingDependencies": "不足している全ての依存関係をインストールしますか?",
"dependenciesForLibrary": "ライブラリ{0}:{1}の依存関係",
"installAll": "全てをインストール",
"installOnly": "{0}のみインストール",
"installedSuccessfully": "ライブラリ{0}:{1}のインストールに成功しました。",
"uninstalledSuccessfully": "ライブラリ{0}:{1}のアンインストールに成功しました。"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"selectZip": "追加したいライブラリの入ったZIPファイルを選択",
"sketch": {
"archiveSketch": "スケッチをアーカイブする",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"saveSketchAs": "スケッチを別名で保存…",
"createdArchive": "アーカイブ'{0}'を作成しました。",
"new": "新規",
"openRecent": "最近使った項目を開く",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"showFolder": "スケッチフォルダを表示",
"sketch": "スケッチ",
"moving": "移動",
"movingMsg": "ファイル\"{0}\"は、\"{1}\"という名前のスケッチフォルダの中にあることが必要です。\nこのフォルダを作成し、ファイルを移動させ、継続しますか",
"cantOpen": "「{0}」というフォルダはすでに存在します。スケッチを開けません。",
"saveFolderAs": "Save sketch folder as...",
"saveFolderAs": "スケッチフォルダを別名で保存…",
"sketchbook": "スケッチブック",
"upload": "Upload",
"upload": "書き込み",
"uploadUsingProgrammer": "書き込み装置を使って書き込む",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"userFieldsNotFoundError": "接続されたボードのユーザーフィールドが見つかりません。",
"doneUploading": "書き込み完了",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
"configureAndUpload": "構成と書き込み",
"verifyOrCompile": "検証・コンパイル",
"exportBinary": "コンパイル済みバイナリをエクスポート",
"verify": "検証",
"doneCompiling": "コンパイル完了。",
"couldNotConnectToSerial": "シリアルポートに再接続できませんでした。 {0}",
"openSketchInNewWindow": "新規ウィンドウでスケッチを開く",
"openFolder": "フォルダを開く",
"titleLocalSketchbook": "ローカルスケッチブック",
"titleSketchbook": "スケッチブック",
"close": "本当にスケッチを閉じますか?"
},
"bootloader": {
"burnBootloader": "ブートローダを書き込む",
"doneBurningBootloader": "Done burning bootloader."
"doneBurningBootloader": "ブートローダの書き込みが完了しました。"
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"copyForForum": "フォーラム用にコピー(Markdown",
"commentUncomment": "コメント化・復帰",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"increaseIndent": "インデントを増やす",
"decreaseIndent": "インデントを減らす",
"increaseFontSize": "フォントサイズを大きく",
"decreaseFontSize": "フォントサイズを小さく",
"autoFormat": "自動整形"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "内蔵のスケッチ例",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
"menu": "スケッチ例",
"couldNotInitializeExamples": "付属のスケッチ例を初期化できませんでした。",
"builtInExamples": "付属のスケッチ例",
"customLibrary": "カスタムライブラリのスケッチ例",
"for": "{0}用のスケッチ例",
"forAny": "あらゆるボード用のスケッチ例"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"search": "Arduino.ccで検索",
"keyword": "キーワードを入力",
"gettingStarted": "はじめに",
"environment": "環境",
"troubleshooting": "トラブルシューティング",
"reference": "リファレンス",
"findInReference": "リファレンスで検索",
"faq": "よくある質問",
"visit": "Arduino.ccウェブサイトを開く",
"privacyPolicy": "プライバシーポリシー"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"uploadRootCertificates": "SSLルート証明書を書き込み",
"openContext": "コンテキストを開く",
"remove": "削除",
"upload": "マイコンボードに書き込む",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
"addURL": "SSL証明書を取得するためのURLを追加",
"enterURL": "URLを入力",
"selectCertificateToUpload": "1. 書き込む証明書を選択",
"addNew": "新規追加",
"selectDestinationBoardToUpload": "2. 目的のボードを選択して証明書を書き込む",
"uploadingCertificates": "証明書を書き込み中。",
"certificatesUploaded": "証明書を書き込みました。",
"uploadFailed": "書き込みに失敗しました。もう一度試してください。",
"selectBoard": "ボードを選択…",
"boardAtPort": "{1}の{0}",
"noSupportedBoardConnected": "対応するボードが接続されていません"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"updater": "WiFi101 / WiFiNINAファームウェア・アップデータ",
"selectBoard": "ボードを選択",
"checkUpdates": "アップデートを確認",
"selectVersion": "ファームウェアのバージョンを選択",
"install": "インストール",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"failedInstall": "Installation failed. Please try again."
"overwriteSketch": "インストールによりボード上のスケッチを上書きします。",
"installingFirmware": "ファームウェアをインストール中。",
"successfullyInstalled": "ファームウェアのインストールに成功しました。",
"failedInstall": "インストールに失敗しました。もう一度試してください。"
},
"dialog": {
"dontAskAgain": "Don't ask again"
"dontAskAgain": "次回から表示しない"
},
"userFields": {
"cancel": "Cancel",
"cancel": "キャンセル",
"upload": "マイコンボードに書き込む"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"toggleTimestamp": "タイムスタンプを表示・非表示",
"autoscroll": "自動スクロール",
"timestamp": "Timestamp",
"timestamp": "タイムスタンプ",
"noLineEndings": "改行なし",
"newLine": "LFのみ",
"carriageReturn": "CRのみ",
"newLineCarriageReturn": "CRおよびLF",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"notConnected": "接続されていません。自動的に接続するには、ボードとポートを選択してください。",
"message": "メッセージ('{2}'の'{1}'にメッセージを送信するには{0} + Enter",
"connectionBusy": "接続に失敗しました。シリアルポートがビジー状態です: {0}",
"disconnected": "{1}から{0}を切断しました。",
"unexpectedError": "予期せぬエラーが発生しました。ポート{1}の{0}に再接続中です。",
"failedReconnect": "10回連続で試しましたが、{0}をシリアルポートに再接続できませんでした。シリアルポート{1}はビジー状態です。",
"reconnect": "{2}秒後に{0}を{1}に再接続します…"
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"uninstall": "アンインストール",
"uninstallMsg": "{0}をアンインストールしますか?",
"by": "by",
"version": "バージョン{0}",
"moreInfo": "More info",
"moreInfo": "詳細情報",
"install": "インストール",
"filterSearch": "検索をフィルタ…"
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "スケッチを保存できませんでした。保存されていない作業内容を好きなテキストエディタにコピーして、IDEを再起動してください。",
"unsavedChanges": "未保存の変更は保存されません。"
},
"compile": {
"error": "Compilation error: {0}"
"error": "コンパイルエラー: {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "{0} エラー: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
"error": "ブートローダの書き込み中にエラーが発生しました: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
"couldNotSave": "スケッチを保存できませんでした。保存されていない作業内容を好きなテキストエディタにコピーして、IDEを再起動してください。",
"offline": "オフライン",
"daemonOffline": "CLI Daemonはオフラインです",
"cannotConnectBackend": "バックエンドに接続できません。",
"cannotConnectDaemon": "CLI daemonに接続できません。"
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
"start": "開始…",
"typeNotSupported": "デバッグセッションのタイプ\"{0}\"はサポートされていません。",
"startError": "デバッグセッションの開始時にエラーが発生しました。詳細はログを確認してください。"
},
"editor": {
"unsavedTitle": "Unsaved {0}"
"unsavedTitle": "未保存 {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
"expand": "展開する",
"collapse": "折り畳む"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"fileNewName": "新しいファイルの名前",
"invalidFilename": "無効なファイル名です。",
"invalidExtension": "拡張子「.{0}」は、使えません。",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
"newFileName": "ファイルの新しい名前",
"deleteCurrentSketch": "現在のスケッチを削除しますか?",
"sketchDirectoryError": "スケッチディレクトリの作成中にエラーが発生しました。詳細はログを参照してください。アプリケーションはおそらく期待通りに動作しないでしょう。"
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
"GoToCloud": "クラウドへ"
}
}

350
i18n/ko.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "오프라인 상태인 것 같습니다. 인터넷 연결이 없으면 Arduino CLI가 필요한 리소스를 다운로드하지 못하고 오작동을 일으킬 수 있습니다. 인터넷에 연결하고 애플리케이션을 다시 시작해주세요.",
"noBoardSelected": "선택된 보드 없음",
"selectedOn": "{0} 켜기",
"notConnected": "[연결되지 않음]",
"serialMonitor": "시리얼 모니터",
"oldFormat": "'{0}' 파일은 오래된 `.pde` 확장자로 되어있어요. 새로운 `.ino` 확장자로 변경하시겠어요?",
"later": "나중에",
"selectBoard": "보드 선택",
"unknown": "알 수 없음",
"processing": "처리 중",
"saveChangesToSketch": "닫기 전에 이 스케치에 대한 변경 사항을 저장하시겠어요?",
"loseChanges": "저장하지 않을 경우 변경 사항이 손실됩니다."
},
"ide-updater": {
"errorCheckingForUpdates": "Arduino IDE의 업데이트를 확인하던 중에 오류가 발생했어요.\n{0}",
"notNowButton": "나중에",
"versionDownloaded": "Arduino IDE {0} 버전이 다운로드 되었습니다. ",
"closeToInstallNotice": "소프트웨어를 닫고 장치에 업데이트를 설치해주세요.",
"closeAndInstallButton": "닫고 설치하기",
"downloadingNotice": "최신 버전의 Arduino IDE를 다운로드하고 있습니다.",
"updateAvailable": "업데이트 사용 가능",
"newVersionAvailable": "새로운 버전의 Arduino IDE ({0})를 다운로드할 수 있습니다.",
"skipVersionButton": "이 버전 건너뛰기",
"downloadButton": "다운로드",
"goToDownloadPage": "Ardunio IDE에 대한 업데이트가 있지만 자동으로 다운로드하고 설치할 수 없습니다. 다운로드 페이지에서 최신 버전을 다운로드 해주세요.",
"goToDownloadButton": "다운로드하러 가기",
"ideUpdaterDialog": "소프트웨어 업데이트",
"noUpdatesAvailable": "현재 Ardunio IDE는 최신 버전입니다"
},
"menu": {
"sketch": "스케치",
"tools": "도구"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"debugWithMessage": "디버그 - {0}",
"noPlatformInstalledFor": "'{0}'에 대한 플랫폼이 설치되어 있지 않습니다",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "gcc에 사용할 경고 수준을 알려줍니다. 기본값은 '없음'입니다.",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"network": "Network",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"automatic": "Automatic",
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Options...",
"share": "Share...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"profilePicture": "Profile picture"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Board Info",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"sketch": {
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "스케치",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"commentUncomment": "Comment/Uncomment",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"decreaseFontSize": "Decrease Font Size",
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "보드 선택",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
"dontAskAgain": "Don't ask again"
},
"userFields": {
"cancel": "Cancel",
"upload": "Upload"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Version {0}",
"moreInfo": "More info",
"install": "INSTALL",
"filterSearch": "Filter your search..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
},
"compile": {
"error": "Compilation error: {0}"
},
"upload": {
"error": "{0} error: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
}
}

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "မပိတ်မီ ပြောင်းလဲမှုများသိမ်းဆည်းလိုပါသလား။",
"loseChanges": "မသိမ်းဆည်းပါက ပြောင်းလဲမှုအားလုံး ဆုံးရှုံးမည်။"
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "ကုတ်ဖိုင်လ်ဆိုင်ရာ",
"tools": "ကိရိယာများ"
@@ -31,7 +47,7 @@
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
@@ -55,7 +71,6 @@
"compile": "စက်ဘာသာပြန်",
"upload": "အပ်လုတ်တင်",
"verifyAfterUpload": "အပ်လုတ်တင်ပြီးလျှင်ကုတ်ကိုစစ်ဆေးပါ",
"checkForUpdates": "စတင်စဉ်တွင် အပ်ဒိတ်ရှိ၊ မရှိ စစ်ဆေးပါ",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "ကြားခံကွန်ရက်မရှိ",
@@ -108,7 +123,7 @@
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "အမှန်ခြစ်ထားပါက ရရှိနိုင်သောကွန်ရက်ဆိပ်ကမ်းအားလုံးပြမည်",
"programmer": "ပရိုဂရမ်မာ",
@@ -173,7 +188,7 @@
"showFolder": "ကုတ်ပုံကြမ်းဖိုလ်ဒါပြမည်",
"sketch": "ကုတ်ပုံကြမ်း",
"moving": "ရွှေ့နေသည်",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "ဘုတ်ရွေးချယ်မည်",
"checkUpdates": "အပ်ဒိတ်စစ်မည်",
"selectVersion": "Select firmware version",
"install": "တပ်ဆင်မည်",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
@@ -269,7 +285,7 @@
"carriageReturn": "လက်နှိပ်စက်အတံပြန်အက္ခရာ",
"newLineCarriageReturn": "စာကြောင်းအသစ်နှင့်လက်နှိပ်စက်အတံပြန်အက္ခရာနှစ်ခုလုံး",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"loseChanges": "If you don't save, your changes will be lost."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "Tools"
@@ -31,7 +47,7 @@
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
@@ -55,7 +71,6 @@
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "Check for updates on startup",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
@@ -108,7 +123,7 @@
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
@@ -173,7 +188,7 @@
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
@@ -269,7 +285,7 @@
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",

350
i18n/nl.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "Je lijkt offline te zijn. Zonder een internetverbinding kan de Arduino CLI mogelijk niet de vereiste bronnen downloaden en dit kan storingen veroorzaken. Maak verbinding met het internet en start de applicatie opnieuw. ",
"noBoardSelected": "Geen bord geselecteerd",
"selectedOn": "aan {0}",
"notConnected": "[niet verbonden]",
"serialMonitor": "Seriële Monitor",
"oldFormat": "De '{0}' gebruikt nog steeds het oude '.pde' formaat. Wil je overstappen naar de nieuwe `.ino` extensie?",
"later": "Later",
"selectBoard": "Selecteer Bord",
"unknown": "Onbekend",
"processing": "Verwerken",
"saveChangesToSketch": "Wilt U de wijzigingen aan de schets bewaren voor afsluiten?",
"loseChanges": "Als u niet opslaat, gaan uw wijzigingen verloren."
},
"ide-updater": {
"errorCheckingForUpdates": "Fout bij het controleren op Arduino IDE updates.\n{0}",
"notNowButton": "Niet nu",
"versionDownloaded": "Arduino IDE {0} is gedownload.",
"closeToInstallNotice": "Sluit de software en installeer de update op je machine.",
"closeAndInstallButton": "Sluiten en installeren",
"downloadingNotice": "Download de nieuwste versie van de Arduino IDE.",
"updateAvailable": "Update beschikbaar",
"newVersionAvailable": "Een nieuwe versie van Arduino IDE ({0}) is beschikbaar om te downloaden.",
"skipVersionButton": "Versie overslaan",
"downloadButton": "Download",
"goToDownloadPage": "Er is een update voor de Arduino IDE beschikbaar, maar we zijn niet in staat om die automatisch te downloaden en te installeren. Ga naar de download pagina en download de nieuwste versie vanaf daar.",
"goToDownloadButton": "Ga naar Download",
"ideUpdaterDialog": "Software bijwerken",
"noUpdatesAvailable": "Er zijn geen recente updates beschikbaar voor de Arduino IDE"
},
"menu": {
"sketch": "Schets",
"tools": "Hulpmiddelen"
},
"debug": {
"optimizeForDebugging": "Optimaliseren voor foutopsporing",
"debugWithMessage": "Foutopsporing - {0}",
"noPlatformInstalledFor": "Platform is niet geïnstalleerd voor '{0}'",
"debuggingNotSupported": "Foutopsporing wordt niet ondersteund door '{0}'"
},
"preferences": {
"language.log": "Waar als de Arduino Taal Server log bestanden moet genereren in de schets map. Anders onwaar. Standaard ingesteld op onwaar.",
"compile.verbose": "Waar voor uitgebreide compileer uitvoer. Standaard onwaar",
"compile.warnings": "Vertelt gcc welk waarschuwingsniveau moet worden gebruikt. Standaard 'Geen'",
"upload.verbose": "Waar voor uitgebreide uploaduitvoer. Standaard onwaar.",
"window.autoScale": "Waar als de gebruikersinterface automatisch wordt geschaald met de lettergrootte.",
"window.zoomLevel": "Pas het zoomniveau van het venster aan. De oorspronkelijke grootte is 0 en elke stap hoger (bijv. 1) of lager (bijv. -1) staat voor 20% groter of kleiner zoomen. U kunt ook decimalen invoeren om het zoomniveau fijner in te stellen. ",
"ide.updateChannel": "Release kanaal om bijgewerkte versies van te krijgen. 'stable' is de stabiele release, 'nightly' is de laatste ontwikkel build.",
"board.certificates": "Lijst met certificaten die kunnen worden geüpload naar borden",
"sketchbook.showAllFiles": "Waar om al de schets bestanden in de schets weer te geven. Standaard ingesteld op onwaar.",
"cloud.enabled": "Waar als de schets synchronisatie functies zijn ingeschakeld. Standaard ingesteld op waar.",
"cloud.pull.warn": "Waar als de gebruiker verwittigd moet worden voor een cloud schets trekken. Standaard ingesteld op waar. ",
"cloud.push.warn": "Waar als gebruikers moeten worden gewaarschuwd voordat ze een cloud schets pushen. Standaard ingesteld op waar. ",
"cloud.pushpublic.warn": "Waar als gebruikers moeten worden gewaarschuwd voordat ze een openbare schets naar de cloud pushen. Standaard ingesteld op waar.",
"cloud.sketchSyncEnpoint": "Het eindpunt dat wordt gebruikt om schetsen van een backend te pushen en te trekken. Standaard verwijst het naar Arduino Cloud API.",
"auth.clientID": "De OAuth2 cliënt ID.",
"auth.domain": "Het OAuth2 Domein.",
"auth.audience": "Het OAuth2 publiek.",
"auth.registerUri": "De URI die is gebruikt om een nieuwe gebruiker te registreren.",
"network": "Netwerk",
"sketchbook.location": "Schetsboek locatie",
"browse": "Bladeren",
"files.inside.sketches": "Toon bestanden in Schetsen",
"editorFontSize": "Lettergrootte van editor",
"interfaceScale": "Interface schaal",
"showVerbose": "Uitgebreide uitvoer weergeven tijdens",
"compilerWarnings": "Compiler waarschuwingen",
"automatic": "Automatisch",
"compile": "compileren",
"upload": "uploaden",
"verifyAfterUpload": "Verifieer de code na het uploaden",
"editorQuickSuggestions": "Snelle suggesties in editor",
"additionalManagerURLs": "Bijkomende Borden Beheerder URL's",
"noProxy": "Geen proxy",
"manualProxy": "Manuele proxy configuratie",
"newSketchbookLocation": "Selecteer een nieuwe schetsboeklocatie.",
"choose": "Kies",
"enterAdditionalURLs": "Voer extra URL's in, één per rij",
"unofficialBoardSupport": "Klik voor een lijst met onofficiële borden ondersteuning URL's",
"invalid.sketchbook.location": "Ongeldige schetsboek locatie: {0}",
"invalid.editorFontSize": "Ongeldige lettergrootte voor editor. Het moet een positief geheel getal zijn.",
"invalid.theme": "Ongeldig Thema."
},
"cloud": {
"signIn": "INLOGGEN",
"signOut": "Uitloggen",
"chooseSketchVisibility": "Kies de zichtbaarheid van je Sketch:",
"privateVisibility": "Privaat. Alleen jij kunt de schets bekijken.",
"publicVisibility": "Openbaar. Iedereen met de link kan de Sketch bekijken.",
"link": "Koppeling:",
"embed": "Integreren:",
"cloudSketchbook": "Cload Schetsboek",
"shareSketch": "Schets Delen",
"showHideRemoveSketchbook": "Toon/verberg schetsboek op afstand",
"pullSketch": "Schets Trekken",
"openInCloudEditor": "Openen in Cloud Editor",
"options": "Opties...",
"share": "Delen...",
"remote": "Op Afstand",
"emptySketchbook": "Je schetsboek is leeg",
"visitArduinoCloud": "Bezoek Arduino Cloud om Cloud Sketches te maken.",
"signInToCloud": "Aanmelden bij Arduino Cloud",
"syncEditSketches": "Synchroniseer en bewerk uw Arduino Cloud Sketches",
"learnMore": "Leer meer",
"continue": "Doorgaan",
"pushSketch": "Push Schets",
"pushSketchMsg": "Dit is een openbare schets. Voordat u gaat pushen, moet u ervoor zorgen dat gevoelige informatie is gedefinieerd in arduino_secrets.h bestanden. U kunt een schets privé maken vanuit het deelvenster Delen.",
"pull": "Trek",
"pullSketchMsg": "Als u deze schets uit de cloud haalt, wordt de lokale versie overschreven. Weet je zeker dat je door wilt gaan?",
"donePulling": "Klaar met trekken van '{0}'.",
"notYetPulled": "Kan niet pushen naar Cloud. Het is nog niet getrokken.",
"push": "Push",
"pullFirst": "Je moet eerst trekken om naar de Cloud te kunnen pushen.",
"donePushing": "Klaar met pushen van '{0}'.",
"connected": "Verbonden",
"offline": "Offline",
"profilePicture": "Profiel afbeelding"
},
"board": {
"installManually": "Handmatig installeren",
"installNow": "De \"{0} {1}\" kern moet geïnstalleerd zijn om het huidige geselecteerde \"{2}\" bord. Wilt U dit nu installeren?",
"configDialogTitle": "Selecteer een ander Bord en Poort",
"configDialog1": "Selecteer een Bord en een Poort als U een schets wilt uploaden.",
"configDialog2": "Als je alleen een Board kiest, kun je wel compileren, maar niet je schets uploaden.",
"pleasePickBoard": "Gelieve een bord te selecteren dat verbonden is met de door U gekozen poort.",
"showAllAvailablePorts": "Toont alle beschikbare poorten indien ingeschakeld",
"programmer": "Programmeerapparaat",
"succesfullyInstalledPlatform": "Platform {0}:{1} succesvol geïnstalleerd",
"succesfullyUninstalledPlatform": "Platform {0}:{1} is succesvol verwijderd",
"couldNotFindPreviouslySelected": "Kon het voordien geselecteerde bord '{0}' in het geïnstalleerde platform '{1}' niet vinden. Gelieve manueel het bord te kiezen dat U wilt gebruiken. Wilt U het bord nu selecteren?",
"reselectLater": "Later opnieuw selecteren",
"noneSelected": "Geen borden geselecteerd.",
"noPortsSelected": "Geen poorten geselecteerd voor bord: '{0}'.",
"noFQBN": "De FQBN is niet beschikbaar voor het geselecteerde bord \"{0}\". Heeft U de bijhorende kern geïnstalleerd?",
"openBoardsConfig": "Selecteer een ander bord en poort...",
"boardListItem": "{0} bij {1}",
"selectBoardForInfo": "Selecteer een bord om bord informatie te bekomen.",
"platformMissing": "Het platform voor het geselecteerde '{0}' bord is niet geïnstalleerd.",
"selectPortForInfo": "Selecteer een poort om bord informatie te bekomen.",
"boardInfo": "Bord Informatie",
"board": "Bord{0}",
"port": "Poort{0}",
"getBoardInfo": "Verkrijg Bord Informatie",
"inSketchbook": "(in Schetsboek)"
},
"boardsManager": "Borden Beheerder",
"about": {
"label": "Over {0}",
"detail": "Versie: {0}\nDatum: {1}{2}\nCLI versie: {3}{4} [{5}]\n\n{6} "
},
"contributions": {
"addFile": "Bestand Toevoegen",
"replaceTitle": "Vervangen",
"fileAdded": "Één bestand toegevoegd aan de schets."
},
"replaceMsg": "De bestaande versie van {0} vervangen?",
"library": {
"addZip": ".ZIP-bibliotheek toevoegen...",
"zipLibrary": "Bibliotheek",
"overwriteExistingLibrary": "Wilt u de bestaande bibliotheek overschrijven?",
"successfullyInstalledZipLibrary": "Succesvol bibliotheek uit {0} archief geïnstalleerd",
"namedLibraryAlreadyExists": "Er bestaat al een bibliotheek map met de naam {0}. Wil U het overschrijven?",
"libraryAlreadyExists": "Er bestaat al een bibliotheek. Wil U het overschrijven? ",
"include": "Bibliotheek Gebruiken",
"manageLibraries": "Bibliotheken Beheren...",
"arduinoLibraries": "Arduino Bibliotheken",
"contributedLibraries": "Bijgedragen bibliotheken",
"title": "Bibliotheken beheerder",
"needsOneDependency": "De bibliotheek <b>{0}:{1}</b> heeft een andere afhankelijkheid nodig die momenteel niet is geïnstalleerd:",
"needsMultipleDependencies": "De bibliotheek <b>{0}:{1}</b> heeft enkele andere afhankelijkheden nodig die momenteel niet zijn geïnstalleerd: ",
"installOneMissingDependency": "Wilt u de ontbrekende afhankelijkheid installeren?",
"installMissingDependencies": "Wilt u de ontbrekende afhankelijkheid installeren?",
"dependenciesForLibrary": "Afhankelijkheden voor bibliotheek {0}:{1}",
"installAll": "Alles installeren",
"installOnly": "Installeer enkel {0}",
"installedSuccessfully": "Bibliotheek {0}:{1} succesvol geïnstalleerd",
"uninstalledSuccessfully": "Bibliotheek {0}:{1} succesvol verwijdert"
},
"selectZip": "Selecteer een zipbestand met de bibliotheek die U wilt toevoegen",
"sketch": {
"archiveSketch": "Archiveer Schets",
"saveSketchAs": "Sla de schetsmap op als...",
"createdArchive": "Archief '{0}' gemaakt.",
"new": "Nieuw",
"openRecent": "Recentelijk geopend",
"showFolder": "Schetsmap tonen",
"sketch": "Schets",
"moving": "Verplaatsten",
"movingMsg": "Het bestand \"{0}\" moet binnen een schetsmap met de naam \"{1}\" staan.\nMaak deze map, verplaats het bestand, en ga verder?",
"cantOpen": "Er bestaat al een map met de naam \"{0}\". Kan schets niet openen.",
"saveFolderAs": "Sla de schets map op als...",
"sketchbook": "Schetsboek",
"upload": "Uploaden",
"uploadUsingProgrammer": "Uploaden met behulp van Programmeerapparaat",
"userFieldsNotFoundError": "Kan gebruiker veld van verbonden bord niet vinden",
"doneUploading": "Klaar met uploaden.",
"configureAndUpload": "Configureren en uploaden",
"verifyOrCompile": "Verifiëren/Compileren",
"exportBinary": "Gecompileerd binair bestand exporteren",
"verify": "Verifiëren",
"doneCompiling": "Klaar met compileren.",
"couldNotConnectToSerial": "Kon niet opnieuw verbinding maken met seriële poort. {0}",
"openSketchInNewWindow": "Schets openen in nieuw venster",
"openFolder": "Map Openen",
"titleLocalSketchbook": "Lokaal schetsboek",
"titleSketchbook": "Schetsboek",
"close": "Weet je zeker dat je de schets wilt sluiten?"
},
"bootloader": {
"burnBootloader": "Bootloader branden",
"doneBurningBootloader": "Klaar met het branden van de bootloader."
},
"editor": {
"copyForForum": "Kopiëren voor Forum (Markdown)",
"commentUncomment": "Opmerking/Opmerking ongedaan maken",
"increaseIndent": "Inspringing vergroten",
"decreaseIndent": "Inspringing verkleinen",
"increaseFontSize": "Lettergrootte vergroten",
"decreaseFontSize": "Lettergrootte verkleinen",
"autoFormat": "Automatisch formaat"
},
"examples": {
"menu": "Voorbeelden",
"couldNotInitializeExamples": "Kan ingebouwde voorbeelden niet initialiseren.",
"builtInExamples": "Ingebouwde voorbeelden",
"customLibrary": "Voorbeelden uit Aangepaste Bibliotheken",
"for": "Voorbeelden voor {0}",
"forAny": "Voorbeelden voor elk bord"
},
"help": {
"search": "Zoek op Arduino.cc",
"keyword": "Typ een trefwoord",
"gettingStarted": "Aan de Slag",
"environment": "Omgeving",
"troubleshooting": "Probleem oplossen",
"reference": "Naslagwerk",
"findInReference": "Zoeken in Naslagwerk",
"faq": "Veel Gestelde Vragen",
"visit": "Bezoek Arduino.cc",
"privacyPolicy": "Privacybeleid"
},
"certificate": {
"uploadRootCertificates": "SSL-rootcertificaten uploaden",
"openContext": "Context openen",
"remove": "Verwijder",
"upload": "Uploaden",
"addURL": "URL toevoegen om SSL-certificaat op te halen",
"enterURL": "URL invoeren",
"selectCertificateToUpload": "1. Selecteer certificaat om te uploaden",
"addNew": "Nieuw toevoegen",
"selectDestinationBoardToUpload": "2. Selecteer bestemming bord en upload certificaat",
"uploadingCertificates": "Certificaten uploaden.",
"certificatesUploaded": "Certificaten geüpload.",
"uploadFailed": "Upload mislukt. Probeer het opnieuw.",
"selectBoard": "Selecteer een bord...",
"boardAtPort": "{0} bij {1}",
"noSupportedBoardConnected": "Geen ondersteund bord verbonden"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Selecteer Bord",
"checkUpdates": "Zoek naar Updates",
"selectVersion": "Selecteer firmware versie",
"install": "Installeren",
"overwriteSketch": "Installatie zal de Schets op het bord overschrijven.",
"installingFirmware": "Firmware installeren.",
"successfullyInstalled": "Firmware succesvol geïnstalleerd.",
"failedInstall": "Installatie mislukt. Probeer het opnieuw."
},
"dialog": {
"dontAskAgain": "Niet meer vragen"
},
"userFields": {
"cancel": "Annuleer",
"upload": "Uploaden"
},
"serial": {
"toggleTimestamp": "Tijdstempel omschakelen",
"autoscroll": "Automatisch scrollen",
"timestamp": "Tijdstempel",
"noLineEndings": "Geen RegelEinde",
"newLine": "Nieuwe Regel",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Zowel NL & CR",
"notConnected": "Niet verbonden. Kies een bord en een poort om automatisch te verbinden.",
"message": "Bericht ({0} + Enter om bericht te verzenden naar '{1}' op '{2}')",
"connectionBusy": "Verbinding mislukt. Seriële poort is bezet: {0}",
"disconnected": "Verbinding {0} met {1} verbroken.",
"unexpectedError": "Onverwachte fout. Opnieuw verbinding maken met {0} op poort {1}.",
"failedReconnect": "Kon na 10 opeenvolgende pogingen {0} niet opnieuw verbinden met seriële poort. De seriële poort {1} is bezet.",
"reconnect": "Opnieuw verbinding maken tussen {0} en {1} over {2} seconden..."
},
"component": {
"uninstall": "Verwijderen",
"uninstallMsg": "Wil je {0} verwijderen?",
"by": "door",
"version": "Versie {0}",
"moreInfo": "Meer informatie",
"install": "INSTALLEREN",
"filterSearch": "Filter je zoekopdracht..."
},
"electron": {
"couldNotSave": "Kan de schets niet opslaan. Kopieer uw niet-opgeslagen werk naar uw favoriete teksteditor en start de IDE opnieuw. ",
"unsavedChanges": "Niet opgeslagen wijzigingen worden niet opgeslagen."
},
"compile": {
"error": "Compilatiefout: {0}"
},
"upload": {
"error": "{0} fout: {1}"
},
"burnBootloader": {
"error": "Fout bij het branden van de bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Kan de schets niet opslaan. Kopieer uw niet-opgeslagen werk naar uw favoriete teksteditor en start de IDE opnieuw. ",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Kan geen verbinding maken met het backend.",
"cannotConnectDaemon": "Kan geen verbinding maken met de CLI daemon."
},
"debug": {
"start": "Start...",
"typeNotSupported": "Het foutopsporingssessietype \"{0}\" wordt niet ondersteund. ",
"startError": "Er is een fout opgetreden bij het starten van de foutopsporingssessie, controleer de logboeken voor meer details. "
},
"editor": {
"unsavedTitle": "Niet opgeslagen {0}"
},
"messages": {
"expand": "Uitvouwen",
"collapse": "Samenvouwen"
},
"workspace": {
"fileNewName": "Naam voor nieuw bestand",
"invalidFilename": "Ongeldige bestandsnaam.",
"invalidExtension": ".{0} is geen geldige extensie",
"newFileName": "Nieuwe naam voor bestand",
"deleteCurrentSketch": "Wilt u de huidige schets verwijderen?",
"sketchDirectoryError": "Er is een fout opgetreden bij het maken van de schets map. Zie het logboek voor meer details. De applicatie zal waarschijnlijk niet werken zoals verwacht. "
}
},
"cloud": {
"GoToCloud": "GA NAAR CLOUD"
}
}

View File

@@ -14,8 +14,24 @@
"saveChangesToSketch": "Czy chcesz zapisać zmiany w tym sketchu przed zamknięciem?",
"loseChanges": "Jeśli nie zapiszesz, zmiany zostaną utracone."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"sketch": "Szkic",
"tools": "Narzędzia"
},
"debug": {
@@ -31,9 +47,9 @@
"upload.verbose": "Prawda, aby pokazywać szczegółowe informacje podczas wgrywania. Fałsz jest wartością domyślną.",
"window.autoScale": "Prawda, jeśli interfejs użytkownika skaluje się automatycznie z rozmiarem czcionki.",
"window.zoomLevel": "Dostosuj poziom powiększenia okna. Oryginalny rozmiar to 0, a każdy przyrost powyżej (np. 1) lub poniżej (np. -1) oznacza odpowiednio powiększenie lub pomniejszenie o 20%. Możesz również wprowadzić ułamki dziesiętne, aby dostosować poziom powiększenia z większą dokładnością.",
"ide.autoUpdate": "Prawda, aby włączyć automatyczne sprawdzanie aktualizacji. IDE będzie automatycznie i okresowo sprawdzać dostępność aktualizacji.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Lista certyfikatów, które można przesłać do płytki",
"sketchbook.showAllFiles": "Prawda, aby wyświetlać wszystkie pliki ze sketcha. Fałsz jest wartością domyślną.",
"sketchbook.showAllFiles": "Prawda, aby wyświetlać wszystkie pliki ze szkicu. Fałsz jest wartością domyślną.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
@@ -55,13 +71,12 @@
"compile": "kompilacja",
"upload": "przesyłanie",
"verifyAfterUpload": "Weryfikuj kod po przesłaniu",
"checkForUpdates": "Sprawdź aktualizacje podczas uruchamiania",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"additionalManagerURLs": "Dodatkowe adresy URL do menadżera płytek",
"noProxy": "No proxy",
"manualProxy": "Konfiguracja ręczna proxy",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"choose": "Wybierz",
"enterAdditionalURLs": "Wprowadź dodatkowe adresy URL, po jednym adresie w wierszu",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
@@ -71,18 +86,18 @@
"cloud": {
"signIn": "ZALOGUJ SIĘ",
"signOut": "Wyloguj się",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"chooseSketchVisibility": "Wybierz widoczność swojego Szkicu:",
"privateVisibility": "Prywatny. Tylko Ty możesz zobaczyć ten Szkic.",
"publicVisibility": "Publiczny. Każda osoba mająca link może zobaczyć ten Szkic.",
"link": "Odnośnik:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"shareSketch": "Udostępnij Szkic",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Otwórz w Cloud Editor",
"options": "Opcje...",
"share": "Share...",
"share": "Udostępnij...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
@@ -107,8 +122,8 @@
"installManually": "Zainstaluj ręcznie",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Wybierz inną płytkę i port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"configDialog1": "Wybierz płytkę oraz port, aby wgrać szkic.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Wybierz płytkę podłączoną do wybranego portu.",
"showAllAvailablePorts": "Po włączeniu pokazuje wszystkie dostępne porty",
"programmer": "Programator",
@@ -130,7 +145,7 @@
"getBoardInfo": "Pobierz informacje o płytce",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"boardsManager": "Menedżer Płytek",
"about": {
"label": "O {0}",
"detail": "Wersja: {0}\nData: {1}{2}\nWersja CLI: {3}{4} [{5}]\n\n{6}"
@@ -138,7 +153,7 @@
"contributions": {
"addFile": "Dodaj plik",
"replaceTitle": "Zamień",
"fileAdded": "One file added to the sketch."
"fileAdded": "Jeden plik dodany do szkicu."
},
"replaceMsg": "Czy zamienić istniejącą wersję {0}?",
"library": {
@@ -152,7 +167,7 @@
"manageLibraries": "Zarządzaj bibliotekami...",
"arduinoLibraries": "Biblioteki Arduino",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"title": "Menedżer bibliotek",
"needsOneDependency": "Biblioteka <b>{0}:{1}</b> wymaga innej zależności, która obecnie nie jest zainstalowana:",
"needsMultipleDependencies": "Biblioteka <b>{0}:{1}</b> wymaga innych zależności, które obecnie nie są zainstalowane:",
"installOneMissingDependency": "Czy chcesz zainstalować brakującą zależność?",
@@ -171,9 +186,9 @@
"new": "Nowy",
"openRecent": "Otwórz ostatnie",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"sketch": "Szkic",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
@@ -187,7 +202,7 @@
"verify": "Weryfikuj",
"doneCompiling": "Kompilacja zakończona.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openSketchInNewWindow": "Otwórz szkic w nowym oknie.",
"openFolder": "Otwórz folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Najczęściej zadawane pytania",
"visit": "Odwiedź Arduino.cc"
"visit": "Odwiedź Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Wybierz płytkę",
"checkUpdates": "Sprawdź uaktualnienia",
"selectVersion": "Select firmware version",
"install": "Zainstaluj",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Instalacja nie powiodła się. Spróbuj ponownie."
},
"dialog": {
@@ -268,8 +284,8 @@
"newLine": "Nowa linia",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"notConnected": "Nie połączono. Wybierz płytkę i port do automatycznego połączenia.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Połączenie nie powiodło się. Port szeregowy jest zajęty: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Deseja salvar as alterações neste sketch antes de fechar?",
"loseChanges": "Se você não salvar, as alterações serão perdidas. "
},
"ide-updater": {
"errorCheckingForUpdates": "Erro ao verificar as atualizações do IDE do Arduino. {0}",
"notNowButton": "Agora não ",
"versionDownloaded": "O Arduino IDE {0} foi baixado. ",
"closeToInstallNotice": "Feche o software e instale a atualização em sua máquina. ",
"closeAndInstallButton": "Fechar e instalar ",
"downloadingNotice": "Baixando a versão mais recente do IDE do Arduino.",
"updateAvailable": "Atualização disponível",
"newVersionAvailable": "Uma nova versão do Arduino IDE ({0}) está disponível para download.",
"skipVersionButton": "Pular versão ",
"downloadButton": "Baixar",
"goToDownloadPage": "Uma atualização para o Arduino IDE está disponível, mas não podemos baixá-la e instalá-la automaticamente. Por favor, vá para a página de download e baixe a versão mais recente de lá. ",
"goToDownloadButton": "Ir Para Baixar",
"ideUpdaterDialog": "Atualização de software ",
"noUpdatesAvailable": "Não há atualizações recentes disponíveis para o Arduino IDE "
},
"menu": {
"sketch": "Rascunho",
"tools": "Ferramentas"
@@ -31,7 +47,7 @@
"upload.verbose": "Verdadeiro para saída de upload detalhada. Falsa é padrão.",
"window.autoScale": "Verdadeiro se a interface do usuário for dimensionada automaticamente com o tamanho da fonte.",
"window.zoomLevel": "Ajuste o nível de zoom da janela. O tamanho original é 0 e cada incremento acima (por exemplo, 1) ou abaixo (por exemplo, -1) representa um zoom 20% maior ou menor. Você também pode inserir decimais para ajustar o nível de zoom para uma maior precisão.",
"ide.autoUpdate": "Verdadeiro para habilitar as verificações automáticas de atualização. A IDE verificará se há atualizações automáticas periodicamente.",
"ide.updateChannel": "Canal de lançamento para se atualizar. 'stable' é o lançamento estável, 'nightly' é o último build de desenvolvimento.",
"board.certificates": "Lista de certificados que podem ser carregados nas placas",
"sketchbook.showAllFiles": "Verdadeiro para mostrar todos os arquivos de sketch dentro do sketch. Falso é padrão.",
"cloud.enabled": "Verdadeiro se as funções de sincronização de sketch estiverem ativadas. O padrão é verdadeiro.",
@@ -55,7 +71,6 @@
"compile": "compilar",
"upload": "enviar",
"verifyAfterUpload": "Verificar o código após enviar",
"checkForUpdates": "Procurar por atualizações ao iniciar",
"editorQuickSuggestions": "Dicas do editor",
"additionalManagerURLs": "URLs Adicionais para Gerenciadores de Placas",
"noProxy": "Sem proxy",
@@ -108,7 +123,7 @@
"installNow": "O núcleo \"{0} {1}\" deve ser instalado para a placa \"{2}\" atualmente selecionada. Quer instalar agora?",
"configDialogTitle": "Selecionar Outra Placa e Porta",
"configDialog1": "Selecione uma placa e uma porta se quiser fazer o upload de um sketch.",
"configDialog2": "Se você apenas selecionar a placa, poderá apenas compilar, mas não poderá fazer o upload de seu sketch.",
"configDialog2": "Se você somente selecionar uma Placa você será capaz de compilar, mas não de enviar o seu rascunho.",
"pleasePickBoard": "Escolha uma placa conectada à porta que você selecionou.",
"showAllAvailablePorts": "Mostrar todas as portas disponíveis quando habilitado",
"programmer": "Programador/Gravador",
@@ -173,7 +188,7 @@
"showFolder": "Mostrar a pasta de Sketches",
"sketch": "Sketch",
"moving": "Movendo",
"movingMsg": "O arquivo \"{0}\" deve estar dentro de uma pasta de sketch chamada \"{1}\".\nCriar esta pasta, mover o arquivo e continuar?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "Directoria chamada \"{0}\" já existe. Não é possível abrir o rascunho.",
"saveFolderAs": "Salvar a pasta de sketch como...",
"sketchbook": "Sketchbook",
@@ -223,7 +238,8 @@
"reference": "Referência",
"findInReference": "Encontrar em Referência",
"faq": "Perguntas Frequentes",
"visit": "Visitar Arduino.cc"
"visit": "Visitar Arduino.cc",
"privacyPolicy": "Política de Privacidade "
},
"certificate": {
"uploadRootCertificates": "Enviar certificado Raiz SSL",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "Nenhuma placa compatível conectada"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Atualizador de Firmware",
"updater": "Atualizador de Firmware WiFi101 / WiFiNINA",
"selectBoard": "Selecionar Placa",
"checkUpdates": "Verificar Atualizações",
"selectVersion": "Selecione a versão do firmware",
"install": "Instalar",
"overwriteSketch": "A instalação substituirá o sketch na placa.",
"installingFirmware": "Instalando firmware.",
"successfullyInstalled": "Firmware instalado com sucesso.",
"successfullyInstalled": "Firmware instalado com sucesso. ",
"failedInstall": "A instalação falhou. Por favor, tente novamente."
},
"dialog": {
@@ -269,7 +285,7 @@
"carriageReturn": "Retorno de linha",
"newLineCarriageReturn": "Nova linha e retorno de linha",
"notConnected": "Não conectado. Selecione uma placa e uma porta para conectar automaticamente.",
"message": "Mensagem ({0} + Enter para enviar mensagem para '{1}' em '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "A conexão falhou. A porta serial está ocupada: {0}",
"disconnected": "Desconectado {0} de {1}.",
"unexpectedError": "Erro inesperado. Reconectando {0} na porta {1}.",

View File

@@ -14,6 +14,22 @@
"saveChangesToSketch": "Vrei  salvezi modificările făcute schiței înainte de a închide?",
"loseChanges": "Dacă nu salvezi, modificările se vor pierde."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Schița",
"tools": "Unelte"
@@ -31,49 +47,48 @@
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True to enable automatic update checks. The IDE will check for updates automatically and periodically.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Lista de certificate ce pot fi încarcate pe plăcile de dezvoltare",
"sketchbook.showAllFiles": "Adevărat pentru a afișa toate fișierele tip schița din interiorul schiței. Este fals în modul implicit.",
"cloud.enabled": "Adevărat dacă funcțile schiței sunt activate. Valoarea implictă este adevarată.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"network": "Network",
"auth.clientID": "ID-ul de client OAuth2.",
"auth.domain": "Domeniul OAuth2.",
"auth.audience": "Audiența OAuth2.",
"auth.registerUri": "URI folosit pentru a înregistra un utilizator nou.",
"network": "Rețea",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
"browse": "Selectează",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"interfaceScale": "Scala de interfață",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"automatic": "Automatic",
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"checkForUpdates": "Check for updates on startup",
"editorQuickSuggestions": "Editor Quick Suggestions",
"automatic": "Automat",
"compile": "compila",
"upload": "încarcă",
"verifyAfterUpload": "Verifică codul după încarcare",
"editorQuickSuggestions": "Sugestii rapide în Editor",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"noProxy": "Fără proxy",
"manualProxy": "Configurare manuală proxy",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"choose": "Selectează",
"enterAdditionalURLs": "Introduce URL-uri noi, câte unul pe fiecare rând",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"signIn": "CONECTARE",
"signOut": "Deconectare",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"privateVisibility": "Privat. Numai tu poți vedea Schița.",
"publicVisibility": "Public. Oricine are link-ul poate vedea Schița.",
"link": "Link:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
@@ -81,15 +96,15 @@
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Options...",
"share": "Share...",
"remote": "Remote",
"options": "Opțiuni...",
"share": "Partajați...",
"remote": "La distanță ",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"learnMore": "Învață mai mult",
"continue": "Continuă",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
@@ -99,57 +114,57 @@
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"profilePicture": "Profile picture"
"connected": "Conectat",
"offline": "Deconectat",
"profilePicture": "Poză de profil"
},
"board": {
"installManually": "Install Manually",
"installManually": "Instalează Manual",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"programmer": "Programator",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"reselectLater": "Re-selectează mai târziu",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"boardListItem": "{0} la {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Board Info",
"board": "Board{0}",
"port": "Port{0}",
"port": "Portul{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
"label": "Despre {0}",
"detail": "Versiunea: {0}\nData: {1}{2}\nVersiunea CLI : {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Replace",
"addFile": "Adaugă Fișier",
"replaceTitle": "Înlocuiește",
"fileAdded": "One file added to the sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"zipLibrary": "Librărie",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"include": "Include Librăria",
"manageLibraries": "Gestionare Librării ",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
@@ -158,8 +173,8 @@
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installAll": "Instalează tot",
"installOnly": "Instalează doar {0}",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
@@ -168,27 +183,27 @@
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"new": "Nou",
"openRecent": "Deschide Recente",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"upload": "Încărcați",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"verify": "Verifică",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"openFolder": "Deschide Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
@@ -207,7 +222,7 @@
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"menu": "Exemple",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
@@ -215,21 +230,22 @@
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"search": "Caută pe Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"environment": "Mediu de lucru",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc"
"visit": "Vizitează Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"upload": "Încărcare",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
@@ -243,14 +259,14 @@
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Selectează Placa",
"checkUpdates": "Verifică Versiunile",
"selectVersion": "Select firmware version",
"install": "Instalează",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware succesfully installed.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Instalarea a eșuat. Te rugăm să încerci din nou."
},
"dialog": {
@@ -267,9 +283,9 @@
"noLineEndings": "No Line Ending",
"newLine": "Linie Nouă",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"newLineCarriageReturn": "NL și CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Conexiunea a eșuat. Portul Serial este ocupat: {0}",
"disconnected": "Deconectat {0} de la {1}.",
"unexpectedError": "Eroare neașteptată. Reconectare {0} pe portul {1}.",
@@ -302,7 +318,7 @@
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"offline": "Deconectat",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."

View File

@@ -3,17 +3,33 @@
"common": {
"offlineIndicator": "Похоже, у Вас нет подключения к Интернету. Без подключения к Интернету Arduino CLI не сможет загрузить необходимые ресурсы и упадет. Подключитесь к Интернету и перезапустите приложение.",
"noBoardSelected": "Плата не выбрана",
"selectedOn": "on {0}",
"selectedOn": "вкл. {0}",
"notConnected": "[не подключено].",
"serialMonitor": "Монитор порта",
"oldFormat": "'{0}' использует старый формат `.pde`. Хотите сконвертировать в новый формат `.ino`?",
"later": "Позже",
"selectBoard": "Выбрать плату",
"unknown": "Неизвестно",
"processing": "Processing",
"processing": "Обработка",
"saveChangesToSketch": "Сохранить изменения в этом скетче перед закрытием?",
"loseChanges": "Если не сохранить изменения - они будут потеряны."
},
"ide-updater": {
"errorCheckingForUpdates": "Ошибка при проверке обновлений IDE Arduino.\n{0}",
"notNowButton": "Не сейчас",
"versionDownloaded": "Arduino IDE {0} был загружен.",
"closeToInstallNotice": "Закройте программное обеспечение и установите обновление на вашем компьютере.",
"closeAndInstallButton": "Закрыть и установить",
"downloadingNotice": "Загрузка последней версии Arduino IDE.",
"updateAvailable": "Доступны обновления",
"newVersionAvailable": "Новая версия Arduino IDE ({0}) доступна для загрузки.",
"skipVersionButton": "Пропустить версию",
"downloadButton": "Скачать",
"goToDownloadPage": "Доступно обновление для Arduino IDE, но мы не можем загрузить и установить его автоматически. Пожалуйста, перейдите на страницу загрузки и оттуда загрузите последнюю версию.",
"goToDownloadButton": "Перейдите к скачиванию",
"ideUpdaterDialog": "Обновление программного обеспечения",
"noUpdatesAvailable": "Нет обновлений для Arduino IDE"
},
"menu": {
"sketch": "Скетч",
"tools": "Инструменты"
@@ -27,21 +43,21 @@
"preferences": {
"language.log": "True - сервер Arduino Language будет создавать файлы журнала в папке скетча. В противном случае - false. По умолчанию - false.",
"compile.verbose": "True для подробного вывода компилятора. По умолчанию - false.",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"compile.warnings": "Уровень предупреждений GCC. По умолчанию 'None'.",
"upload.verbose": "True - подробный вывод при загрузке скетча на плату. По умолчанию - false.",
"window.autoScale": "True, если пользовательский интерфейс автоматически масштабируется в зависимости от размера шрифта.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.autoUpdate": "True - автоматическая проверка обновлений включена. IDE будет проверять наличие обновлений периодически в автоматическом режиме.",
"window.zoomLevel": "Отрегулируйте уровень масштабирования окна. Оригинальный размер равен 0 и каждое изменение выше (например, 1) или ниже (например, -1) представляет собой масштабирование на 20% больше или меньше. Вы также можете войти в десятичные, чтобы настроить уровень масштабирования с более тонкой гранулярностью.",
"ide.updateChannel": "Release channel - это канал для обновлений. «stable» - это стабильный выпуск, «Nightly» - это последняя сборка.",
"board.certificates": "Список сертификатов, которые могут быть загружены в платы",
"sketchbook.showAllFiles": "True - показывать все файлы внутри скетча. По умолчанию - false.",
"cloud.enabled": "True, если функции синхронизации скетчей включены. По умолчанию - true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"cloud.pull.warn": "True, если пользователи должны быть предупреждены перед созданием облачного скетча. По умолчанию установлено значение true.",
"cloud.push.warn": "True, если пользователи должны быть предупреждены перед запуском облачного эскиза. По умолчанию установлено значение true.",
"cloud.pushpublic.warn": "True, если пользователи должны быть предупреждены перед отправкой общедоступного эскиза в облако. По умолчанию установлено значение true.",
"cloud.sketchSyncEnpoint": "Конечная точка, используемая для отправки и извлечения скетчей из серверной части. По умолчанию он указывает на Arduino Cloud API.",
"auth.clientID": "Идентификатор клиента OAuth2.",
"auth.domain": "Домен OAuth2.",
"auth.audience": "The OAuth2 audience.",
"auth.audience": "Аудитория OAuth2.",
"auth.registerUri": "URI, используемый для регистрации нового пользователя.",
"network": "Сеть",
"sketchbook.location": "Путь к альбому со скетчами",
@@ -55,17 +71,16 @@
"compile": "компиляции",
"upload": "выгрузке на плату",
"verifyAfterUpload": "Проверять содержимое памяти платы после загрузки",
"checkForUpdates": "Проверять обновления при запуске",
"editorQuickSuggestions": "Быстрые подсказки в редакторе",
"additionalManagerURLs": "Дополнительные ссылки для Менеджера плат",
"noProxy": "Не использовать прокси-сервер",
"manualProxy": "Ручная настройка параметров прокси-сервера",
"newSketchbookLocation": "Выбрать новое расположение для альбома со скетчами",
"choose": "Choose",
"choose": "Выбрать",
"enterAdditionalURLs": "Введите дополнительные URL, по одному в каждой строке",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"unofficialBoardSupport": "Список URL-адресов поддержки неофициальных плат",
"invalid.sketchbook.location": "Неправильный путь к альбому со скетчами: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.editorFontSize": "Неверный размер шрифта редактора. Это должно быть положительное целое число.",
"invalid.theme": "Неверная тема."
},
"cloud": {
@@ -75,52 +90,52 @@
"privateVisibility": "Приватный. Только автор можешь просматривать скетч.",
"publicVisibility": "Публичный. Любой, у кого есть ссылка, может посмотреть скетч.",
"link": "Ссылка:",
"embed": "Embed:",
"embed": "Встроить:",
"cloudSketchbook": "Альбом в облаке",
"shareSketch": "Поделиться скетчем",
"showHideRemoveSketchbook": "Показать/скрыть удаленный альбом",
"pullSketch": "Pull Sketch",
"pullSketch": "Вытянуть скетч",
"openInCloudEditor": "Открыть в облачном редакторе",
"options": "Параметры...",
"share": "Поделиться...",
"remote": "Remote",
"remote": "Удаленный",
"emptySketchbook": "Ваш альбом пуст",
"visitArduinoCloud": "Посетите Arduino Cloud, чтобы создать скетчи в облаке.",
"signInToCloud": "Войдите в Arduino Cloud",
"syncEditSketches": "Синхронизировать и редактировать скетчи в Arduino Cloud",
"learnMore": "Узнать больше",
"continue": "Продолжить",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"pushSketch": "Выдавить скетч",
"pushSketchMsg": "Это Публичный скетч. Перед нажатием убедитесь, что любая конфиденциальная информация определена в файлах arduino_secrets.h. Вы можете сделать скетч приватным на панели общего доступа.",
"pull": "Выдавить",
"pullSketchMsg": "Извлечение этого скетча из Облака приведет к перезаписи его локальной версии. Вы уверены, что хотите продолжить?",
"donePulling": "Закончить вытягивание {0}.",
"notYetPulled": "Не удается отправить в облако. Он еще не вытащен.",
"push": "Отправить",
"pullFirst": "Вы должны сначала потянуть, чтобы иметь возможность перейти к облаку.",
"donePushing": "Отправлено {0}.",
"connected": "Подключено",
"offline": "Не подключено",
"profilePicture": "Фотография профиля"
},
"board": {
"installManually": "Установить вручную",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"installNow": "Необходимо установить ядро «{0} {1}» для выбранной в данный момент «{2}» платы. Вы хотите установить его сейчас?",
"configDialogTitle": "Выберите другую плату и порт",
"configDialog1": "Выберите плату и порт, если Вы хотите загрузить скетч в плату.",
"configDialog2": "If you only select a Board you will be able just to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"configDialog2": "Если вы выбираете только плату, вы сможете компилировать, но не загружать свой скетч.",
"pleasePickBoard": "Пожалуйста, выберите плату, подключенную к выбранному вами порту.",
"showAllAvailablePorts": "Показать все доступные порты при включении",
"programmer": "Программатор",
"succesfullyInstalledPlatform": "Платформа установлена успешно {0}:{1}",
"succesfullyUninstalledPlatform": "Платформа успешно удалена {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"couldNotFindPreviouslySelected": "Не удалось найти ранее выбранную плату '{0}' в установленной платформе '{1}'.Пожалуйста, выберите плату которую хотите использовать вручную повторно. Вы хотите повторно выбрать её сейчас?",
"reselectLater": "Выборать позже",
"noneSelected": "Плата не выбрана.",
"noPortsSelected": "Не выбраны порты для платы: '{0}'.",
"noFQBN": "FQBN недоступен для выбранной платы \"{0}\". Проверьте наличие необходимого ядра.",
"openBoardsConfig": "Выберите другую плату и порт...",
"boardListItem": "{0} at {1}",
"boardListItem": "{0} в {1}",
"selectBoardForInfo": "Пожалуйста, выберите плату в меню инструментов для получения информации с платы.",
"platformMissing": "Платформа для выбранной платы '{0}' не установлена.",
"selectPortForInfo": "Пожалуйста, выберите порт в меню инструментов для получения информации с платы.",
@@ -153,8 +168,8 @@
"arduinoLibraries": "Библиотеки Arduino",
"contributedLibraries": "Сторонние библиотеки",
"title": "Управление библиотеками",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"needsOneDependency": "Нужная библиотеке <b>{0}: {1} </b> другая зависимость в настоящее время не установлена:",
"needsMultipleDependencies": "Нужные библиотеке <b> {0}: {1} </b> некоторые другие зависимости в настоящее время не установлены:",
"installOneMissingDependency": "Установить недостающую зависимость?",
"installMissingDependencies": "Установить все недостающие зависимости?",
"dependenciesForLibrary": "Зависимости для библиотеки {0}:{1}",
@@ -172,14 +187,14 @@
"openRecent": "Открыть предыдущий",
"showFolder": "Показать папку скетча",
"sketch": "Скетч",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named as \"{1}\".\nCreate this folder, move the file, and continue?",
"moving": "Переместить",
"movingMsg": "Файл «{0}» должен быть в папке с именем скетча «{1}». \nСоздать эту папку, переместить файл и продолжить?",
"cantOpen": "Папка \"{0}\" уже существует. Невозможно открыть скетч.",
"saveFolderAs": "Сохранить папку со скетчем как...",
"sketchbook": "Альбом",
"upload": "Загрузить на плату",
"uploadUsingProgrammer": "Загрузить на плату при помощи программатора",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"userFieldsNotFoundError": "Не могу найти пользовательские поля для подключенной платы",
"doneUploading": "Загрузка завершена.",
"configureAndUpload": "Настроить и загрузить",
"verifyOrCompile": "Проверить/Скомпилировать",
@@ -223,32 +238,33 @@
"reference": "Справочник по функциям",
"findInReference": "Найти в справочнике",
"faq": "Часто задаваемые вопросы",
"visit": "Перейти на сайт Arduino.cc"
"visit": "Перейти на сайт Arduino.cc",
"privacyPolicy": "Политика конфиденциальности"
},
"certificate": {
"uploadRootCertificates": "Загрузка корневого сертификата SSL",
"openContext": "Открыть контекст",
"remove": "Remove",
"remove": "Удалить",
"upload": "Загрузка",
"addURL": "Добавление URL для получения SSL-сертификата",
"enterURL": "Введите URL",
"selectCertificateToUpload": "1. Выберите сертификат для загрузки",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"addNew": "Новый",
"selectDestinationBoardToUpload": "2. Выберите плату назначения и загрузите сертификат",
"uploadingCertificates": "Загрузка сертификатов.",
"certificatesUploaded": "Сертификаты зугружены.",
"uploadFailed": "Загрузка не удалась. Повторите попытку.",
"selectBoard": "Выберите плату...",
"boardAtPort": "{0} at {1}",
"boardAtPort": "{0}в{1}",
"noSupportedBoardConnected": "Не подключено ни одной поддерживаемой платы"
},
"firmware": {
"updater": "Обновление прошивки WiFi101 / WiFiNINA",
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Выбор платы",
"checkUpdates": "Проверить наличие обновлений",
"selectVersion": "Select firmware version",
"selectVersion": "Выберите версию прошивки",
"install": "Установка",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"overwriteSketch": "Установка перезаписывает скетч на плате.",
"installingFirmware": "Установка прошивки.",
"successfullyInstalled": "Прошивка успешно установлена.",
"failedInstall": "Не удалось установить прошивку. Повторите попытку."
@@ -261,39 +277,39 @@
"upload": "Загрузка"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"toggleTimestamp": "Переключить отметку времени",
"autoscroll": "Автопрокрутка",
"timestamp": "Timestamp",
"timestamp": "Время отметки",
"noLineEndings": "Нет конца строки",
"newLine": "Новая строка",
"carriageReturn": "CR Возврат каретки",
"newLineCarriageReturn": "NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}'",
"notConnected": "Нет соединения. Выберите плату и порт для автоматического подключения.",
"message": "Сообщение ({0} + Enter, чтобы отправить сообщение для '{1}' на '{2}')",
"connectionBusy": "Не удалось подключиться. Последовательный порт занят: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"disconnected": "Отключен {0} от {1}",
"unexpectedError": "Непредвиденная ошибка. Переподключение {0} на порту {1}.",
"failedReconnect": "Не удалось переподключиться {0} к последовательному порту после 10 попыток. Последовательный порт {1} занят.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
"reconnect": "Переподключение {0} к {1} в {2} секунды..."
},
"component": {
"uninstall": "Удалить",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"uninstallMsg": "Вы хотите удалить {0}?",
"by": "около",
"version": "Версия {0}",
"moreInfo": "Дополнительная информация",
"install": "Установка",
"filterSearch": "Отфильтровать результаты поиска..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
"couldNotSave": "Скетч не сохранён. Пожалуйста, скопируйте вашу не сохраненную работу в ваш внешний текстовый редактор и перезапустите IDE.",
"unsavedChanges": "Любые не сохраненные изменения не будут сохранены."
},
"compile": {
"error": "Ошибка компиляции: {0}"
},
"upload": {
"error": "{0} error: {1}"
"error": "{0} ошибка: {1}"
},
"burnBootloader": {
"error": "Ошибка при прошивке бутлоадера: {0}"
@@ -301,19 +317,19 @@
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"couldNotSave": "Скетч не сохранён. Пожалуйста, скопируйте вашу не сохраненную работу в ваш внешний текстовый редактор и перезапустите IDE.",
"offline": "Не подключено",
"daemonOffline": "CLI демон не подключен",
"cannotConnectBackend": "Невозможно подключиться к бэкенду.",
"cannotConnectDaemon": "Невозможно подключиться к фоновому процессу CLI."
},
"debug": {
"start": "Запуск...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"typeNotSupported": "Тип сеанса отладки «{0}» не поддерживается.",
"startError": "Произошла ошибка при запуске отладочной сессии, просмотрите журнал для получения дополнительной информации."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
"unsavedTitle": "Несохраненный {0}"
},
"messages": {
"expand": "Развернуть",
@@ -325,10 +341,10 @@
"invalidExtension": "Файлы с расширением \".{0}\" не поддерживаются.",
"newFileName": "Новое имя файла",
"deleteCurrentSketch": "Вы хотите удалить текущий скетч?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
"sketchDirectoryError": "Ошибка создания каталога скетча. Смотрите журнал для более подробной информации. Вероятно, приложение, не будет работать должным образом."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
"GoToCloud": "Переход в облако"
}
}

350
i18n/sq.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "You appear to be offline. Without an Internet connection, the Arduino CLI might not be able to download the required resources and could cause malfunction. Please connect to the Internet and restart the application.",
"noBoardSelected": "No board selected",
"selectedOn": "on {0}",
"notConnected": "[not connected]",
"serialMonitor": "Serial Monitor",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Later",
"selectBoard": "Select Board",
"unknown": "Unknown",
"processing": "Processing",
"saveChangesToSketch": "Do you want to save changes to this sketch before closing?",
"loseChanges": "If you don't save, your changes will be lost."
},
"ide-updater": {
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
"notNowButton": "Not now",
"versionDownloaded": "Arduino IDE {0} has been downloaded.",
"closeToInstallNotice": "Close the software and install the update on your machine.",
"closeAndInstallButton": "Close and Install",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"updateAvailable": "Update Available",
"newVersionAvailable": "A new version of Arduino IDE ({0}) is available for download.",
"skipVersionButton": "Skip Version",
"downloadButton": "Download",
"goToDownloadPage": "An update for the Arduino IDE is available, but we're not able to download and install it automatically. Please go to the download page and download the latest version from there.",
"goToDownloadButton": "Go To Download",
"ideUpdaterDialog": "Software Update",
"noUpdatesAvailable": "There are no recent updates available for the Arduino IDE"
},
"menu": {
"sketch": "Sketch",
"tools": "Tools"
},
"debug": {
"optimizeForDebugging": "Optimize for Debugging",
"debugWithMessage": "Debug - {0}",
"noPlatformInstalledFor": "Platform is not installed for '{0}'",
"debuggingNotSupported": "Debugging is not supported by '{0}'"
},
"preferences": {
"language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Adjust the zoom level of the window. The original size is 0 and each increment above (e.g. 1) or below (e.g. -1) represents zooming 20% larger or smaller. You can also enter decimals to adjust the zoom level with a finer granularity.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "List of certificates that can be uploaded to boards",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "The OAuth2 client ID.",
"auth.domain": "The OAuth2 domain.",
"auth.audience": "The OAuth2 audience.",
"auth.registerUri": "The URI used to register a new user.",
"network": "Network",
"sketchbook.location": "Sketchbook location",
"browse": "Browse",
"files.inside.sketches": "Show files inside Sketches",
"editorFontSize": "Editor font size",
"interfaceScale": "Interface scale",
"showVerbose": "Show verbose output during",
"compilerWarnings": "Compiler warnings",
"automatic": "Automatic",
"compile": "compile",
"upload": "upload",
"verifyAfterUpload": "Verify code after upload",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "No proxy",
"manualProxy": "Manual proxy configuration",
"newSketchbookLocation": "Select new sketchbook location",
"choose": "Choose",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Invalid sketchbook location: {0}",
"invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.",
"invalid.theme": "Invalid theme."
},
"cloud": {
"signIn": "SIGN IN",
"signOut": "Sign Out",
"chooseSketchVisibility": "Choose visibility of your Sketch:",
"privateVisibility": "Private. Only you can view the Sketch.",
"publicVisibility": "Public. Anyone with the link can view the Sketch.",
"link": "Link:",
"embed": "Embed:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Share Sketch",
"showHideRemoveSketchbook": "Show/Hide Remote Sketchbook",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Options...",
"share": "Share...",
"remote": "Remote",
"emptySketchbook": "Your Sketchbook is empty",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Sign in to Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Learn more",
"continue": "Continue",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Pull",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Done pulling {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Push",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Connected",
"offline": "Offline",
"profilePicture": "Profile picture"
},
"board": {
"installManually": "Install Manually",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Select Other Board & Port",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.",
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
"showAllAvailablePorts": "Shows all available ports when enabled",
"programmer": "Programmer",
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Reselect later",
"noneSelected": "No boards selected.",
"noPortsSelected": "No ports selected for board: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Select other board and port…",
"boardListItem": "{0} at {1}",
"selectBoardForInfo": "Please select a board to obtain board info.",
"platformMissing": "The platform for the selected '{0}' board is not installed.",
"selectPortForInfo": "Please select a port to obtain board info.",
"boardInfo": "Board Info",
"board": "Board{0}",
"port": "Port{0}",
"getBoardInfo": "Get Board Info",
"inSketchbook": " (in Sketchbook)"
},
"boardsManager": "Boards Manager",
"about": {
"label": "About {0}",
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Add File",
"replaceTitle": "Replace",
"fileAdded": "One file added to the sketch."
},
"replaceMsg": "Replace the existing version of {0}?",
"library": {
"addZip": "Add .ZIP Library...",
"zipLibrary": "Library",
"overwriteExistingLibrary": "Do you want to overwrite the existing library?",
"successfullyInstalledZipLibrary": "Successfully installed library from {0} archive",
"namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?",
"libraryAlreadyExists": "A library already exists. Do you want to overwrite it?",
"include": "Include Library",
"manageLibraries": "Manage Libraries...",
"arduinoLibraries": "Arduino libraries",
"contributedLibraries": "Contributed libraries",
"title": "Library Manager",
"needsOneDependency": "The library <b>{0}:{1}</b> needs another dependency currently not installed:",
"needsMultipleDependencies": "The library <b>{0}:{1}</b> needs some other dependencies currently not installed:",
"installOneMissingDependency": "Would you like to install the missing dependency?",
"installMissingDependencies": "Would you like to install all the missing dependencies?",
"dependenciesForLibrary": "Dependencies for library {0}:{1}",
"installAll": "Install all",
"installOnly": "Install {0} only",
"installedSuccessfully": "Successfully installed library {0}:{1}",
"uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}"
},
"selectZip": "Select a zip file containing the library you'd like to add",
"sketch": {
"archiveSketch": "Archive Sketch",
"saveSketchAs": "Save sketch folder as...",
"createdArchive": "Created archive '{0}'.",
"new": "New",
"openRecent": "Open Recent",
"showFolder": "Show Sketch Folder",
"sketch": "Sketch",
"moving": "Moving",
"movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?",
"cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.",
"saveFolderAs": "Save sketch folder as...",
"sketchbook": "Sketchbook",
"upload": "Upload",
"uploadUsingProgrammer": "Upload Using Programmer",
"userFieldsNotFoundError": "Can't find user fields for connected board",
"doneUploading": "Done uploading.",
"configureAndUpload": "Configure And Upload",
"verifyOrCompile": "Verify/Compile",
"exportBinary": "Export Compiled Binary",
"verify": "Verify",
"doneCompiling": "Done compiling.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Open Sketch in New Window",
"openFolder": "Open Folder",
"titleLocalSketchbook": "Local Sketchbook",
"titleSketchbook": "Sketchbook",
"close": "Are you sure you want to close the sketch?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
},
"editor": {
"copyForForum": "Copy for Forum (Markdown)",
"commentUncomment": "Comment/Uncomment",
"increaseIndent": "Increase Indent",
"decreaseIndent": "Decrease Indent",
"increaseFontSize": "Increase Font Size",
"decreaseFontSize": "Decrease Font Size",
"autoFormat": "Auto Format"
},
"examples": {
"menu": "Examples",
"couldNotInitializeExamples": "Could not initialize built-in examples.",
"builtInExamples": "Built-in examples",
"customLibrary": "Examples from Custom Libraries",
"for": "Examples for {0}",
"forAny": "Examples for any board"
},
"help": {
"search": "Search on Arduino.cc",
"keyword": "Type a keyword",
"gettingStarted": "Getting Started",
"environment": "Environment",
"troubleshooting": "Troubleshooting",
"reference": "Reference",
"findInReference": "Find in Reference",
"faq": "Frequently Asked Questions",
"visit": "Visit Arduino.cc",
"privacyPolicy": "Privacy Policy"
},
"certificate": {
"uploadRootCertificates": "Upload SSL Root Certificates",
"openContext": "Open context",
"remove": "Remove",
"upload": "Upload",
"addURL": "Add URL to fetch SSL certificate",
"enterURL": "Enter URL",
"selectCertificateToUpload": "1. Select certificate to upload",
"addNew": "Add New",
"selectDestinationBoardToUpload": "2. Select destination board and upload certificate",
"uploadingCertificates": "Uploading certificates.",
"certificatesUploaded": "Certificates uploaded.",
"uploadFailed": "Upload failed. Please try again.",
"selectBoard": "Select a board...",
"boardAtPort": "{0} at {1}",
"noSupportedBoardConnected": "No supported board connected"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Select Board",
"checkUpdates": "Check Updates",
"selectVersion": "Select firmware version",
"install": "Install",
"overwriteSketch": "Installation will overwrite the Sketch on the board.",
"installingFirmware": "Installing firmware.",
"successfullyInstalled": "Firmware successfully installed.",
"failedInstall": "Installation failed. Please try again."
},
"dialog": {
"dontAskAgain": "Don't ask again"
},
"userFields": {
"cancel": "Cancel",
"upload": "Upload"
},
"serial": {
"toggleTimestamp": "Toggle Timestamp",
"autoscroll": "Autoscroll",
"timestamp": "Timestamp",
"noLineEndings": "No Line Ending",
"newLine": "New Line",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "Both NL & CR",
"notConnected": "Not connected. Select a board and a port to connect automatically.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Connection failed. Serial port is busy: {0}",
"disconnected": "Disconnected {0} from {1}.",
"unexpectedError": "Unexpected error. Reconnecting {0} on port {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Reconnecting {0} to {1} in {2} seconds..."
},
"component": {
"uninstall": "Uninstall",
"uninstallMsg": "Do you want to uninstall {0}?",
"by": "by",
"version": "Version {0}",
"moreInfo": "More info",
"install": "INSTALL",
"filterSearch": "Filter your search..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Any unsaved changes will not be saved."
},
"compile": {
"error": "Compilation error: {0}"
},
"upload": {
"error": "{0} error: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Offline",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
},
"debug": {
"start": "Start...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
"editor": {
"unsavedTitle": "Unsaved {0}"
},
"messages": {
"expand": "Expand",
"collapse": "Collapse"
},
"workspace": {
"fileNewName": "Name for new file",
"invalidFilename": "Invalid filename.",
"invalidExtension": ".{0} is not a valid extension",
"newFileName": "New name for file",
"deleteCurrentSketch": "Do you want to delete the current sketch?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
}
}

350
i18n/sr.json Normal file
View File

@@ -0,0 +1,350 @@
{
"arduino": {
"common": {
"offlineIndicator": "Изгледа да сте ван мреже. Без интернет везе, Arduino CLI можда неће моћи да преузме потребне ресурсе и може изазвати квар. Повежите се на Интернет и поново покрените апликацију.",
"noBoardSelected": "Плоча није одабрана",
"selectedOn": "на {0}",
"notConnected": "[није повезано]",
"serialMonitor": "Монитор серијског порта",
"oldFormat": "The '{0}' still uses the old `.pde` format. Do you want to switch to the new `.ino` extension?",
"later": "Касније",
"selectBoard": "Одабери плочу",
"unknown": "Непознато",
"processing": "Обрађује се",
"saveChangesToSketch": "Да ли желиш да сачуваш рад прије затварања?",
"loseChanges": "Уколико не сачуваш, промјене ће бити изгубљене."
},
"ide-updater": {
"errorCheckingForUpdates": "Грешка приликом провере надоградњи за Arduino IDE.\n{0}",
"notNowButton": "Не сада",
"versionDownloaded": "Arduino IDE {0} је преузет.",
"closeToInstallNotice": "Затворите програм и покрените инсталацију надоградње на ваш рачунар.",
"closeAndInstallButton": "Затвори и инсталирај",
"downloadingNotice": "Преузимање последње верзије Arduino IDE.",
"updateAvailable": "Доступна је надоградња",
"newVersionAvailable": "Нова верзија Arduino IDE ({0}) је доступна за преузимање.",
"skipVersionButton": "Прескочите ову верзију",
"downloadButton": "Преузимање",
"goToDownloadPage": "Ажурирање за Arduine IDE је доступно, али нисмо у могућности да га аутоматски преузмемо и инсталирамо. Идите на страницу за преузимање и преузмите најновију верзију одатле.",
"goToDownloadButton": "Пређите на преузимање",
"ideUpdaterDialog": "Надоградња програма",
"noUpdatesAvailable": "Нема недавних доступних ажурирања за Arduine IDE"
},
"menu": {
"sketch": "Рад",
"tools": "Алатке"
},
"debug": {
"optimizeForDebugging": "Оптимизовано за отклањање грешака",
"debugWithMessage": "Отклањање грешака - {0}",
"noPlatformInstalledFor": "Платформа није инсталирана за '{0}'",
"debuggingNotSupported": "'{0}' не подржава отклањање грешака"
},
"preferences": {
"language.log": "Тачно ако Ардуино језички сервер треба да генерише датотеке евиденције у фасциклу за скице. Иначе, нетачно. Подразумевано је нетачно.",
"compile.verbose": "True for verbose compile output. False by default",
"compile.warnings": "Tells gcc which warning level to use. It's 'None' by default",
"upload.verbose": "True for verbose upload output. False by default.",
"window.autoScale": "True if the user interface automatically scales with the font size.",
"window.zoomLevel": "Подесите ниво зумирања прозора. Оригинална величина је 0 и сваки корак изнад (нпр. 1) или испод (нпр. -1) представља зумирање за 20% веће или мање. Такође можете да унесете децимале да бисте подесили ниво зумирања са бољом прецизношћу.",
"ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.",
"board.certificates": "Листа сертификата који могу бити спуштени на плоче",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"cloud.enabled": "True if the sketch sync functions are enabled. Defaults to true.",
"cloud.pull.warn": "True if users should be warned before pulling a cloud sketch. Defaults to true.",
"cloud.push.warn": "True if users should be warned before pushing a cloud sketch. Defaults to true.",
"cloud.pushpublic.warn": "True if users should be warned before pushing a public sketch to the cloud. Defaults to true.",
"cloud.sketchSyncEnpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.",
"auth.clientID": "OAuth2 идентификатор клијента.",
"auth.domain": "OAuth2 домен.",
"auth.audience": "OAuth2 публика.",
"auth.registerUri": "URI коришћен за регистровање нових корисника.",
"network": "Мрежа",
"sketchbook.location": "Локација радне свеске",
"browse": "Претражи",
"files.inside.sketches": "Прикажи датотеке у радовима",
"editorFontSize": "Величина текста уређивача",
"interfaceScale": "Величина интерфејса",
"showVerbose": "Прикажи детаљан испис током",
"compilerWarnings": "Упозорења преводиоца",
"automatic": "Аутоматско",
"compile": "преведи",
"upload": "спусти",
"verifyAfterUpload": "Провјери код након спуштања",
"editorQuickSuggestions": "Editor Quick Suggestions",
"additionalManagerURLs": "Additional Boards Manager URLs",
"noProxy": "Без посредника",
"manualProxy": "Ручно подешавање посредника",
"newSketchbookLocation": "Одабери нову локацију радне свеске",
"choose": "Одабери",
"enterAdditionalURLs": "Enter additional URLs, one for each row",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"invalid.sketchbook.location": "Неважећа локација радне свеске: {0}",
"invalid.editorFontSize": "Неважећа величина текста уређивача. Мора да буде позитиван цијели број.",
"invalid.theme": "Неважећа тема."
},
"cloud": {
"signIn": "ПРИЈАВИ СЕ",
"signOut": "Одјави се",
"chooseSketchVisibility": "Одабери видљивост твог рада:",
"privateVisibility": "Приватно. Само ти можеш да видиш рад.",
"publicVisibility": "Јавно. Свако са линком може да види рад.",
"link": "Линк:",
"embed": "Угради:",
"cloudSketchbook": "Cloud Sketchbook",
"shareSketch": "Подјели рад",
"showHideRemoveSketchbook": "Прикажи/Сакриј удаљене радне свеске",
"pullSketch": "Pull Sketch",
"openInCloudEditor": "Open in Cloud Editor",
"options": "Опције...",
"share": "Подјели...",
"remote": "Удаљени",
"emptySketchbook": "Твоја радна свеска је празна",
"visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches.",
"signInToCloud": "Улогујте се на Arduino Cloud",
"syncEditSketches": "Sync and edit your Arduino Cloud Sketches",
"learnMore": "Сазнајте више",
"continue": "Наставите",
"pushSketch": "Push Sketch",
"pushSketchMsg": "This is a Public Sketch. Before pushing, make sure any sensitive information is defined in arduino_secrets.h files. You can make a Sketch private from the Share panel.",
"pull": "Повуци",
"pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?",
"donePulling": "Готово повлачење {0}.",
"notYetPulled": "Cannot push to Cloud. It is not yet pulled.",
"push": "Гурни",
"pullFirst": "You have to pull first to be able to push to the Cloud.",
"donePushing": "Done pushing {0}.",
"connected": "Повезан",
"offline": "Није на мрежи",
"profilePicture": "Фотографија профила"
},
"board": {
"installManually": "Инсталирај ручно",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?",
"configDialogTitle": "Одабери другу плочу или порт",
"configDialog1": "Одабери и плочу и порт ако желиш да спустиш рад.",
"configDialog2": "Ако одабереш само плочу моћи ћеш само да преведеш, али не и да спустиш рад.",
"pleasePickBoard": "Одабери плочу повезану са одабраним портом.",
"showAllAvailablePorts": "Приказује све доступне портове када је укључено",
"programmer": "Програмер",
"succesfullyInstalledPlatform": "Успјешно инсталирана платформа {0}:{1}",
"succesfullyUninstalledPlatform": "Успјешно деинсталирана платформа {0}:{1}",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?",
"reselectLater": "Одабери поново касније",
"noneSelected": "Ниједна плоча није одабрана.",
"noPortsSelected": "Ниједан порт није одабран за плочу: '{0}'.",
"noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?",
"openBoardsConfig": "Одабери другу плочу и порт...",
"boardListItem": "{0} на {1}",
"selectBoardForInfo": "Одабери плочу да добијеш информације о њој.",
"platformMissing": "Платформа за одабрану плочу '{0}' није инсталирана.",
"selectPortForInfo": "Одабери порт да добијеш информације о плочи",
"boardInfo": "Информације о плочи",
"board": "Плоча{0}",
"port": "Порт{0}",
"getBoardInfo": "Дохвати информације о плочи",
"inSketchbook": "(у радној свесци)"
},
"boardsManager": "Управљач плочама",
"about": {
"label": "О {0}",
"detail": "Верзија: {0}\nДатум: {1}{2}\nCLI верзија: {3}{4} [{5}]\n\n{6}"
},
"contributions": {
"addFile": "Додај датотеку",
"replaceTitle": "Замјени",
"fileAdded": "Датотека је додата у рад."
},
"replaceMsg": "Замјени тренутну верзију {0}?",
"library": {
"addZip": "Додај .ZIP библиотеку...",
"zipLibrary": "Библиотека",
"overwriteExistingLibrary": "Желиш да препишеш преко већ постојеће библиотеке?",
"successfullyInstalledZipLibrary": "Успјешно инсталирана библиотека из архиве {0}",
"namedLibraryAlreadyExists": "Директоријум за библиотеку назван {0} већ постоји. Желиш да препишеш преко њега?",
"libraryAlreadyExists": "Библиотека већ постоји. Желиш да препишеш преко ње?",
"include": "Укључи библиотеку",
"manageLibraries": "Управљај библиотекама...",
"arduinoLibraries": "Arduino библиотеке",
"contributedLibraries": "Contributed libraries",
"title": "Управљач библиотекама",
"needsOneDependency": "Библиотека <b>{0}:{1}</b> захтјева другу библиотеку која није тренутно инсталирана:",
"needsMultipleDependencies": "Библиотека <b>{0}:{1}</b> захтјева друге библиотеке које нису тренутно инсталиране:",
"installOneMissingDependency": "Да ли желиш да инсталираш зависну библиотеку?",
"installMissingDependencies": "Да ли желиш да инсталираш све зависне библиотеке?",
"dependenciesForLibrary": "Зависне библиотеке за библиотеку {0}:{1}",
"installAll": "Инсталирај све",
"installOnly": "Инсталирај само {0}",
"installedSuccessfully": "Успјешно инсталирана библиотека {0}:{1}",
"uninstalledSuccessfully": "Успјешно деинсталирана библиотека {0}:{1}"
},
"selectZip": "Одабери zip датотеку са библиотеком коју желиш да додаш",
"sketch": {
"archiveSketch": "Архивирај рад",
"saveSketchAs": "Сачувај радни фолдер као...",
"createdArchive": "Направљена архива '{0}'.",
"new": "Нови",
"openRecent": "Отвори недавно",
"showFolder": "Прикажи радни директоријум",
"sketch": "Рад",
"moving": "Премјешта се",
"movingMsg": "Датотека \"{0}\" мора да буде унутар радног директоријума \"{1}\".\nКреирај овај директоријум, премјести датотеку, и настави?",
"cantOpen": "Директоријум \"{0}\" већ постоји. Није могуће отворити рад.",
"saveFolderAs": "Сачувај радни директоријум као...",
"sketchbook": "Радна свеска",
"upload": "Спусти",
"uploadUsingProgrammer": "Спусти помоћу програмера",
"userFieldsNotFoundError": "Није могуће пронаћи корисничка поља за повезану плочу.",
"doneUploading": "Спуштање завршено.",
"configureAndUpload": "Конфигуриши и спусти",
"verifyOrCompile": "Провјери/Преведи",
"exportBinary": "Export Compiled Binary",
"verify": "Провјери",
"doneCompiling": "Превођење завршено.",
"couldNotConnectToSerial": "Could not reconnect to serial port. {0}",
"openSketchInNewWindow": "Отвори рад у новом прозору",
"openFolder": "Отвори директоријум",
"titleLocalSketchbook": "Локална радна свеска",
"titleSketchbook": "Радна свеска",
"close": "Да ли желиш да затвориш рад?"
},
"bootloader": {
"burnBootloader": "Burn Bootloader",
"doneBurningBootloader": "Done burning bootloader."
},
"editor": {
"copyForForum": "Копирај за форум (Markdown)",
"commentUncomment": "Коментариши/одкоментариши",
"increaseIndent": "Повећај увлачење",
"decreaseIndent": "Смањи увлачење",
"increaseFontSize": "Повећај величину текста",
"decreaseFontSize": "Смањи величину текста",
"autoFormat": "Аутоматски форматирај"
},
"examples": {
"menu": "Примјери",
"couldNotInitializeExamples": "Није могуће иницијализовати уграђене примјере.",
"builtInExamples": "Уграђени примјери",
"customLibrary": "Примјери библиотека",
"for": "Примјери за {0}",
"forAny": "Примјери за било коју плочу"
},
"help": {
"search": "Потражи на Arduino.cc",
"keyword": "Унеси кључну ријеч",
"gettingStarted": "Увод",
"environment": "Окружење",
"troubleshooting": "Рјешавање проблема",
"reference": "Референца",
"findInReference": "Потражи у референци",
"faq": "Често постављана питања",
"visit": "Посјети Arduino.cc",
"privacyPolicy": "Политика приватности"
},
"certificate": {
"uploadRootCertificates": "Спусти SSL Root сертификате",
"openContext": "Отвори садржај",
"remove": "Избаци",
"upload": "Спусти",
"addURL": "Додај URL за дохватање SSL сертификата",
"enterURL": "Унеси URL",
"selectCertificateToUpload": "1. Одабери сертификат за спуштање",
"addNew": "Додај нови",
"selectDestinationBoardToUpload": "2. Одабери одредишну плочу и спусти сертификат",
"uploadingCertificates": "Спуштање сертификата.",
"certificatesUploaded": "Сертификати су спуштени.",
"uploadFailed": "Спуштање није успјело. Покушај поново.",
"selectBoard": "Одабери плочу...",
"boardAtPort": "{0} на {1}",
"noSupportedBoardConnected": "Није повезана ниједна подржана плоча"
},
"firmware": {
"updater": "WiFi101 / WiFiNINA Firmware Updater",
"selectBoard": "Одабери плочу",
"checkUpdates": "Провјери ажурирања",
"selectVersion": "Одаберзи верзију фирмвера",
"install": "Инсталирај",
"overwriteSketch": "Инсталација ће преписати рад на плочи.",
"installingFirmware": "Инсталирање фирмвера.",
"successfullyInstalled": "Фирмвер успјешно инсталиран.",
"failedInstall": "Инсталирање није успјело. Покушај поново."
},
"dialog": {
"dontAskAgain": "Не питај поново"
},
"userFields": {
"cancel": "Одустани",
"upload": "Спусти"
},
"serial": {
"toggleTimestamp": "Укључи/искључи временску ознаку",
"autoscroll": "Аутоматско скроловање",
"timestamp": "Временска ознака",
"noLineEndings": "Без завршетка линије",
"newLine": "Нова линија",
"carriageReturn": "Carriage Return",
"newLineCarriageReturn": "И нова линија и CR",
"notConnected": "Није повезано. Одабери плочу и порт за аутоматско повезивање.",
"message": "Message ({0} + Enter to send message to '{1}' on '{2}')",
"connectionBusy": "Повезивање није успјело. Серијски порт је заузет: {0}",
"disconnected": "Откачен {0} од {1}.",
"unexpectedError": "Неочекивана грешка. Поновно повезивање {0} на порту {1}.",
"failedReconnect": "Failed to reconnect {0} to serial port after 10 consecutive attempts. The {1} serial port is busy.",
"reconnect": "Поновно повезивање {0} на {1} за {2} секунди..."
},
"component": {
"uninstall": "Деинсталирај",
"uninstallMsg": "Да ли желиш да деинсталираш {0}? ",
"by": "од",
"version": "Верзија {0}",
"moreInfo": "Више информација",
"install": "ИНСТАЛИРАЈ",
"filterSearch": "Филтрирај претрагу..."
},
"electron": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"unsavedChanges": "Ниједна несачувана промјена неће бити сачувана."
},
"compile": {
"error": "Грешка приликом превођења: {0}"
},
"upload": {
"error": "{0} грешка: {1}"
},
"burnBootloader": {
"error": "Error while burning the bootloader: {0}"
}
},
"theia": {
"core": {
"couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.",
"offline": "Није на мрежи",
"daemonOffline": "CLI Daemon Offline",
"cannotConnectBackend": "Cannot connect to the backend.",
"cannotConnectDaemon": "Cannot connect to the CLI daemon."
},
"debug": {
"start": "Почни...",
"typeNotSupported": "The debug session type \"{0}\" is not supported.",
"startError": "There was an error starting the debug session, check the logs for more details."
},
"editor": {
"unsavedTitle": "Несачуван {0} "
},
"messages": {
"expand": "Прошири",
"collapse": "Отвори"
},
"workspace": {
"fileNewName": "Име за нову датотеку",
"invalidFilename": "Неважеће име датотеке.",
"invalidExtension": ".{0} није валидна екстензија",
"newFileName": "Ново име за датотеку",
"deleteCurrentSketch": "Да ли желиш да обришеш тренутни рад?",
"sketchDirectoryError": "There was an error creating the sketch directory. See the log for more details. The application will probably not work as expected."
}
},
"cloud": {
"GoToCloud": "GO TO CLOUD"
}
}

Some files were not shown because too many files have changed in this diff Show More