diff --git a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts index 000e9d0f9..0a6df55ff 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -53,8 +53,6 @@ import { DockPanelRenderer as TheiaDockPanelRenderer, TabBarRendererFactory, ContextMenuRenderer, - createTreeContainer, - TreeWidget, } from '@theia/core/lib/browser'; import { MenuContribution } from '@theia/core/lib/common/menu'; import { @@ -207,12 +205,8 @@ import { WorkspaceVariableContribution as TheiaWorkspaceVariableContribution } f import { WorkspaceVariableContribution } from './theia/workspace/workspace-variable-contribution'; import { DebugConfigurationManager } from './theia/debug/debug-configuration-manager'; import { DebugConfigurationManager as TheiaDebugConfigurationManager } from '@theia/debug/lib/browser/debug-configuration-manager'; -import { SearchInWorkspaceWidget as TheiaSearchInWorkspaceWidget } from '@theia/search-in-workspace/lib/browser/search-in-workspace-widget'; -import { SearchInWorkspaceWidget } from './theia/search-in-workspace/search-in-workspace-widget'; import { SearchInWorkspaceFactory as TheiaSearchInWorkspaceFactory } from '@theia/search-in-workspace/lib/browser/search-in-workspace-factory'; import { SearchInWorkspaceFactory } from './theia/search-in-workspace/search-in-workspace-factory'; -import { SearchInWorkspaceResultTreeWidget as TheiaSearchInWorkspaceResultTreeWidget } from '@theia/search-in-workspace/lib/browser/search-in-workspace-result-tree-widget'; -import { SearchInWorkspaceResultTreeWidget } from './theia/search-in-workspace/search-in-workspace-result-tree-widget'; import { MonacoEditorProvider } from './theia/monaco/monaco-editor-provider'; import { MonacoEditorFactory, @@ -337,6 +331,7 @@ import { CheckForUpdates } from './contributions/check-for-updates'; import { OutputEditorFactory } from './theia/output/output-editor-factory'; import { StartupTaskProvider } from '../electron-common/startup-task'; import { DeleteSketch } from './contributions/delete-sketch'; +import { UserFields } from './contributions/user-fields'; const registerArduinoThemes = () => { const themes: MonacoThemeJson[] = [ @@ -604,9 +599,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { bind(MonacoEditorProvider).toSelf().inSingletonScope(); rebind(TheiaMonacoEditorProvider).toService(MonacoEditorProvider); - bind(SearchInWorkspaceWidget).toSelf(); - rebind(TheiaSearchInWorkspaceWidget).toService(SearchInWorkspaceWidget); - // Disabled reference counter in the editor manager to avoid opening the same editor (with different opener options) multiple times. bind(EditorManager).toSelf().inSingletonScope(); rebind(TheiaEditorManager).toService(EditorManager); @@ -616,17 +608,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { .to(SearchInWorkspaceFactory) .inSingletonScope(); - rebind(TheiaSearchInWorkspaceResultTreeWidget).toDynamicValue( - ({ container }) => { - const childContainer = createTreeContainer(container); - childContainer.bind(SearchInWorkspaceResultTreeWidget).toSelf(); - childContainer - .rebind(TreeWidget) - .toService(SearchInWorkspaceResultTreeWidget); - return childContainer.get(SearchInWorkspaceResultTreeWidget); - } - ); - // Show a disconnected status bar, when the daemon is not available bind(ApplicationConnectionStatusContribution).toSelf().inSingletonScope(); rebind(TheiaApplicationConnectionStatusContribution).toService( @@ -761,6 +742,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => { Contribution.configure(bind, OpenBoardsConfig); Contribution.configure(bind, SketchFilesTracker); Contribution.configure(bind, CheckForUpdates); + Contribution.configure(bind, UserFields); Contribution.configure(bind, DeleteSketch); bindContributionProvider(bind, StartupTaskProvider); diff --git a/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts b/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts index ffec830d1..b08c6de36 100644 --- a/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts +++ b/arduino-ide-extension/src/browser/boards/boards-config-dialog.ts @@ -34,6 +34,7 @@ export class BoardsConfigDialog extends AbstractDialog { ) { super({ ...props, maxWidth: 500 }); + this.node.id = 'select-board-dialog-container'; this.contentNode.classList.add('select-board-dialog'); this.contentNode.appendChild(this.createDescription()); diff --git a/arduino-ide-extension/src/browser/boards/boards-config.tsx b/arduino-ide-extension/src/browser/boards/boards-config.tsx index 7edd30e76..df5ed5a33 100644 --- a/arduino-ide-extension/src/browser/boards/boards-config.tsx +++ b/arduino-ide-extension/src/browser/boards/boards-config.tsx @@ -259,9 +259,12 @@ export class BoardsConfig extends React.Component< override render(): React.ReactNode { return ( <> - {this.renderContainer('boards', this.renderBoards.bind(this))} {this.renderContainer( - 'ports', + nls.localize('arduino/board/boards', 'boards'), + this.renderBoards.bind(this) + )} + {this.renderContainer( + nls.localize('arduino/board/ports', 'ports'), this.renderPorts.bind(this), this.renderPortsFooter.bind(this) )} @@ -299,6 +302,18 @@ export class BoardsConfig extends React.Component< } } + const boardsList = Array.from(distinctBoards.values()).map((board) => ( + + key={toKey(board)} + item={board} + label={board.name} + details={board.details} + selected={board.selected} + onClick={this.selectBoard} + missing={board.missing} + /> + )); + return (
@@ -315,19 +330,17 @@ export class BoardsConfig extends React.Component< />
-
- {Array.from(distinctBoards.values()).map((board) => ( - - key={toKey(board)} - item={board} - label={board.name} - details={board.details} - selected={board.selected} - onClick={this.selectBoard} - missing={board.missing} - /> - ))} -
+ {boardsList.length > 0 ? ( +
{boardsList}
+ ) : ( +
+ {nls.localize( + 'arduino/board/noBoardsFound', + 'No boards found for "{0}"', + query + )} +
+ )}
); } @@ -342,7 +355,7 @@ export class BoardsConfig extends React.Component< ); } return !ports.length ? ( -
+
{nls.localize('arduino/board/noPortsDiscovered', 'No ports discovered')}
) : ( @@ -374,7 +387,9 @@ export class BoardsConfig extends React.Component< defaultChecked={this.state.showAllPorts} onChange={this.toggleFilterPorts} /> - Show all ports + + {nls.localize('arduino/board/showAllPorts', 'Show all ports')} +
); diff --git a/arduino-ide-extension/src/browser/contributions/board-selection.ts b/arduino-ide-extension/src/browser/contributions/board-selection.ts index 21acc221b..037587d99 100644 --- a/arduino-ide-extension/src/browser/contributions/board-selection.ts +++ b/arduino-ide-extension/src/browser/contributions/board-selection.ts @@ -5,7 +5,6 @@ import { DisposableCollection, Disposable, } from '@theia/core/lib/common/disposable'; -import { firstToUpperCase } from '../../common/utils'; import { BoardsConfig } from '../boards/boards-config'; import { MainMenuManager } from '../../common/main-menu-manager'; import { BoardsListWidget } from '../boards/boards-list-widget'; @@ -267,7 +266,11 @@ PID: ${PID}`; ]; const placeholder = new PlaceholderMenuNode( menuPath, - `${firstToUpperCase(protocol)} ports`, + nls.localize( + 'arduino/board/typeOfPorts', + '{0} ports', + Port.Protocols.protocolLabel(protocol) + ), { order: protocolOrder.toString() } ); this.menuModelRegistry.registerMenuNode(menuPath, placeholder); diff --git a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts index 5d6135cec..f337fb1d7 100644 --- a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts @@ -1,7 +1,7 @@ import { inject, injectable } from '@theia/core/shared/inversify'; import { Emitter } from '@theia/core/lib/common/event'; -import { BoardUserField, CoreService, Port } from '../../common/protocol'; -import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus'; +import { CoreService, Port } from '../../common/protocol'; +import { ArduinoMenus } from '../menu/arduino-menus'; import { ArduinoToolbar } from '../toolbar/arduino-toolbar'; import { Command, @@ -11,96 +11,36 @@ import { TabBarToolbarRegistry, CoreServiceContribution, } from './contribution'; -import { UserFieldsDialog } from '../dialogs/user-fields/user-fields-dialog'; -import { deepClone, DisposableCollection, nls } from '@theia/core/lib/common'; +import { deepClone, nls } from '@theia/core/lib/common'; import { CurrentSketch } from '../../common/protocol/sketches-service-client-impl'; import type { VerifySketchParams } from './verify-sketch'; +import { UserFields } from './user-fields'; @injectable() export class UploadSketch extends CoreServiceContribution { - @inject(MenuModelRegistry) - private readonly menuRegistry: MenuModelRegistry; - - @inject(UserFieldsDialog) - private readonly userFieldsDialog: UserFieldsDialog; - - private boardRequiresUserFields = false; - private readonly cachedUserFields: Map = new Map(); - private readonly menuActionsDisposables = new DisposableCollection(); - private readonly onDidChangeEmitter = new Emitter(); private readonly onDidChange = this.onDidChangeEmitter.event; private uploadInProgress = false; - protected override init(): void { - super.init(); - this.boardsServiceProvider.onBoardsConfigChanged(async () => { - const userFields = - await this.boardsServiceProvider.selectedBoardUserFields(); - this.boardRequiresUserFields = userFields.length > 0; - this.registerMenus(this.menuRegistry); - }); - } - - private selectedFqbnAddress(): string { - const { boardsConfig } = this.boardsServiceProvider; - const fqbn = boardsConfig.selectedBoard?.fqbn; - if (!fqbn) { - return ''; - } - const address = - boardsConfig.selectedBoard?.port?.address || - boardsConfig.selectedPort?.address; - if (!address) { - return ''; - } - return fqbn + '|' + address; - } + @inject(UserFields) + private readonly userFields: UserFields; override registerCommands(registry: CommandRegistry): void { registry.registerCommand(UploadSketch.Commands.UPLOAD_SKETCH, { execute: async () => { - const key = this.selectedFqbnAddress(); - if ( - this.boardRequiresUserFields && - key && - !this.cachedUserFields.has(key) - ) { - // Deep clone the array of board fields to avoid editing the cached ones - this.userFieldsDialog.value = ( - await this.boardsServiceProvider.selectedBoardUserFields() - ).map((f) => ({ ...f })); - const result = await this.userFieldsDialog.open(); - if (!result) { - return; - } - this.cachedUserFields.set(key, result); + if (await this.userFields.checkUserFieldsDialog()) { + this.uploadSketch(); } - this.uploadSketch(); }, isEnabled: () => !this.uploadInProgress, }); registry.registerCommand(UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION, { execute: async () => { - const key = this.selectedFqbnAddress(); - if (!key) { - return; - } - - const cached = this.cachedUserFields.get(key); - // Deep clone the array of board fields to avoid editing the cached ones - this.userFieldsDialog.value = ( - cached ?? (await this.boardsServiceProvider.selectedBoardUserFields()) - ).map((f) => ({ ...f })); - - const result = await this.userFieldsDialog.open(); - if (!result) { - return; + if (await this.userFields.checkUserFieldsDialog(true)) { + this.uploadSketch(); } - this.cachedUserFields.set(key, result); - this.uploadSketch(); }, - isEnabled: () => !this.uploadInProgress && this.boardRequiresUserFields, + isEnabled: () => !this.uploadInProgress && this.userFields.isRequired(), }); registry.registerCommand( UploadSketch.Commands.UPLOAD_SKETCH_USING_PROGRAMMER, @@ -120,45 +60,20 @@ export class UploadSketch extends CoreServiceContribution { } override registerMenus(registry: MenuModelRegistry): void { - this.menuActionsDisposables.dispose(); - this.menuActionsDisposables.push( - registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { - commandId: UploadSketch.Commands.UPLOAD_SKETCH.id, - label: nls.localize('arduino/sketch/upload', 'Upload'), - order: '1', - }) - ); - if (this.boardRequiresUserFields) { - this.menuActionsDisposables.push( - registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { - commandId: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.id, - label: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.label, - order: '2', - }) - ); - } else { - this.menuActionsDisposables.push( - registry.registerMenuNode( - ArduinoMenus.SKETCH__MAIN_GROUP, - new PlaceholderMenuNode( - ArduinoMenus.SKETCH__MAIN_GROUP, - // commandId: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.id, - UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.label, - { order: '2' } - ) - ) - ); - } - this.menuActionsDisposables.push( - registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { - commandId: UploadSketch.Commands.UPLOAD_SKETCH_USING_PROGRAMMER.id, - label: nls.localize( - 'arduino/sketch/uploadUsingProgrammer', - 'Upload Using Programmer' - ), - order: '3', - }) - ); + registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { + commandId: UploadSketch.Commands.UPLOAD_SKETCH.id, + label: nls.localize('arduino/sketch/upload', 'Upload'), + order: '1', + }); + + registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { + commandId: UploadSketch.Commands.UPLOAD_SKETCH_USING_PROGRAMMER.id, + label: nls.localize( + 'arduino/sketch/uploadUsingProgrammer', + 'Upload Using Programmer' + ), + order: '3', + }); } override registerKeybindings(registry: KeybindingRegistry): void { @@ -215,18 +130,7 @@ export class UploadSketch extends CoreServiceContribution { return; } - // TODO: This does not belong here. - // IDE2 should not do any preliminary checks but let the CLI fail and then toast a user consumable error message. - if ( - uploadOptions.userFields.length === 0 && - this.boardRequiresUserFields - ) { - this.messageService.error( - nls.localize( - 'arduino/sketch/userFieldsNotFoundError', - "Can't find user fields for connected board" - ) - ); + if (!this.userFields.checkUserFieldsForUpload()) { return; } @@ -242,6 +146,7 @@ export class UploadSketch extends CoreServiceContribution { { timeout: 3000 } ); } catch (e) { + this.userFields.notifyFailedWithError(e); this.handleError(e); } finally { this.uploadInProgress = false; @@ -258,7 +163,7 @@ export class UploadSketch extends CoreServiceContribution { if (!CurrentSketch.isValid(sketch)) { return undefined; } - const userFields = this.userFields(); + const userFields = this.userFields.getUserFields(); const { boardsConfig } = this.boardsServiceProvider; const [fqbn, { selectedProgrammer: programmer }, verify, verbose] = await Promise.all([ @@ -301,10 +206,6 @@ export class UploadSketch extends CoreServiceContribution { return port; } - private userFields(): BoardUserField[] { - return this.cachedUserFields.get(this.selectedFqbnAddress()) ?? []; - } - /** * Converts the `VENDOR:ARCHITECTURE:BOARD_ID[:MENU_ID=OPTION_ID[,MENU2_ID=OPTION_ID ...]]` FQBN to * `VENDOR:ARCHITECTURE:BOARD_ID` format. diff --git a/arduino-ide-extension/src/browser/contributions/user-fields.ts b/arduino-ide-extension/src/browser/contributions/user-fields.ts new file mode 100644 index 000000000..c73ead9e6 --- /dev/null +++ b/arduino-ide-extension/src/browser/contributions/user-fields.ts @@ -0,0 +1,150 @@ +import { inject, injectable } from '@theia/core/shared/inversify'; +import { DisposableCollection, nls } from '@theia/core/lib/common'; +import { BoardUserField, CoreError } from '../../common/protocol'; +import { BoardsServiceProvider } from '../boards/boards-service-provider'; +import { UserFieldsDialog } from '../dialogs/user-fields/user-fields-dialog'; +import { ArduinoMenus, PlaceholderMenuNode } from '../menu/arduino-menus'; +import { MenuModelRegistry, Contribution } from './contribution'; +import { UploadSketch } from './upload-sketch'; + +@injectable() +export class UserFields extends Contribution { + private boardRequiresUserFields = false; + private userFieldsSet = false; + private readonly cachedUserFields: Map = new Map(); + private readonly menuActionsDisposables = new DisposableCollection(); + + @inject(UserFieldsDialog) + private readonly userFieldsDialog: UserFieldsDialog; + + @inject(BoardsServiceProvider) + private readonly boardsServiceProvider: BoardsServiceProvider; + + @inject(MenuModelRegistry) + private readonly menuRegistry: MenuModelRegistry; + + protected override init(): void { + super.init(); + this.boardsServiceProvider.onBoardsConfigChanged(async () => { + const userFields = + await this.boardsServiceProvider.selectedBoardUserFields(); + this.boardRequiresUserFields = userFields.length > 0; + this.registerMenus(this.menuRegistry); + }); + } + + override registerMenus(registry: MenuModelRegistry): void { + this.menuActionsDisposables.dispose(); + if (this.boardRequiresUserFields) { + this.menuActionsDisposables.push( + registry.registerMenuAction(ArduinoMenus.SKETCH__MAIN_GROUP, { + commandId: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.id, + label: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.label, + order: '2', + }) + ); + } else { + this.menuActionsDisposables.push( + registry.registerMenuNode( + ArduinoMenus.SKETCH__MAIN_GROUP, + new PlaceholderMenuNode( + ArduinoMenus.SKETCH__MAIN_GROUP, + // commandId: UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.id, + UploadSketch.Commands.UPLOAD_WITH_CONFIGURATION.label, + { order: '2' } + ) + ) + ); + } + } + + private selectedFqbnAddress(): string | undefined { + const { boardsConfig } = this.boardsServiceProvider; + const fqbn = boardsConfig.selectedBoard?.fqbn; + if (!fqbn) { + return undefined; + } + const address = + boardsConfig.selectedBoard?.port?.address || + boardsConfig.selectedPort?.address; + if (!address) { + return undefined; + } + return fqbn + '|' + address; + } + + private async showUserFieldsDialog( + key: string + ): Promise { + const cached = this.cachedUserFields.get(key); + // Deep clone the array of board fields to avoid editing the cached ones + this.userFieldsDialog.value = cached ? cached.slice() : await this.boardsServiceProvider.selectedBoardUserFields(); + const result = await this.userFieldsDialog.open(); + if (!result) { + return; + } + + this.userFieldsSet = true; + this.cachedUserFields.set(key, result); + return result; + } + + async checkUserFieldsDialog(forceOpen = false): Promise { + const key = this.selectedFqbnAddress(); + if (!key) { + return false; + } + /* + If the board requires to be configured with user fields, we want + to show the user fields dialog, but only if they weren't already + filled in or if they were filled in, but the previous upload failed. + */ + if ( + !forceOpen && + (!this.boardRequiresUserFields || + (this.cachedUserFields.has(key) && this.userFieldsSet)) + ) { + return true; + } + const userFieldsFilledIn = Boolean(await this.showUserFieldsDialog(key)); + return userFieldsFilledIn; + } + + checkUserFieldsForUpload(): boolean { + // TODO: This does not belong here. + // IDE2 should not do any preliminary checks but let the CLI fail and then toast a user consumable error message. + if (!this.boardRequiresUserFields || this.getUserFields().length > 0) { + this.userFieldsSet = true; + return true; + } + this.messageService.error( + nls.localize( + 'arduino/sketch/userFieldsNotFoundError', + "Can't find user fields for connected board" + ) + ); + this.userFieldsSet = false; + return false; + } + + getUserFields(): BoardUserField[] { + const fqbnAddress = this.selectedFqbnAddress(); + if (!fqbnAddress) { + return []; + } + return this.cachedUserFields.get(fqbnAddress) ?? []; + } + + isRequired(): boolean { + return this.boardRequiresUserFields; + } + + notifyFailedWithError(e: Error): void { + if ( + this.boardRequiresUserFields && + CoreError.UploadFailed.is(e) + ) { + this.userFieldsSet = false; + } + } +} diff --git a/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx b/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx index c4f635964..407278bc6 100644 --- a/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx +++ b/arduino-ide-extension/src/browser/dialogs/settings/settings-component.tsx @@ -10,6 +10,7 @@ import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/fil import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { AdditionalUrls, + CompilerWarnings, CompilerWarningLiterals, Network, ProxySettings, @@ -260,7 +261,7 @@ export class SettingsComponent extends React.Component< > {CompilerWarningLiterals.map((value) => ( ))} @@ -398,10 +399,22 @@ export class SettingsComponent extends React.Component<
-
Host name:
-
Port number:
-
Username:
-
Password:
+
{`${nls.localize( + 'arduino/preferences/proxySettings/hostname', + 'Host name' + )}:`}
+
{`${nls.localize( + 'arduino/preferences/proxySettings/port', + 'Port number' + )}:`}
+
{`${nls.localize( + 'arduino/preferences/proxySettings/username', + 'Username' + )}:`}
+
{`${nls.localize( + 'arduino/preferences/proxySettings/password', + 'Password' + )}:`}
diff --git a/arduino-ide-extension/src/browser/dialogs/settings/settings-dialog.tsx b/arduino-ide-extension/src/browser/dialogs/settings/settings-dialog.tsx index 62d67859c..7ebc7c5ba 100644 --- a/arduino-ide-extension/src/browser/dialogs/settings/settings-dialog.tsx +++ b/arduino-ide-extension/src/browser/dialogs/settings/settings-dialog.tsx @@ -155,7 +155,6 @@ export class AdditionalUrlsDialog extends AbstractDialog { this.textArea = document.createElement('textarea'); this.textArea.className = 'theia-input'; - this.textArea.setAttribute('style', 'flex: 0;'); this.textArea.value = urls .filter((url) => url.trim()) .filter((url) => !!url) @@ -181,10 +180,10 @@ export class AdditionalUrlsDialog extends AbstractDialog { ); this.contentNode.appendChild(anchor); - this.appendAcceptButton(nls.localize('vscode/issueMainService/ok', 'OK')); this.appendCloseButton( nls.localize('vscode/issueMainService/cancel', 'Cancel') ); + this.appendAcceptButton(nls.localize('vscode/issueMainService/ok', 'OK')); } get value(): string[] { diff --git a/arduino-ide-extension/src/browser/library/library-list-widget.ts b/arduino-ide-extension/src/browser/library/library-list-widget.ts index 5c654b615..9e8eba64c 100644 --- a/arduino-ide-extension/src/browser/library/library-list-widget.ts +++ b/arduino-ide-extension/src/browser/library/library-list-widget.ts @@ -126,13 +126,13 @@ export class LibraryListWidget extends ListWidget< ), message, buttons: [ - nls.localize('arduino/library/installAll', 'Install all'), + nls.localize('vscode/issueMainService/cancel', 'Cancel'), nls.localize( 'arduino/library/installOnly', 'Install {0} only', item.name ), - nls.localize('vscode/issueMainService/cancel', 'Cancel'), + nls.localize('arduino/library/installAll', 'Install all'), ], maxWidth: 740, // Aligned with `settings-dialog.css`. }).open(); @@ -201,7 +201,9 @@ class MessageBoxDialog extends AbstractDialog { options.buttons || [nls.localize('vscode/issueMainService/ok', 'OK')] ).forEach((text, index) => { const button = this.createButton(text); - button.classList.add(index === 0 ? 'main' : 'secondary'); + const isPrimaryButton = + index === (options.buttons ? options.buttons.length - 1 : 0); + button.classList.add(isPrimaryButton ? 'main' : 'secondary'); this.controlPanel.appendChild(button); this.toDisposeOnDetach.push( addEventListener(button, 'click', () => { diff --git a/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts b/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts index 3914c061a..c403c4201 100644 --- a/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts +++ b/arduino-ide-extension/src/browser/serial/plotter/plotter-frontend-contribution.ts @@ -18,6 +18,7 @@ import { CLOSE_PLOTTER_WINDOW, SHOW_PLOTTER_WINDOW, } from '../../../common/ipc-communication'; +import { nls } from '@theia/core/lib/common/nls'; const queryString = require('query-string'); @@ -107,7 +108,12 @@ export class PlotterFrontendContribution extends Contribution { if (wsPort) { this.open(wsPort); } else { - this.messageService.error(`Couldn't open serial plotter`); + this.messageService.error( + nls.localize( + 'arduino/contributions/plotter/couldNotOpen', + "Couldn't open serial plotter" + ) + ); } } diff --git a/arduino-ide-extension/src/browser/style/boards-config-dialog.css b/arduino-ide-extension/src/browser/style/boards-config-dialog.css index 1beb7c4f9..59633efb4 100644 --- a/arduino-ide-extension/src/browser/style/boards-config-dialog.css +++ b/arduino-ide-extension/src/browser/style/boards-config-dialog.css @@ -1,5 +1,11 @@ +#select-board-dialog-container > .dialogBlock { + width: 640px; + height: 500px; +} + div#select-board-dialog { margin: 5px; + height: 100%; } div#select-board-dialog .selectBoardContainer { @@ -7,12 +13,17 @@ div#select-board-dialog .selectBoardContainer { gap: 10px; overflow: hidden; max-height: 100%; + height: 100%; } .select-board-dialog .head { margin: 5px; } +.dialogContent.select-board-dialog { + height: 100%; +} + div.dialogContent.select-board-dialog > div.head .title { font-weight: 400; letter-spacing: 0.02em; @@ -63,6 +74,7 @@ div#select-board-dialog .selectBoardContainer .list .item.selected i { display: flex; flex-direction: column; max-height: 100%; + height: 100%; } #select-board-dialog .selectBoardContainer .left.container .content { @@ -131,6 +143,7 @@ div#select-board-dialog .selectBoardContainer .list .item.selected i { #select-board-dialog .selectBoardContainer .list { max-height: 200px; overflow-y: auto; + flex: 1; } #select-board-dialog .selectBoardContainer .ports.list { @@ -282,3 +295,11 @@ div#select-board-dialog .selectBoardContainer .list .item.selected i { display: none; } } + +#select-board-dialog .no-result { + text-transform: uppercase; + height: 100%; + user-select: none; + padding: 10px 5px; + overflow-wrap: break-word; +} diff --git a/arduino-ide-extension/src/browser/style/dialogs.css b/arduino-ide-extension/src/browser/style/dialogs.css index aa5ef3fe1..4d56484e8 100644 --- a/arduino-ide-extension/src/browser/style/dialogs.css +++ b/arduino-ide-extension/src/browser/style/dialogs.css @@ -9,7 +9,8 @@ total = padding + margin = 96px */ max-width: calc(100% - 96px) !important; - min-width: unset; + + min-width: 424px; max-height: 560px; padding: 0 28px; } @@ -85,3 +86,4 @@ max-height: 400px; } } + \ No newline at end of file diff --git a/arduino-ide-extension/src/browser/style/firmware-uploader-dialog.css b/arduino-ide-extension/src/browser/style/firmware-uploader-dialog.css index 3143d02a8..e49f5e5aa 100644 --- a/arduino-ide-extension/src/browser/style/firmware-uploader-dialog.css +++ b/arduino-ide-extension/src/browser/style/firmware-uploader-dialog.css @@ -7,7 +7,7 @@ } .firmware-uploader-dialog .arduino-select__control { height: 31px; - background: var(--theia-menubar-selectionBackground) !important; + background: var(--theia-input-background) !important; } .firmware-uploader-dialog .dialogRow > button{ @@ -28,4 +28,4 @@ .firmware-uploader-dialog .status-icon { margin-right: 10px; -} \ No newline at end of file +} diff --git a/arduino-ide-extension/src/browser/style/list-widget.css b/arduino-ide-extension/src/browser/style/list-widget.css index f60159e34..843be61f9 100644 --- a/arduino-ide-extension/src/browser/style/list-widget.css +++ b/arduino-ide-extension/src/browser/style/list-widget.css @@ -111,13 +111,15 @@ font-weight: bold; max-height: calc(1em + 4px); color: var(--theia-button-foreground); - content: 'INSTALLED'; + content: attr(install); + text-transform: uppercase; } .component-list-item .header .installed:hover:before { background-color: var(--theia-button-foreground); color: var(--theia-button-background); - content: 'UNINSTALL'; + content: attr(uninstall); + text-transform: uppercase; } .component-list-item[min-width~="170px"] .footer { diff --git a/arduino-ide-extension/src/browser/style/monitor.css b/arduino-ide-extension/src/browser/style/monitor.css index 9e8bd44cc..fdcdfc21c 100644 --- a/arduino-ide-extension/src/browser/style/monitor.css +++ b/arduino-ide-extension/src/browser/style/monitor.css @@ -14,6 +14,10 @@ font-family: monospace } +.serial-monitor-messages pre { + margin: 0px; +} + .serial-monitor .head { display: flex; padding: 5px; diff --git a/arduino-ide-extension/src/browser/style/settings-dialog.css b/arduino-ide-extension/src/browser/style/settings-dialog.css index 10ddfd0a0..a3315454c 100644 --- a/arduino-ide-extension/src/browser/style/settings-dialog.css +++ b/arduino-ide-extension/src/browser/style/settings-dialog.css @@ -88,9 +88,12 @@ } .additional-urls-dialog textarea { - width: 100%; + resize: none; } .p-Widget.dialogOverlay .dialogBlock .dialogContent.additional-urls-dialog { - display: block; + display: flex; + overflow: hidden; + padding: 0 1px; + margin: 0 -1px; } diff --git a/arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-result-tree-widget.ts b/arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-result-tree-widget.ts deleted file mode 100644 index e831cd402..000000000 --- a/arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-result-tree-widget.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { injectable } from '@theia/core/shared/inversify'; -import URI from '@theia/core/lib/common/uri'; -import { - SearchInWorkspaceFileNode, - SearchInWorkspaceResultTreeWidget as TheiaSearchInWorkspaceResultTreeWidget, -} from '@theia/search-in-workspace/lib/browser/search-in-workspace-result-tree-widget'; -import { MEMORY_TEXT } from '@theia/core/lib/common/resource'; - -/** - * Workaround for https://github.com/eclipse-theia/theia/pull/9192/. - */ -@injectable() -export class SearchInWorkspaceResultTreeWidget extends TheiaSearchInWorkspaceResultTreeWidget { - protected override async createReplacePreview( - node: SearchInWorkspaceFileNode - ): Promise { - const fileUri = new URI(node.fileUri).withScheme('file'); - const openedEditor = this.editorManager.all.find( - ({ editor }) => editor.uri.toString() === fileUri.toString() - ); - let content: string; - if (openedEditor) { - content = openedEditor.editor.document.getText(); - } else { - const resource = await this.fileResourceResolver.resolve(fileUri); - content = await resource.readContents(); - } - - const lines = content.split('\n'); - node.children.map((l) => { - const leftPositionedNodes = node.children.filter( - (rl) => rl.line === l.line && rl.character < l.character - ); - const diff = - (this._replaceTerm.length - this.searchTerm.length) * - leftPositionedNodes.length; - const start = lines[l.line - 1].substr(0, l.character - 1 + diff); - const end = lines[l.line - 1].substr(l.character - 1 + diff + l.length); - lines[l.line - 1] = start + this._replaceTerm + end; - }); - - return fileUri.withScheme(MEMORY_TEXT).withQuery(lines.join('\n')); - } -} diff --git a/arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-widget.tsx b/arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-widget.tsx deleted file mode 100644 index cae633024..000000000 --- a/arduino-ide-extension/src/browser/theia/search-in-workspace/search-in-workspace-widget.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { injectable, postConstruct } from '@theia/core/shared/inversify'; -import * as React from '@theia/core/shared/react'; -import { Key, KeyCode } from '@theia/core/lib/browser'; -import { SearchInWorkspaceWidget as TheiaSearchInWorkspaceWidget } from '@theia/search-in-workspace/lib/browser/search-in-workspace-widget'; - -/** - * Workaround for https://github.com/eclipse-theia/theia/pull/9183. - */ -@injectable() -export class SearchInWorkspaceWidget extends TheiaSearchInWorkspaceWidget { - @postConstruct() - protected override init(): void { - super.init(); - this.title.iconClass = 'fa fa-arduino-search'; - } - - protected override renderGlobField(kind: 'include' | 'exclude'): React.ReactNode { - const currentValue = this.searchInWorkspaceOptions[kind]; - const value = (currentValue && currentValue.join(', ')) || ''; - return ( -
-
{'files to ' + kind}
- { - if (e.target) { - const targetValue = (e.target as HTMLInputElement).value || ''; - let shouldSearch = - Key.ENTER.keyCode === - KeyCode.createKeyCode(e.nativeEvent).key?.keyCode; - const currentOptions = (this.searchInWorkspaceOptions[kind] || []) - .slice() - .map((s) => s.trim()) - .sort(); - const candidateOptions = this.splitOnComma(targetValue) - .map((s) => s.trim()) - .sort(); - const sameAs = (left: string[], right: string[]) => { - if (left.length !== right.length) { - return false; - } - for (let i = 0; i < left.length; i++) { - if (left[i] !== right[i]) { - return false; - } - } - return true; - }; - if (!sameAs(currentOptions, candidateOptions)) { - this.searchInWorkspaceOptions[kind] = - this.splitOnComma(targetValue); - shouldSearch = true; - } - if (shouldSearch) { - this.resultTreeWidget.search( - this.searchTerm, - this.searchInWorkspaceOptions - ); - } - } - }} - onFocus={ - kind === 'include' - ? this.handleFocusIncludesInputBox - : this.handleFocusExcludesInputBox - } - onBlur={ - kind === 'include' - ? this.handleBlurIncludesInputBox - : this.handleBlurExcludesInputBox - } - > -
- ); - } -} diff --git a/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts b/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts index 5b864732b..2fbcbdb26 100644 --- a/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts +++ b/arduino-ide-extension/src/browser/theia/workspace/workspace-commands.ts @@ -17,7 +17,6 @@ import { SketchesServiceClientImpl, } from '../../../common/protocol/sketches-service-client-impl'; import { SaveAsSketch } from '../../contributions/save-as-sketch'; -import { SingleTextInputDialog } from '@theia/core/lib/browser'; import { nls } from '@theia/core/lib/common'; @injectable() @@ -161,20 +160,26 @@ export class WorkspaceCommandContribution extends TheiaWorkspaceCommandContribut return; } const initialValue = uri.path.base; - const dialog = new SingleTextInputDialog({ - title: nls.localize('theia/workspace/newFileName', 'New name for file'), - initialValue, - initialSelectionRange: { - start: 0, - end: uri.path.name.length, - }, - validate: (name, mode) => { - if (initialValue === name && mode === 'preview') { - return false; - } - return this.validateFileName(name, parent, false); + const parentUri = parent.resource; + + const dialog = new WorkspaceInputDialog( + { + title: nls.localize('theia/workspace/newFileName', 'New name for file'), + initialValue, + parentUri, + initialSelectionRange: { + start: 0, + end: uri.path.name.length, + }, + validate: (name, mode) => { + if (initialValue === name && mode === 'preview') { + return false; + } + return this.validateFileName(name, parent, false); + }, }, - }); + this.labelProvider + ); const newName = await dialog.open(); const newNameWithExt = this.maybeAppendInoExt(newName); if (newNameWithExt) { diff --git a/arduino-ide-extension/src/browser/theia/workspace/workspace-input-dialog.ts b/arduino-ide-extension/src/browser/theia/workspace/workspace-input-dialog.ts index d70d7e27d..5f4deb5b2 100644 --- a/arduino-ide-extension/src/browser/theia/workspace/workspace-input-dialog.ts +++ b/arduino-ide-extension/src/browser/theia/workspace/workspace-input-dialog.ts @@ -14,9 +14,11 @@ export class WorkspaceInputDialog extends TheiaWorkspaceInputDialog { constructor( @inject(WorkspaceInputDialogProps) protected override readonly props: WorkspaceInputDialogProps, - @inject(LabelProvider) protected override readonly labelProvider: LabelProvider + @inject(LabelProvider) + protected override readonly labelProvider: LabelProvider ) { super(props, labelProvider); + this.node.classList.add('workspace-input-dialog'); this.appendCloseButton( nls.localize('vscode/issueMainService/cancel', 'Cancel') ); @@ -41,4 +43,14 @@ export class WorkspaceInputDialog extends TheiaWorkspaceInputDialog { this.errorMessageNode.innerText = DialogError.getMessage(error); } } + + protected override appendCloseButton(text: string): HTMLButtonElement { + this.closeButton = this.createButton(text); + this.controlPanel.insertBefore( + this.closeButton, + this.controlPanel.lastChild + ); + this.closeButton.classList.add('secondary'); + return this.closeButton; + } } diff --git a/arduino-ide-extension/src/browser/widgets/component-list/list-item-renderer.tsx b/arduino-ide-extension/src/browser/widgets/component-list/list-item-renderer.tsx index 537f4d415..ea9e257ec 100644 --- a/arduino-ide-extension/src/browser/widgets/component-list/list-item-renderer.tsx +++ b/arduino-ide-extension/src/browser/widgets/component-list/list-item-renderer.tsx @@ -55,7 +55,14 @@ export class ListItemRenderer { item.installedVersion )} - +
); diff --git a/arduino-ide-extension/src/common/protocol/boards-service.ts b/arduino-ide-extension/src/common/protocol/boards-service.ts index 7be49725e..763fc9bd6 100644 --- a/arduino-ide-extension/src/common/protocol/boards-service.ts +++ b/arduino-ide-extension/src/common/protocol/boards-service.ts @@ -285,6 +285,29 @@ export namespace Port { return false; }; } + + export namespace Protocols { + export const KnownProtocolLiterals = ['serial', 'network'] as const; + export type KnownProtocol = typeof KnownProtocolLiterals[number]; + export namespace KnownProtocol { + export function is(protocol: unknown): protocol is KnownProtocol { + return ( + typeof protocol === 'string' && + KnownProtocolLiterals.indexOf(protocol as KnownProtocol) >= 0 + ); + } + } + export const ProtocolLabels: Record = { + serial: nls.localize('arduino/portProtocol/serial', 'Serial'), + network: nls.localize('arduino/portProtocol/network', 'Network'), + }; + export function protocolLabel(protocol: string): string { + if (KnownProtocol.is(protocol)) { + return ProtocolLabels[protocol]; + } + return protocol; + } + } } export interface BoardsPackage extends ArduinoComponent { diff --git a/arduino-ide-extension/src/common/protocol/core-service.ts b/arduino-ide-extension/src/common/protocol/core-service.ts index a7124d865..a4b63a604 100644 --- a/arduino-ide-extension/src/common/protocol/core-service.ts +++ b/arduino-ide-extension/src/common/protocol/core-service.ts @@ -1,3 +1,4 @@ +import { nls } from '@theia/core/lib/common/nls'; import { ApplicationError } from '@theia/core/lib/common/application-error'; import type { Location, @@ -18,6 +19,17 @@ export const CompilerWarningLiterals = [ 'All', ] as const; export type CompilerWarnings = typeof CompilerWarningLiterals[number]; +export namespace CompilerWarnings { + export function labelOf(warning: CompilerWarnings): string { + return CompilerWarningLabels[warning]; + } + const CompilerWarningLabels: Record = { + None: nls.localize('arduino/core/compilerWarnings/none', 'None'), + Default: nls.localize('arduino/core/compilerWarnings/default', 'Default'), + More: nls.localize('arduino/core/compilerWarnings/more', 'More'), + All: nls.localize('arduino/core/compilerWarnings/all', 'All'), + }; +} export namespace CoreError { export interface ErrorLocationRef { readonly message: string; diff --git a/arduino-ide-extension/src/node/config-service-impl.ts b/arduino-ide-extension/src/node/config-service-impl.ts index 27c560856..904be5882 100644 --- a/arduino-ide-extension/src/node/config-service-impl.ts +++ b/arduino-ide-extension/src/node/config-service-impl.ts @@ -56,7 +56,10 @@ export class ConfigServiceImpl this.loadCliConfig().then(async (cliConfig) => { this.cliConfig = cliConfig; if (this.cliConfig) { - const config = await this.mapCliConfigToAppConfig(this.cliConfig); + const [config] = await Promise.all([ + this.mapCliConfigToAppConfig(this.cliConfig), + this.ensureUserDirExists(this.cliConfig), + ]); if (config) { this.config = config; this.ready.resolve(); @@ -263,4 +266,11 @@ export class ConfigServiceImpl grpc.credentials.createInsecure() ) as SettingsServiceClient; } + + // #1445 + private async ensureUserDirExists( + cliConfig: DefaultCliConfig + ): Promise { + await fs.mkdir(cliConfig.directories.user, { recursive: true }); + } } diff --git a/arduino-ide-extension/src/node/i18n/arduino-localization-contribution.ts b/arduino-ide-extension/src/node/i18n/arduino-localization-contribution.ts index 3465ab83d..9167a3465 100644 --- a/arduino-ide-extension/src/node/i18n/arduino-localization-contribution.ts +++ b/arduino-ide-extension/src/node/i18n/arduino-localization-contribution.ts @@ -3,150 +3,45 @@ import { LocalizationRegistry, } from '@theia/core/lib/node/i18n/localization-contribution'; import { injectable } from '@theia/core/shared/inversify'; +import { join } from 'path'; @injectable() export class ArduinoLocalizationContribution implements LocalizationContribution { - async registerLocalizations(registry: LocalizationRegistry): Promise { - 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-br', - 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') - ); + // 0. index: locale + // 1. index: optional JSON file to `require` (if differs from the locale) + // If you touch the locales, please keep the alphabetical order. Also in the `package.json` for the VS Code language packs. Thank you! ❤️ + // Note that IDE2 has more translations than available VS Code language packs. (https://github.com/arduino/arduino-ide/issues/1447) + private readonly locales: ReadonlyArray<[string, string?]> = [ + ['bg'], + ['cs'], + ['de'], + ['es'], + ['fr'], + ['hu'], + // ['id'], Does not have Transifex translations, but has a VS Code language pack available on Open VSX. + ['it'], + ['ja'], + ['ko'], + ['nl'], + ['pt-br', 'pt'], + ['pl', 'pl'], + ['ru'], + ['tr'], + ['uk', 'uk_UA'], + ['zh-cn', 'zh'], + ]; - 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') - ); + async registerLocalizations(registry: LocalizationRegistry): Promise { + for (const [locale, jsonFilename] of this.locales) { + registry.registerLocalizationFromRequire( + locale, + require(join( + __dirname, + `../../../build/i18n/${jsonFilename ?? locale}.json` + )) + ); + } } } diff --git a/arduino-ide-extension/src/node/i18n/localization-backend-contribution.ts b/arduino-ide-extension/src/node/i18n/localization-backend-contribution.ts index e5bc11f03..75ea0deba 100644 --- a/arduino-ide-extension/src/node/i18n/localization-backend-contribution.ts +++ b/arduino-ide-extension/src/node/i18n/localization-backend-contribution.ts @@ -23,8 +23,8 @@ export class LocalizationBackendContribution extends TheiaLocalizationBackendCon app.get('/i18n/:locale', async (req, res) => { let locale = req.params.locale; /* - Waiting for the deploy of the language plugins is neecessary to avoid checking the available - languages before they're finished to be loaded: https://github.com/eclipse-theia/theia/issues/11471 + Waiting for the deploy of the language plugins is necessary to avoid checking the available + languages before they're finished to be loaded: https://github.com/eclipse-theia/theia/issues/11471 */ const start = performance.now(); await this.initialized.promise; diff --git a/electron-app/package.json b/electron-app/package.json index 1794ec5bd..c2e71bc24 100644 --- a/electron-app/package.json +++ b/electron-app/package.json @@ -48,6 +48,7 @@ "comments": false, "strings": false }, + "editor.maxTokenizationLineLength": 500, "breadcrumbs.enabled": false, "workbench.tree.renderIndentGuides": "none", "explorer.compactFolders": false diff --git a/electron-app/patch/frontend/index.js b/electron-app/patch/frontend/index.js index 26afbfedd..c227aef44 100644 --- a/electron-app/patch/frontend/index.js +++ b/electron-app/patch/frontend/index.js @@ -17,6 +17,53 @@ const { FrontendApplicationConfigProvider, } = require('@theia/core/lib/browser/frontend-application-config-provider'); +function fetchFrom(path) { + const { Endpoint } = require('@theia/core/lib/browser/endpoint'); + const endpoint = new Endpoint({ path }).getRestUrl().toString(); + return fetch(endpoint); +} + +async function loadTranslations() { + const { nls } = require('@theia/core/lib/common/nls'); + const defaultLocale = typeof window === 'object' && window && window.localStorage.getItem(nls.localeId) || ''; + if (defaultLocale && !nls.locale) { + Object.assign(nls, { + locale: defaultLocale + }); + } + if (nls.locale) { + const response = await fetchFrom(`/i18n/${nls.locale}`); + nls.localization = await response.json(); + } +} + +async function loadBackendOS() { + const response = await fetchFrom('/os'); + const osType = await response.text(); + const isWindows = osType === 'Windows'; + const isOSX = osType === 'OSX'; + OS.backend.isOSX = isOSX; + OS.backend.isWindows = isWindows; + OS.backend.type = () => osType; +} + +function customizeMonacoNls() { + const MonacoNls = require('@theia/monaco-editor-core/esm/vs/nls'); + const { nls: TheiaNls } = require('@theia/core/lib/common/nls'); + const { Localization } = require('@theia/core/lib/common/i18n/localization'); + Object.assign(MonacoNls, { + localize(_, label, ...args) { + if (TheiaNls.locale) { + const defaultKey = TheiaNls.getDefaultKey(label); + if (defaultKey) { + return TheiaNls.localize(defaultKey, label, ...args); + } + } + return Localization.format(label, args); + } + }); +} + // It is a mighty hack to support theme updates in the bundled IDE2. // If the custom theme registration happens before the restoration of the existing monaco themes, then any custom theme changes will be ignored. // This patch introduces a static deferred promise in the monaco-theming service that will be resolved when the restoration is ready. @@ -25,8 +72,14 @@ const { // This patch customizes the monaco theme service behavior before loading the DI containers via the preload. // The preload is called only once before the app loads. The Theia extensions are not loaded at that point, but the app config provider is ready. const preloader = require('@theia/core/lib/browser/preloader'); -const originalPreload = preloader.preload; preloader.preload = async function () { + // Must require the monaco frontend module to activate the NLS customization for monaco. + // Otherwise, the NLS customization would trigger after the monaco UI components with all their translations are already loaded. + await Promise.allSettled([ + loadTranslations(), + loadBackendOS(), + ]); + customizeMonacoNls(); const { MonacoThemingService } = require('@theia/monaco/lib/browser/monaco-theming-service'); const { MonacoThemeServiceIsReady } = require('arduino-ide-extension/lib/browser/utils/window'); const { Deferred } = require('@theia/core/lib/common/promise-util'); @@ -42,7 +95,6 @@ preloader.preload = async function () { await this.restore(); ready.resolve(); }.bind(MonacoThemingService); - return originalPreload(); }.bind(preloader); const lightTheme = 'arduino-theme'; diff --git a/electron/build/template-package.json b/electron/build/template-package.json index 5c15d0560..f934a176f 100644 --- a/electron/build/template-package.json +++ b/electron/build/template-package.json @@ -137,24 +137,5 @@ "path": "arduino-ide/nightly" } ] - }, - "theiaPluginsDir": "plugins", - "theiaPlugins": { - "vscode-builtin-cpp": "https://open-vsx.org/api/vscode/cpp/1.52.1/file/vscode.cpp-1.52.1.vsix", - "vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/vscode-arduino-tools-0.0.2-beta.5.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", - "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.69.0/file/MS-CEINTL.vscode-language-pack-fr-1.69.0.vsix", - "vscode-language-pack-zh-hans": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.69.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.69.0.vsix", - "vscode-language-pack-de": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-de/1.69.0/file/MS-CEINTL.vscode-language-pack-de-1.69.0.vsix", - "vscode-language-pack-ja": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ja/1.69.0/file/MS-CEINTL.vscode-language-pack-ja-1.69.0.vsix", - "vscode-language-pack-tr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-tr/1.69.0/file/MS-CEINTL.vscode-language-pack-tr-1.69.0.vsix", - "vscode-language-pack-it": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-it/1.69.0/file/MS-CEINTL.vscode-language-pack-it-1.69.0.vsix", - "vscode-language-pack-ru":"https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ru/1.69.0/file/MS-CEINTL.vscode-language-pack-ru-1.69.0.vsix", - "vscode-language-pack-es": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-es/1.69.0/file/MS-CEINTL.vscode-language-pack-es-1.69.0.vsix", - "vscode-language-pack-pt-BR": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pt-BR/1.69.0/file/MS-CEINTL.vscode-language-pack-pt-BR-1.69.0.vsix", - "vscode-language-pack-cs": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-cs/1.69.0/file/MS-CEINTL.vscode-language-pack-cs-1.69.0.vsix" } } diff --git a/electron/packager/index.js b/electron/packager/index.js index 12b36097a..d769fecc0 100644 --- a/electron/packager/index.js +++ b/electron/packager/index.js @@ -123,8 +123,8 @@ // Save some time: no need to build the projects that are not needed in final app. Currently unused. | //---------------------------------------------------------------------------------------------------+ //@ts-ignore - let pkg = require('../working-copy/package.json'); - const workspaces = pkg.workspaces; + const rootPackageJson = require('../working-copy/package.json'); + const workspaces = rootPackageJson.workspaces; // We cannot remove the `electron-app`. Otherwise, there is not way to collect the unused dependencies. const dependenciesToRemove = []; for (const dependencyToRemove of dependenciesToRemove) { @@ -133,10 +133,10 @@ workspaces.splice(index, 1); } } - pkg.workspaces = workspaces; + rootPackageJson.workspaces = workspaces; fs.writeFileSync( path('..', workingCopy, 'package.json'), - JSON.stringify(pkg, null, 2) + JSON.stringify(rootPackageJson, null, 2) ); //-------------------------------------------------------------------------------------------------+ @@ -169,13 +169,13 @@ if (extension !== 'arduino-ide-extension') { // Do not unlink self. // @ts-ignore - pkg = require(`../working-copy/${extension}/package.json`); + rootPackageJson = require(`../working-copy/${extension}/package.json`); // @ts-ignore - pkg.dependencies['arduino-ide-extension'] = + rootPackageJson.dependencies['arduino-ide-extension'] = 'file:../arduino-ide-extension'; fs.writeFileSync( path('..', workingCopy, extension, 'package.json'), - JSON.stringify(pkg, null, 2) + JSON.stringify(rootPackageJson, null, 2) ); } } @@ -184,7 +184,7 @@ // Merge the `working-copy/package.json` with `electron/build/template-package.json`. | //------------------------------------------------------------------------------------+ // @ts-ignore - pkg = require('../working-copy/electron-app/package.json'); + const appPackageJson = require('../working-copy/electron-app/package.json'); template.build.files = [ ...template.build.files, ...unusedDependencies.map((name) => `!node_modules/${name}`), @@ -195,25 +195,26 @@ dependencies[extension] = `file:../working-copy/${extension}`; } // @ts-ignore - pkg.dependencies = { ...pkg.dependencies, ...dependencies }; - pkg.devDependencies = { ...pkg.devDependencies, ...template.devDependencies }; - // Deep-merging the Theia application configuration. We enable the electron window reload in dev mode but not for the final product. (arduino/arduino-pro-ide#187) + appPackageJson.dependencies = { ...appPackageJson.dependencies, ...dependencies }; + appPackageJson.devDependencies = { ...appPackageJson.devDependencies, ...template.devDependencies }; + // Deep-merging the Theia application configuration. // @ts-ignore - const theia = merge(pkg.theia || {}, template.theia || {}); + const theia = merge(appPackageJson.theia || {}, template.theia || {}); const content = { - ...pkg, + ...appPackageJson, ...template, theia, // @ts-ignore - dependencies: pkg.dependencies, - devDependencies: pkg.devDependencies, + dependencies: appPackageJson.dependencies, + devDependencies: appPackageJson.devDependencies, + // VS Code extensions and the plugins folder is defined in the top level `package.json`. The template picks them up. + theiaPluginsDir: rootPackageJson.theiaPluginsDir, + theiaPlugins: rootPackageJson.theiaPlugins, }; - const overwriteMerge = (destinationArray, sourceArray, options) => - sourceArray; fs.writeFileSync( path('..', 'build', 'package.json'), JSON.stringify( - merge(content, template, { arrayMerge: overwriteMerge }), + merge(content, template, { arrayMerge: (_, sourceArray) => sourceArray }), null, 2 ) diff --git a/i18n/af.json b/i18n/af.json index 2b1a8db1f..946ca2ffc 100644 --- a/i18n/af.json +++ b/i18n/af.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Wagterugkeer", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nuwe lyn", "newLineCarriageReturn": "Beide NL & CR", "noLineEndings": "No Line Ending", diff --git a/i18n/ar.json b/i18n/ar.json index 09d79a229..890daab04 100644 --- a/i18n/ar.json +++ b/i18n/ar.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "تمرير تلقائي", "carriageReturn": "اعادة الحمل", - "message": "الرسالة ({0} + ادخل لارسال رسالة الى '{1}' على '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "سطر جديد", "newLineCarriageReturn": " NL & CR معاً", "noLineEndings": "نهاية السطر غير موجودة", diff --git a/i18n/az.json b/i18n/az.json index 66c66f757..3d7e313cc 100644 --- a/i18n/az.json +++ b/i18n/az.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "New Line", "newLineCarriageReturn": "Both NL & CR", "noLineEndings": "No Line Ending", diff --git a/i18n/bg.json b/i18n/bg.json index 6ebefd32c..aabf8bdaa 100644 --- a/i18n/bg.json +++ b/i18n/bg.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Автоматично превъртане", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Нов ред", "newLineCarriageReturn": "Както NL, така и CR", "noLineEndings": "Без край на реда", diff --git a/i18n/ca_ES.json b/i18n/ca_ES.json index 93ba69872..d19c9976a 100644 --- a/i18n/ca_ES.json +++ b/i18n/ca_ES.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Desplaçament automàtic", "carriageReturn": "Retorn de carro", - "message": "Missatge ({0}+ Intro per enviar el missatge a '{1}' a '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nova Línia", "newLineCarriageReturn": "Ambdós NL & CR", "noLineEndings": "Sense final de línia", diff --git a/i18n/cs.json b/i18n/cs.json index 3d2ecdaf7..69410774f 100644 --- a/i18n/cs.json +++ b/i18n/cs.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Enter (CR)", - "message": "Zpráva ({0}+ Enter pro odeslání zprávy do '{1}' na '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nový řádek (NL)", "newLineCarriageReturn": "Oba NL & CR", "noLineEndings": "Bez konce řádku", diff --git a/i18n/de.json b/i18n/de.json index b2fb2cae6..f778b3ffb 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -6,27 +6,27 @@ }, "board": { "board": "Board{0}", - "boardConfigDialogTitle": "Select Other Board and Port", + "boardConfigDialogTitle": "Anderes Boards und Ports wählen", "boardInfo": "Board-Informationen", "configDialog1": "Wählen Sie ein Board und einen Port, wenn Sie den Sketch hochladen möchten.", "configDialog2": "Wenn Sie nur ein Board auswählen, werden Sie den Sketch nur kompilieren können, jedoch nicht hochladen.", "couldNotFindPreviouslySelected": "Zuvor gewähltes Board '{0}' wurde nicht in der installierten Plaftform '{1}' gefunden. Bitte Board erneut auswählen. Jetzt auswählen?", - "disconnected": "Disconnected", + "disconnected": " Verbindung getrennt", "getBoardInfo": "Board-Informationen abrufen", "inSketchbook": "(im Sketchbook)", "installNow": "Der \"{0} {1}\" Core muss für das ausgewählte \"{2}\" Board installiert werden. Jetzt installieren?", "noFQBN": "Der FQBN ist für das gewählte Board \"{0}\" nicht verfügbar. Wurde der zugehörige Core installiert?", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "Keine Ports gefunden", "noPortsSelected": "Kein Port für das Board : '{0}' ausgewählt.", "noneSelected": "Kein Board ausgewählt.", "openBoardsConfig": "Wähle einen anderes Board und einen anderen Port...", "platformMissing": "Die Plattform für das gewählte '{0}' Board ist nicht installiert.", "pleasePickBoard": "Bitte wählen Sie das Board, welches am ausgewählten Port angeschlossen ist.", "port": "Port{0}", - "portLabel": "Port: {0}", + "portLabel": "Port{0}", "programmer": "Programmer", "reselectLater": "Später auswählen", - "searchBoard": "Search board", + "searchBoard": "Board suchen", "selectBoard": "Board wählen", "selectBoardForInfo": "Wähle ein Board für die Board-Informationen.", "selectPortForInfo": "Wähle ein Port, um Informationen über das Board zu erhalten.", @@ -36,11 +36,11 @@ }, "boardsManager": "Board-Verwaltung", "boardsType": { - "arduinoCertified": "Arduino Certified" + "arduinoCertified": "Arduino-zertifiziert" }, "bootloader": { "burnBootloader": "Bootloader brennen", - "burningBootloader": "Burning bootloader...", + "burningBootloader": "Brenne Bootloader...", "doneBurningBootloader": "Bootloader erfolgreich gebrannt." }, "burnBootloader": { @@ -64,20 +64,20 @@ "uploadingCertificates": "Zertifikate hochladen..." }, "checkForUpdates": { - "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", - "promptUpdateBoards": "Updates are available for some of your boards.", - "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "checkForUpdates": "Nach Arduino Updates suchen", + "installAll": "Alle installieren", + "noUpdates": "Es sind keine aktuellen Updates verfügbar.", + "promptUpdateBoards": "Es sind Updates für einige ihrer Boards verfügbar.", + "promptUpdateLibraries": "Es sind Updates für einige ihrer Blibliotheken verfügbar.", + "updatingBoards": "Boards werden aktualisiert...", + "updatingLibraries": "Bibliotheken werden aktualisiert..." }, "cli-error-parser": { - "keyboardError": "'Keyboard' not found. Does your sketch include the line '#include '?", - "mouseError": "'Mouse' not found. Does your sketch include the line '#include '?" + "keyboardError": "'Keyboard' nicht gefunden. Enthält ihr Sketch die Zeile '#include '?", + "mouseError": "'Mouse' nicht gefunden. Enthält ihr Sketch die Zeile '#include '?" }, "cloud": { - "account": "Account", + "account": "Konto", "chooseSketchVisibility": "Wähle die Sichtbarkeit deines Sketches:", "connected": "Verbunden", "continue": "Fortfahren", @@ -102,20 +102,20 @@ "pushSketch": "Push Sketch", "pushSketchMsg": "Das ist ein öffentliches Sketch. Vor dem Pushen solltest du überprüfen, ob alle sensiblen Informationen in arduino_secrets.h definiert sind. Du kannst einen Sketch mit dem Teilen-Feld privat machen.", "remote": "Remote", - "remoteSketchbook": "Remote Sketchbook", + "remoteSketchbook": "Cloud Sketchbook", "share": "Teilen....", "shareSketch": "Sketch teilen", "showHideRemoveSketchbook": "Zeige/Verstecke Remote Sketchbook", "signIn": "Anmelden", "signInToCloud": "Anmelden zur Arduino Cloud", "signOut": "Abmelden", - "sync": "Sync", + "sync": "Synchronisiere", "syncEditSketches": "Synchronisiere und editiere deine Arduino Cloud Sketches.", "visitArduinoCloud": "Besuche Arduino Cloud um Cloud Sketche zu erstellen." }, "common": { - "all": "All", - "contributed": "Contributed", + "all": "Alle", + "contributed": "Beigetragen", "installManually": "Manuell installieren", "later": "später", "noBoardSelected": "Kein Board ausgewählt", @@ -124,19 +124,19 @@ "oldFormat": "Der Sketch '{0}' verwendet noch das alte '.pde' Format. Möchtest du auf die neuere '.ino' Endung wechseln?", "partner": "Partner", "processing": "Verarbeiten", - "recommended": "Recommended", - "retired": "Retired", + "recommended": "Empfohlen", + "retired": "Zurückgezogen", "selectedOn": "an {0}", "serialMonitor": "Serieller Monitor", - "type": "Type", + "type": "Typ", "unknown": "unbekannt", - "updateable": "Updatable" + "updateable": "Aktualisierbar" }, "compile": { "error": "Fehler beim kompilieren: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "In diesem Paket enthaltene Boards:", "by": "von", "filterSearch": "Filtern Sie Ihre Suche...", "install": "Installieren", @@ -151,13 +151,13 @@ "replaceTitle": "Ersetzten" }, "coreContribution": { - "copyError": "Copy error messages", - "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." + "copyError": "Fehlermeldungen kopieren", + "noBoardSelected": "Kein Board ausgewählt. Bitte Arduino Board im Menü wählen mit Werkzeuge > Board" }, "daemon": { - "restart": "Restart Daemon", - "start": "Start Daemon", - "stop": "Stop Daemon" + "restart": "Dämon neu starten", + "start": "Dämon starten", + "stop": "Dämon stoppen" }, "debug": { "debugWithMessage": "Debug - {0}", @@ -176,9 +176,9 @@ "decreaseIndent": "Einrückung verringern ", "increaseFontSize": "Schriftgröße vergrößern ", "increaseIndent": "Einrückung erweitern", - "nextError": "Next Error", - "previousError": "Previous Error", - "revealError": "Reveal Error" + "nextError": "Nächster Fehler", + "previousError": "Vorheriger Fehler", + "revealError": "Fehler zeigen" }, "electron": { "couldNotSave": "Der Sketch konnte nicht gesichert werden. Bitte kopiere deine ungesicherte Arbeit in deinen bevorzugten Texteditor und starte die IDE neu.", @@ -216,7 +216,7 @@ "visit": "Besuche Arduino.cc" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Nach Arduino IDE Updates suchen", "closeAndInstallButton": "Schließen und Installieren", "closeToInstallNotice": "Schließe die Software und installiere das Update auf deinem Computer", "downloadButton": "Download", @@ -255,25 +255,25 @@ "zipLibrary": "Bibliothek" }, "librarySearchProperty": { - "topic": "Topic" + "topic": "Thema" }, "libraryTopic": { - "communication": "Communication", - "dataProcessing": "Data Processing", - "dataStorage": "Data Storage", - "deviceControl": "Device Control", - "display": "Display", - "other": "Other", - "sensors": "Sensors", - "signalInputOutput": "Signal Input/Output", + "communication": "Kommunikation", + "dataProcessing": "Datenverarbeitung", + "dataStorage": "Datenspeicher", + "deviceControl": "Gerätesteuerung", + "display": "Anzeige", + "other": "Andere/s", + "sensors": "Sensoren", + "signalInputOutput": "Signal Ein-/Ausgang", "timing": "Timing", - "uncategorized": "Uncategorized" + "uncategorized": "Nicht kategoriesiert" }, "libraryType": { - "installed": "Installed" + "installed": "Installiert" }, "menu": { - "advanced": "Advanced", + "advanced": "Fortgeschritten", "sketch": "Sketch", "tools": "Werkzeuge" }, @@ -290,7 +290,7 @@ "automatic": "Automatisch", "board.certificates": "Liste der Zertifikate, welche zu den Boards hochgeladen werden können.", "browse": "Durchsuchen", - "checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", + "checkForUpdate": "Erhalte Benachrichtigungen bei verfügbaren Updates für die IDE, die Boards und Bibliotheken. Nach Änderung ist ein Neustart der IDE notwendig. Standardmäßig eingeschaltet.", "choose": "Wähle", "cli.daemonDebug": "Aktivieren Sie die Debug-Protokollierung der gRPC-Aufrufe an das Arduino CLI. Ein Neustart der IDE ist erforderlich, damit diese Einstellung wirksam wird. Standardmäßig ist sie deaktiviert.", "cloud.enabled": "Wahr, wenn die Sketch-Syncfunctionen aktiv sind. Standardeinstellung ist wahr.", @@ -299,8 +299,8 @@ "cloud.pushpublic.warn": "Wahr, wenn Benutzer vor dem Hochladen eines öffentlichen Sketches in die Cloud gewarnt werden sollen. Standardmäßig Wahr.", "cloud.sketchSyncEndpoint": "Der Endpunkt, um Sketches zu/von einem Backend zu laden. Standardeinstellung ist die Arduino Cloud API.", "compile": "Kompilieren", - "compile.experimental": "True if the IDE should handle multiple compiler errors. False by default", - "compile.revealRange": "Adjusts how compiler errors are revealed in the editor after a failed verify/upload. Possible values: 'auto': Scroll vertically as necessary and reveal a line. 'center': Scroll vertically as necessary and reveal a line centered vertically. 'top': Scroll vertically as necessary and reveal a line close to the top of the viewport, optimized for viewing a code definition. 'centerIfOutsideViewport': Scroll vertically as necessary and reveal a line centered vertically only if it lies outside the viewport. The default value is '{0}'.", + "compile.experimental": "Aktivieren, wenn die IDE mehrere Fehler des Compiler behandeln soll. Standardmäßig ausgeschaltet.", + "compile.revealRange": "Legt fest, wie Compilerfehler im Editor nach einer fehlgeschlagenen Überprüfung/einem fehlgeschlagenen Upload angezeigt werden. Mögliche Werte: 'auto': bei Bedarf vertikal scrollen, um die Zeile anzuzeigen. 'center': bei Bedarf vertikal scrollen und die Zeile zentriert anzeigen. 'top': bei Bedarf vertikal scrollen und die Zeile nahe am oberen Ende des Darstellungsbereichs anzeigen. Optimiert für das Betrachten einer Codedefinition. 'centerIfOutsideViewport': bei Bedarf vertikal scrollen und die Zeile nur anzeigen, wenn sie außerhalb des Anzeigebereichs liegt. Der Standardwert ist '{0}'.", "compile.verbose": "Wahr für ausführliche Compilerausgaben. Standardmäßig Falsch", "compile.warnings": "Einstellung des Warnlevels für den GCC. Standardeinstellung ist 'None'.", "compilerWarnings": "Warnungen des Übersetzers", @@ -315,7 +315,7 @@ "invalid.sketchbook.location": "Ungültiger Sketchbook Speicherort: {0}", "invalid.theme": "Ungültiges Erscheinungsbild", "language.log": "Wahr, wenn der Arduino Language Server Logfiles in den Sketch-Ordner schreiben soll. Sonst falsch. Standardeinstellung ist falsch.\n ", - "language.realTimeDiagnostics": "If true, the language server provides real-time diagnostics when typing in the editor. It's false by default.", + "language.realTimeDiagnostics": "Wenn aktiviert, bietet der Sprachserver bei der Eingabe im Editor eine Echtzeitdiagnose. Ist standardmäßig deaktiviert.", "manualProxy": "Manuelle Proxy Einstellung", "network": "Netzwerk", "newSketchbookLocation": "Wähle einen neuen Ort für das Sketchbook ", @@ -336,12 +336,12 @@ "serial": { "autoscroll": "Automatisch scrollen", "carriageReturn": "Zeilenumbruch", - "message": "Nachricht ({0} + Enter, um Nachricht an '{1}' auf '{2}') zu senden", + "message": "Nachicht (Enter um Nachricht für '{0}' auf '{1}' zu senden)", "newLine": "Neue Zeile", "newLineCarriageReturn": "Sowohl NL als auch CR", "noLineEndings": "Kein Zeilenende", "notConnected": "Nicht verbunden. Wählen Sie ein Board und einen Port, um automatisch zu verbinden.", - "openSerialPlotter": "Serial Plotter", + "openSerialPlotter": "Serieller Plotter", "timestamp": "Zeitstempel", "toggleTimestamp": "Zeitstempel an/aus" }, @@ -349,7 +349,7 @@ "archiveSketch": "Sketch archivieren", "cantOpen": "Ein Ordner mit dem Namen \"{0}\" ist bereits vorhanden. Der Sketch kann nicht geöffnet werden.", "close": "Sind Sie sicher, dass Sie diesen Sketch schließen möchten?", - "compile": "Compiling sketch...", + "compile": "Kompiliere Sketch...", "configureAndUpload": "Konfigurieren und hochladen", "createdArchive": "Archiv '{0}' erstellt.", "doneCompiling": "Kompilieren erfolgreich!", @@ -371,7 +371,7 @@ "titleSketchbook": "Sketchbook", "upload": "Hochladen", "uploadUsingProgrammer": "Mit Programmer hochladen", - "uploading": "Uploading...", + "uploading": "Hochladen...", "userFieldsNotFoundError": "User Fields für das angeschlossene Board nicht gefunden", "verify": "Überprüfen", "verifyOrCompile": "Überprüfen/Kompilieren" @@ -386,7 +386,7 @@ }, "userFields": { "cancel": "abbrechen", - "enterField": "Enter {0}", + "enterField": "Eingabe {0}", "upload": "Hochladen" } }, diff --git a/i18n/el.json b/i18n/el.json index bb20c1b77..b0e3c8797 100644 --- a/i18n/el.json +++ b/i18n/el.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Νέα γραμμή", "newLineCarriageReturn": "Both NL & CR", "noLineEndings": "No Line Ending", diff --git a/i18n/en.json b/i18n/en.json index cd6a7a2b7..4db465ba8 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -8,6 +8,7 @@ "board": "Board{0}", "boardConfigDialogTitle": "Select Other Board and Port", "boardInfo": "Board Info", + "boards": "boards", "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.", "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?", @@ -15,6 +16,7 @@ "getBoardInfo": "Get Board Info", "inSketchbook": " (in Sketchbook)", "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", + "noBoardsFound": "No boards found for \"{0}\"", "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", "noPortsDiscovered": "No ports discovered", "noPortsSelected": "No ports selected for board: '{0}'.", @@ -24,6 +26,7 @@ "pleasePickBoard": "Please pick a board connected to the port you have selected.", "port": "Port{0}", "portLabel": "Port: {0}", + "ports": "ports", "programmer": "Programmer", "reselectLater": "Reselect later", "searchBoard": "Search board", @@ -31,8 +34,10 @@ "selectBoardForInfo": "Please select a board to obtain board info.", "selectPortForInfo": "Please select a port to obtain board info.", "showAllAvailablePorts": "Shows all available ports when enabled", + "showAllPorts": "Show all ports", "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", - "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}" + "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}", + "typeOfPorts": "{0} ports" }, "boardsManager": "Boards Manager", "boardsType": { @@ -148,8 +153,19 @@ "contributions": { "addFile": "Add File", "fileAdded": "One file added to the sketch.", + "plotter": { + "couldNotOpen": "Couldn't open serial plotter" + }, "replaceTitle": "Replace" }, + "core": { + "compilerWarnings": { + "all": "All", + "default": "Default", + "more": "More", + "none": "None" + } + }, "coreContribution": { "copyError": "Copy error messages", "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." @@ -281,6 +297,10 @@ "unableToCloseWebSocket": "Unable to close websocket", "unableToConnectToWebSocket": "Unable to connect to websocket" }, + "portProtocol": { + "network": "Network", + "serial": "Serial" + }, "preferences": { "additionalManagerURLs": "Additional Boards Manager URLs", "auth.audience": "The OAuth2 audience.", @@ -320,6 +340,12 @@ "network": "Network", "newSketchbookLocation": "Select new sketchbook location", "noProxy": "No proxy", + "proxySettings": { + "hostname": "Host name", + "password": "Password", + "port": "Port number", + "username": "Username" + }, "showVerbose": "Show verbose output during", "sketchbook.location": "Sketchbook location", "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", diff --git a/i18n/es.json b/i18n/es.json index 2e6a6c603..486363970 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Retorno de carro", - "message": "Mensaje ({0} + Enter para enviar el mensaje a '{1}' en '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nueva línea", "newLineCarriageReturn": "Ambos NL & CR", "noLineEndings": "Sin ajuste de línea", diff --git a/i18n/eu.json b/i18n/eu.json index f0ec106d6..c2151934d 100644 --- a/i18n/eu.json +++ b/i18n/eu.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Korritze automatikoa", "carriageReturn": "Orga-itzulera", - "message": "Mezua ({0} + Enter honi mezua bidaltzeko: '{1}' hemen: '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Lerro berria", "newLineCarriageReturn": "NL & CR biak", "noLineEndings": "Lerro amaierarik ez", diff --git a/i18n/fa.json b/i18n/fa.json index e0dfab928..324806b0a 100644 --- a/i18n/fa.json +++ b/i18n/fa.json @@ -6,27 +6,27 @@ }, "board": { "board": "بورد {0}", - "boardConfigDialogTitle": "Select Other Board and Port", + "boardConfigDialogTitle": "انتخاب یک بورد و پورت دیگر", "boardInfo": "مشخصات برد", "configDialog1": "اگر می‌خواهید طرحی را آپلود کنید، هم یک تابلو و هم یک پورت انتخاب کنید.", "configDialog2": "اگر فقط تابلو را انتخاب کنید، می توانید کامپایل کنید، اما نمی توانید طرح خود را آپلود کنید.", "couldNotFindPreviouslySelected": "نمی توان برد انتخاب شده قبلی '{0}' در پلتفرم نصب شده '{1}' را پیدا کرد. لطفاً تابلویی را که می‌خواهید استفاده کنید، مجدداً به‌صورت دستی انتخاب کنید. آیا اکنون می خواهید آن را مجدداً انتخاب کنید؟", - "disconnected": "Disconnected", + "disconnected": "اتصال قطع شد", "getBoardInfo": "دریافت راهنمای برد", "inSketchbook": "(در منبع طرح ها)", "installNow": "هسته \"{0}{1}\" باید برای برد \"{2}\" انتخاب شده فعلی نصب شود. آیا الان می خواهید نصبش کنید؟", "noFQBN": "FQBN برای برد انتخاب شده \"{0}\" موجود نیست. آیا هسته مربوطه را نصب کرده اید؟", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "هیچ پورتی پیدا نشد", "noPortsSelected": "هیچ پورتی برای برد انتخاب نشده است.{0}", "noneSelected": "هیچ بردی انتخاب نشده است.", "openBoardsConfig": "انتخاب سایر برد ها و پورت ها", "platformMissing": "پلت فرم برای برد انتخابی '{0}' نصب نشده است.", "pleasePickBoard": "لطفاً یک برد متصل به پورتی که انتخاب کرده اید را انتخاب کنید.", "port": "پورت {0}", - "portLabel": "Port: {0}", + "portLabel": "پورت: {0}", "programmer": "برنامه ریز", "reselectLater": "بعدا انتخاب کنید", - "searchBoard": "Search board", + "searchBoard": "جستجوی بورد", "selectBoard": "انتخاب برد", "selectBoardForInfo": "لطفاً یک برد را برای به دست آوردن اطلاعات هیئت مدیره انتخاب کنید.", "selectPortForInfo": "لطفاً یک پورت را برای به دست آوردن اطلاعات هیئت مدیره انتخاب کنید.", @@ -336,7 +336,7 @@ "serial": { "autoscroll": "پیمایش خودکار", "carriageReturn": "رفتن به سر سطر", - "message": "پیام ( {0} + بزنید تا پیام به '{1}' بر '{2}' ارسال شود)", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "خط جدید", "newLineCarriageReturn": "هم NL و هم CR", "noLineEndings": "بدون پایان خط", diff --git a/i18n/fil.json b/i18n/fil.json index 60f0114b1..8c0d4b790 100644 --- a/i18n/fil.json +++ b/i18n/fil.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "New Line", "newLineCarriageReturn": "Both NL & CR", "noLineEndings": "No Line Ending", diff --git a/i18n/fr.json b/i18n/fr.json index 1585cb01c..b40f4c396 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Défilement automatique", "carriageReturn": "Retour chariot", - "message": "Message ({0} + Entrée pour envoyer le message à '{1}' sur '{2}'", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nouvelle ligne", "newLineCarriageReturn": "Les deux, NL et CR", "noLineEndings": "Pas de fin de ligne", diff --git a/i18n/he.json b/i18n/he.json index d2b9f1cef..d26a3b539 100644 --- a/i18n/he.json +++ b/i18n/he.json @@ -15,7 +15,7 @@ "getBoardInfo": "פרטי הלוח", "inSketchbook": "(בסקיצה)", "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", - "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", + "noFQBN": "הFQBN אינו זמין ללוח \"{0}\". האם הותקן הליבה המתאימה?", "noPortsDiscovered": "לא נמצאו פורטים", "noPortsSelected": "לא נבחרו פורטים ללוחות '{0}'.", "noneSelected": "לא נבחרו לוחות.", @@ -110,7 +110,7 @@ "signInToCloud": "התחברות לענן של ארדואינו Arduino Cloud", "signOut": "התנתק", "sync": "סנכרון", - "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", + "syncEditSketches": "סנכרון ועריכת הסקיצה בענן של ארדואינו", "visitArduinoCloud": "כנס.י לענן של ארדואינו ליצור סקיצה בענן" }, "common": { @@ -125,7 +125,7 @@ "partner": "שותף", "processing": "מעבד", "recommended": "מומלץ", - "retired": "Retired", + "retired": "פרש", "selectedOn": "ב {0}", "serialMonitor": "מוניטור סיריאלי", "type": "סוג", @@ -336,7 +336,7 @@ "serial": { "autoscroll": "גלילה אוטומטית", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "שורה חדשה", "newLineCarriageReturn": "Both NL & CR", "noLineEndings": "ללא סיום שורה", diff --git a/i18n/hu.json b/i18n/hu.json index 7899d3fc1..6da748c43 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Automatikus görgetés", "carriageReturn": "Kocsi vissza", - "message": "Üzenet ({0} + Enter az üzenet elküldéséhez az {1} itt: {2})", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Új sor", "newLineCarriageReturn": "Mindkettő: Új sor és Kocsi vissza - NL&CR", "noLineEndings": "Nincs sorvége ", diff --git a/i18n/it.json b/i18n/it.json index d74d69501..a915148f0 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -6,7 +6,7 @@ }, "board": { "board": "Scheda{0}", - "boardConfigDialogTitle": "Select Other Board and Port", + "boardConfigDialogTitle": "Seleziona un'altra scheda e un'altra porta", "boardInfo": "Informazioni sulla scheda", "configDialog1": "Seleziona una scheda ed una porta se vuoi caricare uno sketch.", "configDialog2": "Se selezioni solo una scheda, potrai compilare, ma non potrai caricare il tuo sketch.", @@ -16,7 +16,7 @@ "inSketchbook": "(nella raccolta degli sketch)", "installNow": "Il \"{0} {1}\" core non è installato per la scheda \"{2}\" . Vuoi installarlo ora?", "noFQBN": "La FQBN non è disponibile per la scheda selezionata\"{0}\". Sei sicuro che il core specifico sia stato installato?", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "Nessuna porta rilevata", "noPortsSelected": "Nessuna porta selezionata per la scheda: '{0}'.", "noneSelected": "Nessuna scheda selezionata.", "openBoardsConfig": "Scegli un'altra scheda e un altra porta...", @@ -26,7 +26,7 @@ "portLabel": "Porta: {0}", "programmer": "Programmatore", "reselectLater": "Riselezionare più tardi", - "searchBoard": "Search board", + "searchBoard": "Seleziona la scheda", "selectBoard": "Seleziona la scheda", "selectBoardForInfo": "Seleziona la scheda per la quale desideri informazioni.", "selectPortForInfo": "Selezionare la porta per ottenere info sulla scheda.", @@ -36,7 +36,7 @@ }, "boardsManager": "Gestore schede", "boardsType": { - "arduinoCertified": "Arduino Certified" + "arduinoCertified": "Certificato Arduino" }, "bootloader": { "burnBootloader": "Scrivi il bootloader", @@ -64,13 +64,13 @@ "uploadingCertificates": "Caricamento dei certificati." }, "checkForUpdates": { - "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", - "promptUpdateBoards": "Updates are available for some of your boards.", - "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "checkForUpdates": "Controlla gli aggiornamenti di Arduino", + "installAll": "Installa tutto", + "noUpdates": "Non sono disponibili aggiornamenti recenti.", + "promptUpdateBoards": "Sono disponibili aggiornamenti per alcune schede.", + "promptUpdateLibraries": "Sono disponibili aggiornamenti per alcune librerie.", + "updatingBoards": "Aggiornamento delle schede in corso...", + "updatingLibraries": "Aggiornamento delle librerie in corso..." }, "cli-error-parser": { "keyboardError": "'Keyboard' non è stato trovato. Il tuo sketch include la linea '#include ' nel codice?", @@ -114,8 +114,8 @@ "visitArduinoCloud": "Visita Arduino Cloud per creare Cloud Sketch " }, "common": { - "all": "All", - "contributed": "Contributed", + "all": "Tutti", + "contributed": "Fornita da terzi", "installManually": "Installa manualmente", "later": "Salta", "noBoardSelected": "Nessuna scheda selezionata", @@ -124,19 +124,19 @@ "oldFormat": "Il '{0}' utilizza ancora il vecchio formato `.pde` . Vuoi sostituirlo con la nuova estensione `.ino?", "partner": "Partner", "processing": "In elaborazione", - "recommended": "Recommended", - "retired": "Retired", + "recommended": "Consigliato", + "retired": "Fuori produzione", "selectedOn": "su {0}", "serialMonitor": "Monitor seriale", - "type": "Type", + "type": "Tipo", "unknown": "Sconosciuto", - "updateable": "Updatable" + "updateable": "Aggiornabile" }, "compile": { "error": "Errore di compilazione: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "Schede incluse in questo pacchetto:", "by": "da", "filterSearch": "Filtra la tua ricerca...", "install": "Installa", @@ -152,7 +152,7 @@ }, "coreContribution": { "copyError": "Copia messaggi di errore", - "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." + "noBoardSelected": "Non è stata selezionata alcuna scheda. Selezionare la tua scheda Arduino dal menu Strumenti > Scheda." }, "daemon": { "restart": "Riavvia il demone", @@ -178,7 +178,7 @@ "increaseIndent": "Aumenta indentazione", "nextError": "Errore Successivo", "previousError": "Errore Precedente", - "revealError": "Reveal Error" + "revealError": "Rileva l'errore" }, "electron": { "couldNotSave": "Non è stato possibile salvare lo sketch. Si consiglia di copiarlo è salvarlo su un file di testo e solo successivamente riavviare l' Arduino IDE. ", @@ -216,7 +216,7 @@ "visit": "Vai al sito Arduino.cc" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Controlla gli aggiornamenti dell'IDE di Arduino", "closeAndInstallButton": "Chiudi e Installa", "closeToInstallNotice": "Chiudi il software e installa l’aggiornamento sulla tua macchina", "downloadButton": "Scarica", @@ -255,22 +255,22 @@ "zipLibrary": "Libreria" }, "librarySearchProperty": { - "topic": "Topic" + "topic": "Argomento" }, "libraryTopic": { - "communication": "Communication", - "dataProcessing": "Data Processing", - "dataStorage": "Data Storage", - "deviceControl": "Device Control", - "display": "Display", - "other": "Other", - "sensors": "Sensors", - "signalInputOutput": "Signal Input/Output", - "timing": "Timing", - "uncategorized": "Uncategorized" + "communication": "Comunicazione", + "dataProcessing": "Elaborazione dati", + "dataStorage": "Archiviazione dati", + "deviceControl": "Controllo dispositivi", + "display": "Schermo", + "other": "Altro", + "sensors": "Sensori", + "signalInputOutput": "Segnale di ingresso/uscita", + "timing": "Sincronizzazione", + "uncategorized": "Senza categoria" }, "libraryType": { - "installed": "Installed" + "installed": "Installata" }, "menu": { "advanced": "Avanzate", @@ -290,7 +290,7 @@ "automatic": "Automatico", "board.certificates": "Lista dei certificati che possono essere caricati nelle schede", "browse": "Sfoglia", - "checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", + "checkForUpdate": "Ricevere le notifiche degli aggiornamenti disponibili per l'IDE, le schede e le librerie. Richiede il riavvio dell'IDE dopo la modifica. È abilitata per impostazione predefinita.", "choose": "Scegli", "cli.daemonDebug": "Abilita il debug logging delle chiamate gRPC alla CLI di Arduino. Per rendere effettiva questa impostazione, è necessario un riavvio dell'IDE. L'impostazione predefinita è false.", "cloud.enabled": "Imposta su true per abilitare le funzioni di sincronia dello sketch. Il valore predefinito è true.", @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Scorrimento automatico", "carriageReturn": "Ritorno carrello (CR)", - "message": "Messaggio({0} + Invio per inviare il messaggio a '{1}' su '{2}')", + "message": "Messaggio (premi Enter per inviare il messaggio a '{0}' on '{1}')", "newLine": "A capo (NL)", "newLineCarriageReturn": "Entrambi NL & CR", "noLineEndings": "Nessun fine riga", @@ -386,7 +386,7 @@ }, "userFields": { "cancel": "Annulla", - "enterField": "Enter {0}", + "enterField": "Inserisci {0}", "upload": "Carica" } }, diff --git a/i18n/ja.json b/i18n/ja.json index c05d5b40a..f2aea63eb 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -6,7 +6,7 @@ }, "board": { "board": "ボード{0}", - "boardConfigDialogTitle": "Select Other Board and Port", + "boardConfigDialogTitle": "他のボードとポートを選択", "boardInfo": "ボード情報", "configDialog1": "スケッチを書き込みたい場合には、ボードとポートの両方を選択してください。", "configDialog2": "ボードのみを選択した場合、コンパイルはできますが、スケッチの書き込みはできません。", @@ -16,7 +16,7 @@ "inSketchbook": "(スケッチブック内)", "installNow": "現在選択されているボード\"{2}\"用にコア\"{0} {1}\"をインストールする必要があります。今すぐインストールしますか?", "noFQBN": "選択されたボード\"{0}\"にはFQBNがありません。対応するコアをインストール済みですか?", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "ポートが見つかりませんでした", "noPortsSelected": "ボード用に選択されたポートがありません: '{0}'.", "noneSelected": "ボード未選択です。", "openBoardsConfig": "他のボードとポートを選択…", @@ -26,7 +26,7 @@ "portLabel": "ポート: {0}", "programmer": "書き込み装置", "reselectLater": "後で選択しなおす", - "searchBoard": "Search board", + "searchBoard": "ボードを検索", "selectBoard": "ボードを選択", "selectBoardForInfo": "ボード情報を得るには、ボードを選択してください。", "selectPortForInfo": "ボード情報を得るには、ポートを選択してください。", @@ -36,11 +36,11 @@ }, "boardsManager": "ボードマネージャ", "boardsType": { - "arduinoCertified": "Arduino Certified" + "arduinoCertified": "Arduino認定" }, "bootloader": { "burnBootloader": "ブートローダを書き込む", - "burningBootloader": "Burning bootloader...", + "burningBootloader": "ブートローダを書き込み中…", "doneBurningBootloader": "ブートローダの書き込みが完了しました。" }, "burnBootloader": { @@ -64,13 +64,13 @@ "uploadingCertificates": "証明書を書き込み中。" }, "checkForUpdates": { - "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", - "promptUpdateBoards": "Updates are available for some of your boards.", - "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "checkForUpdates": "Arduinoのアップデートを確認", + "installAll": "全てをインストール", + "noUpdates": "最近のアップデートはありません。", + "promptUpdateBoards": "一部のボードにアップデートがあります。", + "promptUpdateLibraries": "一部のライブラリにアップデートがあります。", + "updatingBoards": "ボードをアップデート中…", + "updatingLibraries": "ライブラリをアップデート中…" }, "cli-error-parser": { "keyboardError": "'Keyboard'が見つかりません。スケッチに'#include 'という行はありますか?", @@ -114,29 +114,29 @@ "visitArduinoCloud": "Arduino Cloudにアクセスしてクラウドスケッチを作成する" }, "common": { - "all": "All", - "contributed": "Contributed", + "all": "全て", + "contributed": "提供された", "installManually": "手動でインストール", "later": "後で", "noBoardSelected": "ボード未選択", "notConnected": "[未接続]", "offlineIndicator": "オフラインのようです。 インターネットに接続していないと、Arduino CLIが必要なリソースをダウンロードできず、誤動作を引き起こす可能性があります。 インターネットに接続して、アプリケーションを再起動してください。", "oldFormat": "'{0}'はまだ古い`.pde`形式を使用しています。新しい`.ino`拡張子に切り替えますか?", - "partner": "Partner", + "partner": "パートナー", "processing": "処理中", - "recommended": "Recommended", - "retired": "Retired", + "recommended": "推奨", + "retired": "廃止済み", "selectedOn": "{0}の", "serialMonitor": "シリアルモニタ", - "type": "Type", + "type": "タイプ", "unknown": "不明", - "updateable": "Updatable" + "updateable": "アップデート可能" }, "compile": { "error": "コンパイルエラー: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "このパッケージに含まれるボード:", "by": "by", "filterSearch": "検索をフィルタ…", "install": "インストール", @@ -152,7 +152,7 @@ }, "coreContribution": { "copyError": "エラーメッセージをコピー", - "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." + "noBoardSelected": "ボードが選択されていません。ツール > ボードメニューからArduinoボードを選択してください。" }, "daemon": { "restart": "Daemonを再起動", @@ -178,7 +178,7 @@ "increaseIndent": "インデントを増やす", "nextError": "次のエラー", "previousError": "前のエラー", - "revealError": "Reveal Error" + "revealError": "エラーを表示" }, "electron": { "couldNotSave": "スケッチを保存できませんでした。保存されていない作業内容を好きなテキストエディタにコピーして、IDEを再起動してください。", @@ -216,7 +216,7 @@ "visit": "Arduino.ccウェブサイトを開く" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Arduino IDEのアップデートを確認", "closeAndInstallButton": "終了してインストール", "closeToInstallNotice": "ソフトウェアを終了してアップデートをインストールする。", "downloadButton": "ダウンロード", @@ -255,22 +255,22 @@ "zipLibrary": "ライブラリ" }, "librarySearchProperty": { - "topic": "Topic" + "topic": "トピック" }, "libraryTopic": { - "communication": "Communication", - "dataProcessing": "Data Processing", - "dataStorage": "Data Storage", - "deviceControl": "Device Control", - "display": "Display", - "other": "Other", - "sensors": "Sensors", - "signalInputOutput": "Signal Input/Output", - "timing": "Timing", - "uncategorized": "Uncategorized" + "communication": "コミュニケーション", + "dataProcessing": "データ処理", + "dataStorage": "データ保存", + "deviceControl": "デバイス制御", + "display": "ディスプレイ", + "other": "その他", + "sensors": "センサ", + "signalInputOutput": "信号入出力", + "timing": "タイミング", + "uncategorized": "未分類" }, "libraryType": { - "installed": "Installed" + "installed": "インストール済み" }, "menu": { "advanced": "詳細", @@ -290,7 +290,7 @@ "automatic": "自動", "board.certificates": "ボードに書き込みできる証明書の一覧", "browse": "参照", - "checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", + "checkForUpdate": "IDE、ボード、ライブラリの利用可能なアップデートに関する通知を受け取ることができます。変更後にIDEの再起動が必要です。デフォルトはtrue。", "choose": "選択", "cli.daemonDebug": "Arduino CLIへのgRPC呼び出しのデバッグロギングを有効にします。この設定を有効にするにはIDEを再起動する必要があります。デフォルトはfalseです。", "cloud.enabled": "スケッチの同期機能が有効な場合にはtrueを指定。デフォルトではtrue。", @@ -336,7 +336,7 @@ "serial": { "autoscroll": "自動スクロール", "carriageReturn": "CRのみ", - "message": "メッセージ('{2}'の'{1}'にメッセージを送信するには{0} + Enter)", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "LFのみ", "newLineCarriageReturn": "CRおよびLF", "noLineEndings": "改行なし", @@ -349,7 +349,7 @@ "archiveSketch": "スケッチをアーカイブする", "cantOpen": "「{0}」というフォルダはすでに存在します。スケッチを開けません。", "close": "本当にスケッチを閉じますか?", - "compile": "Compiling sketch...", + "compile": "スケッチをコンパイル中…", "configureAndUpload": "構成と書き込み", "createdArchive": "アーカイブ'{0}'を作成しました。", "doneCompiling": "コンパイル完了。", @@ -371,7 +371,7 @@ "titleSketchbook": "スケッチブック", "upload": "書き込み", "uploadUsingProgrammer": "書き込み装置を使って書き込む", - "uploading": "Uploading...", + "uploading": "書き込み中…", "userFieldsNotFoundError": "接続されたボードのユーザーフィールドが見つかりません。", "verify": "検証", "verifyOrCompile": "検証・コンパイル" @@ -386,7 +386,7 @@ }, "userFields": { "cancel": "キャンセル", - "enterField": "Enter {0}", + "enterField": "{0}を入力", "upload": "マイコンボードに書き込む" } }, diff --git a/i18n/ko.json b/i18n/ko.json index 1c71ca237..9e5e2b921 100644 --- a/i18n/ko.json +++ b/i18n/ko.json @@ -1,122 +1,122 @@ { "arduino": { "about": { - "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}{4} [{5}]\n\n{6}", - "label": "About {0}" + "detail": "버전: {0}\n날짜: {1}{2}\nCLI 버전: {3}{4} [{5}]\n\n{6}", + "label": "프로그램 정보 {0}" }, "board": { - "board": "Board{0}", - "boardConfigDialogTitle": "Select Other Board and Port", - "boardInfo": "Board Info", - "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.", - "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?", - "disconnected": "Disconnected", - "getBoardInfo": "Get Board Info", - "inSketchbook": " (in Sketchbook)", + "board": "보드{0}", + "boardConfigDialogTitle": "보드 및 포트 선택", + "boardInfo": "보드정보", + "configDialog1": "스케치를 업로드할 보드 및 포트를 선택", + "configDialog2": "보드를 선택하면 컴파일은 가능하지만, 스케치를 업로드 할 수 없습니다.", + "couldNotFindPreviouslySelected": "선택된 보드를 찾을 수 없습니다. '{0}' 설치된 플랫폼에서'{1}'. 수동으로 사용 할 보드를 선택해주세요.\n지금 보드를 다시 선택하시겠습니까?", + "disconnected": "연결해제됨", + "getBoardInfo": "보드정보 얻기", + "inSketchbook": "(스케치북에서)", "installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", "noFQBN": "The FQBN is not available for the selected board \"{0}\". Do you have the corresponding core installed?", - "noPortsDiscovered": "No ports discovered", - "noPortsSelected": "No ports selected for board: '{0}'.", - "noneSelected": "No boards selected.", - "openBoardsConfig": "Select other board and port…", + "noPortsDiscovered": "포트를 찾을 수 없습니다.", + "noPortsSelected": "보드에 맞는 포트가 없습니다: '{0}'.", + "noneSelected": "보드가 선택되지 않았습니다.", + "openBoardsConfig": "보드 및 포트를 선택하세요.", "platformMissing": "The platform for the selected '{0}' board is not installed.", - "pleasePickBoard": "Please pick a board connected to the port you have selected.", - "port": "Port{0}", - "portLabel": "Port: {0}", - "programmer": "Programmer", - "reselectLater": "Reselect later", - "searchBoard": "Search board", + "pleasePickBoard": "선택한 포트에 연결할 보드를 선택하십시오", + "port": "포트{0}", + "portLabel": "포트: {0}", + "programmer": "프로그래머", + "reselectLater": "나중에 선택", + "searchBoard": "보드찾기", "selectBoard": "보드 선택", - "selectBoardForInfo": "Please select a board to obtain board info.", - "selectPortForInfo": "Please select a port to obtain board info.", - "showAllAvailablePorts": "Shows all available ports when enabled", - "succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}", - "succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}" + "selectBoardForInfo": "보드 정보를 얻으려면 보드를 선택하십시오.", + "selectPortForInfo": "보드 정보를 얻으려면 포트를 선택하십시오.", + "showAllAvailablePorts": "활성화된 사용 가능한 모든 포트를 표시합니다.", + "succesfullyInstalledPlatform": "성공적으로 설치된 플랫폼{0}:{1}", + "succesfullyUninstalledPlatform": "성공적으로 설치된 플랫폼 {0}:{1}" }, - "boardsManager": "Boards Manager", + "boardsManager": "보드매니저", "boardsType": { - "arduinoCertified": "Arduino Certified" + "arduinoCertified": "아두이노 인증" }, "bootloader": { - "burnBootloader": "Burn Bootloader", - "burningBootloader": "Burning bootloader...", - "doneBurningBootloader": "Done burning bootloader." + "burnBootloader": "부트로더 굽기", + "burningBootloader": "부트로더 굽기...", + "doneBurningBootloader": "부트로더 굽기 완료." }, "burnBootloader": { - "error": "Error while burning the bootloader: {0}" + "error": "부트로더 굽기 중 에러: {0}" }, "certificate": { - "addNew": "Add New", - "addURL": "Add URL to fetch SSL certificate", + "addNew": "추가", + "addURL": "SSL 인증서를 가져올 URL 추가", "boardAtPort": "{0} at {1}", - "certificatesUploaded": "Certificates uploaded.", - "enterURL": "Enter URL", - "noSupportedBoardConnected": "No supported board connected", - "openContext": "Open context", - "remove": "Remove", - "selectBoard": "Select a board...", - "selectCertificateToUpload": "1. Select certificate to upload", - "selectDestinationBoardToUpload": "2. Select destination board and upload certificate", - "upload": "Upload", - "uploadFailed": "Upload failed. Please try again.", - "uploadRootCertificates": "Upload SSL Root Certificates", - "uploadingCertificates": "Uploading certificates." + "certificatesUploaded": "인증서 업로드 완료", + "enterURL": "URL 입력", + "noSupportedBoardConnected": "지원되는 보드가 연결되지 않았습니다.", + "openContext": "열린 내용", + "remove": "제거", + "selectBoard": "보드 선택...", + "selectCertificateToUpload": "1. 업로드할 인증서 선택", + "selectDestinationBoardToUpload": "2. 보드 선택 및 인증서 업로드", + "upload": "업로드", + "uploadFailed": "업로드에 실패했습니다. 다시 시도해 주세요.", + "uploadRootCertificates": "SSL 루트 인증서 업로드", + "uploadingCertificates": "인증서를 업로드 중입니다." }, "checkForUpdates": { - "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", - "promptUpdateBoards": "Updates are available for some of your boards.", - "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "checkForUpdates": "아두이노 업데이트 확인", + "installAll": "모두 설치", + "noUpdates": "사용 가능한 최신 업데이트가 없습니다.", + "promptUpdateBoards": "일부 보드에 대한 업데이트가 있습니다.", + "promptUpdateLibraries": "일부 라이브러리에 대한 업데이트가 있습니다.", + "updatingBoards": "보드 업데이트 중...", + "updatingLibraries": "라이브러리 업데이트 중..." }, "cli-error-parser": { - "keyboardError": "'Keyboard' not found. Does your sketch include the line '#include '?", - "mouseError": "'Mouse' not found. Does your sketch include the line '#include '?" + "keyboardError": "'Keyboard'를 찾을 수 없습니다. 스케치에 '#include ' 줄이 포함되어 있습니까?", + "mouseError": "'Mouse'를 찾을 수 없습니다. 스케치에 '#include ' 줄이 포함되어 있습니까?" }, "cloud": { - "account": "Account", + "account": "계정", "chooseSketchVisibility": "Choose visibility of your Sketch:", - "connected": "Connected", - "continue": "Continue", - "donePulling": "Done pulling ‘{0}’.", - "donePushing": "Done pushing ‘{0}’.", + "connected": "연결됨", + "continue": "계속", + "donePulling": "pulling 완료 ‘{0}’.", + "donePushing": "pushing 완료 ‘{0}’.", "embed": "Embed:", - "emptySketchbook": "Your Sketchbook is empty", - "learnMore": "Learn more", - "link": "Link:", - "notYetPulled": "Cannot push to Cloud. It is not yet pulled.", - "offline": "Offline", - "openInCloudEditor": "Open in Cloud Editor", - "options": "Options...", - "privateVisibility": "Private. Only you can view the Sketch.", - "profilePicture": "Profile picture", - "publicVisibility": "Public. Anyone with the link can view the Sketch.", + "emptySketchbook": "스케치북이 비어 있습니다.", + "learnMore": "더 배우기", + "link": "링크:", + "notYetPulled": "클라우드에 push 할수 없습니다. 아직 pull 되지 않았습니다.", + "offline": "오프라인", + "openInCloudEditor": "클라우드 편집기에서 열기", + "options": "옵션...", + "privateVisibility": "비공개. 나만이 스케치를 볼 수 있습니다.", + "profilePicture": "프로필 사진", + "publicVisibility": "공개. 링크가 있는 사람은 누구나 스케치를 볼 수 있습니다.", "pull": "Pull", - "pullFirst": "You have to pull first to be able to push to the Cloud.", - "pullSketch": "Pull Sketch", + "pullFirst": "클라우드로 Push하려면 먼저 Pull 합니다.", + "pullSketch": "Pull 스케치", "pullSketchMsg": "Pulling this Sketch from the Cloud will overwrite its local version. Are you sure you want to continue?", "push": "Push", - "pushSketch": "Push Sketch", + "pushSketch": "Push 스케치", "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.", - "remote": "Remote", - "remoteSketchbook": "Remote Sketchbook", - "share": "Share...", - "shareSketch": "Share Sketch", - "showHideRemoveSketchbook": "Show/Hide Remote Sketchbook", - "signIn": "SIGN IN", - "signInToCloud": "Sign in to Arduino Cloud", - "signOut": "Sign Out", - "sync": "Sync", - "syncEditSketches": "Sync and edit your Arduino Cloud Sketches", - "visitArduinoCloud": "Visit Arduino Cloud to create Cloud Sketches." + "remote": "원격", + "remoteSketchbook": "원격 스케치북", + "share": "공유...", + "shareSketch": "스케치 공유", + "showHideRemoveSketchbook": "보이기/숨기기 원격 스케치북", + "signIn": "로그인", + "signInToCloud": "아두이노 클라우드에 로그인", + "signOut": "로그아웃", + "sync": "동기화", + "syncEditSketches": "아두이노 클라우드 스케치 동기화 및 편집", + "visitArduinoCloud": "아두이노 클라우드를 방문하여 클라우드 스케치를 만드십시오." }, "common": { "all": "All", "contributed": "Contributed", - "installManually": "Install Manually", + "installManually": "수동설치", "later": "나중에", "noBoardSelected": "선택된 보드 없음", "notConnected": "[연결되지 않음]", @@ -124,99 +124,99 @@ "oldFormat": "'{0}' 파일은 오래된 `.pde` 확장자로 되어있어요. 새로운 `.ino` 확장자로 변경하시겠어요?", "partner": "Partner", "processing": "처리 중", - "recommended": "Recommended", + "recommended": "추천됨", "retired": "Retired", "selectedOn": "{0} 켜기", "serialMonitor": "시리얼 모니터", "type": "Type", "unknown": "알 수 없음", - "updateable": "Updatable" + "updateable": "업데이트가능함" }, "compile": { - "error": "Compilation error: {0}" + "error": "컴파일 오류: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "이 패키지에 포함된 보드:", "by": "by", "filterSearch": "Filter your search...", - "install": "INSTALL", - "moreInfo": "More info", - "uninstall": "Uninstall", - "uninstallMsg": "Do you want to uninstall {0}?", - "version": "Version {0}" + "install": "설치", + "moreInfo": "더 많은 정보", + "uninstall": "설치해제", + "uninstallMsg": "설치해제를 원하십니까 {0}?", + "version": "버전 {0}" }, "contributions": { - "addFile": "Add File", - "fileAdded": "One file added to the sketch.", - "replaceTitle": "Replace" + "addFile": "파일 추가", + "fileAdded": "스케치에 하나의 파일이 추가되었습니다.", + "replaceTitle": "교체" }, "coreContribution": { - "copyError": "Copy error messages", - "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." + "copyError": "에러 메시지 복사", + "noBoardSelected": "보드가 선택되지 않았습니다. Tools > Board menu 에서 당신의 보드를 선택해주세요." }, "daemon": { - "restart": "Restart Daemon", - "start": "Start Daemon", - "stop": "Stop Daemon" + "restart": "데몬 재시작", + "start": "데몬 시작", + "stop": "데몬 정지" }, "debug": { "debugWithMessage": "디버그 - {0}", "debuggingNotSupported": "Debugging is not supported by '{0}'", "noPlatformInstalledFor": "'{0}'에 대한 플랫폼이 설치되어 있지 않습니다", - "optimizeForDebugging": "Optimize for Debugging" + "optimizeForDebugging": "디버깅 최적화" }, "dialog": { - "dontAskAgain": "Don't ask again" + "dontAskAgain": "다시 묻지 않음" }, "editor": { - "autoFormat": "Auto Format", - "commentUncomment": "Comment/Uncomment", - "copyForForum": "Copy for Forum (Markdown)", - "decreaseFontSize": "Decrease Font Size", - "decreaseIndent": "Decrease Indent", - "increaseFontSize": "Increase Font Size", - "increaseIndent": "Increase Indent", - "nextError": "Next Error", - "previousError": "Previous Error", - "revealError": "Reveal Error" + "autoFormat": "자동 형식", + "commentUncomment": "주석/주석 삭제", + "copyForForum": "포럼용으로 복사 (Markdown)", + "decreaseFontSize": "글꼴 크기 줄이기", + "decreaseIndent": "들여쓰기 줄이기", + "increaseFontSize": "글꼴 크기 키우기", + "increaseIndent": "들여쓰기 늘이기", + "nextError": "다음 에러", + "previousError": "이전 에러", + "revealError": "에러 표시" }, "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": "저장되지 않은 변경 사항은 저장되지 않습니다." }, "examples": { - "builtInExamples": "Built-in examples", - "couldNotInitializeExamples": "Could not initialize built-in examples.", - "customLibrary": "Examples from Custom Libraries", + "builtInExamples": "포함된 예제들", + "couldNotInitializeExamples": "내장된 예제를 초기화 할 수 없습니다.", + "customLibrary": "사용자 정의 라이브러리의 예", "for": "Examples for {0}", - "forAny": "Examples for any board", - "menu": "Examples" + "forAny": "모든 보드의 예", + "menu": "예제" }, "firmware": { - "checkUpdates": "Check Updates", - "failedInstall": "Installation failed. Please try again.", - "install": "Install", - "installingFirmware": "Installing firmware.", - "overwriteSketch": "Installation will overwrite the Sketch on the board.", + "checkUpdates": "업데이트 확인", + "failedInstall": "설치에 실패했습니다. 다시 시도해 주세요.", + "install": "설치", + "installingFirmware": "펌웨어 설치중.", + "overwriteSketch": "설치하면 보드의 스케치를 덮어씁니다.", "selectBoard": "보드 선택", - "selectVersion": "Select firmware version", - "successfullyInstalled": "Firmware successfully installed.", - "updater": "WiFi101 / WiFiNINA Firmware Updater" + "selectVersion": "펌웨어 버전 선택", + "successfullyInstalled": "펌웨어가 성공적으로 설치되었습니다.", + "updater": "WiFi101 / WiFiNINA 펌웨어 업데이터" }, "help": { - "environment": "Environment", - "faq": "Frequently Asked Questions", - "findInReference": "Find in Reference", - "gettingStarted": "Getting Started", - "keyword": "Type a keyword", - "privacyPolicy": "Privacy Policy", - "reference": "Reference", - "search": "Search on Arduino.cc", - "troubleshooting": "Troubleshooting", - "visit": "Visit Arduino.cc" + "environment": "환경", + "faq": "자주 묻는 질문", + "findInReference": "참조에서 찾기", + "gettingStarted": "시작하기", + "keyword": "키워드 입력", + "privacyPolicy": "개인정보 정책", + "reference": "참조", + "search": "on Arduino.cc 에서 검색", + "troubleshooting": "문제 해결", + "visit": "Arduino.cc 방문" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Arduino IDE 업데이트 확인", "closeAndInstallButton": "닫고 설치하기", "closeToInstallNotice": "소프트웨어를 닫고 장치에 업데이트를 설치해주세요.", "downloadButton": "다운로드", @@ -233,44 +233,44 @@ "versionDownloaded": "Arduino IDE {0} 버전이 다운로드 되었습니다. " }, "library": { - "addZip": "Add .ZIP Library...", - "arduinoLibraries": "Arduino libraries", + "addZip": ".ZIP 라이브러리 추가...", + "arduinoLibraries": "아두이노 라이브러리", "contributedLibraries": "Contributed libraries", - "dependenciesForLibrary": "Dependencies for library {0}:{1}", - "include": "Include Library", - "installAll": "Install all", - "installMissingDependencies": "Would you like to install all the missing dependencies?", + "dependenciesForLibrary": "라이브러리에 대한 종속성 {0}:{1}", + "include": "라이브러리 포함", + "installAll": "모두 설치", + "installMissingDependencies": "누락된 모든 종속성을 설치하시겠습니까?", "installOneMissingDependency": "Would you like to install the missing dependency?", "installOnly": "Install {0} only", - "installedSuccessfully": "Successfully installed library {0}:{1}", - "libraryAlreadyExists": "A library already exists. Do you want to overwrite it?", - "manageLibraries": "Manage Libraries...", - "namedLibraryAlreadyExists": "A library folder named {0} already exists. Do you want to overwrite it?", - "needsMultipleDependencies": "The library {0}:{1} needs some other dependencies currently not installed:", + "installedSuccessfully": "성공적으로 설치된 라이브러리 {0}:{1}", + "libraryAlreadyExists": "라이브러리가 이미 존재합니다. 덮어 쓰시겠습니까? ", + "manageLibraries": "라이브러리 관리...", + "namedLibraryAlreadyExists": " {0} 이라는 라이브러리 폴더이름이 이미 존재합니다. 덮어 쓰시겠습니까?", + "needsMultipleDependencies": "라이브러리 {0}:{1} 는 현재 설치되지 않은 다른 종속성이 필요합니다.", "needsOneDependency": "The library {0}:{1} needs another dependency currently not installed:", - "overwriteExistingLibrary": "Do you want to overwrite the existing library?", + "overwriteExistingLibrary": "기존 라이브러리를 덮어쓰시겠습니까?", "successfullyInstalledZipLibrary": "Successfully installed library from {0} archive", - "title": "Library Manager", - "uninstalledSuccessfully": "Successfully uninstalled library {0}:{1}", - "zipLibrary": "Library" + "title": "라이브러리 매니저", + "uninstalledSuccessfully": "라이브러리가 성공적으로 제거됨 {0}:{1}", + "zipLibrary": "라이브러리" }, "librarySearchProperty": { - "topic": "Topic" + "topic": "주제" }, "libraryTopic": { "communication": "Communication", - "dataProcessing": "Data Processing", - "dataStorage": "Data Storage", - "deviceControl": "Device Control", - "display": "Display", - "other": "Other", - "sensors": "Sensors", - "signalInputOutput": "Signal Input/Output", - "timing": "Timing", - "uncategorized": "Uncategorized" + "dataProcessing": "데이터 처리", + "dataStorage": "데이터 저장소", + "deviceControl": "장치 제어", + "display": "화면표시", + "other": "기타", + "sensors": "센서", + "signalInputOutput": "신호 입/출력", + "timing": "타이밍", + "uncategorized": "미분류" }, "libraryType": { - "installed": "Installed" + "installed": "설치됨" }, "menu": { "advanced": "Advanced", @@ -278,132 +278,132 @@ "tools": "도구" }, "monitor": { - "unableToCloseWebSocket": "Unable to close websocket", - "unableToConnectToWebSocket": "Unable to connect to websocket" + "unableToCloseWebSocket": "웹소켓을 닫을 수 없습니다.", + "unableToConnectToWebSocket": "웹소켓에 연결 할 수 없습니다." }, "preferences": { - "additionalManagerURLs": "Additional Boards Manager URLs", + "additionalManagerURLs": "추가 보드 관리자 URL", "auth.audience": "The OAuth2 audience.", "auth.clientID": "The OAuth2 client ID.", "auth.domain": "The OAuth2 domain.", "auth.registerUri": "The URI used to register a new user.", "automatic": "Automatic", "board.certificates": "List of certificates that can be uploaded to boards", - "browse": "Browse", - "checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", - "choose": "Choose", - "cli.daemonDebug": "Enable debug logging of the gRPC calls to the Arduino CLI. A restart of the IDE is needed for this setting to take effect. It's 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.", + "browse": "검색", + "checkForUpdate": "IDE, 보드 및 라이브러리에 대한 사용 가능한 업데이트 알림을 받습니다. 변경 후 IDE를 다시 시작해야 합니다. 알림받기가 기본설정입니다.", + "choose": "선택", + "cli.daemonDebug": "Arduino CLI에 대한 gRPC 호출의 디버그 로깅을 활성화합니다. 이 설정을 적용하려면 IDE를 다시 시작해야 합니다. 기본적으로 false입니다.", + "cloud.enabled": "스케치 동기화 기능이 활성화된 경우 True입니다. 기본값은 true입니다.", + "cloud.pull.warn": "클라우드 스케치를 pulling 전에 사용자에게 경고해야 하는 경우 True입니다. 기본값은 true입니다.", + "cloud.push.warn": "클라우드 스케치를 pushing 전에 사용자에게 경고해야 하는 경우 True입니다. 기본값은 true입니다.", + "cloud.pushpublic.warn": "공개 스케치를 클라우드로 pushing 전에 사용자에게 경고해야 하는 경우 True입니다.기본값은 true입니다.", "cloud.sketchSyncEndpoint": "The endpoint used to push and pull sketches from a backend. By default it points to Arduino Cloud API.", - "compile": "compile", - "compile.experimental": "True if the IDE should handle multiple compiler errors. False by default", + "compile": "컴파일", + "compile.experimental": "IDE가 여러 컴파일러 오류를 처리해야 하는 경우 True입니다.기본적으로 False입니다.", "compile.revealRange": "Adjusts how compiler errors are revealed in the editor after a failed verify/upload. Possible values: 'auto': Scroll vertically as necessary and reveal a line. 'center': Scroll vertically as necessary and reveal a line centered vertically. 'top': Scroll vertically as necessary and reveal a line close to the top of the viewport, optimized for viewing a code definition. 'centerIfOutsideViewport': Scroll vertically as necessary and reveal a line centered vertically only if it lies outside the viewport. The default value is '{0}'.", - "compile.verbose": "True for verbose compile output. False by default", + "compile.verbose": "자세한 컴파일 출력의 경우 True입니다. 기본은 False입니다.", "compile.warnings": "gcc에 사용할 경고 수준을 알려줍니다. 기본값은 '없음'입니다.", - "compilerWarnings": "Compiler warnings", - "editorFontSize": "Editor font size", - "editorQuickSuggestions": "Editor Quick Suggestions", - "enterAdditionalURLs": "Enter additional URLs, one for each row", - "files.inside.sketches": "Show files inside Sketches", - "ide.updateBaseUrl": "The base URL where to download updates from. Defaults to 'https://downloads.arduino.cc/arduino-ide'", - "ide.updateChannel": "Release channel to get updated from. 'stable' is the stable release, 'nightly' is the latest development build.", + "compilerWarnings": "컴파일러 경고", + "editorFontSize": "에디터 글꼴 크기", + "editorQuickSuggestions": "에디터 빠른 제안", + "enterAdditionalURLs": "각 행에 하나씩 추가 URL을 입력하세요.", + "files.inside.sketches": "스케치 내부에 파일 표시", + "ide.updateBaseUrl": "업데이트를 다운로드할 기본 URL입니다. 기본값은 \n'https://downloads.arduino.cc/arduino-ide'", + "ide.updateChannel": "업데이트를 받을 릴리스 채널입니다. 'stable'은 안정적인 릴리스이고 'nightly'는 최신 개발 빌드입니다.", "interfaceScale": "Interface scale", - "invalid.editorFontSize": "Invalid editor font size. It must be a positive integer.", - "invalid.sketchbook.location": "Invalid sketchbook location: {0}", - "invalid.theme": "Invalid theme.", - "language.log": "True if the Arduino Language Server should generate log files into the sketch folder. Otherwise, false. It's false by default.", - "language.realTimeDiagnostics": "If true, the language server provides real-time diagnostics when typing in the editor. It's false by default.", - "manualProxy": "Manual proxy configuration", - "network": "Network", - "newSketchbookLocation": "Select new sketchbook location", + "invalid.editorFontSize": "잘못된 에디터 글꼴크기, 반드시 양의 정수를 사용해야합니다.", + "invalid.sketchbook.location": "잘못된 스케치북 위치: {0}", + "invalid.theme": "잘못된 테마.", + "language.log": "Arduino 언어 서버가 스케치 폴더에 로그 파일을 생성해야 하는 경우 true이고, 그렇지 않으면 false입니다. 기본은 false입니다.", + "language.realTimeDiagnostics": "true인 경우 언어 서버는 편집기에 입력할 때 실시간 진단을 제공하며 기본적으로 false입니다.", + "manualProxy": "수동 프록시 구성", + "network": "네트워크", + "newSketchbookLocation": "새 스케치북 위치 선택", "noProxy": "No proxy", - "showVerbose": "Show verbose output during", - "sketchbook.location": "Sketchbook location", - "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", - "survey.notification": "True if users should be notified if a survey is available. True by default.", - "unofficialBoardSupport": "Click for a list of unofficial board support URLs", - "upload": "upload", - "upload.verbose": "True for verbose upload output. False by default.", - "verifyAfterUpload": "Verify code after upload", - "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." - }, - "replaceMsg": "Replace the existing version of {0}?", - "selectZip": "Select a zip file containing the library you'd like to add", + "showVerbose": "출력 중 자세한 표시", + "sketchbook.location": "스케치북 위치", + "sketchbook.showAllFiles": "스케치 내부의 모든 스케치 파일을 표시하려면 True입니다. 기본은 false입니다.", + "survey.notification": "설문조사를 사용할 수 있는 경우 사용자에게 알림을 보내야 하는 경우 True입니다. 기본은 True입니다.", + "unofficialBoardSupport": "비공식 보드 지원 URL 목록을 보려면 클릭하십시오.", + "upload": "업로드", + "upload.verbose": "자세한 업로드 출력의 경우 True이고 기본적으로 False입니다.", + "verifyAfterUpload": "업로드 후 코드확인", + "window.autoScale": "사용자 인터페이스가 글꼴 크기에 따라 자동으로 조정되는 경우 True입니다.", + "window.zoomLevel": "창의 확대/축소 수준을 조정합니다. 원래 크기는 0이고 위(예: 1) 또는 아래(예: -1)의 각 증가는 확대/축소를 20% 더 크거나 작게 나타냅니다. 소수를 입력하여 확대/축소 수준을 미세하게 조정할 수도 있습니다." + }, + "replaceMsg": "{0}의 기존 버젼을 바꾸시겠습니까?", + "selectZip": "추가하려는 라이브러리가 포함된 zip 파일을 선택하세요.", "serial": { - "autoscroll": "Autoscroll", + "autoscroll": "자동스크롤", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", - "newLine": "New Line", + "message": "Message (Enter to send message to '{0}' on '{1}')", + "newLine": "새 줄", "newLineCarriageReturn": "Both NL & CR", "noLineEndings": "No Line Ending", - "notConnected": "Not connected. Select a board and a port to connect automatically.", - "openSerialPlotter": "Serial Plotter", + "notConnected": "연결되지 않음. 자동으로 연결할 보드와 포트를 선택합니다.", + "openSerialPlotter": "시리얼 플로터", "timestamp": "Timestamp", "toggleTimestamp": "Toggle Timestamp" }, "sketch": { "archiveSketch": "Archive Sketch", - "cantOpen": "A folder named \"{0}\" already exists. Can't open sketch.", - "close": "Are you sure you want to close the sketch?", - "compile": "Compiling sketch...", - "configureAndUpload": "Configure And Upload", + "cantOpen": "이름이 \"{0}\" 인 폴더가 이미 존재합니다. 스케치를 열 수 없습니다.", + "close": "스케치를 닫으시겠습니까?", + "compile": "스케치 컴파일중...", + "configureAndUpload": "구성 및 업로드", "createdArchive": "Created archive '{0}'.", - "doneCompiling": "Done compiling.", - "doneUploading": "Done uploading.", - "exportBinary": "Export Compiled Binary", + "doneCompiling": "컴파일 완료.", + "doneUploading": "업로딩 완료.", + "exportBinary": "컴파일된 바이너리 내보내기", "moving": "Moving", "movingMsg": "The file \"{0}\" needs to be inside a sketch folder named \"{1}\".\nCreate this folder, move the file, and continue?", - "new": "New", - "openFolder": "Open Folder", - "openRecent": "Open Recent", - "openSketchInNewWindow": "Open Sketch in New Window", - "saveFolderAs": "Save sketch folder as...", - "saveSketch": "Save your sketch to open it again later.", - "saveSketchAs": "Save sketch folder as...", - "showFolder": "Show Sketch Folder", + "new": "새 파일", + "openFolder": "폴더 열기", + "openRecent": "최근 파일 열기", + "openSketchInNewWindow": "새 창에서 스케치 열기", + "saveFolderAs": "스케치 폴더를 다른 이름으로 저장...", + "saveSketch": "스케치를 저장하여 나중에 다시 엽니다.", + "saveSketchAs": "스케치 폴더를 다른 이름으로 저장...", + "showFolder": "스케치 폴더 보기", "sketch": "스케치", - "sketchbook": "Sketchbook", - "titleLocalSketchbook": "Local Sketchbook", - "titleSketchbook": "Sketchbook", - "upload": "Upload", - "uploadUsingProgrammer": "Upload Using Programmer", - "uploading": "Uploading...", + "sketchbook": "스케치북", + "titleLocalSketchbook": "로컬 스케치북", + "titleSketchbook": "스케치북", + "upload": "업로드", + "uploadUsingProgrammer": "프로그래머를 사용하여 업로드", + "uploading": "업로딩...", "userFieldsNotFoundError": "Can't find user fields for connected board", - "verify": "Verify", - "verifyOrCompile": "Verify/Compile" + "verify": "확인", + "verifyOrCompile": "확인/컴파일" }, "survey": { - "answerSurvey": "Answer survey", - "dismissSurvey": "Don't show again", + "answerSurvey": "설문조사 응답", + "dismissSurvey": "다시보지 않기", "surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better." }, "upload": { - "error": "{0} error: {1}" + "error": "{0} 오류: {1}" }, "userFields": { - "cancel": "Cancel", + "cancel": "취소", "enterField": "Enter {0}", - "upload": "Upload" + "upload": "업로드" } }, "cloud": { - "GoToCloud": "GO TO CLOUD" + "GoToCloud": "클라우드로 이동" }, "theia": { "core": { - "cannotConnectBackend": "Cannot connect to the backend.", - "cannotConnectDaemon": "Cannot connect to the CLI daemon.", - "couldNotSave": "Could not save the sketch. Please copy your unsaved work into your favorite text editor, and restart the IDE.", - "daemonOffline": "CLI Daemon Offline", - "offline": "Offline", - "quitTitle": "Are you sure you want to quit?" + "cannotConnectBackend": "백엔드에 연결 할 수 없습니다.", + "cannotConnectDaemon": "CLI 데몬에 연결 할 수 없습니다.", + "couldNotSave": "스케치를 저장할 수 없습니다. 저장하지 않은 작업을 즐겨 사용하는 텍스트 편집기에 복사하고 IDE를 다시 시작하세요.", + "daemonOffline": "CLI 데몬 오프라인", + "offline": "오프라인", + "quitTitle": "정말 종료하시겠습니까?" }, "debug": { - "start": "Start...", + "start": "시작...", "startError": "There was an error starting the debug session, check the logs for more details.", "typeNotSupported": "The debug session type \"{0}\" is not supported." }, @@ -415,10 +415,10 @@ "expand": "Expand" }, "workspace": { - "deleteCurrentSketch": "Do you want to delete the current sketch?", - "fileNewName": "Name for new file", - "invalidExtension": ".{0} is not a valid extension", - "invalidFilename": "Invalid filename.", + "deleteCurrentSketch": "현재 스케치를 삭제하겠습니까?", + "fileNewName": "새 파일의 이름", + "invalidExtension": ".{0} 유효한 확장자가 아닙니다", + "invalidFilename": "잘못된 파일이름.", "newFileName": "New name for file" } } diff --git a/i18n/my_MM.json b/i18n/my_MM.json index fe68eda65..2e867a6f9 100644 --- a/i18n/my_MM.json +++ b/i18n/my_MM.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "အလိုအလျောက်လှိမ့်ဆွဲခြင်း", "carriageReturn": "လက်နှိပ်စက်အတံပြန်အက္ခရာ", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "စာကြောင်းအသစ်အက္ခရာ", "newLineCarriageReturn": "စာကြောင်းအသစ်နှင့်လက်နှိပ်စက်အတံပြန်အက္ခရာနှစ်ခုလုံး", "noLineEndings": "စာကြောင်းအဆုံးသတ်အက္ခရာမရှိ", diff --git a/i18n/ne.json b/i18n/ne.json index d32dbf792..a4a593a24 100644 --- a/i18n/ne.json +++ b/i18n/ne.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "New Line", "newLineCarriageReturn": "Both NL & CR", "noLineEndings": "No Line Ending", diff --git a/i18n/nl.json b/i18n/nl.json index d0c87f669..6293c79af 100644 --- a/i18n/nl.json +++ b/i18n/nl.json @@ -6,27 +6,27 @@ }, "board": { "board": "Bord{0}", - "boardConfigDialogTitle": "Select Other Board and Port", + "boardConfigDialogTitle": "Selecteer Ander Bord en Poort", "boardInfo": "Bord Informatie", "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.", "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?", - "disconnected": "Disconnected", + "disconnected": "Losgekoppeld", "getBoardInfo": "Verkrijg Bord Informatie", "inSketchbook": "(in Schetsboek)", "installNow": "De \"{0} {1}\" kern moet geïnstalleerd zijn om het huidige geselecteerde \"{2}\" bord. Wilt U dit nu installeren?", "noFQBN": "De FQBN is niet beschikbaar voor het geselecteerde bord \"{0}\". Heeft U de bijhorende kern geïnstalleerd?", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "Geen poorten gevonden", "noPortsSelected": "Geen poorten geselecteerd voor bord: '{0}'.", "noneSelected": "Geen borden geselecteerd.", "openBoardsConfig": "Selecteer een ander bord en poort...", "platformMissing": "Het platform voor het geselecteerde '{0}' bord is niet geïnstalleerd.", "pleasePickBoard": "Gelieve een bord te selecteren dat verbonden is met de door U gekozen poort.", "port": "Poort{0}", - "portLabel": "Port: {0}", + "portLabel": "Poort: {0}", "programmer": "Programmeerapparaat", "reselectLater": "Later opnieuw selecteren", - "searchBoard": "Search board", + "searchBoard": "Bord zoeken", "selectBoard": "Selecteer Bord", "selectBoardForInfo": "Selecteer een bord om bord informatie te bekomen.", "selectPortForInfo": "Selecteer een poort om bord informatie te bekomen.", @@ -36,11 +36,11 @@ }, "boardsManager": "Borden Beheerder", "boardsType": { - "arduinoCertified": "Arduino Certified" + "arduinoCertified": "Arduino gecertificeerd" }, "bootloader": { "burnBootloader": "Bootloader branden", - "burningBootloader": "Burning bootloader...", + "burningBootloader": "Bootloader branden...", "doneBurningBootloader": "Klaar met het branden van de bootloader." }, "burnBootloader": { @@ -64,13 +64,13 @@ "uploadingCertificates": "Certificaten uploaden." }, "checkForUpdates": { - "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", - "promptUpdateBoards": "Updates are available for some of your boards.", - "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "checkForUpdates": "Controleren op Arduino-updates", + "installAll": "Alles installeren", + "noUpdates": "Er zijn geen recente updates beschikbaar.", + "promptUpdateBoards": "Voor sommige van je borden zijn updates beschikbaar.", + "promptUpdateLibraries": "Voor sommige van je bibliotheken zijn updates beschikbaar.", + "updatingBoards": "Borden bijwerken...", + "updatingLibraries": "Bibliotheken bijwerken..." }, "cli-error-parser": { "keyboardError": "'Keyboard' niet gevonden. Bevat je schets de regel '#include '?", @@ -114,8 +114,8 @@ "visitArduinoCloud": "Bezoek Arduino Cloud om Cloud Sketches te maken." }, "common": { - "all": "All", - "contributed": "Contributed", + "all": "Alle", + "contributed": "Bijgedragen", "installManually": "Handmatig installeren", "later": "Later", "noBoardSelected": "Geen bord geselecteerd", @@ -124,19 +124,19 @@ "oldFormat": "De '{0}' gebruikt nog steeds het oude '.pde' formaat. Wil je overstappen naar de nieuwe `.ino` extensie?", "partner": "Partner", "processing": "Verwerken", - "recommended": "Recommended", - "retired": "Retired", + "recommended": "Aanbevolen", + "retired": "Stopgezet", "selectedOn": "aan {0}", "serialMonitor": "Seriële Monitor", "type": "Type", "unknown": "Onbekend", - "updateable": "Updatable" + "updateable": "Bijwerkbaar" }, "compile": { "error": "Compilatiefout: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "Borden in dit pakket:", "by": "door", "filterSearch": "Filter je zoekopdracht...", "install": "INSTALLEREN", @@ -152,11 +152,11 @@ }, "coreContribution": { "copyError": "Foutmeldingen kopiëren", - "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." + "noBoardSelected": "Geen bord geselecteerd. Selecteer je Arduino-bord in het menu Extra > Board." }, "daemon": { - "restart": "Restart Daemon", - "start": "Start Daemon", + "restart": "Daemon opnieuw starten", + "start": "Daemon starten", "stop": "Stop Daemon" }, "debug": { @@ -178,7 +178,7 @@ "increaseIndent": "Inspringing vergroten", "nextError": "Volgende Fout", "previousError": "Vorige Fout", - "revealError": "Reveal Error" + "revealError": "Onthul fout" }, "electron": { "couldNotSave": "Kan de schets niet opslaan. Kopieer uw niet-opgeslagen werk naar uw favoriete teksteditor en start de IDE opnieuw. ", @@ -216,7 +216,7 @@ "visit": "Bezoek Arduino.cc" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Controleren op Arduino IDE-updates", "closeAndInstallButton": "Sluiten en installeren", "closeToInstallNotice": "Sluit de software en installeer de update op je machine.", "downloadButton": "Download", @@ -255,22 +255,22 @@ "zipLibrary": "Bibliotheek" }, "librarySearchProperty": { - "topic": "Topic" + "topic": "Onderwerp" }, "libraryTopic": { - "communication": "Communication", - "dataProcessing": "Data Processing", - "dataStorage": "Data Storage", - "deviceControl": "Device Control", - "display": "Display", - "other": "Other", - "sensors": "Sensors", - "signalInputOutput": "Signal Input/Output", + "communication": "Communicatie", + "dataProcessing": "Gegevensverwerking", + "dataStorage": "Gegevensopslag", + "deviceControl": "Apparaatcontrole", + "display": "Toon", + "other": "Andere", + "sensors": "Sensoren", + "signalInputOutput": "Signaalingang/uitgang", "timing": "Timing", - "uncategorized": "Uncategorized" + "uncategorized": "Geen categorie" }, "libraryType": { - "installed": "Installed" + "installed": "Geïnstalleerd" }, "menu": { "advanced": "Geavanceerd", @@ -290,7 +290,7 @@ "automatic": "Automatisch", "board.certificates": "Lijst met certificaten die kunnen worden geüpload naar borden", "browse": "Bladeren", - "checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", + "checkForUpdate": "Meldingen ontvangen van beschikbare updates voor de IDE, borden en bibliotheken. Vereist een IDE herstart na wijziging. Standaard waar.", "choose": "Kies", "cli.daemonDebug": "Schakel debug logging van de gRPC aanroepen naar de Arduino CLI in. Een herstart van de IDE is nodig om deze instelling in werking te laten treden. Standaard Onwaar.", "cloud.enabled": "Waar als de schets synchronisatie functies zijn ingeschakeld. Standaard ingesteld op waar.", @@ -315,7 +315,7 @@ "invalid.sketchbook.location": "Ongeldige schetsboek locatie: {0}", "invalid.theme": "Ongeldig Thema.", "language.log": "Waar als de Arduino Taal Server log bestanden moet genereren in de schets map. Anders onwaar. Standaard ingesteld op onwaar.", - "language.realTimeDiagnostics": "If true, the language server provides real-time diagnostics when typing in the editor. It's false by default.", + "language.realTimeDiagnostics": "Indien waar, geeft de taalserver real-time diagnostiek tijdens het typen in de editor. Standaard is dit onwaar.", "manualProxy": "Manuele proxy configuratie", "network": "Netwerk", "newSketchbookLocation": "Selecteer een nieuwe schetsboeklocatie.", @@ -336,12 +336,12 @@ "serial": { "autoscroll": "Automatisch scrollen", "carriageReturn": "Carriage Return", - "message": "Bericht ({0} + Enter om bericht te verzenden naar '{1}' op '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nieuwe Regel", "newLineCarriageReturn": "Zowel NL & CR", "noLineEndings": "Geen RegelEinde", "notConnected": "Niet verbonden. Kies een bord en een poort om automatisch te verbinden.", - "openSerialPlotter": "Serial Plotter", + "openSerialPlotter": "Seriële plotter", "timestamp": "Tijdstempel", "toggleTimestamp": "Tijdstempel omschakelen" }, @@ -349,7 +349,7 @@ "archiveSketch": "Archiveer Schets", "cantOpen": "Er bestaat al een map met de naam \"{0}\". Kan schets niet openen.", "close": "Weet je zeker dat je de schets wilt sluiten?", - "compile": "Compiling sketch...", + "compile": "Sketch compileren...", "configureAndUpload": "Configureren en uploaden", "createdArchive": "Archief '{0}' gemaakt.", "doneCompiling": "Klaar met compileren.", @@ -371,7 +371,7 @@ "titleSketchbook": "Schetsboek", "upload": "Uploaden", "uploadUsingProgrammer": "Uploaden met behulp van Programmeerapparaat", - "uploading": "Uploading...", + "uploading": "Uploaden...", "userFieldsNotFoundError": "Kan gebruiker veld van verbonden bord niet vinden", "verify": "Verifiëren", "verifyOrCompile": "Verifiëren/Compileren" @@ -386,7 +386,7 @@ }, "userFields": { "cancel": "Annuleer", - "enterField": "Enter {0}", + "enterField": "Ga naar {0}", "upload": "Uploaden" } }, diff --git a/i18n/pl.json b/i18n/pl.json index a506aecf5..41f14afc6 100644 --- a/i18n/pl.json +++ b/i18n/pl.json @@ -6,7 +6,7 @@ }, "board": { "board": "Płytka{0}", - "boardConfigDialogTitle": "Select Other Board and Port", + "boardConfigDialogTitle": "Wybierz inną płytkę i port", "boardInfo": "Informacje o płytce", "configDialog1": "Wybierz płytkę oraz port, aby wgrać szkic.", "configDialog2": "Jeżeli wybierzesz płytkę, ale nie wybierzesz portu to nie będziesz mógł wgrywać szkicy, ale nadal możesz je kompilować.", @@ -16,7 +16,7 @@ "inSketchbook": "(w Szkicowniku)", "installNow": "Jądro \" 1{0} 2{1} \" musi zostać zainstalowane dla wybranej płytki \"{2}\". Czy chcesz zainstalować je teraz?", "noFQBN": "FQBN jest niedostępny dla wybranej płytki \" 1{0} \". Sprawdź czy zainstalowane jądro jest prawidłowe.", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "Nie wykryto portów", "noPortsSelected": "Nie wybrano portu dla płytki: '{0}'.", "noneSelected": "Nie wybrano płytki.", "openBoardsConfig": "Wybierz inną płytkę i port...", @@ -26,7 +26,7 @@ "portLabel": "Port: 1{0}", "programmer": "Programator", "reselectLater": "Wybierz ponownie później", - "searchBoard": "Search board", + "searchBoard": "Szukaj płytki", "selectBoard": "Wybierz płytkę", "selectBoardForInfo": "Wybierz płytkę, aby uzyskać o niej informacje.", "selectPortForInfo": "Wybierz port, aby uzyskać informacje o płytce.", @@ -36,7 +36,7 @@ }, "boardsManager": "Menedżer Płytek", "boardsType": { - "arduinoCertified": "Arduino Certified" + "arduinoCertified": "Certyfikat Arduino" }, "bootloader": { "burnBootloader": "Wypal Bootloader'a", @@ -64,13 +64,13 @@ "uploadingCertificates": "Przesyłanie certyfikatów." }, "checkForUpdates": { - "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", - "promptUpdateBoards": "Updates are available for some of your boards.", - "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "checkForUpdates": "Sprawdź uaktualnienia dla Arduino IDE.", + "installAll": "Zainstaluj wszystko", + "noUpdates": "Brak nowych aktualizacji do zainstalowania", + "promptUpdateBoards": "Dostępne nowe aktualizację dla płytek.", + "promptUpdateLibraries": "Dostępne aktualizacje dla bibliotek.", + "updatingBoards": "Aktualizuję płytki...", + "updatingLibraries": "Aktualizuję biblioteki..." }, "cli-error-parser": { "keyboardError": "Nie znaleziono klawiatury. Czy szkic posiada linię kodu: '#include '?", @@ -114,8 +114,8 @@ "visitArduinoCloud": "Odwiedź chmurę Arduino, aby tworzyć szkice w chmurze." }, "common": { - "all": "All", - "contributed": "Contributed", + "all": "Wszytko", + "contributed": "Przyczynił się", "installManually": "Zainstaluj ręcznie", "later": "Później", "noBoardSelected": "Nie wybrano płytki", @@ -124,19 +124,19 @@ "oldFormat": "'{0}' nadal używa starego formatu `.pde`. Czy chcesz się przełączyć na nowe rozszerzenie `.ino`?", "partner": "Partner", "processing": "Przetwarzanie", - "recommended": "Recommended", - "retired": "Retired", + "recommended": "Zalecane", + "retired": "Odosobniony", "selectedOn": "na 1{0}", "serialMonitor": "Monitor portu szeregowego", - "type": "Type", + "type": "Typ", "unknown": "Nieznany", - "updateable": "Updatable" + "updateable": "Możliwość aktualizacji" }, "compile": { "error": "Błąd kompilacji: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "Płytka dołączona w pakiecie:", "by": "przez", "filterSearch": "Filtruj przeszukiwanie....", "install": "ZAINSTALUJ", @@ -152,7 +152,7 @@ }, "coreContribution": { "copyError": "Kopiuj komunikat błędu", - "noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." + "noBoardSelected": "Nie wybrano płytki. Proszę wybierz płytkę z Narzędzia > Lista płytek" }, "daemon": { "restart": "Restartuj Daemon", @@ -178,7 +178,7 @@ "increaseIndent": "Zwiększ wcięcie", "nextError": "Następny Błąd", "previousError": "Poprzedni Błąd", - "revealError": "Reveal Error" + "revealError": "Pokaż Error" }, "electron": { "couldNotSave": "Wszystkie niezapisane zmiany zostaną utracone.", @@ -216,7 +216,7 @@ "visit": "Odwiedź Arduino.cc" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Sprawdź uaktualnienia dla Arduino IDE.", "closeAndInstallButton": "Wyjdź i instaluj", "closeToInstallNotice": "Zamknij aplikacje i zainstaluj aktualizacje.", "downloadButton": "Pobierz", @@ -255,22 +255,22 @@ "zipLibrary": "Biblioteka" }, "librarySearchProperty": { - "topic": "Topic" + "topic": "Temat" }, "libraryTopic": { - "communication": "Communication", - "dataProcessing": "Data Processing", - "dataStorage": "Data Storage", - "deviceControl": "Device Control", - "display": "Display", - "other": "Other", - "sensors": "Sensors", - "signalInputOutput": "Signal Input/Output", - "timing": "Timing", - "uncategorized": "Uncategorized" + "communication": "Komunikacja", + "dataProcessing": "Przetwarzanie danych", + "dataStorage": "Magazyn danych", + "deviceControl": "Kontrola urządzenia", + "display": "Wyświetlacz", + "other": "Inne", + "sensors": "Czujniki", + "signalInputOutput": "Sygnał Wejściowy/Wyjściowy", + "timing": "Wyczucie czasu", + "uncategorized": "Brak kategorii" }, "libraryType": { - "installed": "Installed" + "installed": "Zainstalowane" }, "menu": { "advanced": "Niewłaściwy schemat.", @@ -290,7 +290,7 @@ "automatic": "Automatyczne", "board.certificates": "Lista certyfikatów, które można przesłać do płytki", "browse": "Przeglądaj", - "checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", + "checkForUpdate": "Otrzymano powiadomienie o dostępności nowych aktualizacji dla IDE, płytek i bibliotek. Wymaga ponownego uruchomienia IDE po zmianie. Domyślnie ustawione na tak", "choose": "Wybierz", "cli.daemonDebug": "Włącz rejestrowanie debugowania wywołań gRPC do interfejsu Arduino CLI. Aby to ustawienie zaczęło obowiązywać, konieczne jest ponowne uruchomienie środowiska IDE. Domyślnie jest to fałszywy.", "cloud.enabled": "Prawdziwy jeśli włączone są funkcje synchronizacji szkicu. Wartość domyślna to prawdziwy.", @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoscroll", "carriageReturn": "Powrót karetki", - "message": "Wiadomość({0} + Enter aby wysłać wiadomość do '{1}' on '{2}')", + "message": "Message(Kliknij aby wysłać wiadomość do '{0}' od '{1}')", "newLine": "Nowa linia", "newLineCarriageReturn": "Nowa linia i powrót karetki", "noLineEndings": "Brak końca linii", @@ -386,7 +386,7 @@ }, "userFields": { "cancel": "Anuluj", - "enterField": "Enter {0}", + "enterField": "Kliknij {0}", "upload": "Prześlij" } }, diff --git a/i18n/pt.json b/i18n/pt.json index ae6b1d45b..f27afceb3 100644 --- a/i18n/pt.json +++ b/i18n/pt.json @@ -16,7 +16,7 @@ "inSketchbook": "(no Sketchbook)", "installNow": "O núcleo \"{0} {1}\" deve ser instalado para a placa \"{2}\" atualmente selecionada. Quer instalar agora?", "noFQBN": "O FQBN não está disponível para a placa selecionada \"{0}\". Você tem o núcleo correspondente instalado?", - "noPortsDiscovered": "No ports discovered", + "noPortsDiscovered": "Nenhuma porta detectada", "noPortsSelected": "Nenhuma porta selecionada para placa: '{0}'.", "noneSelected": "Nenhuma placa selecionada.", "openBoardsConfig": "Selecione outra placa e porta...", @@ -26,7 +26,7 @@ "portLabel": "Porta{0}", "programmer": "Programador/Gravador", "reselectLater": "Selecionar novamente mais tarde", - "searchBoard": "Search board", + "searchBoard": "Procurar placa", "selectBoard": "Selecionar Placa", "selectBoardForInfo": "Selecione uma placa para obter informações sobre ela.", "selectPortForInfo": "Selecione uma porta para obter informações sobre a placa.", @@ -65,12 +65,12 @@ }, "checkForUpdates": { "checkForUpdates": "Check for Arduino Updates", - "installAll": "Install All", - "noUpdates": "There are no recent updates available.", + "installAll": "Instalar todas", + "noUpdates": "Não há atualizações recentes disponíveis.", "promptUpdateBoards": "Updates are available for some of your boards.", "promptUpdateLibraries": "Updates are available for some of your libraries.", - "updatingBoards": "Updating boards...", - "updatingLibraries": "Updating libraries..." + "updatingBoards": "Atualizando placas...", + "updatingLibraries": "Atualizando bibliotecas..." }, "cli-error-parser": { "keyboardError": "'Keyboard' não encontrado. O seu sketch inclue a linha '#include '?", @@ -115,7 +115,7 @@ }, "common": { "all": "All", - "contributed": "Contributed", + "contributed": "Contribuído", "installManually": "Instalar Manualmente", "later": "Depois", "noBoardSelected": "Nenhuma placa selecionada.", @@ -124,11 +124,11 @@ "oldFormat": "O '{0}' ainda utiliza o formato antigo `.pde`. Deseja mudar para a nova extensão `.ino`?", "partner": "Partner", "processing": "Em processamento", - "recommended": "Recommended", + "recommended": "Recomendado", "retired": "Retired", "selectedOn": "em {0}", "serialMonitor": "Monitor Serial", - "type": "Type", + "type": "Tipo", "unknown": "Desconhecido", "updateable": "Updatable" }, @@ -136,7 +136,7 @@ "error": "Erro de compilação: {0}" }, "component": { - "boardsIncluded": "Boards included in this package:", + "boardsIncluded": "Placas incluídas nesse pacote:", "by": "por", "filterSearch": "Filtrar a sua pesquisa…", "install": "Instalar", @@ -216,7 +216,7 @@ "visit": "Visitar Arduino.cc" }, "ide-updater": { - "checkForUpdates": "Check for Arduino IDE Updates", + "checkForUpdates": "Checar atualizações da Arduino IDE", "closeAndInstallButton": "Fechar e instalar ", "closeToInstallNotice": "Feche o software e instale a atualização em sua máquina. ", "downloadButton": "Baixar", @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Avanço automático de linha", "carriageReturn": "Retorno de linha", - "message": "Mensagem ({0} + Enter para enviar mensagem para '{1}' em '{2}'", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Nova linha", "newLineCarriageReturn": "Nova linha e retorno de linha", "noLineEndings": "Sem final de linha", diff --git a/i18n/ro.json b/i18n/ro.json index adbb37415..db489e75a 100644 --- a/i18n/ro.json +++ b/i18n/ro.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Autoderulare", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Linie Nouă", "newLineCarriageReturn": "NL și CR", "noLineEndings": "No Line Ending", diff --git a/i18n/ru.json b/i18n/ru.json index a992ee54d..3e0649b10 100644 --- a/i18n/ru.json +++ b/i18n/ru.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Автопрокрутка", "carriageReturn": "CR Возврат каретки", - "message": "Сообщение ({0} + Enter, чтобы отправить сообщение для '{1}' на '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Новая строка", "newLineCarriageReturn": "NL & CR", "noLineEndings": "Нет конца строки", diff --git a/i18n/sr.json b/i18n/sr.json index 1b0eed34e..c37c7f447 100644 --- a/i18n/sr.json +++ b/i18n/sr.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Аутоматско скроловање", "carriageReturn": "Carriage Return", - "message": "Message ({0} + Enter to send message to '{1}' on '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Нова линија", "newLineCarriageReturn": "И нова линија и CR", "noLineEndings": "Без завршетка линије", diff --git a/i18n/tr.json b/i18n/tr.json index 6df12a641..9363b9d03 100644 --- a/i18n/tr.json +++ b/i18n/tr.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Otomatik Kaydırma", "carriageReturn": "Satır Başı", - "message": "Mesaj ({0} + Mesaj göndermek için Enter '{1}' / '{2}')", + "message": "Mesaj ('{0}' - '{1}''a mesaj göndermek için Enter'a basın)", "newLine": "Yeni Satır", "newLineCarriageReturn": "NL ve CR ile Birlikte", "noLineEndings": "Satır Sonu Yok", diff --git a/i18n/vi.json b/i18n/vi.json index e988ac844..8a1601a6e 100644 --- a/i18n/vi.json +++ b/i18n/vi.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "Tự động cuộn", "carriageReturn": "Về đầu dòng", - "message": "Nhắn tin ({0} + Enter để gửi tin nhắn tới '{1}' trên cổng '{2}')", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "Dòng mới", "newLineCarriageReturn": "Vừa xuống dòng & về đầu dòng", "noLineEndings": "Không có kết thúc dòng", diff --git a/i18n/zh.json b/i18n/zh.json index dcb23bdab..a2d28e6b8 100644 --- a/i18n/zh.json +++ b/i18n/zh.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "自动滚屏", "carriageReturn": "回车", - "message": "消息({0}+Enter 将消息发送到 {2} 上的 {1})", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "换行", "newLineCarriageReturn": "换行 和 回车 两者都是", "noLineEndings": "没有结束符", diff --git a/i18n/zh_TW.json b/i18n/zh_TW.json index cbb5194be..f5a6f667f 100644 --- a/i18n/zh_TW.json +++ b/i18n/zh_TW.json @@ -336,7 +336,7 @@ "serial": { "autoscroll": "自動滾頁面", "carriageReturn": "回車", - "message": "訊息 (1{0}+Enter將訊息發送到'{2}'上的2{1})", + "message": "Message (Enter to send message to '{0}' on '{1}')", "newLine": "換行", "newLineCarriageReturn": "兩者都是NL和CR", "noLineEndings": "沒有斷行符號", diff --git a/package.json b/package.json index 9800d23e7..92b49adfe 100644 --- a/package.json +++ b/package.json @@ -78,16 +78,21 @@ "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", + "vscode-language-pack-bg": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-bg/1.48.3/file/MS-CEINTL.vscode-language-pack-bg-1.48.3.vsix", + "vscode-language-pack-cs": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-cs/1.53.2/file/MS-CEINTL.vscode-language-pack-cs-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-es": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-es/1.53.2/file/MS-CEINTL.vscode-language-pack-es-1.53.2.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-hu": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-hu/1.48.3/file/MS-CEINTL.vscode-language-pack-hu-1.48.3.vsix", + "vscode-language-pack-it": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-it/1.53.2/file/MS-CEINTL.vscode-language-pack-it-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-ko": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ko/1.53.2/file/MS-CEINTL.vscode-language-pack-ko-1.53.2.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.69.0/file/MS-CEINTL.vscode-language-pack-fr-1.69.0.vsix", - "vscode-language-pack-zh-hans": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.69.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.69.0.vsix", - "vscode-language-pack-de": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-de/1.69.0/file/MS-CEINTL.vscode-language-pack-de-1.69.0.vsix", - "vscode-language-pack-ja": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ja/1.69.0/file/MS-CEINTL.vscode-language-pack-ja-1.69.0.vsix", - "vscode-language-pack-tr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-tr/1.69.0/file/MS-CEINTL.vscode-language-pack-tr-1.69.0.vsix", - "vscode-language-pack-it": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-it/1.69.0/file/MS-CEINTL.vscode-language-pack-it-1.69.0.vsix", - "vscode-language-pack-ru": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ru/1.69.0/file/MS-CEINTL.vscode-language-pack-ru-1.69.0.vsix", - "vscode-language-pack-es": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-es/1.69.0/file/MS-CEINTL.vscode-language-pack-es-1.69.0.vsix", - "vscode-language-pack-pt-BR": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pt-BR/1.69.0/file/MS-CEINTL.vscode-language-pack-pt-BR-1.69.0.vsix", - "vscode-language-pack-cs": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-cs/1.69.0/file/MS-CEINTL.vscode-language-pack-cs-1.69.0.vsix" + "vscode-language-pack-pl": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pl/1.53.2/file/MS-CEINTL.vscode-language-pack-pl-1.53.2.vsix", + "vscode-language-pack-pt-BR": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pt-BR/1.53.2/file/MS-CEINTL.vscode-language-pack-pt-BR-1.53.2.vsix", + "vscode-language-pack-ru": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ru/1.53.2/file/MS-CEINTL.vscode-language-pack-ru-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", + "vscode-language-pack-uk": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-uk/1.48.3/file/MS-CEINTL.vscode-language-pack-uk-1.48.3.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" } }