mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-07-27 05:06:42 +00:00
Fixed missing translations
Aligned the languge pack versions. Closes #1431 Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
This commit is contained in:
parent
707f3bef61
commit
9ef04bb8d6
@ -53,8 +53,6 @@ import {
|
|||||||
DockPanelRenderer as TheiaDockPanelRenderer,
|
DockPanelRenderer as TheiaDockPanelRenderer,
|
||||||
TabBarRendererFactory,
|
TabBarRendererFactory,
|
||||||
ContextMenuRenderer,
|
ContextMenuRenderer,
|
||||||
createTreeContainer,
|
|
||||||
TreeWidget,
|
|
||||||
} from '@theia/core/lib/browser';
|
} from '@theia/core/lib/browser';
|
||||||
import { MenuContribution } from '@theia/core/lib/common/menu';
|
import { MenuContribution } from '@theia/core/lib/common/menu';
|
||||||
import {
|
import {
|
||||||
@ -207,12 +205,8 @@ import { WorkspaceVariableContribution as TheiaWorkspaceVariableContribution } f
|
|||||||
import { WorkspaceVariableContribution } from './theia/workspace/workspace-variable-contribution';
|
import { WorkspaceVariableContribution } from './theia/workspace/workspace-variable-contribution';
|
||||||
import { DebugConfigurationManager } from './theia/debug/debug-configuration-manager';
|
import { DebugConfigurationManager } from './theia/debug/debug-configuration-manager';
|
||||||
import { DebugConfigurationManager as TheiaDebugConfigurationManager } from '@theia/debug/lib/browser/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 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 { 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 { MonacoEditorProvider } from './theia/monaco/monaco-editor-provider';
|
||||||
import {
|
import {
|
||||||
MonacoEditorFactory,
|
MonacoEditorFactory,
|
||||||
@ -605,9 +599,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
|||||||
bind(MonacoEditorProvider).toSelf().inSingletonScope();
|
bind(MonacoEditorProvider).toSelf().inSingletonScope();
|
||||||
rebind(TheiaMonacoEditorProvider).toService(MonacoEditorProvider);
|
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.
|
// Disabled reference counter in the editor manager to avoid opening the same editor (with different opener options) multiple times.
|
||||||
bind(EditorManager).toSelf().inSingletonScope();
|
bind(EditorManager).toSelf().inSingletonScope();
|
||||||
rebind(TheiaEditorManager).toService(EditorManager);
|
rebind(TheiaEditorManager).toService(EditorManager);
|
||||||
@ -617,17 +608,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
|
|||||||
.to(SearchInWorkspaceFactory)
|
.to(SearchInWorkspaceFactory)
|
||||||
.inSingletonScope();
|
.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
|
// Show a disconnected status bar, when the daemon is not available
|
||||||
bind(ApplicationConnectionStatusContribution).toSelf().inSingletonScope();
|
bind(ApplicationConnectionStatusContribution).toSelf().inSingletonScope();
|
||||||
rebind(TheiaApplicationConnectionStatusContribution).toService(
|
rebind(TheiaApplicationConnectionStatusContribution).toService(
|
||||||
|
@ -259,9 +259,12 @@ export class BoardsConfig extends React.Component<
|
|||||||
override render(): React.ReactNode {
|
override render(): React.ReactNode {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{this.renderContainer('boards', this.renderBoards.bind(this))}
|
|
||||||
{this.renderContainer(
|
{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.renderPorts.bind(this),
|
||||||
this.renderPortsFooter.bind(this)
|
this.renderPortsFooter.bind(this)
|
||||||
)}
|
)}
|
||||||
@ -384,7 +387,9 @@ export class BoardsConfig extends React.Component<
|
|||||||
defaultChecked={this.state.showAllPorts}
|
defaultChecked={this.state.showAllPorts}
|
||||||
onChange={this.toggleFilterPorts}
|
onChange={this.toggleFilterPorts}
|
||||||
/>
|
/>
|
||||||
<span>Show all ports</span>
|
<span>
|
||||||
|
{nls.localize('arduino/board/showAllPorts', 'Show all ports')}
|
||||||
|
</span>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
@ -5,7 +5,6 @@ import {
|
|||||||
DisposableCollection,
|
DisposableCollection,
|
||||||
Disposable,
|
Disposable,
|
||||||
} from '@theia/core/lib/common/disposable';
|
} from '@theia/core/lib/common/disposable';
|
||||||
import { firstToUpperCase } from '../../common/utils';
|
|
||||||
import { BoardsConfig } from '../boards/boards-config';
|
import { BoardsConfig } from '../boards/boards-config';
|
||||||
import { MainMenuManager } from '../../common/main-menu-manager';
|
import { MainMenuManager } from '../../common/main-menu-manager';
|
||||||
import { BoardsListWidget } from '../boards/boards-list-widget';
|
import { BoardsListWidget } from '../boards/boards-list-widget';
|
||||||
@ -267,7 +266,11 @@ PID: ${PID}`;
|
|||||||
];
|
];
|
||||||
const placeholder = new PlaceholderMenuNode(
|
const placeholder = new PlaceholderMenuNode(
|
||||||
menuPath,
|
menuPath,
|
||||||
`${firstToUpperCase(protocol)} ports`,
|
nls.localize(
|
||||||
|
'arduino/board/typeOfPorts',
|
||||||
|
'{0} ports',
|
||||||
|
Port.Protocols.protocolLabel(protocol)
|
||||||
|
),
|
||||||
{ order: protocolOrder.toString() }
|
{ order: protocolOrder.toString() }
|
||||||
);
|
);
|
||||||
this.menuModelRegistry.registerMenuNode(menuPath, placeholder);
|
this.menuModelRegistry.registerMenuNode(menuPath, placeholder);
|
||||||
|
@ -10,6 +10,7 @@ import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/fil
|
|||||||
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
import { DisposableCollection } from '@theia/core/lib/common/disposable';
|
||||||
import {
|
import {
|
||||||
AdditionalUrls,
|
AdditionalUrls,
|
||||||
|
CompilerWarnings,
|
||||||
CompilerWarningLiterals,
|
CompilerWarningLiterals,
|
||||||
Network,
|
Network,
|
||||||
ProxySettings,
|
ProxySettings,
|
||||||
@ -260,7 +261,7 @@ export class SettingsComponent extends React.Component<
|
|||||||
>
|
>
|
||||||
{CompilerWarningLiterals.map((value) => (
|
{CompilerWarningLiterals.map((value) => (
|
||||||
<option key={value} value={value}>
|
<option key={value} value={value}>
|
||||||
{value}
|
{CompilerWarnings.labelOf(value)}
|
||||||
</option>
|
</option>
|
||||||
))}
|
))}
|
||||||
</select>
|
</select>
|
||||||
@ -398,10 +399,22 @@ export class SettingsComponent extends React.Component<
|
|||||||
</form>
|
</form>
|
||||||
<div className="flex-line proxy-settings">
|
<div className="flex-line proxy-settings">
|
||||||
<div className="column">
|
<div className="column">
|
||||||
<div className="flex-line">Host name:</div>
|
<div className="flex-line">{`${nls.localize(
|
||||||
<div className="flex-line">Port number:</div>
|
'arduino/preferences/proxySettings/hostname',
|
||||||
<div className="flex-line">Username:</div>
|
'Host name'
|
||||||
<div className="flex-line">Password:</div>
|
)}:`}</div>
|
||||||
|
<div className="flex-line">{`${nls.localize(
|
||||||
|
'arduino/preferences/proxySettings/port',
|
||||||
|
'Port number'
|
||||||
|
)}:`}</div>
|
||||||
|
<div className="flex-line">{`${nls.localize(
|
||||||
|
'arduino/preferences/proxySettings/username',
|
||||||
|
'Username'
|
||||||
|
)}:`}</div>
|
||||||
|
<div className="flex-line">{`${nls.localize(
|
||||||
|
'arduino/preferences/proxySettings/password',
|
||||||
|
'Password'
|
||||||
|
)}:`}</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="column stretch">
|
<div className="column stretch">
|
||||||
<div className="flex-line">
|
<div className="flex-line">
|
||||||
|
@ -18,6 +18,7 @@ import {
|
|||||||
CLOSE_PLOTTER_WINDOW,
|
CLOSE_PLOTTER_WINDOW,
|
||||||
SHOW_PLOTTER_WINDOW,
|
SHOW_PLOTTER_WINDOW,
|
||||||
} from '../../../common/ipc-communication';
|
} from '../../../common/ipc-communication';
|
||||||
|
import { nls } from '@theia/core/lib/common/nls';
|
||||||
|
|
||||||
const queryString = require('query-string');
|
const queryString = require('query-string');
|
||||||
|
|
||||||
@ -107,7 +108,12 @@ export class PlotterFrontendContribution extends Contribution {
|
|||||||
if (wsPort) {
|
if (wsPort) {
|
||||||
this.open(wsPort);
|
this.open(wsPort);
|
||||||
} else {
|
} else {
|
||||||
this.messageService.error(`Couldn't open serial plotter`);
|
this.messageService.error(
|
||||||
|
nls.localize(
|
||||||
|
'arduino/contributions/plotter/couldNotOpen',
|
||||||
|
"Couldn't open serial plotter"
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,13 +111,15 @@
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
max-height: calc(1em + 4px);
|
max-height: calc(1em + 4px);
|
||||||
color: var(--theia-button-foreground);
|
color: var(--theia-button-foreground);
|
||||||
content: 'INSTALLED';
|
content: attr(install);
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
.component-list-item .header .installed:hover:before {
|
.component-list-item .header .installed:hover:before {
|
||||||
background-color: var(--theia-button-foreground);
|
background-color: var(--theia-button-foreground);
|
||||||
color: var(--theia-button-background);
|
color: var(--theia-button-background);
|
||||||
content: 'UNINSTALL';
|
content: attr(uninstall);
|
||||||
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
|
|
||||||
.component-list-item[min-width~="170px"] .footer {
|
.component-list-item[min-width~="170px"] .footer {
|
||||||
|
@ -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<URI> {
|
|
||||||
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'));
|
|
||||||
}
|
|
||||||
}
|
|
@ -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 (
|
|
||||||
<div className="glob-field">
|
|
||||||
<div className="label">{'files to ' + kind}</div>
|
|
||||||
<input
|
|
||||||
className="theia-input"
|
|
||||||
type="text"
|
|
||||||
size={1}
|
|
||||||
defaultValue={value}
|
|
||||||
id={kind + '-glob-field'}
|
|
||||||
onKeyUp={(e) => {
|
|
||||||
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
|
|
||||||
}
|
|
||||||
></input>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -55,7 +55,14 @@ export class ListItemRenderer<T extends ArduinoComponent> {
|
|||||||
item.installedVersion
|
item.installedVersion
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
<span className="installed" onClick={onClickUninstall} />
|
<span
|
||||||
|
className="installed"
|
||||||
|
onClick={onClickUninstall}
|
||||||
|
{...{
|
||||||
|
install: nls.localize('arduino/component/install', 'INSTALL'),
|
||||||
|
uninstall: nls.localize('arduino/component/uninstall', 'Uninstall'),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -285,6 +285,29 @@ export namespace Port {
|
|||||||
return false;
|
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<KnownProtocol, string> = {
|
||||||
|
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 {
|
export interface BoardsPackage extends ArduinoComponent {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { nls } from '@theia/core/lib/common/nls';
|
||||||
import { ApplicationError } from '@theia/core/lib/common/application-error';
|
import { ApplicationError } from '@theia/core/lib/common/application-error';
|
||||||
import type {
|
import type {
|
||||||
Location,
|
Location,
|
||||||
@ -18,6 +19,17 @@ export const CompilerWarningLiterals = [
|
|||||||
'All',
|
'All',
|
||||||
] as const;
|
] as const;
|
||||||
export type CompilerWarnings = typeof CompilerWarningLiterals[number];
|
export type CompilerWarnings = typeof CompilerWarningLiterals[number];
|
||||||
|
export namespace CompilerWarnings {
|
||||||
|
export function labelOf(warning: CompilerWarnings): string {
|
||||||
|
return CompilerWarningLabels[warning];
|
||||||
|
}
|
||||||
|
const CompilerWarningLabels: Record<CompilerWarnings, string> = {
|
||||||
|
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 namespace CoreError {
|
||||||
export interface ErrorLocationRef {
|
export interface ErrorLocationRef {
|
||||||
readonly message: string;
|
readonly message: string;
|
||||||
|
@ -3,150 +3,45 @@ import {
|
|||||||
LocalizationRegistry,
|
LocalizationRegistry,
|
||||||
} from '@theia/core/lib/node/i18n/localization-contribution';
|
} from '@theia/core/lib/node/i18n/localization-contribution';
|
||||||
import { injectable } from '@theia/core/shared/inversify';
|
import { injectable } from '@theia/core/shared/inversify';
|
||||||
|
import { join } from 'path';
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
export class ArduinoLocalizationContribution
|
export class ArduinoLocalizationContribution
|
||||||
implements LocalizationContribution
|
implements LocalizationContribution
|
||||||
{
|
{
|
||||||
|
// 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'],
|
||||||
|
['pl'],
|
||||||
|
['pt-br', 'pt'],
|
||||||
|
['ru'],
|
||||||
|
['tr'],
|
||||||
|
['uk', 'uk_UA'],
|
||||||
|
['zh-cn', 'zh'],
|
||||||
|
];
|
||||||
|
|
||||||
async registerLocalizations(registry: LocalizationRegistry): Promise<void> {
|
async registerLocalizations(registry: LocalizationRegistry): Promise<void> {
|
||||||
|
for (const [locale, jsonFilename] of this.locales) {
|
||||||
registry.registerLocalizationFromRequire(
|
registry.registerLocalizationFromRequire(
|
||||||
'af',
|
locale,
|
||||||
require('../../../build/i18n/af.json')
|
require(join(
|
||||||
);
|
__dirname,
|
||||||
|
`../../../build/i18n/${jsonFilename ?? locale}.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')
|
|
||||||
);
|
|
||||||
|
|
||||||
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')
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -23,7 +23,7 @@ export class LocalizationBackendContribution extends TheiaLocalizationBackendCon
|
|||||||
app.get('/i18n/:locale', async (req, res) => {
|
app.get('/i18n/:locale', async (req, res) => {
|
||||||
let locale = req.params.locale;
|
let locale = req.params.locale;
|
||||||
/*
|
/*
|
||||||
Waiting for the deploy of the language plugins is neecessary to avoid checking the available
|
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
|
languages before they're finished to be loaded: https://github.com/eclipse-theia/theia/issues/11471
|
||||||
*/
|
*/
|
||||||
const start = performance.now();
|
const start = performance.now();
|
||||||
|
@ -17,6 +17,53 @@ const {
|
|||||||
FrontendApplicationConfigProvider,
|
FrontendApplicationConfigProvider,
|
||||||
} = require('@theia/core/lib/browser/frontend-application-config-provider');
|
} = 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.
|
// 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.
|
// 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.
|
// 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.
|
// 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.
|
// 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 preloader = require('@theia/core/lib/browser/preloader');
|
||||||
const originalPreload = preloader.preload;
|
|
||||||
preloader.preload = async function () {
|
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 { MonacoThemingService } = require('@theia/monaco/lib/browser/monaco-theming-service');
|
||||||
const { MonacoThemeServiceIsReady } = require('arduino-ide-extension/lib/browser/utils/window');
|
const { MonacoThemeServiceIsReady } = require('arduino-ide-extension/lib/browser/utils/window');
|
||||||
const { Deferred } = require('@theia/core/lib/common/promise-util');
|
const { Deferred } = require('@theia/core/lib/common/promise-util');
|
||||||
@ -42,7 +95,6 @@ preloader.preload = async function () {
|
|||||||
await this.restore();
|
await this.restore();
|
||||||
ready.resolve();
|
ready.resolve();
|
||||||
}.bind(MonacoThemingService);
|
}.bind(MonacoThemingService);
|
||||||
return originalPreload();
|
|
||||||
}.bind(preloader);
|
}.bind(preloader);
|
||||||
|
|
||||||
const lightTheme = 'arduino-theme';
|
const lightTheme = 'arduino-theme';
|
||||||
|
@ -137,24 +137,5 @@
|
|||||||
"path": "arduino-ide/nightly"
|
"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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,8 +123,8 @@
|
|||||||
// Save some time: no need to build the projects that are not needed in final app. Currently unused. |
|
// Save some time: no need to build the projects that are not needed in final app. Currently unused. |
|
||||||
//---------------------------------------------------------------------------------------------------+
|
//---------------------------------------------------------------------------------------------------+
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
let pkg = require('../working-copy/package.json');
|
const rootPackageJson = require('../working-copy/package.json');
|
||||||
const workspaces = pkg.workspaces;
|
const workspaces = rootPackageJson.workspaces;
|
||||||
// We cannot remove the `electron-app`. Otherwise, there is not way to collect the unused dependencies.
|
// We cannot remove the `electron-app`. Otherwise, there is not way to collect the unused dependencies.
|
||||||
const dependenciesToRemove = [];
|
const dependenciesToRemove = [];
|
||||||
for (const dependencyToRemove of dependenciesToRemove) {
|
for (const dependencyToRemove of dependenciesToRemove) {
|
||||||
@ -133,10 +133,10 @@
|
|||||||
workspaces.splice(index, 1);
|
workspaces.splice(index, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pkg.workspaces = workspaces;
|
rootPackageJson.workspaces = workspaces;
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
path('..', workingCopy, 'package.json'),
|
path('..', workingCopy, 'package.json'),
|
||||||
JSON.stringify(pkg, null, 2)
|
JSON.stringify(rootPackageJson, null, 2)
|
||||||
);
|
);
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------------+
|
//-------------------------------------------------------------------------------------------------+
|
||||||
@ -169,13 +169,13 @@
|
|||||||
if (extension !== 'arduino-ide-extension') {
|
if (extension !== 'arduino-ide-extension') {
|
||||||
// Do not unlink self.
|
// Do not unlink self.
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
pkg = require(`../working-copy/${extension}/package.json`);
|
rootPackageJson = require(`../working-copy/${extension}/package.json`);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
pkg.dependencies['arduino-ide-extension'] =
|
rootPackageJson.dependencies['arduino-ide-extension'] =
|
||||||
'file:../arduino-ide-extension';
|
'file:../arduino-ide-extension';
|
||||||
fs.writeFileSync(
|
fs.writeFileSync(
|
||||||
path('..', workingCopy, extension, 'package.json'),
|
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`. |
|
// Merge the `working-copy/package.json` with `electron/build/template-package.json`. |
|
||||||
//------------------------------------------------------------------------------------+
|
//------------------------------------------------------------------------------------+
|
||||||
// @ts-ignore
|
// @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 = [
|
||||||
...template.build.files,
|
...template.build.files,
|
||||||
...unusedDependencies.map((name) => `!node_modules/${name}`),
|
...unusedDependencies.map((name) => `!node_modules/${name}`),
|
||||||
@ -195,25 +195,26 @@
|
|||||||
dependencies[extension] = `file:../working-copy/${extension}`;
|
dependencies[extension] = `file:../working-copy/${extension}`;
|
||||||
}
|
}
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
pkg.dependencies = { ...pkg.dependencies, ...dependencies };
|
appPackageJson.dependencies = { ...appPackageJson.dependencies, ...dependencies };
|
||||||
pkg.devDependencies = { ...pkg.devDependencies, ...template.devDependencies };
|
appPackageJson.devDependencies = { ...appPackageJson.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)
|
// Deep-merging the Theia application configuration.
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const theia = merge(pkg.theia || {}, template.theia || {});
|
const theia = merge(appPackageJson.theia || {}, template.theia || {});
|
||||||
const content = {
|
const content = {
|
||||||
...pkg,
|
...appPackageJson,
|
||||||
...template,
|
...template,
|
||||||
theia,
|
theia,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
dependencies: pkg.dependencies,
|
dependencies: appPackageJson.dependencies,
|
||||||
devDependencies: pkg.devDependencies,
|
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(
|
fs.writeFileSync(
|
||||||
path('..', 'build', 'package.json'),
|
path('..', 'build', 'package.json'),
|
||||||
JSON.stringify(
|
JSON.stringify(
|
||||||
merge(content, template, { arrayMerge: overwriteMerge }),
|
merge(content, template, { arrayMerge: (_, sourceArray) => sourceArray }),
|
||||||
null,
|
null,
|
||||||
2
|
2
|
||||||
)
|
)
|
||||||
|
27
i18n/en.json
27
i18n/en.json
@ -8,6 +8,7 @@
|
|||||||
"board": "Board{0}",
|
"board": "Board{0}",
|
||||||
"boardConfigDialogTitle": "Select Other Board and Port",
|
"boardConfigDialogTitle": "Select Other Board and Port",
|
||||||
"boardInfo": "Board Info",
|
"boardInfo": "Board Info",
|
||||||
|
"boards": "boards",
|
||||||
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.",
|
"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.",
|
"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?",
|
"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?",
|
||||||
@ -25,6 +26,7 @@
|
|||||||
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
|
"pleasePickBoard": "Please pick a board connected to the port you have selected.",
|
||||||
"port": "Port{0}",
|
"port": "Port{0}",
|
||||||
"portLabel": "Port: {0}",
|
"portLabel": "Port: {0}",
|
||||||
|
"ports": "ports",
|
||||||
"programmer": "Programmer",
|
"programmer": "Programmer",
|
||||||
"reselectLater": "Reselect later",
|
"reselectLater": "Reselect later",
|
||||||
"searchBoard": "Search board",
|
"searchBoard": "Search board",
|
||||||
@ -32,8 +34,10 @@
|
|||||||
"selectBoardForInfo": "Please select a board to obtain board info.",
|
"selectBoardForInfo": "Please select a board to obtain board info.",
|
||||||
"selectPortForInfo": "Please select a port to obtain board info.",
|
"selectPortForInfo": "Please select a port to obtain board info.",
|
||||||
"showAllAvailablePorts": "Shows all available ports when enabled",
|
"showAllAvailablePorts": "Shows all available ports when enabled",
|
||||||
|
"showAllPorts": "Show all ports",
|
||||||
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
|
"succesfullyInstalledPlatform": "Successfully installed platform {0}:{1}",
|
||||||
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}"
|
"succesfullyUninstalledPlatform": "Successfully uninstalled platform {0}:{1}",
|
||||||
|
"typeOfPorts": "{0} ports"
|
||||||
},
|
},
|
||||||
"boardsManager": "Boards Manager",
|
"boardsManager": "Boards Manager",
|
||||||
"boardsType": {
|
"boardsType": {
|
||||||
@ -149,8 +153,19 @@
|
|||||||
"contributions": {
|
"contributions": {
|
||||||
"addFile": "Add File",
|
"addFile": "Add File",
|
||||||
"fileAdded": "One file added to the sketch.",
|
"fileAdded": "One file added to the sketch.",
|
||||||
|
"plotter": {
|
||||||
|
"couldNotOpen": "Couldn't open serial plotter"
|
||||||
|
},
|
||||||
"replaceTitle": "Replace"
|
"replaceTitle": "Replace"
|
||||||
},
|
},
|
||||||
|
"core": {
|
||||||
|
"compilerWarnings": {
|
||||||
|
"all": "All",
|
||||||
|
"default": "Default",
|
||||||
|
"more": "More",
|
||||||
|
"none": "None"
|
||||||
|
}
|
||||||
|
},
|
||||||
"coreContribution": {
|
"coreContribution": {
|
||||||
"copyError": "Copy error messages",
|
"copyError": "Copy error messages",
|
||||||
"noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu."
|
"noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu."
|
||||||
@ -282,6 +297,10 @@
|
|||||||
"unableToCloseWebSocket": "Unable to close websocket",
|
"unableToCloseWebSocket": "Unable to close websocket",
|
||||||
"unableToConnectToWebSocket": "Unable to connect to websocket"
|
"unableToConnectToWebSocket": "Unable to connect to websocket"
|
||||||
},
|
},
|
||||||
|
"portProtocol": {
|
||||||
|
"network": "Network",
|
||||||
|
"serial": "Serial"
|
||||||
|
},
|
||||||
"preferences": {
|
"preferences": {
|
||||||
"additionalManagerURLs": "Additional Boards Manager URLs",
|
"additionalManagerURLs": "Additional Boards Manager URLs",
|
||||||
"auth.audience": "The OAuth2 audience.",
|
"auth.audience": "The OAuth2 audience.",
|
||||||
@ -321,6 +340,12 @@
|
|||||||
"network": "Network",
|
"network": "Network",
|
||||||
"newSketchbookLocation": "Select new sketchbook location",
|
"newSketchbookLocation": "Select new sketchbook location",
|
||||||
"noProxy": "No proxy",
|
"noProxy": "No proxy",
|
||||||
|
"proxySettings": {
|
||||||
|
"hostname": "Host name",
|
||||||
|
"password": "Password",
|
||||||
|
"port": "Port number",
|
||||||
|
"username": "Username"
|
||||||
|
},
|
||||||
"showVerbose": "Show verbose output during",
|
"showVerbose": "Show verbose output during",
|
||||||
"sketchbook.location": "Sketchbook location",
|
"sketchbook.location": "Sketchbook location",
|
||||||
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
|
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
|
||||||
|
25
package.json
25
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": "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",
|
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix",
|
||||||
"cortex-debug": "https://open-vsx.org/api/marus25/cortex-debug/0.3.10/file/marus25.cortex-debug-0.3.10.vsix",
|
"cortex-debug": "https://open-vsx.org/api/marus25/cortex-debug/0.3.10/file/marus25.cortex-debug-0.3.10.vsix",
|
||||||
|
"vscode-language-pack-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-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-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-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-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-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-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-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.53.2/file/MS-CEINTL.vscode-language-pack-tr-1.53.2.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-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-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-zh-hans": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.53.2/file/MS-CEINTL.vscode-language-pack-zh-hans-1.53.2.vsix"
|
||||||
"vscode-language-pack-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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user