diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js index f1807d26252..a0e875148f5 100644 --- a/build/gulpfile.vscode.js +++ b/build/gulpfile.vscode.js @@ -43,7 +43,7 @@ const nodeModules = ['electron', 'original-fs'] // Build const builtInExtensions = [ - { name: 'ms-vscode.node-debug', version: '1.17.5' }, + { name: 'ms-vscode.node-debug', version: '1.17.6' }, { name: 'ms-vscode.node-debug2', version: '1.17.1' } ]; diff --git a/extensions/jake/package.json b/extensions/jake/package.json index 9e48dd07c43..3cd44305e1d 100644 --- a/extensions/jake/package.json +++ b/extensions/jake/package.json @@ -31,6 +31,7 @@ "title": "Jake", "properties": { "jake.autoDetect": { + "scope": "resource", "type": "string", "enum": [ "off", diff --git a/extensions/jake/src/main.ts b/extensions/jake/src/main.ts index b0b4b137ab9..7ea6e99e969 100644 --- a/extensions/jake/src/main.ts +++ b/extensions/jake/src/main.ts @@ -13,49 +13,6 @@ import * as nls from 'vscode-nls'; const localize = nls.config(process.env.VSCODE_NLS_CONFIG)(); type AutoDetect = 'on' | 'off'; -let taskProvider: vscode.Disposable | undefined; - -export function activate(_context: vscode.ExtensionContext): void { - let workspaceRoot = vscode.workspace.rootPath; - if (!workspaceRoot) { - return; - } - let pattern = path.join(workspaceRoot, '{Jakefile,Jakefile.js}'); - let jakePromise: Thenable | undefined = undefined; - let fileWatcher = vscode.workspace.createFileSystemWatcher(pattern); - fileWatcher.onDidChange(() => jakePromise = undefined); - fileWatcher.onDidCreate(() => jakePromise = undefined); - fileWatcher.onDidDelete(() => jakePromise = undefined); - - function onConfigurationChanged() { - let autoDetect = vscode.workspace.getConfiguration('jake').get('autoDetect'); - if (taskProvider && autoDetect === 'off') { - jakePromise = undefined; - taskProvider.dispose(); - taskProvider = undefined; - } else if (!taskProvider && autoDetect === 'on') { - taskProvider = vscode.workspace.registerTaskProvider('jake', { - provideTasks: () => { - if (!jakePromise) { - jakePromise = getJakeTasks(); - } - return jakePromise; - }, - resolveTask(_task: vscode.Task): vscode.Task | undefined { - return undefined; - } - }); - } - } - vscode.workspace.onDidChangeConfiguration(onConfigurationChanged); - onConfigurationChanged(); -} - -export function deactivate(): void { - if (taskProvider) { - taskProvider.dispose(); - } -} function exists(file: string): Promise { return new Promise((resolve, _reject) => { @@ -76,19 +33,6 @@ function exec(command: string, options: cp.ExecOptions): Promise<{ stdout: strin }); } -let _channel: vscode.OutputChannel; -function getOutputChannel(): vscode.OutputChannel { - if (!_channel) { - _channel = vscode.window.createOutputChannel('Jake Auto Detection'); - } - return _channel; -} - -interface JakeTaskDefinition extends vscode.TaskDefinition { - task: string; - file?: string; -} - const buildNames: string[] = ['build', 'compile', 'watch']; function isBuildTask(name: string): boolean { for (let buildName of buildNames) { @@ -109,74 +53,264 @@ function isTestTask(name: string): boolean { return false; } -async function getJakeTasks(): Promise { - let workspaceRoot = vscode.workspace.rootPath; - let emptyTasks: vscode.Task[] = []; - if (!workspaceRoot) { - return emptyTasks; +let _channel: vscode.OutputChannel; +function getOutputChannel(): vscode.OutputChannel { + if (!_channel) { + _channel = vscode.window.createOutputChannel('Gulp Auto Detection'); } - let jakefile = path.join(workspaceRoot, 'Jakefile'); - if (!await exists(jakefile)) { - jakefile = path.join(workspaceRoot, 'Jakefile.js'); - if (! await exists(jakefile)) { + return _channel; +} + +interface JakeTaskDefinition extends vscode.TaskDefinition { + task: string; + file?: string; +} + +class FolderDetector { + + private fileWatcher: vscode.FileSystemWatcher; + private promise: Thenable | undefined; + + constructor(private _workspaceFolder: vscode.WorkspaceFolder) { + } + + public get workspaceFolder(): vscode.WorkspaceFolder { + return this._workspaceFolder; + } + + public isEnabled(): boolean { + return vscode.workspace.getConfiguration('jake', this._workspaceFolder.uri).get('autoDetect') === 'on'; + } + + public start(): void { + let pattern = path.join(this._workspaceFolder.uri.fsPath, '{Jakefile,Jakefile.js}'); + this.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern); + this.fileWatcher.onDidChange(() => this.promise = undefined); + this.fileWatcher.onDidCreate(() => this.promise = undefined); + this.fileWatcher.onDidDelete(() => this.promise = undefined); + } + + public async getTasks(): Promise { + if (!this.promise) { + this.promise = this.computeTasks(); + } + return this.promise; + } + + private async computeTasks(): Promise { + let rootPath = this._workspaceFolder.uri.scheme === 'file' ? this._workspaceFolder.uri.fsPath : undefined; + let emptyTasks: vscode.Task[] = []; + if (!rootPath) { + return emptyTasks; + } + let jakefile = path.join(rootPath, 'Jakefile'); + if (!await exists(jakefile)) { + jakefile = path.join(rootPath, 'Jakefile.js'); + if (! await exists(jakefile)) { + return emptyTasks; + } + } + + let jakeCommand: string; + let platform = process.platform; + if (platform === 'win32' && await exists(path.join(rootPath!, 'node_modules', '.bin', 'jake.cmd'))) { + jakeCommand = path.join('.', 'node_modules', '.bin', 'jake.cmd'); + } else if ((platform === 'linux' || platform === 'darwin') && await exists(path.join(rootPath!, 'node_modules', '.bin', 'jake'))) { + jakeCommand = path.join('.', 'node_modules', '.bin', 'jake'); + } else { + jakeCommand = 'jake'; + } + + let commandLine = `${jakeCommand} --tasks`; + try { + let { stdout, stderr } = await exec(commandLine, { cwd: rootPath }); + if (stderr) { + getOutputChannel().appendLine(stderr); + getOutputChannel().show(true); + } + let result: vscode.Task[] = []; + if (stdout) { + let lines = stdout.split(/\r{0,1}\n/); + for (let line of lines) { + if (line.length === 0) { + continue; + } + let regExp = /^jake\s+([^\s]+)\s/g; + let matches = regExp.exec(line); + if (matches && matches.length === 2) { + let taskName = matches[1]; + let kind: JakeTaskDefinition = { + type: 'jake', + task: taskName + }; + let options: vscode.ShellExecutionOptions = { cwd: this.workspaceFolder.uri.fsPath }; + let task = new vscode.Task(kind, taskName, 'jake', new vscode.ShellExecution(`${jakeCommand} ${taskName}`, options)); + result.push(task); + let lowerCaseLine = line.toLowerCase(); + if (isBuildTask(lowerCaseLine)) { + task.group = vscode.TaskGroup.Build; + } else if (isTestTask(lowerCaseLine)) { + task.group = vscode.TaskGroup.Test; + } + } + } + } + return result; + } catch (err) { + let channel = getOutputChannel(); + if (err.stderr) { + channel.appendLine(err.stderr); + } + if (err.stdout) { + channel.appendLine(err.stdout); + } + channel.appendLine(localize('execFailed', 'Auto detecting Jake failed with error: {0}', err.error ? err.error.toString() : 'unknown')); + channel.show(true); return emptyTasks; } } - let jakeCommand: string; - let platform = process.platform; - if (platform === 'win32' && await exists(path.join(workspaceRoot!, 'node_modules', '.bin', 'jake.cmd'))) { - jakeCommand = path.join('.', 'node_modules', '.bin', 'jake.cmd'); - } else if ((platform === 'linux' || platform === 'darwin') && await exists(path.join(workspaceRoot!, 'node_modules', '.bin', 'jake'))) { - jakeCommand = path.join('.', 'node_modules', '.bin', 'jake'); - } else { - jakeCommand = 'jake'; + public dispose() { + this.promise = undefined; + if (this.fileWatcher) { + this.fileWatcher.dispose(); + } + } +} + +class TaskDetector { + + private taskProvider: vscode.Disposable | undefined; + private detectors: Map = new Map(); + private promise: Promise | undefined; + + constructor() { } - let commandLine = `${jakeCommand} --tasks`; - try { - let { stdout, stderr } = await exec(commandLine, { cwd: workspaceRoot }); - if (stderr) { - getOutputChannel().appendLine(stderr); - getOutputChannel().show(true); + public start(): void { + let folders = vscode.workspace.workspaceFolders; + if (folders) { + this.updateWorkspaceFolders(folders, []); } - let result: vscode.Task[] = []; - if (stdout) { - let lines = stdout.split(/\r{0,1}\n/); - for (let line of lines) { - if (line.length === 0) { - continue; - } - let regExp = /^jake\s+([^\s]+)\s/g; - let matches = regExp.exec(line); - if (matches && matches.length === 2) { - let taskName = matches[1]; - let kind: JakeTaskDefinition = { - type: 'jake', - task: taskName - }; - let task = new vscode.Task(kind, taskName, 'jake', new vscode.ShellExecution(`${jakeCommand} ${taskName}`)); - result.push(task); - let lowerCaseLine = line.toLowerCase(); - if (isBuildTask(lowerCaseLine)) { - task.group = vscode.TaskGroup.Build; - } else if (isTestTask(lowerCaseLine)) { - task.group = vscode.TaskGroup.Test; + vscode.workspace.onDidChangeWorkspaceFolders((event) => this.updateWorkspaceFolders(event.added, event.removed)); + vscode.workspace.onDidChangeConfiguration(this.updateConfiguration, this); + } + + public dispose(): void { + if (this.taskProvider) { + this.taskProvider.dispose(); + this.taskProvider = undefined; + } + this.detectors.clear(); + this.promise = undefined; + } + + private updateWorkspaceFolders(added: vscode.WorkspaceFolder[], removed: vscode.WorkspaceFolder[]): void { + let changed = false; + for (let remove of removed) { + let detector = this.detectors.get(remove.uri.toString()); + if (detector) { + changed = true; + detector.dispose(); + this.detectors.delete(remove.uri.toString()); + } + } + for (let add of added) { + let detector = new FolderDetector(add); + if (detector.isEnabled()) { + changed = true; + this.detectors.set(add.uri.toString(), detector); + detector.start(); + } + } + if (changed) { + this.promise = undefined; + } + this.updateProvider(); + } + + private updateConfiguration(): void { + let changed = false; + for (let detector of this.detectors.values()) { + if (!detector.isEnabled()) { + changed = true; + detector.dispose(); + this.detectors.delete(detector.workspaceFolder.uri.toString()); + } + } + let folders = vscode.workspace.workspaceFolders; + if (folders) { + for (let folder of folders) { + if (!this.detectors.has(folder.uri.toString())) { + let detector = new FolderDetector(folder); + if (detector.isEnabled()) { + changed = true; + this.detectors.set(folder.uri.toString(), detector); + detector.start(); } } } } - return result; - } catch (err) { - let channel = getOutputChannel(); - if (err.stderr) { - channel.appendLine(err.stderr); + if (changed) { + this.promise = undefined; } - if (err.stdout) { - channel.appendLine(err.stdout); - } - channel.appendLine(localize('execFailed', 'Auto detecting Jake failed with error: {0}', err.error ? err.error.toString() : 'unknown')); - channel.show(true); - return emptyTasks; + this.updateProvider(); } + + private updateProvider(): void { + if (!this.taskProvider && this.detectors.size > 0) { + this.taskProvider = vscode.workspace.registerTaskProvider('gulp', { + provideTasks: () => { + return this.getTasks(); + }, + resolveTask(_task: vscode.Task): vscode.Task | undefined { + return undefined; + } + }); + } + else if (this.taskProvider && this.detectors.size === 0) { + this.taskProvider.dispose(); + this.taskProvider = undefined; + this.promise = undefined; + } + } + + public getTasks(): Promise { + if (!this.promise) { + this.promise = this.computeTasks(); + } + return this.promise; + } + + private computeTasks(): Promise { + if (this.detectors.size === 0) { + return Promise.resolve([]); + } else if (this.detectors.size === 1) { + return this.detectors.values().next().value.getTasks(); + } else { + let promises: Promise[] = []; + for (let detector of this.detectors.values()) { + promises.push(detector.getTasks().then((value) => value, () => [])); + } + return Promise.all(promises).then((values) => { + let result: vscode.Task[] = []; + for (let tasks of values) { + if (tasks && tasks.length > 0) { + result.push(...tasks); + } + } + return result; + }); + } + } +} + +let detector: TaskDetector; +export function activate(_context: vscode.ExtensionContext): void { + detector = new TaskDetector(); + detector.start(); +} + +export function deactivate(): void { + detector.dispose(); } \ No newline at end of file diff --git a/extensions/json/client/src/jsonMain.ts b/extensions/json/client/src/jsonMain.ts index 026beb78a74..bb933b6a929 100644 --- a/extensions/json/client/src/jsonMain.ts +++ b/extensions/json/client/src/jsonMain.ts @@ -10,11 +10,11 @@ import { workspace, languages, ExtensionContext, extensions, Uri, TextDocument, import { LanguageClient, LanguageClientOptions, RequestType, ServerOptions, TransportKind, NotificationType, DidChangeConfigurationNotification } from 'vscode-languageclient'; import TelemetryReporter from 'vscode-extension-telemetry'; import { ConfigurationFeature } from 'vscode-languageclient/lib/proposed'; - import { DocumentColorRequest } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed'; import * as nls from 'vscode-nls'; +import { hash } from './utils/hash'; let localize = nls.loadMessageBundle(); namespace VSCodeContentRequest { @@ -192,8 +192,6 @@ function getSettings(): Settings { let httpSettings = workspace.getConfiguration('http'); let jsonSettings = workspace.getConfiguration('json'); - let schemas = []; - let settings: Settings = { http: { proxy: httpSettings.get('proxy'), @@ -201,41 +199,69 @@ function getSettings(): Settings { }, json: { format: jsonSettings.get('format'), - schemas: schemas, + schemas: [], + } + }; + let schemaSettingsById: { [schemaId: string]: JSONSchemaSettings } = Object.create(null); + let collectSchemaSettings = (schemaSettings: JSONSchemaSettings[], rootPath?: string, fileMatchPrefix?: string) => { + for (let setting of schemaSettings) { + let url = getSchemaId(setting, rootPath); + if (!url) { + continue; + } + let schemaSetting = schemaSettingsById[url]; + if (!schemaSetting) { + schemaSetting = schemaSettingsById[url] = { url, fileMatch: [] }; + settings.json.schemas.push(schemaSetting); + } + let fileMatches = setting.fileMatch; + if (Array.isArray(fileMatches)) { + if (fileMatchPrefix) { + fileMatches = fileMatches.map(m => fileMatchPrefix + m); + } + schemaSetting.fileMatch.push(...fileMatches); + } + if (setting.schema) { + schemaSetting.schema = setting.schema; + } } }; - let settingsSchemas = jsonSettings.get('schemas'); - if (Array.isArray(settingsSchemas)) { - schemas.push(...settingsSchemas); - } + // merge global and folder settings. Qualify all file matches with the folder path. + let globalSettings = jsonSettings.get('schemas'); + if (Array.isArray(globalSettings)) { + collectSchemaSettings(globalSettings, workspace.rootPath); + } let folders = workspace.workspaceFolders; if (folders) { - folders.forEach(folder => { - let jsonConfig = workspace.getConfiguration('json', folder.uri); - let schemaConfigInfo = jsonConfig.inspect('schemas'); + for (let folder of folders) { + let folderUri = folder.uri; + let schemaConfigInfo = workspace.getConfiguration('json', folderUri).inspect('schemas'); let folderSchemas = schemaConfigInfo.workspaceFolderValue; if (Array.isArray(folderSchemas)) { - folderSchemas.forEach(schema => { - let url = schema.url; - if (!url && schema.schema) { - url = schema.schema.id; - } - if (url && url[0] === '.') { - url = Uri.file(path.normalize(path.join(folder.uri.fsPath, url))).toString(); - } - let fileMatch = schema.fileMatch; - if (fileMatch) { - fileMatch = fileMatch.map(m => folder.uri.toString() + '*' + m); - } - schemas.push({ url, fileMatch, schema: schema.schema }); - }); + let folderPath = folderUri.toString(); + if (folderPath[folderPath.length - 1] !== '/') { + folderPath = folderPath + '/'; + } + collectSchemaSettings(folderSchemas, folderUri.fsPath, folderPath + '*'); }; - }); + }; } return settings; } +function getSchemaId(schema: JSONSchemaSettings, rootPath?: string) { + let url = schema.url; + if (!url) { + if (schema.schema) { + url = schema.schema.id || `vscode://schemas/custom/${encodeURIComponent(hash(schema.schema).toString(16))}`; + } + } else if (rootPath && (url[0] === '.' || url[0] === '/')) { + url = Uri.file(path.normalize(path.join(rootPath, url))).toString(); + } + return url; +} + function getPackageInfo(context: ExtensionContext): IPackageInfo { let extensionPackage = require(context.asAbsolutePath('./package.json')); if (extensionPackage) { diff --git a/extensions/json/client/src/utils/hash.ts b/extensions/json/client/src/utils/hash.ts new file mode 100644 index 00000000000..e7149e43cd7 --- /dev/null +++ b/extensions/json/client/src/utils/hash.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +'use strict'; + +/** + * Return a hash value for an object. + */ +export function hash(obj: any, hashVal = 0): number { + switch (typeof obj) { + case 'object': + if (obj === null) { + return numberHash(349, hashVal); + } else if (Array.isArray(obj)) { + return arrayHash(obj, hashVal); + } + return objectHash(obj, hashVal); + case 'string': + return stringHash(obj, hashVal); + case 'boolean': + return booleanHash(obj, hashVal); + case 'number': + return numberHash(obj, hashVal); + case 'undefined': + return numberHash(obj, 937); + default: + return numberHash(obj, 617); + } +} + +function numberHash(val: number, initialHashVal: number): number { + return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32 +} + +function booleanHash(b: boolean, initialHashVal: number): number { + return numberHash(b ? 433 : 863, initialHashVal); +} + +function stringHash(s: string, hashVal: number) { + hashVal = numberHash(149417, hashVal); + for (let i = 0, length = s.length; i < length; i++) { + hashVal = numberHash(s.charCodeAt(i), hashVal); + } + return hashVal; +} + +function arrayHash(arr: any[], initialHashVal: number): number { + initialHashVal = numberHash(104579, initialHashVal); + return arr.reduce((hashVal, item) => hash(item, hashVal), initialHashVal); +} + +function objectHash(obj: any, initialHashVal: number): number { + initialHashVal = numberHash(181387, initialHashVal); + return Object.keys(obj).sort().reduce((hashVal, key) => { + hashVal = stringHash(key, hashVal); + return hash(obj[key], hashVal); + }, initialHashVal); +} diff --git a/extensions/json/server/npm-shrinkwrap.json b/extensions/json/server/npm-shrinkwrap.json index 517efec26a3..3bcdb83008a 100644 --- a/extensions/json/server/npm-shrinkwrap.json +++ b/extensions/json/server/npm-shrinkwrap.json @@ -43,9 +43,9 @@ "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.2.1.tgz" }, "vscode-json-languageservice": { - "version": "2.0.16", + "version": "2.0.18", "from": "vscode-json-languageservice@next", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-2.0.16.tgz" + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-2.0.18.tgz" }, "vscode-jsonrpc": { "version": "3.3.1", diff --git a/extensions/json/server/package.json b/extensions/json/server/package.json index 3b6e892cc42..684e9c35d28 100644 --- a/extensions/json/server/package.json +++ b/extensions/json/server/package.json @@ -10,10 +10,11 @@ "dependencies": { "jsonc-parser": "^1.0.0", "request-light": "^0.2.1", - "vscode-json-languageservice": "^2.0.16", + "vscode-json-languageservice": "^2.0.18", "vscode-languageserver": "3.4.0-next.6", "vscode-languageserver-protocol": "^3.1.1", - "vscode-nls": "^2.0.2" + "vscode-nls": "^2.0.2", + "vscode-uri": "^1.0.1" }, "devDependencies": { "@types/node": "^6.0.51" diff --git a/extensions/json/server/src/jsonServerMain.ts b/extensions/json/server/src/jsonServerMain.ts index 2fe428f717f..4d1c416c41c 100644 --- a/extensions/json/server/src/jsonServerMain.ts +++ b/extensions/json/server/src/jsonServerMain.ts @@ -13,9 +13,8 @@ import { import { DocumentColorRequest, ServerCapabilities as CPServerCapabilities } from 'vscode-languageserver-protocol/lib/protocol.colorProvider.proposed'; import { xhr, XHRResponse, configure as configureHttpRequests, getErrorStatusDescription } from 'request-light'; -import path = require('path'); import fs = require('fs'); -import URI from './utils/uri'; +import URI from 'vscode-uri'; import * as URL from 'url'; import Strings = require('./utils/strings'); import { JSONDocument, JSONSchema, LanguageSettings, getLanguageService } from 'vscode-json-languageservice'; @@ -54,9 +53,7 @@ let clientDynamicRegisterSupport = false; // After the server has started the client sends an initilize request. The server receives // in the passed params the rootPath of the workspace plus the client capabilities. -let workspaceRoot: URI; connection.onInitialize((params: InitializeParams): InitializeResult => { - workspaceRoot = URI.parse(params.rootPath); function hasClientCapability(...keys: string[]) { let c = params.capabilities; @@ -192,19 +189,12 @@ function updateConfiguration() { } } if (jsonConfigurationSettings) { - jsonConfigurationSettings.forEach(schema => { + jsonConfigurationSettings.forEach((schema, index) => { let uri = schema.url; if (!uri && schema.schema) { - uri = schema.schema.id; - } - if (!uri && schema.fileMatch) { - uri = 'vscode://schemas/custom/' + encodeURIComponent(schema.fileMatch.join('&')); + uri = schema.schema.id || `vscode://schemas/custom/${index}`; } if (uri) { - if (uri[0] === '.' && workspaceRoot) { - // workspace relative path - uri = URI.file(path.normalize(path.join(workspaceRoot.fsPath, uri))).toString(); - } languageSettings.schemas.push({ uri, fileMatch: schema.fileMatch, schema: schema.schema }); } }); diff --git a/extensions/json/server/src/utils/uri.ts b/extensions/json/server/src/utils/uri.ts deleted file mode 100644 index 5cce7590977..00000000000 --- a/extensions/json/server/src/utils/uri.ts +++ /dev/null @@ -1,351 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -'use strict'; - -function _encode(ch: string): string { - return '%' + ch.charCodeAt(0).toString(16).toUpperCase(); -} - -// see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent -function encodeURIComponent2(str: string): string { - return encodeURIComponent(str).replace(/[!'()*]/g, _encode); -} - -function encodeNoop(str: string): string { - return str; -} - - -/** - * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986. - * This class is a simple parser which creates the basic component paths - * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation - * and encoding. - * - * foo://example.com:8042/over/there?name=ferret#nose - * \_/ \______________/\_________/ \_________/ \__/ - * | | | | | - * scheme authority path query fragment - * | _____________________|__ - * / \ / \ - * urn:example:animal:ferret:nose - * - * - */ -export default class URI { - - private static _empty = ''; - private static _slash = '/'; - private static _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/; - private static _driveLetterPath = /^\/[a-zA-z]:/; - private static _upperCaseDrive = /^(\/)?([A-Z]:)/; - - private _scheme: string; - private _authority: string; - private _path: string; - private _query: string; - private _fragment: string; - private _formatted: string; - private _fsPath: string; - - constructor() { - this._scheme = URI._empty; - this._authority = URI._empty; - this._path = URI._empty; - this._query = URI._empty; - this._fragment = URI._empty; - - this._formatted = null; - this._fsPath = null; - } - - /** - * scheme is the 'http' part of 'http://www.msft.com/some/path?query#fragment'. - * The part before the first colon. - */ - get scheme() { - return this._scheme; - } - - /** - * authority is the 'www.msft.com' part of 'http://www.msft.com/some/path?query#fragment'. - * The part between the first double slashes and the next slash. - */ - get authority() { - return this._authority; - } - - /** - * path is the '/some/path' part of 'http://www.msft.com/some/path?query#fragment'. - */ - get path() { - return this._path; - } - - /** - * query is the 'query' part of 'http://www.msft.com/some/path?query#fragment'. - */ - get query() { - return this._query; - } - - /** - * fragment is the 'fragment' part of 'http://www.msft.com/some/path?query#fragment'. - */ - get fragment() { - return this._fragment; - } - - // ---- filesystem path ----------------------- - - /** - * Returns a string representing the corresponding file system path of this URI. - * Will handle UNC paths and normalize windows drive letters to lower-case. Also - * uses the platform specific path separator. Will *not* validate the path for - * invalid characters and semantics. Will *not* look at the scheme of this URI. - */ - get fsPath() { - if (!this._fsPath) { - var value: string; - if (this._authority && this.scheme === 'file') { - // unc path: file://shares/c$/far/boo - value = `//${this._authority}${this._path}`; - } else if (URI._driveLetterPath.test(this._path)) { - // windows drive letter: file:///c:/far/boo - value = this._path[1].toLowerCase() + this._path.substr(2); - } else { - // other path - value = this._path; - } - if (process.platform === 'win32') { - value = value.replace(/\//g, '\\'); - } - this._fsPath = value; - } - return this._fsPath; - } - - // ---- modify to new ------------------------- - - public with(scheme: string, authority: string, path: string, query: string, fragment: string): URI { - var ret = new URI(); - ret._scheme = scheme || this.scheme; - ret._authority = authority || this.authority; - ret._path = path || this.path; - ret._query = query || this.query; - ret._fragment = fragment || this.fragment; - URI._validate(ret); - return ret; - } - - public withScheme(value: string): URI { - return this.with(value, undefined, undefined, undefined, undefined); - } - - public withAuthority(value: string): URI { - return this.with(undefined, value, undefined, undefined, undefined); - } - - public withPath(value: string): URI { - return this.with(undefined, undefined, value, undefined, undefined); - } - - public withQuery(value: string): URI { - return this.with(undefined, undefined, undefined, value, undefined); - } - - public withFragment(value: string): URI { - return this.with(undefined, undefined, undefined, undefined, value); - } - - // ---- parse & validate ------------------------ - - public static parse(value: string): URI { - const ret = new URI(); - const data = URI._parseComponents(value); - ret._scheme = data.scheme; - ret._authority = decodeURIComponent(data.authority); - ret._path = decodeURIComponent(data.path); - ret._query = decodeURIComponent(data.query); - ret._fragment = decodeURIComponent(data.fragment); - URI._validate(ret); - return ret; - } - - public static file(path: string): URI { - - const ret = new URI(); - ret._scheme = 'file'; - - // normalize to fwd-slashes - path = path.replace(/\\/g, URI._slash); - - // check for authority as used in UNC shares - // or use the path as given - if (path[0] === URI._slash && path[0] === path[1]) { - let idx = path.indexOf(URI._slash, 2); - if (idx === -1) { - ret._authority = path.substring(2); - } else { - ret._authority = path.substring(2, idx); - ret._path = path.substring(idx); - } - } else { - ret._path = path; - } - - // Ensure that path starts with a slash - // or that it is at least a slash - if (ret._path[0] !== URI._slash) { - ret._path = URI._slash + ret._path; - } - - URI._validate(ret); - - return ret; - } - - private static _parseComponents(value: string): UriComponents { - - const ret: UriComponents = { - scheme: URI._empty, - authority: URI._empty, - path: URI._empty, - query: URI._empty, - fragment: URI._empty, - }; - - const match = URI._regexp.exec(value); - if (match) { - ret.scheme = match[2] || ret.scheme; - ret.authority = match[4] || ret.authority; - ret.path = match[5] || ret.path; - ret.query = match[7] || ret.query; - ret.fragment = match[9] || ret.fragment; - } - return ret; - } - - public static create(scheme?: string, authority?: string, path?: string, query?: string, fragment?: string): URI { - return new URI().with(scheme, authority, path, query, fragment); - } - - private static _validate(ret: URI): void { - - // validation - // path, http://tools.ietf.org/html/rfc3986#section-3.3 - // If a URI contains an authority component, then the path component - // must either be empty or begin with a slash ("/") character. If a URI - // does not contain an authority component, then the path cannot begin - // with two slash characters ("//"). - if (ret.authority && ret.path && ret.path[0] !== '/') { - throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character'); - } - if (!ret.authority && ret.path.indexOf('//') === 0) { - throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")'); - } - } - - // ---- printing/externalize --------------------------- - - /** - * - * @param skipEncoding Do not encode the result, default is `false` - */ - public toString(skipEncoding: boolean = false): string { - if (!skipEncoding) { - if (!this._formatted) { - this._formatted = URI._asFormatted(this, false); - } - return this._formatted; - } else { - // we don't cache that - return URI._asFormatted(this, true); - } - } - - private static _asFormatted(uri: URI, skipEncoding: boolean): string { - - const encoder = !skipEncoding - ? encodeURIComponent2 - : encodeNoop; - - const parts: string[] = []; - - let { scheme, authority, path, query, fragment } = uri; - if (scheme) { - parts.push(scheme, ':'); - } - if (authority || scheme === 'file') { - parts.push('//'); - } - if (authority) { - authority = authority.toLowerCase(); - let idx = authority.indexOf(':'); - if (idx === -1) { - parts.push(encoder(authority)); - } else { - parts.push(encoder(authority.substr(0, idx)), authority.substr(idx)); - } - } - if (path) { - // lower-case windown drive letters in /C:/fff - const m = URI._upperCaseDrive.exec(path); - if (m) { - path = m[1] + m[2].toLowerCase() + path.substr(m[1].length + m[2].length); - } - - // encode every segement but not slashes - // make sure that # and ? are always encoded - // when occurring in paths - otherwise the result - // cannot be parsed back again - let lastIdx = 0; - while (true) { - let idx = path.indexOf(URI._slash, lastIdx); - if (idx === -1) { - parts.push(encoder(path.substring(lastIdx)).replace(/[#?]/, _encode)); - break; - } - parts.push(encoder(path.substring(lastIdx, idx)).replace(/[#?]/, _encode), URI._slash); - lastIdx = idx + 1; - }; - } - if (query) { - parts.push('?', encoder(query)); - } - if (fragment) { - parts.push('#', encoder(fragment)); - } - - return parts.join(URI._empty); - } - - public toJSON(): any { - return { - scheme: this.scheme, - authority: this.authority, - path: this.path, - fsPath: this.fsPath, - query: this.query, - fragment: this.fragment, - external: this.toString(), - $mid: 1 - }; - } -} - -interface UriComponents { - scheme: string; - authority: string; - path: string; - query: string; - fragment: string; -} - -interface UriState extends UriComponents { - $mid: number; - fsPath: string; - external: string; -} diff --git a/i18n/chs/extensions/azure-account/out/azure-account.i18n.json b/i18n/chs/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..d64636616d4 --- /dev/null +++ b/i18n/chs/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "复制并打开", + "azure-account.close": "关闭", + "azure-account.login": "登录", + "azure-account.loginFirst": "还未登录,请先登录。", + "azure-account.userCodeFailed": "获取用户代码失败", + "azure-account.tokenFailed": "用设备代码获取令牌", + "azure-account.tokenFromRefreshTokenFailed": "用刷新的令牌获取令牌" +} \ No newline at end of file diff --git a/i18n/chs/extensions/azure-account/out/extension.i18n.json b/i18n/chs/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..d90c9399da5 --- /dev/null +++ b/i18n/chs/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: 正在登录...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/code/electron-main/windows.i18n.json b/i18n/chs/src/vs/code/electron-main/windows.i18n.json index 2abc90bd7ce..e341477ca84 100644 --- a/i18n/chs/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/chs/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "确定", "pathNotExistTitle": "路径不存在", "pathNotExistDetail": "磁盘上似乎不再存在路径“{0}”。", - "openWorkspace": "打开(&&O)...", - "openWorkspaceTitle": "打开工作区", - "save": "保存(&&S)", - "doNotSave": "不保存(&&N)", - "cancel": "取消", - "saveWorkspaceMessage": "你是否要将你的工作区配置保存为文件?", - "saveWorkspaceDetail": "若要再次打开此工作区,请先保存。", - "saveWorkspace": "保存工作区", "reopen": "重新打开", "wait": "保持等待", "close": "关闭", @@ -24,5 +16,13 @@ "appCrashedDetail": "我们对此引起的不便表示抱歉! 请重启该窗口从上次停止的位置继续。", "open": "打开", "openFolder": "打开文件夹", - "openFile": "打开文件" + "openFile": "打开文件", + "openWorkspace": "打开(&&O)...", + "openWorkspaceTitle": "打开工作区", + "save": "保存(&&S)", + "doNotSave": "不保存(&&N)", + "cancel": "取消", + "saveWorkspaceMessage": "你是否要将你的工作区配置保存为文件?", + "saveWorkspaceDetail": "若要再次打开此工作区,请先保存。", + "saveWorkspace": "保存工作区" } \ No newline at end of file diff --git a/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json b/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json index 6ac6ec500ef..925c55c4691 100644 --- a/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json +++ b/i18n/chs/src/vs/editor/common/view/editorColorRegistry.i18n.json @@ -9,9 +9,9 @@ "rangeHighlight": "突出显示范围的背景颜色,例如 \"Quick Open\" 和“查找”功能。", "caret": "编辑器光标颜色。", "editorCursorBackground": "编辑器光标的背景色。可以自定义块型光标覆盖字符的颜色。", - "editorWhitespaces": "编辑器中空白字符颜色。", - "editorIndentGuides": "编辑器缩进参考线颜色。", - "editorLineNumbers": "编辑器行号颜色。", + "editorWhitespaces": "编辑器中空白字符的颜色。", + "editorIndentGuides": "编辑器缩进参考线的颜色。", + "editorLineNumbers": "编辑器行号的颜色。", "editorRuler": "编辑器标尺的颜色。", "editorCodeLensForeground": "编辑器 CodeLens 的前景色", "editorBracketMatchBackground": "匹配括号的背景色", diff --git a/i18n/chs/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/chs/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..3ebf52a28ce --- /dev/null +++ b/i18n/chs/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "关闭" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/platform/environment/node/argv.i18n.json b/i18n/chs/src/vs/platform/environment/node/argv.i18n.json index e0dd5c720f2..37a32ad9d69 100644 --- a/i18n/chs/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/chs/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,6 @@ "reuseWindow": "在上一活动窗口中强制打开文件或文件夹。", "userDataDir": "指定存放用户数据的目录,此目录在作为根运行时十分有用。", "verbose": "打印详细输出(表示 - 等待)。", - "wait": "等窗口关闭后再返回。", "extensionHomePath": "设置扩展的根路径。", "listExtensions": "列出已安装的扩展。", "showVersions": "使用 --list-extension 时,显示已安装扩展的版本。", diff --git a/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index feafccf3451..177ad607767 100644 --- a/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/chs/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "VS Code 扩展的激活事件。", "vscode.extension.activationEvents.onLanguage": "在打开被解析为指定语言的文件时发出的激活事件。", "vscode.extension.activationEvents.onCommand": "在调用指定命令时发出的激活事件。", - "vscode.extension.activationEvents.onDebug": "在指定类型的调试会话开始时发出的激活事件。", "vscode.extension.activationEvents.workspaceContains": "在打开至少包含一个匹配指定 glob 模式的文件的文件夹时发出的激活事件。", "vscode.extension.activationEvents.onView": "在指定视图被展开时发出的激活事件。", "vscode.extension.activationEvents.star": "在 VS Code 启动时发出的激活事件。为确保良好的最终用户体验,请仅在其他激活事件组合不适用于你的情况时,才在扩展中使用此事件。", diff --git a/i18n/chs/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/chs/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index 72e224481c5..8cd1865980d 100644 --- a/i18n/chs/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/chs/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "高对比度主题的默认颜色。应为十六进制颜色值 (#RRGGBB[AA]) 或是主题颜色标识符,其提供默认值。", "invalid.colorConfiguration": "\"configuration.colors\" 必须是数组", "invalid.default.colorType": "{0} 必须为十六进制颜色值 (#RRGGBB[AA] 或 #RGB[A]) 或是主题颜色标识符,其提供默认值。", - "invalid.id": "必须定义 \"configuration.colors.id\",且不能为空", "invalid.id.format": "\"configuration.colors.id\" 必须满足 word[.word]*", - "invalid.description": "必须定义 \"configuration.colors.description\",且不能为空", "invalid.defaults": "必须定义 “configuration.colors.defaults”,且须包含 \"light\"(浅色)、\"dark\"(深色) 和 \"highContrast\"(高对比度)" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/chs/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..7fff225f6c9 --- /dev/null +++ b/i18n/chs/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "视图必须为数组", + "requirestring": "属性“{0}”是必要属性,其类型必须是 \"string\"", + "optstring": "属性“{0}”可以省略,否则其类型必须是 \"string\"", + "vscode.extension.contributes.view.id": "视图的标识符。使用标识符通过“vscode.window.registerTreeDataProviderForView” API 注册数据提供程序。同时将“onView:${id}”事件注册到“activationEvents”以激活你的扩展。", + "vscode.extension.contributes.view.name": "人类可读的视图名称。将会被显示", + "vscode.extension.contributes.view.when": "显示此视图必须为真的条件", + "vscode.extension.contributes.views": "向编辑器提供视图", + "views.explorer": "资源管理器视图", + "views.debug": "调试视图", + "locationId.invalid": "“{0}”为无效视图位置" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 76938aceb7e..1b72542c4c9 100644 --- a/i18n/chs/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/chs/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "从活动栏删除", - "keepInActivityBar": "保留活动栏", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "保留活动栏", "additionalViews": "其他视图", "numberBadge": "{0} ({1})", "manageExtension": "管理扩展", diff --git a/i18n/chs/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/chs/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..1e211f7c694 --- /dev/null +++ b/i18n/chs/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} 操作", + "hideView": "从侧边栏中隐藏" +} \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index f9491aa92e0..dfdc6079f1c 100644 --- a/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "ID", "view name": "名称", "view location": "位置", - "themes": "主题({0})", "JSON Validation": "JSON 验证({0})", "commands": "命令({0})", "command name": "名称", diff --git a/i18n/chs/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index be1c93a6518..41da349ec71 100644 --- a/i18n/chs/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "匹配文件路径所依据的 glob 模式。设置为 true 或 false 可启用或禁用该模式。", "files.exclude.when": "对匹配文件的同级文件的其他检查。使用 $(basename) 作为匹配文件名的变量。", "associations": "配置语言的文件关联(如: \"*.extension\": \"html\")。这些关联的优先级高于已安装语言的默认关联。", - "encoding": "读取和编写文件时将使用的默认字符集编码。", - "autoGuessEncoding": "启用时,会在打开文件时尝试猜测字符集编码", "eol": "默认行尾字符。使用 \\n 表示 LF,\\r\\n 表示 CRLF。", "trimTrailingWhitespace": "启用后,将在保存文件时剪裁尾随空格。", "insertFinalNewline": "启用后,保存文件时在文件末尾插入一个最终新行。", diff --git a/i18n/chs/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/chs/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index d0cafa14bc6..8ebee88ce98 100644 --- a/i18n/chs/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "使用右侧编辑器工具栏的操作来**撤消**你的更改或用你的更改来**覆盖**磁盘上的内容", "discard": "放弃", "overwrite": "覆盖", "retry": "重试", @@ -11,6 +12,5 @@ "genericSaveError": "未能保存“{0}”: {1}", "staleSaveError": "无法保存“{0}”: 磁盘上的内容较新。单击 **比较** 以比较你的版本和磁盘上的版本。", "compareChanges": "比较", - "saveConflictDiffLabel": "{0} (on disk) ↔ {1} (in {2}) - 解决保存的冲突", - "userGuide": "使用右侧编辑器工具栏的操作来**撤消**你的更改或用你的更改来**覆盖**磁盘上的内容" + "saveConflictDiffLabel": "{0} (on disk) ↔ {1} (in {2}) - 解决保存的冲突" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 2625b0dda4a..ea32d4b4ca3 100644 --- a/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "消息(按 {0} 提交)", "installAdditionalSCMProviders": "安装其他 SCM 提供程序...", - "no open repo": "没有可用的源控件。", "source control": "源代码管理", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index e99f415edc0..ad7c43ade10 100644 --- a/i18n/chs/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "转到工作区中的符号...", "name": "搜索", + "search": "搜索", "showSearchViewlet": "显示搜索", "view": "查看", "findInFiles": "在文件中查找", diff --git a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 85853c8d7c0..e9c42baf590 100644 --- a/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "“contributes.{0}.language”中存在未知的语言。提供的值: {1}", + "invalid.path.0": "“contributes.{0}.path”中应为字符串。提供的值: {1}", + "invalid.path.1": "“contributes.{0}.path”({1})应包含在扩展的文件夹({2})内。这可能会使扩展不可移植。", + "vscode.extension.contributes.snippets": "添加代码段。", + "vscode.extension.contributes.snippets-language": "此代码片段参与的语言标识符。", + "vscode.extension.contributes.snippets-path": "代码片段文件的路径。该路径相对于扩展文件夹,通常以 \"./snippets/\" 开头。", + "badVariableUse": "“{0}”代码片段很可能混淆了片段变量和片段占位符。有关详细信息,请访问 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax。", "source.snippet": "用户代码片段", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0},{1}" diff --git a/i18n/chs/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 261eabf5fd0..234516b6743 100644 --- a/i18n/chs/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "显示运行中的任务", "tasks": "任务", - "TaskSystem.noHotSwap": "更改需要重新加载窗口的任务执行引擎。", "TaskService.noBuildTask1": "未定义任何生成任务。使用 \"isBuildCommand\" 在 tasks.json 文件中标记任务。", "TaskService.noBuildTask2": "未定义任何生成任务。在 tasks.json 文件中将任务标记为 \"build\" 组。", "TaskService.noTestTask1": "未定义任何测试任务。使用 \"isTestCommand\" 在 tasks.json 文件中标记任务。", diff --git a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index fc4722516d1..ab9987787d1 100644 --- a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "显示所有已打开的终端", + "terminal": "终端", "terminalIntegratedConfigurationTitle": "集成终端", "terminal.integrated.shell.linux": "终端在 Linux 上使用的 shell 的路径。", "terminal.integrated.shellArgs.linux": "在 Linux 终端上时要使用的命令行参数。", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "在 Windows 终端上时使用的命令行参数。", "terminal.integrated.rightClickCopyPaste": "设置后,在终端内右键单击时,这将阻止显示上下文菜单,相反,它将在有选项时进行复制,并且在没有选项时进行粘贴。", "terminal.integrated.fontFamily": "控制终端的字体系列,这在编辑器中是默认的。fontFamily 的值。", - "terminal.integrated.fontLigatures": "控制是否在终端中启用字体连字。", "terminal.integrated.fontSize": "控制终端的字号(以像素为单位)。", "terminal.integrated.lineHeight": "控制终端的行高,此数字乘以终端字号得到实际行高(以像素表示)。", - "terminal.integrated.enableBold": "是否在终端内启用粗体文本,这需要终端 shell 的支持。", "terminal.integrated.cursorBlinking": "控制终端光标是否闪烁。", "terminal.integrated.cursorStyle": "控制终端游标的样式。", "terminal.integrated.scrollback": "控制终端保持在缓冲区的最大行数。", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "要添加到 VS Code 进程中的带有环境变量的对象,其会被 OS X 终端使用。", "terminal.integrated.env.linux": "要添加到 VS Code 进程中的带有环境变量的对象,其会被 Linux 终端使用。", "terminal.integrated.env.windows": "要添加到 VS Code 进程中的带有环境变量的对象,其会被 Windows 终端使用。", - "terminal": "终端", "terminalCategory": "终端", "viewCategory": "查看" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index e5b5d7633d5..adec8e6bdb7 100644 --- a/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "聚焦于查找小组件", "workbench.action.terminal.hideFindWidget": "隐藏查找小组件", "nextTerminalFindTerm": "显示下一个搜索结果", - "previousTerminalFindTerm": "显示上一个搜索结果", - "quickOpenTerm": "终端: 切换活动终端" + "previousTerminalFindTerm": "显示上一个搜索结果" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/chs/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 0298d3e03d6..5aa494cfd6f 100644 --- a/i18n/chs/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/chs/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "使用命令面板快速访问和搜索命令 ({0})", "welcomePage.interfaceOverview": "界面概述", "welcomePage.interfaceOverviewDescription": "查看突出显示主要 UI 组件的叠加图", - "welcomePage.deployToAzure": "将应用部署到云端", - "welcomePage.deployToAzureDescription": "了解如何将你的 Node 应用部署到 Azure 应用服务", "welcomePage.interactivePlayground": "交互式演练场", "welcomePage.interactivePlaygroundDescription": "在简短演练中试用编辑器的基本功能" } \ No newline at end of file diff --git a/i18n/chs/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/chs/src/vs/workbench/services/configuration/node/configuration.i18n.json index a97bc87af62..2f7035049db 100644 --- a/i18n/chs/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/chs/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "用于配置字符串。", "vscode.extension.contributes.configuration.title": "设置摘要。此标签将在设置文件中用作分隔注释。", "vscode.extension.contributes.configuration.properties": "配置属性的描述。", "scope.window.description": "特定于窗口的配置,可在“用户”或“工作区”设置中配置。", "scope.resource.description": "特定于资源的配置,可在“用户”、“工作区”或“文件夹”设置中配置。", "scope.description": "配置适用的范围。可用范围有“窗口”和“资源”。", - "invalid.type": "如果进行设置,\"configuration.type\" 必须设置为对象", + "vscode.extension.contributes.configuration": "用于配置字符串。", "invalid.title": "configuration.title 必须是字符串", "vscode.extension.contributes.defaultConfiguration": "按语言提供默认编辑器配置设置。", "invalid.properties": "configuration.properties 必须是对象", diff --git a/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json index 0bd4e10c0c1..1e9c4a3880c 100644 --- a/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/chs/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "无效的文件资源({0})", - "fileIsDirectoryError": "文件是目录({0})", "fileNotModifiedError": "自以下时间未修改的文件:", "fileTooLargeError": "文件太大,无法打开", "fileBinaryError": "文件似乎是二进制文件,无法作为文档打开", diff --git a/i18n/cht/extensions/azure-account/out/azure-account.i18n.json b/i18n/cht/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..fbb65831a11 --- /dev/null +++ b/i18n/cht/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "複製和打開", + "azure-account.close": "關閉", + "azure-account.login": "登入", + "azure-account.loginFirst": "未登入,請先登入。", + "azure-account.userCodeFailed": "取得使用者代碼失敗", + "azure-account.tokenFailed": "取得權杖與裝置代碼", + "azure-account.tokenFromRefreshTokenFailed": "取得權杖與重新整理權杖" +} \ No newline at end of file diff --git a/i18n/cht/extensions/azure-account/out/extension.i18n.json b/i18n/cht/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..55e65eed602 --- /dev/null +++ b/i18n/cht/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: 正在登入...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/code/electron-main/windows.i18n.json b/i18n/cht/src/vs/code/electron-main/windows.i18n.json index a3d723b56aa..6dd8d4337f7 100644 --- a/i18n/cht/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/cht/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "確定", "pathNotExistTitle": "路徑不存在", "pathNotExistDetail": "磁碟上似乎已沒有路徑 '{0}'。", - "openWorkspace": "開啟(&&O)...", - "openWorkspaceTitle": "開啟工作區", - "save": "儲存(&&S)", - "doNotSave": "不要儲存(&&N)", - "cancel": "取消", - "saveWorkspaceMessage": "要將工作區組態儲存為檔案嗎?", - "saveWorkspaceDetail": "如果您預計再次開啟工作區,請儲存工作區。", - "saveWorkspace": "儲存工作區", "reopen": "重新開啟", "wait": "繼續等候", "close": "關閉", @@ -24,5 +16,13 @@ "appCrashedDetail": "很抱歉造成您的不便! 您可以重新開啟視窗,從您離開的地方繼續進行。", "open": "開啟", "openFolder": "開啟資料夾", - "openFile": "開啟檔案" + "openFile": "開啟檔案", + "openWorkspace": "開啟(&&O)...", + "openWorkspaceTitle": "開啟工作區", + "save": "儲存(&&S)", + "doNotSave": "不要儲存(&&N)", + "cancel": "取消", + "saveWorkspaceMessage": "要將工作區組態儲存為檔案嗎?", + "saveWorkspaceDetail": "如果您預計再次開啟工作區,請儲存工作區。", + "saveWorkspace": "儲存工作區" } \ No newline at end of file diff --git a/i18n/cht/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/cht/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..8b7662c4c93 --- /dev/null +++ b/i18n/cht/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "關閉" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/platform/environment/node/argv.i18n.json b/i18n/cht/src/vs/platform/environment/node/argv.i18n.json index 3f0c455e716..3b2c99dd58b 100644 --- a/i18n/cht/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/cht/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,7 @@ "reuseWindow": "強制在最近使用的視窗中開啟檔案或資料夾。", "userDataDir": "指定保留使用者資料的目錄,這在以根目錄身分執行時有用。", "verbose": "列印詳細資訊輸出 (表示 --wait)。", - "wait": "等候視窗在傳回前關閉。", + "wait": "等候檔案在傳回前關閉。", "extensionHomePath": "設定擴充功能的根路徑。", "listExtensions": "列出已安裝的擴充功能。", "showVersions": "使用 --list-extension 時,顯示安裝的擴充功能版本。", diff --git a/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 8586f1686ce..9e42e641acc 100644 --- a/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/cht/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "VS Code 擴充功能的啟動事件。", "vscode.extension.activationEvents.onLanguage": "當指定語言檔案開啟時激發該事件", "vscode.extension.activationEvents.onCommand": "當指定的命令被調用時激發該事件", - "vscode.extension.activationEvents.onDebug": "當指定的工作偵錯階段開始時激發該事件", "vscode.extension.activationEvents.workspaceContains": "當開啟指定的文件夾包含glob模式匹配的文件時激發該事件", "vscode.extension.activationEvents.onView": "當指定的檢視被擴展時激發該事件", "vscode.extension.activationEvents.star": "當VS Code啟動時激發該事件,為了確保最好的使用者體驗,當您的擴充功能沒有其他組合作業時,請激活此事件.", diff --git a/i18n/cht/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/cht/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index 4c27d1b8aa4..75d3b7558fd 100644 --- a/i18n/cht/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/cht/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "高對比佈景主題的預設色彩。應為十六進位 (#RRGGBB[AA]) 的色彩值,或提供預設的可設定佈景主題色彩。", "invalid.colorConfiguration": "'configuration.colors' 必須是陣列", "invalid.default.colorType": "{0} 必須是十六進位 (#RRGGBB[AA] or #RGB[A]) 的色彩值,或是提供預設的可設定佈景主題色彩之識別碼。", - "invalid.id": "'configuration.colors.id' 必須定義且不得為空白", "invalid.id.format": "'configuration.colors.id' 必須依照 word[.word]*", - "invalid.description": "'configuration.colors.description' 必須定義且不得為空白", "invalid.defaults": "'configuration.colors.defaults' 必須定義,且必須包含 'light'、'dark' 及 'highContrast'" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/cht/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..98b2d3ba1ce --- /dev/null +++ b/i18n/cht/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "項目必須為陣列", + "requirestring": "屬性 '{0}' 為強制項目且必須屬於 `string` 類型", + "optstring": "屬性 `{0}` 可以省略或必須屬於 `string` 類型", + "vscode.extension.contributes.view.id": "檢視的識別碼。請使用此識別碼透過 `vscode.window.registerTreeDataProviderForView` API 登錄資料提供者。並藉由將 `onView:${id}` 事件登錄至 `activationEvents` 以觸發啟用您的延伸模組。", + "vscode.extension.contributes.view.name": "使用人性化顯示名稱.", + "vscode.extension.contributes.view.when": "必須為 true 以顯示此檢視的條件", + "vscode.extension.contributes.views": "提供意見給編輯者", + "views.explorer": "檔案總管檢視", + "views.debug": "偵錯檢視", + "locationId.invalid": "`{0}`不是有效的識別位置" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 41c6f379e9d..67537d8efa3 100644 --- a/i18n/cht/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/cht/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "從活動列移除", - "keepInActivityBar": "保留在活動列", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "保留在活動列", "additionalViews": "其他檢視", "numberBadge": "{0} ({1})", "manageExtension": "管理延伸模組", diff --git a/i18n/cht/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/cht/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..d9eedec6006 --- /dev/null +++ b/i18n/cht/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} 個動作", + "hideView": "從提要欄位隱藏" +} \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 53bdbc473d2..de1a015d977 100644 --- a/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "識別碼", "view name": "名稱", "view location": "位置", - "themes": "佈景主題 ({0})", "JSON Validation": "JSON 驗證 ({0})", "commands": "命令 ({0})", "command name": "名稱", diff --git a/i18n/cht/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index 063c4fe8bc0..72ce54787b1 100644 --- a/i18n/cht/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "要符合檔案路徑的 Glob 模式。設為 True 或 False 可啟用或停用模式。", "files.exclude.when": "在相符檔案同層級上額外的檢查。請使用 $(basename) 作為相符檔案名稱的變數。", "associations": "將檔案關聯設定為語言 (例如 \"*.extension\": \"html\")。這些語言優先於已安裝語言的預設關聯。", - "encoding": "讀取與寫入檔案時要使用的預設字元集編碼。", - "autoGuessEncoding": "如有啟用,將會在開啟檔案時,嘗試猜測字元集編碼", "eol": "預設結尾斷行字元.LF使用 \\n , CRLF使用\\r\\n ", "trimTrailingWhitespace": "若啟用,將在儲存檔案時修剪尾端空白。", "insertFinalNewline": "啟用時,請在儲存檔案時在其結尾插入最後一個新行。", diff --git a/i18n/cht/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/cht/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 4e8368f2a61..7a6f0b075f7 100644 --- a/i18n/cht/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "在右方使用編輯器工具列中的動作來 **復原** 您的變更,或以您的變更 **覆寫** 磁碟上的內容", "discard": "捨棄", "overwrite": "覆寫", "retry": "重試", @@ -11,6 +12,5 @@ "genericSaveError": "無法儲存 '{0}': {1}", "staleSaveError": "無法儲存 '{0}': 磁碟上的內容較新。請按一下 [比較],比較您的版本與磁碟上的版本。", "compareChanges": "比較", - "saveConflictDiffLabel": "{0} (位於磁碟) ↔ {1} (在 {2} 中) - 解決儲存衝突", - "userGuide": "在右方使用編輯器工具列中的動作來 **復原** 您的變更,或以您的變更 **覆寫** 磁碟上的內容" + "saveConflictDiffLabel": "{0} (位於磁碟) ↔ {1} (在 {2} 中) - 解決儲存衝突" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index b734d88f6ea..ac745b8e8e1 100644 --- a/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "安裝額外SCM提供者...", - "no open repo": "沒有使用中的原始檔控制。", "source control": "原始檔控制", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 1a4174cfa0b..533ad58e7aa 100644 --- a/i18n/cht/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "前往工作區中的符號...", "name": "搜尋", + "search": "搜尋", "showSearchViewlet": "顯示搜尋", "view": "檢視", "findInFiles": "在檔案中尋找", diff --git a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index bfbf6a8011c..16e82cf135f 100644 --- a/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "`contributes.{0}.language` 中的不明語言。提供的值: {1}", + "invalid.path.0": "'contributes.{0}.path' 中應有字串。提供的值: {1}", + "invalid.path.1": "擴充功能資料夾 ({2}) 應包含 'contributes.{0}.path' ({1})。這可能會導致擴充功能無法移植。", + "vscode.extension.contributes.snippets": "提供程式碼片段。", + "vscode.extension.contributes.snippets-language": "要予以提供此程式碼片段的語言識別碼。", + "vscode.extension.contributes.snippets-path": "程式碼片段檔案的路徑。此路徑是擴充功能資料夾的相對路徑,而且一般會以 './snippets/' 開頭。", + "badVariableUse": "程式碼片段 \"{0}\" 很可能會混淆 snippet-variables 及 snippet-placeholders。如需詳細資料,請參閱 https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax。", "source.snippet": "使用者程式碼片段", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0},{1}" diff --git a/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index f56946faed2..e43759a7db8 100644 --- a/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "顯示執行中的工作", "tasks": "工作", - "TaskSystem.noHotSwap": "必須重新載入視窗才能變更工作執行引擎", "TaskService.noBuildTask1": "未定義任何建置工作。請使用 'isBuildCommand' 標記 tasks.json 檔案中的工作。", "TaskService.noBuildTask2": "未定義任何組建工作,請在 tasks.json 檔案中將工作標記為 'build' 群組。", "TaskService.noTestTask1": "未定義任何建置工作。請使用 'isTestCommand' 標記 tasks.json 檔案中的工作。", diff --git a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 1e1fd885406..5a928b9d911 100644 --- a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "顯示所有已開啟的終端機", + "terminal": "終端機", "terminalIntegratedConfigurationTitle": "整合式終端機", "terminal.integrated.shell.linux": "終端機在 Linux 上使用的殼層路徑。", "terminal.integrated.shellArgs.linux": "在 Linux 終端機要使用的命令列引數。", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "在 Windows 終端機上時要使用的命令列引數。", "terminal.integrated.rightClickCopyPaste": "如有設定,這會防止在終端機內按滑鼠右鍵時顯示操作功能表,而是在有選取項目時複製、沒有選取項目時貼上。", "terminal.integrated.fontFamily": "控制終端機的字型家族,預設為 editor.fontFamily 的值。", - "terminal.integrated.fontLigatures": "控制是否在終端機中啟用連字字型。", "terminal.integrated.fontSize": "控制終端機的字型大小 (以像素為單位)。", "terminal.integrated.lineHeight": "控制終端機的行高,此數字會乘上終端機字型大小,以取得以像素為單位的實際行高。", - "terminal.integrated.enableBold": "是否要在終端機內啟用粗體文字。此動作需要終端機殼層的支援。", "terminal.integrated.cursorBlinking": "控制終端機資料指標是否閃爍。", "terminal.integrated.cursorStyle": "控制終端機資料指標的樣式。", "terminal.integrated.scrollback": "控制終端機保留在其緩衝區中的行數上限。", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "OS X 上的終端機要使用之具有將新增至 VS Code 流程之環境變數的物件", "terminal.integrated.env.linux": "Linux 上的終端機要使用之具有將新增至 VS Code 流程之環境變數的物件", "terminal.integrated.env.windows": "Windows 上的終端機要使用之具有將新增至 VS Code 流程之環境變數的物件", - "terminal": "終端機", "terminalCategory": "終端機", "viewCategory": "檢視" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 245ef9de86d..4cc323017ff 100644 --- a/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "焦點尋找小工具", "workbench.action.terminal.hideFindWidget": "隱藏尋找小工具", "nextTerminalFindTerm": "顯示下一個尋找字詞", - "previousTerminalFindTerm": "顯示上一個尋找字詞", - "quickOpenTerm": "終端機: 切換使用中的終端機" + "previousTerminalFindTerm": "顯示上一個尋找字詞" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/cht/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 69dbf592cda..69805b63ee1 100644 --- a/i18n/cht/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/cht/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "從命令選擇區快速存取及搜尋命令 ({0})", "welcomePage.interfaceOverview": "介面概觀", "welcomePage.interfaceOverviewDescription": "使用視覺覆疊效果強調顯示 UI 的主要元件", - "welcomePage.deployToAzure": "佈署應用程式到雲端", - "welcomePage.deployToAzureDescription": "了解如何將結點應用程式部署至 Azure App Service", "welcomePage.interactivePlayground": "Interactive Playground", "welcomePage.interactivePlaygroundDescription": "嘗試使用逐步解說短片中的一些基本編輯器功能" } \ No newline at end of file diff --git a/i18n/cht/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/cht/src/vs/workbench/services/configuration/node/configuration.i18n.json index 6a75f4da160..53d51ad9b47 100644 --- a/i18n/cht/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/cht/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "提供組態設定。", "vscode.extension.contributes.configuration.title": "設定的摘要。此標籤將會在設定檔中作為分隔註解使用。", "vscode.extension.contributes.configuration.properties": "組態屬性的描述。", "scope.window.description": "視窗特定組態,可在使用者或工作區設定中予以設定。", "scope.resource.description": "資源特定設定,可在使用者、工作區或資料夾設定中予以設定。", "scope.description": "組態適用的範圍。可用的範圍為「視窗」和「資源」。", - "invalid.type": "如果已設定,'configuration.type' 必須設定為物件", + "vscode.extension.contributes.configuration": "提供組態設定。", "invalid.title": "'configuration.title' 必須是字串", "vscode.extension.contributes.defaultConfiguration": "依語言貢獻預設編輯器組態設定。", "invalid.properties": "'configuration.properties' 必須是物件", diff --git a/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json index 67227a075fa..e5385600913 100644 --- a/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/cht/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "檔案資源 ({0}) 無效", - "fileIsDirectoryError": "檔案是目錄 ({0})", "fileNotModifiedError": "未修改檔案的時間", "fileTooLargeError": "檔案太大無法開啟", "fileBinaryError": "檔案似乎是二進位檔,因此無法當做文字開啟", diff --git a/i18n/deu/extensions/azure-account/out/azure-account.i18n.json b/i18n/deu/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..888fa9b955d --- /dev/null +++ b/i18n/deu/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,13 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Kopieren & Öffnen", + "azure-account.close": "Schließen", + "azure-account.loginFirst": "Nicht angemeldet, bitte zuerst anmelden.", + "azure-account.userCodeFailed": "Fehler beim Erfassen von Benutzercode.", + "azure-account.tokenFailed": "Token wird mit Gerätecode erfasst", + "azure-account.tokenFromRefreshTokenFailed": "Token wird mit Aktualisierungstoken erfasst" +} \ No newline at end of file diff --git a/i18n/deu/extensions/azure-account/out/extension.i18n.json b/i18n/deu/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..1b7d65fb173 --- /dev/null +++ b/i18n/deu/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: Melde an...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/code/electron-main/menus.i18n.json b/i18n/deu/src/vs/code/electron-main/menus.i18n.json index c83d6379595..790e6e94cd1 100644 --- a/i18n/deu/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/deu/src/vs/code/electron-main/menus.i18n.json @@ -151,6 +151,10 @@ "mZoom": "Zoom", "mBringToFront": "Alle in den Vordergrund", "miSwitchWindow": "Fenster &&wechseln...", + "mShowPreviousTab": "Vorherige Registerkarte anzeigen", + "mShowNextTab": "Nächste Registerkarte anzeigen", + "mMoveTabToNewWindow": "Registerkarte in neues Fenster verschieben", + "mMergeAllWindows": "Alle Fenster zusammenführen", "miToggleDevTools": "&&Entwicklertools umschalten", "miAccessibilityOptions": "&&Optionen für erleichterte Bedienung", "miReportIssues": "&&Probleme melden", @@ -180,6 +184,6 @@ "miDownloadingUpdate": "Das Update wird heruntergeladen...", "miInstallingUpdate": "Update wird installiert...", "miCheckForUpdates": "Nach Aktualisierungen suchen...", - "aboutDetail": "\nVersion {0}\nCommit {1}\nDatum {2}\nShell {3}\nRenderer {4}\nKnoten {5}\nArchitektur {6}", + "aboutDetail": "\nVersion {0}\nCommit {1}\nDatum {2}\nShell {3}\nRenderer {4}\nNode {5}\nArchitektur {6}", "okButton": "OK" } \ No newline at end of file diff --git a/i18n/deu/src/vs/code/electron-main/windows.i18n.json b/i18n/deu/src/vs/code/electron-main/windows.i18n.json index 04a3d636bd9..79397671383 100644 --- a/i18n/deu/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/deu/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "OK", "pathNotExistTitle": "Der Pfad ist nicht vorhanden.", "pathNotExistDetail": "Der Pfad \"{0}\" scheint auf dem Datenträger nicht mehr vorhanden zu sein.", - "openWorkspace": "&&Öffnen", - "openWorkspaceTitle": "Arbeitsbereich öffnen", - "save": "&&Speichern", - "doNotSave": "&&Nicht speichern", - "cancel": "Abbrechen", - "saveWorkspaceMessage": "Möchten Sie Ihre Arbeitsbereichskonfiguration als Datei speichern?", - "saveWorkspaceDetail": "Speichern Sie Ihren Arbeitsbereich, wenn Sie ihn erneut öffnen möchten.", - "saveWorkspace": "Arbeitsbereich speichern", "reopen": "Erneut öffnen", "wait": "Bitte warten.", "close": "Schließen", @@ -24,5 +16,13 @@ "appCrashedDetail": "Bitte entschuldigen Sie die Unannehmlichkeiten. Sie können das Fenster erneut öffnen und dort weitermachen, wo Sie aufgehört haben.", "open": "Öffnen", "openFolder": "Ordner öffnen", - "openFile": "Datei öffnen" + "openFile": "Datei öffnen", + "openWorkspace": "&&Öffnen", + "openWorkspaceTitle": "Arbeitsbereich öffnen", + "save": "&&Speichern", + "doNotSave": "&&Nicht speichern", + "cancel": "Abbrechen", + "saveWorkspaceMessage": "Möchten Sie Ihre Arbeitsbereichskonfiguration als Datei speichern?", + "saveWorkspaceDetail": "Speichern Sie Ihren Arbeitsbereich, wenn Sie ihn erneut öffnen möchten.", + "saveWorkspace": "Arbeitsbereich speichern" } \ No newline at end of file diff --git a/i18n/deu/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/deu/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..d057bbcc407 --- /dev/null +++ b/i18n/deu/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Schließen" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/platform/environment/node/argv.i18n.json b/i18n/deu/src/vs/platform/environment/node/argv.i18n.json index d8e52e65222..25a0dca34be 100644 --- a/i18n/deu/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/deu/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,7 @@ "reuseWindow": "Erzwingt das Öffnen einer Datei oder eines Ordners im letzten aktiven Fenster.", "userDataDir": "Gibt das Verzeichnis an, in dem Benutzerdaten gespeichert werden. Nützlich, wenn die Ausführung als \"root\" erfolgt.", "verbose": "Ausführliche Ausgabe (impliziert \"-wait\").", - "wait": "Wartet, bis das Fenster geschlossen wurde, bevor die Rückgabe erfolgt.", + "wait": "Warten Sie, bis die Dateien geschlossen sind, bevor Sie zurück gehen können.", "extensionHomePath": "Legen Sie den Stammpfad für Extensions fest.", "listExtensions": "Listet die installierten Extensions auf.", "showVersions": "Zeigt Versionen der installierten Erweiterungen an, wenn \"--list-extension\" verwendet wird.", diff --git a/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 2a33dae4abf..e0774394ce8 100644 --- a/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/deu/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,7 @@ "vscode.extension.activationEvents": "Aktivierungsereignisse für die VS Code-Extension.", "vscode.extension.activationEvents.onLanguage": "Ein Aktivierungsereignis wird beim Öffnen einer Datei ausgegeben, die in die angegebene Sprache aufgelöst wird.", "vscode.extension.activationEvents.onCommand": "Ein Aktivierungsereignis wird beim Aufrufen des angegebenen Befehls ausgegeben.", - "vscode.extension.activationEvents.onDebug": "Ein Aktivierungsereignis wird beim Starten einer Debugsitzung des angegebenen Typs ausgegeben.", + "vscode.extension.activationEvents.onDebug": "Ein Aktivierungsereignis wird ausgesandt, wenn ein Benutzer eine Debugging startet, oder eine Debug-Konfiguration erstellt.", "vscode.extension.activationEvents.workspaceContains": "Ein Aktivierungsereignis wird beim Öffnen eines Ordners ausgegeben, der mindestens eine Datei enthält, die mit dem angegebenen Globmuster übereinstimmt.", "vscode.extension.activationEvents.onView": "Ein Aktivierungsereignis wird beim Erweitern der angegebenen Ansicht ausgegeben.", "vscode.extension.activationEvents.star": "Ein Aktivierungsereignis wird beim Start von VS Code ausgegeben. Damit für die Endbenutzer eine bestmögliche Benutzerfreundlichkeit sichergestellt ist, verwenden Sie dieses Aktivierungsereignis in Ihrer Erweiterung nur dann, wenn in Ihrem Anwendungsfall keine andere Kombination an Aktivierungsereignissen funktioniert.", diff --git a/i18n/deu/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/deu/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index b2fc3c591a6..4c1032ffde2 100644 --- a/i18n/deu/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/deu/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "Die Standardfarbe für Themen mit hohem Kontrast. Entweder eine Farbe als Hex-Code (#RRGGBB[AA]) oder der Bezeichner einer verwendbaren Farbe, der eine Standardeinstellung bereitstellt.", "invalid.colorConfiguration": "\"configuration.colors\" muss ein Array sein.", "invalid.default.colorType": "{0} muss entweder eine Farbe als Hex-Code (#RRGGBB[AA] oder #RGB[A]) sein oder der Bezeichner einer verwendbaren Farbe, der eine Standardeinstellung bereitstellt.", - "invalid.id": "\"configuration.colors.id\" muss definiert und nicht leer sein", "invalid.id.format": "\"configuration.colors.id\" muss auf das Wort[.word]* folgen", - "invalid.description": "\"configuration.colors.description\" muss definiert und nicht leer sein", "invalid.defaults": "\"configuration.colors.defaults\" muss definiert sein, und \"light\", \"dark\" und \"highContrast\" enthalten" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/deu/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..79702d24961 --- /dev/null +++ b/i18n/deu/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "Ansichten müssen ein Array sein.", + "requirestring": "Die Eigenschaft \"{0}\" ist erforderlich. Sie muss vom Typ \"string\" sein.", + "optstring": "Die Eigenschaft \"{0}\" kann ausgelassen werden oder muss vom Typ \"string\" sein.", + "vscode.extension.contributes.view.id": "Bezeichner der Ansicht. Damit können Sie einen Datenanbieter über die API \"vscode.window.registerTreeDataProviderForView\" registrieren. Er dient auch zum Aktivieren Ihrer Erweiterung, indem Sie das Ereignis \"onView:${id}\" für \"activationEvents\" registrieren.", + "vscode.extension.contributes.view.name": "Der visuell lesbare Name der Ansicht. Wird angezeigt", + "vscode.extension.contributes.view.when": "Bedingung, die zum Anzeigen dieser Ansicht erfüllt sein muss", + "vscode.extension.contributes.views": "Trägt Ansichten zum Editor bei.", + "views.explorer": "Explorer-Ansicht", + "views.debug": "Debugansicht", + "locationId.invalid": "{0}\" ist kein gültiger Ansichtenspeicherort" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 745ba80b274..4437919e515 100644 --- a/i18n/deu/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/deu/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Aus Aktivitätsleiste entfernen", - "keepInActivityBar": "In Aktivitätsleiste behalten", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "In Aktivitätsleiste behalten", "additionalViews": "Zusätzliche Ansichten", "numberBadge": "{0} ({1})", "manageExtension": "Erweiterung verwalten", diff --git a/i18n/deu/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/deu/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..17abacb1d8c --- /dev/null +++ b/i18n/deu/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0}-Aktionen", + "hideView": "Auf Randleiste ausblenden" +} \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json index 908ac5f9840..3143fe77de2 100644 --- a/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -10,6 +10,7 @@ "workspaces": "Arbeitsbereiche", "developer": "Entwickler", "showEditorTabs": "Steuert, ob geöffnete Editoren auf Registerkarten angezeigt werden sollen.", + "workbench.editor.labelFormat.short": "Den Namen der Datei anzeigen, gefolgt von dessen Verzeichnisnamen.", "editorTabCloseButton": "Steuert die Position der Schließen-Schaltflächen der Editor-Registerkarten oder deaktiviert sie bei der Einstellung \"off\".", "showIcons": "Steuert, ob geöffnete Editoren mit einem Symbol angezeigt werden sollen. Hierzu muss auch ein Symboldesign aktiviert werden.", "enablePreview": "Steuert, ob geöffnete Editoren als Vorschau angezeigt werden. Vorschau-Editoren werden wiederverwendet, bis sie gespeichert werden (z. B. über Doppelklicken oder Bearbeiten).", diff --git a/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 8ecbab6f2e9..b8500949209 100644 --- a/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "ID", "view name": "Name", "view location": "Wo", - "themes": "Designs ({0})", "JSON Validation": "JSON-Validierung ({0})", "commands": "Befehle ({0})", "command name": "Name", diff --git a/i18n/deu/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index 9e3f5cd16a7..e568ba3c98f 100644 --- a/i18n/deu/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "Das Globmuster, mit dem Dateipfade verglichen werden sollen. Legen Sie diesen Wert auf \"true\" oder \"false\" fest, um das Muster zu aktivieren bzw. zu deaktivieren.", "files.exclude.when": "Zusätzliche Überprüfung der gleichgeordneten Elemente einer entsprechenden Datei. Verwenden Sie \"$(basename)\" als Variable für den entsprechenden Dateinamen.", "associations": "Konfigurieren Sie Dateizuordnungen zu Sprachen (beispielsweise \"*.extension\": \"html\"). Diese besitzen Vorrang vor den Standardzuordnungen der installierten Sprachen.", - "encoding": "Die Standardzeichensatz-Codierung, die beim Lesen und Schreiben von Dateien verwendet werden soll.", - "autoGuessEncoding": "Ist diese Option aktiviert, wird beim Öffnen von Dateien versucht, die Zeichensatzcodierung automatisch zu ermitteln.", "eol": "Das Zeilenende-Standardzeichen. Verwenden Sie \\n für LF und \\r\\n für CRLF.", "trimTrailingWhitespace": "Bei Aktivierung werden nachgestellte Leerzeichen beim Speichern einer Datei gekürzt.", "insertFinalNewline": "Bei Aktivierung wird beim Speichern einer Datei eine abschließende neue Zeile am Dateiende eingefügt.", diff --git a/i18n/deu/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/deu/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 7bd4f281a16..55ed6344bee 100644 --- a/i18n/deu/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Verwenden Sie die Aktionen auf der Editor-Symbolleiste auf der rechten Seite, um Ihre Änderungen **rückgängig zu machen** oder den Inhalt auf dem Datenträger mit Ihren Änderungen zu **überschreiben**.", "discard": "Verwerfen", "overwrite": "Überschreiben", "retry": "Wiederholen", @@ -11,6 +12,5 @@ "genericSaveError": "Fehler beim Speichern von \"{0}\": {1}.", "staleSaveError": "Fehler beim Speichern von \"{0}\": Der Inhalt auf dem Datenträger ist neuer. Klicken Sie auf **Vergleichen**, um Ihre Version mit der Version auf dem Datenträger zu vergleichen.", "compareChanges": "Vergleichen", - "saveConflictDiffLabel": "{0} (auf Datenträger) ↔ {1} (in {2}): Speicherkonflikt lösen", - "userGuide": "Verwenden Sie die Aktionen auf der Editor-Symbolleiste auf der rechten Seite, um Ihre Änderungen **rückgängig zu machen** oder den Inhalt auf dem Datenträger mit Ihren Änderungen zu **überschreiben**." + "saveConflictDiffLabel": "{0} (auf Datenträger) ↔ {1} (in {2}): Speicherkonflikt lösen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 786f8d2dbc0..e2b7029e51b 100644 --- a/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "Installiere weiter SCM Provider...", - "no open repo": "Keine Quellsteuerelemente sind aktiv.", "source control": "Quellcodeverwaltung", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index fccafa19088..44f81eb9c7f 100644 --- a/i18n/deu/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Zu Symbol im Arbeitsbereich wechseln...", "name": "Suchen", + "search": "Suchen", "showSearchViewlet": "Suche anzeigen", "view": "Anzeigen", "findInFiles": "In Dateien suchen", diff --git a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index d7eacd9f7d8..8dae1914450 100644 --- a/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Unbekannte Sprache in \"contributes.{0}.language\". Bereitgestellter Wert: {1}", + "invalid.path.0": "Expected string in `contributes.{0}.path`. Provided value: {1}", + "invalid.path.1": "Es wurde erwartet, dass \"contributes.{0}.path\" ({1}) im Ordner ({2}) der Erweiterung enthalten ist. Dies führt ggf. dazu, dass die Erweiterung nicht portierbar ist.", + "vscode.extension.contributes.snippets": "Trägt Codeausschnitte bei.", + "vscode.extension.contributes.snippets-language": "Der Sprachbezeichner, für den dieser Codeausschnitt beigetragen wird.", + "vscode.extension.contributes.snippets-path": "Der Pfad der Codeausschnittdatei. Der Pfad ist relativ zum Erweiterungsordner und beginnt normalerweise mit \". /snippets/\".", + "badVariableUse": "Das \"{0}\"-Snippet verwirrt wahrscheinlich Snippet-Variablen und Snippet-Paltzhalter. Schaue https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax für weitere Informationen.", "source.snippet": "Benutzercodeausschnitt", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 6c15ead2389..d5bb26dd92c 100644 --- a/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "mehr als 99", "runningTasks": "Aktive Aufgaben anzeigen", "tasks": "Aufgaben", - "TaskSystem.noHotSwap": "Zum Ändern des Aufgabenausführungsmoduls muss das Fenster erneut geladen werden.", "TaskService.noBuildTask1": "Keine Buildaufgabe definiert. Markieren Sie eine Aufgabe mit 'isBuildCommand' in der tasks.json-Datei.", "TaskService.noBuildTask2": "Es ist keine Buildaufgabe definiert. Markieren Sie eine Aufgabe in der Datei \"tasks.json\" als \"Buildgruppe\". ", "TaskService.noTestTask1": "Keine Testaufgabe definiert. Markieren Sie eine Aufgabe mit 'isTestCommand' in der tasks.json-Datei.", diff --git a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 0c03c817226..caa7dd980fd 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Alle geöffneten Terminals anzeigen", + "terminal": "Terminal", "terminalIntegratedConfigurationTitle": "Integriertes Terminal", "terminal.integrated.shell.linux": "Der Pfad der Shell, den das Terminal unter Linux verwendet.", "terminal.integrated.shellArgs.linux": "Die Befehlszeilenargumente, die für das Linux-Terminal verwendet werden sollen.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Die Befehlszeilenargumente, die im Windows-Terminal verwendet werden sollen.", "terminal.integrated.rightClickCopyPaste": "Wenn dies festgelegt ist, erscheint das Kontextmenü bei einem Rechtsklick im Terminal nicht mehr. Stattdessen erfolgen die Vorgänge Kopieren, wenn eine Auswahl vorgenommen wurde, sowie Einfügen, wenn keine Auswahl vorgenommen wurde.", "terminal.integrated.fontFamily": "Steuert die Schriftartfamilie des Terminals. Der Standardwert ist \"editor.fontFamily\".", - "terminal.integrated.fontLigatures": "Steuert, ob Schriftartligaturen im Terminal aktiviert sind.", "terminal.integrated.fontSize": "Steuert den Schriftgrad des Terminals in Pixeln.", "terminal.integrated.lineHeight": "Steuert die Zeilenhöhe für das Terminal. Dieser Wert wird mit dem Schriftgrad des Terminals multipliziert, um die tatsächliche Zeilenhöhe in Pixeln zu erhalten.", - "terminal.integrated.enableBold": "Gibt an, ob Fettdruck im Terminal aktiviert werden soll. Dies muss durch die Terminalshell unterstützt werden.", "terminal.integrated.cursorBlinking": "Steuert, ob der Terminalcursor blinkt.", "terminal.integrated.cursorStyle": "Steuert den Stil des Terminalcursors.", "terminal.integrated.scrollback": "Steuert die maximale Anzahl von Zeilen, die das Terminal im Puffer beibehält.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "Objekt mit Umgebungsvariablen, das dem unter OS X vom Terminal zu verwendenden VS Code-Prozess hinzugefügt wird", "terminal.integrated.env.linux": "Objekt mit Umgebungsvariablen, das dem unter Linux vom Terminal zu verwendenden VS Code-Prozess hinzugefügt wird", "terminal.integrated.env.windows": "Objekt mit Umgebungsvariablen, das dem unter Windows vom Terminal zu verwendenden VS Code-Prozess hinzugefügt wird", - "terminal": "Terminal", "terminalCategory": "Terminal", "viewCategory": "Anzeigen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 3ec37100eac..54fd0c65e90 100644 --- a/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "Widget zum Anzeigen der Suche mit Fokus", "workbench.action.terminal.hideFindWidget": "Widget zum Ausblenden der Suche", "nextTerminalFindTerm": "Nächsten Suchbegriff anzeigen", - "previousTerminalFindTerm": "Vorherigen Suchbegriff anzeigen", - "quickOpenTerm": "Terminal: Aktives Terminal wechseln" + "previousTerminalFindTerm": "Vorherigen Suchbegriff anzeigen" } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/deu/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 40722803a72..75f68335e05 100644 --- a/i18n/deu/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/deu/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "Über die Befehlspalette ({0}) schnell auf Befehle zugreifen und nach Befehlen suchen", "welcomePage.interfaceOverview": "Überblick über die Schnittstelle", "welcomePage.interfaceOverviewDescription": "Erhalten Sie eine visuelle Überlagerung, die die wichtigsten Komponenten der Benutzeroberfläche hervorhebt.", - "welcomePage.deployToAzure": "Anwendungen in der Cloud bereitstellen", - "welcomePage.deployToAzureDescription": "Hier erfahren Sie, wie Sie Ihre Node-Apps in Azure App Service bereitstellen.", "welcomePage.interactivePlayground": "Interaktiver Playground", "welcomePage.interactivePlaygroundDescription": "Testen Sie die wichtigsten Editorfunktionen in einer kurzen exemplarischen Vorgehensweise." } \ No newline at end of file diff --git a/i18n/deu/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/deu/src/vs/workbench/services/configuration/node/configuration.i18n.json index 9bf4abe27f1..66444d36312 100644 --- a/i18n/deu/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/deu/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Trägt Konfigurationseigenschaften bei.", "vscode.extension.contributes.configuration.title": "Eine Zusammenfassung der Einstellungen. Diese Bezeichnung wird in der Einstellungsdatei als trennender Kommentar verwendet.", "vscode.extension.contributes.configuration.properties": "Die Beschreibung der Konfigurationseigenschaften.", "scope.window.description": "Fensterspezifische Konfiguration, die in den Benutzer- oder Arbeitsbereichseinstellungen konfiguriert werden kann.", "scope.resource.description": "Ressourcenspezifische Konfiguration, die in den Benutzer-, Arbeitsbereichs- oder Ordnereinstellungen konfiguriert werden kann.", "scope.description": "Bereich, in dem die Konfiguration gültig ist. Verfügbare Gültigkeitsbereiche sind \"window\" und \"resource\".", - "invalid.type": "Wenn eine Festlegung erfolgt, muss \"configuration.type\" auf \"object\" festgelegt werden.", + "vscode.extension.contributes.configuration": "Trägt Konfigurationseigenschaften bei.", "invalid.title": "configuration.title muss eine Zeichenfolge sein.", "vscode.extension.contributes.defaultConfiguration": "Trägt zu Konfigurationeinstellungen des Standard-Editors für die jeweilige Sprache bei.", "invalid.properties": "\"configuration.properties\" muss ein Objekt sein.", diff --git a/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json index 43bafc03826..e44865e5a0f 100644 --- a/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/deu/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Ungültige Dateiressource ({0})", - "fileIsDirectoryError": "Die Datei ist ein Verzeichnis ({0}).", "fileNotModifiedError": "Datei nicht geändert seit", "fileTooLargeError": "Die Datei ist zu groß, um sie zu öffnen.", "fileBinaryError": "Die Datei scheint eine Binärdatei zu sein und kann nicht als Text geöffnet werden.", diff --git a/i18n/esn/extensions/azure-account/out/azure-account.i18n.json b/i18n/esn/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..787c5816b1d --- /dev/null +++ b/i18n/esn/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Copiar y abrir", + "azure-account.close": "Cerrar", + "azure-account.login": "Iniciar sesión", + "azure-account.loginFirst": "No ha iniciado sesión, inicie sesión primero.", + "azure-account.userCodeFailed": "Error adquiriendo el código de usuario", + "azure-account.tokenFailed": "Adquiriendo token con el código de dispositivo", + "azure-account.tokenFromRefreshTokenFailed": "Adquiriendo token con token de actualización" +} \ No newline at end of file diff --git a/i18n/esn/extensions/azure-account/out/extension.i18n.json b/i18n/esn/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..33e171e85c5 --- /dev/null +++ b/i18n/esn/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: Iniciando sesión...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/esn/extensions/css/package.i18n.json b/i18n/esn/extensions/css/package.i18n.json index 00bd711e0f7..3dd3dce11b7 100644 --- a/i18n/esn/extensions/css/package.i18n.json +++ b/i18n/esn/extensions/css/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "css.title": "CSS", "css.lint.argumentsInColorFunction.desc": "Número de parámetros no válido", "css.lint.boxModel.desc": "No use ancho o alto con el relleno o los bordes.", "css.lint.compatibleVendorPrefixes.desc": "Cuando use un prefijo específico del proveedor, compruebe que también haya incluido el resto de propiedades específicas del proveedor.", @@ -25,6 +26,7 @@ "css.trace.server.desc": "Hace un seguimiento de la comunicación entre VSCode y el servidor de lenguaje CSS.", "css.validate.title": "Controla la validación de CSS y la gravedad de los problemas.", "css.validate.desc": "Habilita o deshabilita todas las validaciones", + "less.title": "LESS", "less.lint.argumentsInColorFunction.desc": "Número de parámetros no válido", "less.lint.boxModel.desc": "No use ancho o alto con el relleno o los bordes.", "less.lint.compatibleVendorPrefixes.desc": "Cuando use un prefijo específico del proveedor, compruebe que también haya incluido el resto de propiedades específicas del proveedor.", @@ -45,6 +47,7 @@ "less.lint.zeroUnits.desc": "No se necesita una unidad para cero", "less.validate.title": "Controla la validación de LESS y la gravedad de los problemas.", "less.validate.desc": "Habilita o deshabilita todas las validaciones", + "scss.title": "SCSS (Sass)", "scss.lint.argumentsInColorFunction.desc": "Número de parámetros no válido", "scss.lint.boxModel.desc": "No use ancho o alto con el relleno o los bordes.", "scss.lint.compatibleVendorPrefixes.desc": "Cuando use un prefijo específico del proveedor, compruebe que también haya incluido el resto de propiedades específicas del proveedor.", diff --git a/i18n/esn/extensions/git/package.i18n.json b/i18n/esn/extensions/git/package.i18n.json index 5b79f9f5752..1f2157d1fbe 100644 --- a/i18n/esn/extensions/git/package.i18n.json +++ b/i18n/esn/extensions/git/package.i18n.json @@ -59,5 +59,5 @@ "config.defaultCloneDirectory": "La ubicación predeterminada en la que se clona un repositorio git", "config.enableSmartCommit": "Confirmar todos los cambios cuando no hay elementos almacenados provisionalmente.", "config.enableCommitSigning": "Habilitar confirmar firma con GPG.", - "config.discardAllScope": "Controla qué cambios son descartados por el comando 'Descartar todos los cambios'. 'todos' descarta todos los cambios. 'seguidos' descarta sólo los ficheros en seguimiento. 'confirmar' muestra un cuadro de diálogo para confirmar cada vez la acción ejecutada." + "config.discardAllScope": "Controla qué cambios son descartados por el comando 'Descartar todos los cambios'. 'all' descarta todos los cambios. 'tracked' descarta sólo los ficheros en seguimiento. 'prompt' muestra un cuadro de diálogo para confirmar cada vez la acción ejecutada." } \ No newline at end of file diff --git a/i18n/esn/src/vs/code/electron-main/menus.i18n.json b/i18n/esn/src/vs/code/electron-main/menus.i18n.json index df5c5da56dc..01a9a2bd0ce 100644 --- a/i18n/esn/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/esn/src/vs/code/electron-main/menus.i18n.json @@ -151,6 +151,10 @@ "mZoom": "Zoom", "mBringToFront": "Traer todo al frente", "miSwitchWindow": "Cambiar &&Ventana...", + "mShowPreviousTab": "Mostrar pestaña anterior", + "mShowNextTab": "Mostrar siguiente pestaña", + "mMoveTabToNewWindow": "Mover pestaña a una nueva ventana", + "mMergeAllWindows": "Fusionar todas las ventanas", "miToggleDevTools": "&&Alternar herramientas de desarrollo", "miAccessibilityOptions": "&&Opciones de accesibilidad", "miReportIssues": "&&Notificar problemas", diff --git a/i18n/esn/src/vs/code/electron-main/windows.i18n.json b/i18n/esn/src/vs/code/electron-main/windows.i18n.json index 1e72e361ddf..228ae40964f 100644 --- a/i18n/esn/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/esn/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "Aceptar", "pathNotExistTitle": "La ruta no existe", "pathNotExistDetail": "Parece que la ruta '{0}' ya no existe en el disco.", - "openWorkspace": "&&Abrir...", - "openWorkspaceTitle": "Abrir área de trabajo", - "save": "&&Guardar", - "doNotSave": "&&No guardar", - "cancel": "Cancelar", - "saveWorkspaceMessage": "¿Quiere guardar la configuración del área de trabajo como un archivo?", - "saveWorkspaceDetail": "Guarde el área de trabajo si tiene pensado volverla a abrir.", - "saveWorkspace": "Guardar área de trabajo", "reopen": "Volver a abrir", "wait": "Siga esperando", "close": "Cerrar", @@ -24,5 +16,14 @@ "appCrashedDetail": "Sentimos las molestias. Puede volver a abrir la ventana para continuar donde se detuvo.", "open": "Abrir", "openFolder": "Abrir carpeta", - "openFile": "Abrir archivo" + "openFile": "Abrir archivo", + "workspaceOpenedMessage": "No se puede guardar el espacio de trabajo '{0}'", + "openWorkspace": "&&Abrir...", + "openWorkspaceTitle": "Abrir área de trabajo", + "save": "&&Guardar", + "doNotSave": "&&No guardar", + "cancel": "Cancelar", + "saveWorkspaceMessage": "¿Quiere guardar la configuración del área de trabajo como un archivo?", + "saveWorkspaceDetail": "Guarde el área de trabajo si tiene pensado volverla a abrir.", + "saveWorkspace": "Guardar área de trabajo" } \ No newline at end of file diff --git a/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json index eced5bb390d..73fc9abaf4b 100644 --- a/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/esn/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -88,6 +88,7 @@ "accessibilitySupport": "Controla si el editor se debe ejecutar en un modo optimizado para lectores de pantalla.", "links": "Controla si el editor debe detectar enlaces y hacerlos cliqueables", "colorDecorators": "Controla si el editor debe representar el Selector de colores y los elementos Decorator de color en línea.", + "codeActions": "Permite que el foco de acción del código", "sideBySide": "Controla si el editor de diferencias muestra las diferencias en paralelo o alineadas.", "ignoreTrimWhitespace": "Controla si el editor de diferencias muestra los cambios de espacio inicial o espacio final como diferencias.", "renderIndicators": "Controla si el editor de diff muestra indicadores +/- para cambios agregados/quitados", diff --git a/i18n/esn/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/esn/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..067249df5b1 --- /dev/null +++ b/i18n/esn/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Cerrar" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/platform/environment/node/argv.i18n.json b/i18n/esn/src/vs/platform/environment/node/argv.i18n.json index b1f3b77299f..26e8b791489 100644 --- a/i18n/esn/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/esn/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,7 @@ "reuseWindow": "Fuerce la apertura de un archivo o carpeta en la última ventana activa.", "userDataDir": "Especifica el directorio en que se conservan los datos de usuario; es útil cuando se ejecuta como raíz.", "verbose": "Imprima salidas detalladas (implica --wait).", - "wait": "Espere que se cierre la ventana antes de volver.", + "wait": "Espere a que los archivos sean cerrados antes de volver.", "extensionHomePath": "Establezca la ruta de acceso raíz para las extensiones.", "listExtensions": "Enumere las extensiones instaladas.", "showVersions": "Muestra las versiones de las extensiones instaladas cuando se usa --list-extension.", diff --git a/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index b7b9d3c4f35..5568bf78176 100644 --- a/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/esn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,7 @@ "vscode.extension.activationEvents": "Eventos de activación de la extensión VS Code.", "vscode.extension.activationEvents.onLanguage": "Un evento de activación emitido cada vez que se abre un archivo que se resuelve en el idioma especificado.", "vscode.extension.activationEvents.onCommand": "Un evento de activación emitido cada vez que se invoca el comando especificado.", - "vscode.extension.activationEvents.onDebug": "Un evento de activación emitido cada vez que se inicia una sesión de depuración del tipo especificado.", + "vscode.extension.activationEvents.onDebug": "Un evento de activación emitido cada vez que un usuario está a punto de iniciar la depuración o cada vez que está a punto de configurar las opciones de depuración.", "vscode.extension.activationEvents.workspaceContains": "Un evento de activación emitido cada vez que se abre una carpeta que contiene al menos un archivo que coincide con el patrón global especificado.", "vscode.extension.activationEvents.onView": "Un evento de activación emitido cada vez que se expande la vista especificada.", "vscode.extension.activationEvents.star": "Un evento de activación emitido al inicio de VS Code. Para garantizar una buena experiencia para el usuario final, use este evento de activación en su extensión solo cuando no le sirva ninguna otra combinación de eventos de activación en su caso.", diff --git a/i18n/esn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/esn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index 497e5ec39ec..fb0c9175a49 100644 --- a/i18n/esn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/esn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,8 @@ "contributes.defaults.highContrast": "El color predeterminado para los temas con constraste. Un valor de color en hexadecimal (#RRGGBB [AA]) o el identificador de un color para los temas que proporciona el valor predeterminado.", "invalid.colorConfiguration": "'configuration.colors' debe ser una matriz", "invalid.default.colorType": "{0} debe ser un valor de color en hexadecimal (#RRGGBB [AA] o #RGB [A]) o el identificador de un color para los temas que puede ser el valor predeterminado.", - "invalid.id": "'configuration.colors.id' debe ser definida y no puede estar vacía", + "invalid.id": "'configuration.colors.id' debe definirse y no puede estar vacío", "invalid.id.format": "'configuration.colors.id' debe seguir la palabra [.word]*", - "invalid.description": "'configuration.colors.description' debe ser definida y no puede estar vacía", + "invalid.description": "'configuration.colors.description' debe definirse y no puede estar vacío", "invalid.defaults": "'configuration.colors.defaults' debe ser definida y contener 'light', 'dark' y 'highContrast'" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/esn/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..e0975190eb1 --- /dev/null +++ b/i18n/esn/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "views debe ser una mariz", + "requirestring": "la propiedad `{0}` es obligatoria y debe ser de tipo \"string\"", + "optstring": "la propiedad `{0}` se puede omitir o debe ser de tipo \"string\"", + "vscode.extension.contributes.view.id": "Identificador de la vista. Úselo para registrar un proveedor de datos mediante la API \"vscode.window.registerTreeDataProviderForView\". También para desencadenar la activación de su extensión al registrar el evento \"onView:${id}\" en \"activationEvents\".", + "vscode.extension.contributes.view.name": "Nombre de la vista en lenguaje natural. Será mostrado", + "vscode.extension.contributes.view.when": "Condición que se debe cumplir para mostrar esta vista", + "vscode.extension.contributes.views": "Aporta vistas al editor", + "views.explorer": "Vista del explorador", + "views.debug": "Vista de depuración", + "locationId.invalid": "`{0}` no es una ubicación de vista válida" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index debc8854e48..7b9e720af09 100644 --- a/i18n/esn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/esn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Quitar de la barra de actividades", - "keepInActivityBar": "Guardar en la barra de la actividad", + "badgeTitle": "{0} - {1} ", "titleKeybinding": "{0} ({1})", + "removeFromActivityBar": "Ocultar de la barra de la actividad", + "keepInActivityBar": "Guardar en la barra de la actividad", "additionalViews": "Vistas adicionales", "numberBadge": "{0} ({1})", "manageExtension": "Administrar extensión", diff --git a/i18n/esn/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/esn/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..f2487840d97 --- /dev/null +++ b/i18n/esn/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} acciones", + "hideView": "Ocultar en la barra lateral" +} \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json index dfb23a5b69a..a404f8a1152 100644 --- a/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/esn/src/vs/workbench/electron-browser/actions.i18n.json @@ -42,5 +42,10 @@ "navigateUp": "Navegar a la Vista Superior", "navigateDown": "Navegar a la Vista Inferior", "increaseViewSize": "Aumentar tamaño de vista actual", - "decreaseViewSize": "Reducir tamaño de vista actual" + "decreaseViewSize": "Reducir tamaño de vista actual", + "showPreviousTab": "Mostrar pestaña de ventana anterior", + "showNextWindowTab": "Mostrar siguiente pestaña de ventana", + "moveWindowTabToNewWindow": "Mover pestaña de ventana a una nueva ventana", + "mergeAllWindowTabs": "Fusionar todas las ventanas", + "toggleWindowTabsBar": "Alternar barra de pestañas de ventana" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json index 485778c1c8c..a142099af46 100644 --- a/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -10,6 +10,8 @@ "workspaces": "Áreas de trabajo", "developer": "Desarrollador", "showEditorTabs": "Controla si los editores abiertos se deben mostrar o no en pestañas.", + "workbench.editor.labelFormat.short": "Mostrar el nombre del archivo seguido de su nombre de directorio.", + "workbench.editor.labelFormat.medium": "Mostrar el nombre del archivo seguido de la ruta de acceso relativo a la raíz del espacio de trabajo.", "editorTabCloseButton": "Controla la posición de los botones de cierre de pestañas del editor o los deshabilita si se establece en \"off\".", "showIcons": "Controla si los editores abiertos deben mostrarse o no con un icono. Requiere que también se habilite un tema de icono.", "enablePreview": "Controla si los editores abiertos se muestran en vista previa. Los editores en vista previa se reutilizan hasta que se guardan (por ejemplo, mediante doble clic o editándolos).", diff --git a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 52c1264aae6..376b321d29b 100644 --- a/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,8 @@ "breakpointRemoved": "Punto de interrupción quitado, línea {0}, archivo {1}", "compoundMustHaveConfigurations": "El compuesto debe tener configurado el atributo \"configurations\" a fin de iniciar varias configuraciones.", "configMissing": "La configuración \"{0}\" falta en \"launch.json\".", + "debugRequestNotSupported": "La solicitud de depuración configurada '{0}' no es compatible", + "debugRequesMissing": "Falta la solicitud de depuración en la configuración de inicio seleccionada", "debugTypeNotSupported": "El tipo de depuración '{0}' configurado no es compatible.", "debugTypeMissing": "Falta la propiedad \"type\" en la configuración de inicio seleccionada.", "preLaunchTaskErrors": "Errores de compilación durante la tarea preLaunchTask '{0}'.", diff --git a/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index a425ccfbeef..9c360797a3c 100644 --- a/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,13 @@ "view id": "Id.", "view name": "Nombre", "view location": "Donde", - "themes": "Temas ({0})", + "colorThemes": "Temas de color ({0})", + "iconThemes": "Temas del icono ({0})", + "colors": "Colores ({0})", + "colorId": "ID", + "defaultDark": "Oscuro por defecto", + "defaultLight": "Claro por defecto", + "defaultHC": "Contraste alto por defecto", "JSON Validation": "Validación JSON ({0})", "commands": "Comandos ({0})", "command name": "Nombre", diff --git a/i18n/esn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index 37183f7f6f2..06f719f73f0 100644 --- a/i18n/esn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "El patrón global con el que se harán coincidir las rutas de acceso de los archivos. Establézcalo en true o false para habilitarlo o deshabilitarlo.", "files.exclude.when": "Comprobación adicional de los elementos del mismo nivel de un archivo coincidente. Use $(nombreBase) como variable para el nombre de archivo que coincide.", "associations": "Configure asociaciones de archivo para los lenguajes (por ejemplo, \"*.extension\": \"html\"). Estas asociaciones tienen prioridad sobre las asociaciones predeterminadas de los lenguajes instalados.", - "encoding": "La codificación del juego de caracteres predeterminada que debe utilizarse al leer y escribir archivos.", - "autoGuessEncoding": "Si está opción está habilitada, se intentará adivinar la codificación del juego de caracteres al abrir los archivos", "eol": "Carácter predeterminado de final de línea. Utilice \\n para LF y \\r\\n para CRLF.", "trimTrailingWhitespace": "Si se habilita, se recortará el espacio final cuando se guarde un archivo.", "insertFinalNewline": "Si se habilita, inserte una nueva línea final al final del archivo cuando lo guarde.", diff --git a/i18n/esn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/esn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 7e727b161ff..186f5cdaa42 100644 --- a/i18n/esn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Use las acciones de la barra de herramientas del editor situada a la derecha para **deshacer** los cambios o **sobrescribir** el contenido del disco con sus cambios", "discard": "Descartar", "overwrite": "Sobrescribir", "retry": "Reintentar", @@ -11,6 +12,5 @@ "genericSaveError": "No se pudo guardar '{0}': {1}", "staleSaveError": "No se pudo guardar '{0}': El contenido del disco es más reciente. Haga clic en **Comparar** para comparar su versión con la que hay en el disco.", "compareChanges": "Comparar", - "saveConflictDiffLabel": "0} (on disk) ↔ {1} (in {2}) - Resolver conflicto guardado", - "userGuide": "Use las acciones de la barra de herramientas del editor situada a la derecha para **deshacer** los cambios o **sobrescribir** el contenido del disco con sus cambios" + "saveConflictDiffLabel": "0} (on disk) ↔ {1} (in {2}) - Resolver conflicto guardado" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json b/i18n/esn/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json index 2f30ba5cf14..11009de442e 100644 --- a/i18n/esn/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "dirtyFile": "1 archivo no guardado", "dirtyFiles": "{0} archivos no guardados" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 7d2149a6bbd..38790781315 100644 --- a/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,7 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "Instalar proveedores adicionales de SCM...", - "no open repo": "No hay controles de código fuente activos.", + "no open repo": "No hay proveedores de control de código fuente activos.", "source control": "Control de código fuente", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index a5577a453c9..a77598c77bc 100644 --- a/i18n/esn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Ir al símbolo en el área de trabajo...", "name": "Buscar", + "search": "Buscar", "showSearchViewlet": "Mostrar búsqueda", "view": "Ver", "findInFiles": "Buscar en archivos", diff --git a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json index ef56f7f84bd..34a3208c841 100644 --- a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "snippet.suggestions.label": "Insertar fragmento de código" + "snippet.suggestions.label": "Insertar fragmento de código", + "sep.userSnippet": "Fragmentos de código de usuario", + "sep.extSnippet": "Fragmentos de código de extensión" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index e8dde5bc0ce..3353f89b68d 100644 --- a/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Lenguaje desconocido en \"contributes.{0}.language\". Valor proporcionado: {1}", + "invalid.path.0": "Se esperaba una cadena en \"contributes.{0}.path\". Valor proporcionado: {1}", + "invalid.path.1": "Se esperaba que \"contributes.{0}.path\" ({1}) se incluyera en la carpeta de la extensión ({2}). Esto puede hacer que la extensión no sea portátil.", + "vscode.extension.contributes.snippets": "Aporta fragmentos de código.", + "vscode.extension.contributes.snippets-language": "Identificador del lenguaje al que se aporta este fragmento de código.", + "vscode.extension.contributes.snippets-path": "Ruta de acceso del archivo de fragmentos de código. La ruta es relativa a la carpeta de extensión y normalmente empieza por \"./snippets/\".", + "badFile": "No se pudo leer el archivo del fragmento \"{0}\".", + "badVariableUse": "Es muy probable que el fragmento de código \"{0}\" confunda las variables de fragmento de código y los marcadores de posición de fragmento de código. Consulte https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax para más informacion.", "source.snippet": "Fragmento de código del usuario", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/esn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 53a1ba108d9..300ec37121d 100644 --- a/i18n/esn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "Más de 99", "runningTasks": "Mostrar tareas en ejecución", "tasks": "Tareas", - "TaskSystem.noHotSwap": "Para cambiar el motor de ejecución de tareas, es necesario recargar la ventana", "TaskService.noBuildTask1": "No se ha definido ninguna tarea de compilación. Marque una tarea con \"isBuildCommand\" en el archivo tasks.json.", "TaskService.noBuildTask2": "No se ha definido ninguna tarea de compilación. Marque una tarea con un grupo \"build\" en el archivo tasks.json. ", "TaskService.noTestTask1": "No se ha definido ninguna tarea de prueba. Marque una tarea con \"isTestCommand\" en el archivo tasks.json.", diff --git a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 80e11f38691..7e5997c2cb9 100644 --- a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Mostrar todos los terminales abiertos", + "terminal": "Terminal", "terminalIntegratedConfigurationTitle": "Terminal integrado", "terminal.integrated.shell.linux": "La ruta de acceso del shell que el terminal usa en Linux.", "terminal.integrated.shellArgs.linux": "Los argumentos de la línea de comandos que se usarán en el terminal de Linux.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Argumentos de la línea de comandos que se usan cuando se utiliza el terminal Windows.", "terminal.integrated.rightClickCopyPaste": "Si está configurado, impedirá que el menú contextual aparezca al hacer clic con el botón derecho dentro del terminal; en su lugar, copiará si hay una selección y pegará si no hay ninguna selección.", "terminal.integrated.fontFamily": "Controla la familia de fuentes del terminal, que está establecida de manera predeterminada en el valor de editor.fontFamily.", - "terminal.integrated.fontLigatures": "Controla si las ligaduras tipográficas están habilitadas en el terminal.", "terminal.integrated.fontSize": "Controla el tamaño de la fuente en píxeles del terminal.", "terminal.integrated.lineHeight": "Controla el alto de línea del terminal. Este número se multiplica por el tamaño de fuente del terminal para obtener el alto de línea real en píxeles.", - "terminal.integrated.enableBold": "Indica si debe habilitarse el texto en negrita en el terminal. Requiere soporte del terminal Shell.", "terminal.integrated.cursorBlinking": "Controla si el cursor del terminal parpadea.", "terminal.integrated.cursorStyle": "Controla el estilo de cursor del terminal.", "terminal.integrated.scrollback": "Controla la cantidad máxima de líneas que mantiene el terminal en su búfer.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "Objeto con variables de entorno que se agregarán al proceso de VS Code para que las use el terminal en OS X", "terminal.integrated.env.linux": "Objeto con variables de entorno que se agregarán al proceso de VS Code para que las use el terminal en Linux", "terminal.integrated.env.windows": "Objeto con variables de entorno que se agregarán al proceso de VS Code para que las use el terminal en Windows", - "terminal": "Terminal", "terminalCategory": "Terminal", "viewCategory": "Ver" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index b1a91fa14c4..2fb25c70d99 100644 --- a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -39,5 +39,5 @@ "workbench.action.terminal.hideFindWidget": "Ocultar Encontrar Widget", "nextTerminalFindTerm": "Mostrar siguiente término de búsqueda", "previousTerminalFindTerm": "Mostrar término de búsqueda anterior", - "quickOpenTerm": "Terminal: Cambiar Terminal Activo" + "quickOpenTerm": "Cambiar terminal activo" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 091847a7181..b41adfc8dd9 100644 --- a/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,5 +8,6 @@ "terminal.foreground": "El color de primer plano del terminal.", "terminalCursor.foreground": "Color de primer plano del cursor del terminal.", "terminalCursor.background": "Color de fondo del cursor del terminal. Permite personalizar el color de un carácter solapado por un cursor de bloque.", + "terminal.selectionBackground": "Color de fondo de selección del terminal.", "terminal.ansiColor": "Color ANSI \"{0}\" en el terminal." } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/esn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 57c279311f1..93b13242a49 100644 --- a/i18n/esn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/esn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -10,6 +10,7 @@ "welcomePage.newFile": "Nuevo archivo", "welcomePage.openFolder": "Abrir carpeta...", "welcomePage.cloneGitRepository": "Clonar el repositorio GIT...", + "welcomePage.addWorkspaceFolder": "Agregar carpeta de espacio de trabajo...", "welcomePage.recent": "Reciente", "welcomePage.moreRecent": "Más...", "welcomePage.noRecentFolders": "No hay ninguna carpeta reciente", @@ -35,8 +36,6 @@ "welcomePage.showCommandsDescription": "Acceda rápidamente y busque comandos desde la Paleta de Comandos ({0})", "welcomePage.interfaceOverview": "Introducción a la interfaz", "welcomePage.interfaceOverviewDescription": "Obtenga una superposición que resalta los componentes principales de la interfaz de usuario", - "welcomePage.deployToAzure": "Implementar aplicaciones en la nube", - "welcomePage.deployToAzureDescription": "Vea cómo implementar sus aplicaciones de Node en Azure App Service", "welcomePage.interactivePlayground": "Área de juegos interactiva", "welcomePage.interactivePlaygroundDescription": "Pruebe las características esenciales del editor en un tutorial corto" } \ No newline at end of file diff --git a/i18n/esn/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/esn/src/vs/workbench/services/configuration/node/configuration.i18n.json index f3c4bc3ce55..87e6573dc45 100644 --- a/i18n/esn/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/esn/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Aporta opciones de configuración.", "vscode.extension.contributes.configuration.title": "Resumen de la configuración. Esta etiqueta se usará en el archivo de configuración como comentario divisor.", "vscode.extension.contributes.configuration.properties": "Descripción de las propiedades de configuración.", "scope.window.description": "Configuración específica para ventanas, que se puede definir en la configuración de usuario o de área de trabajo.", "scope.resource.description": "Configuración específica para recursos, que se puede definir en la configuración de usuario, de área de trabajo o de carpeta.", "scope.description": "Ámbito donde es aplicable la configuración. Los ámbitos disponibles son \"window\" y \"resource\".", - "invalid.type": "si se establece, \"configuration.type\" debe establecerse en \"object\"", + "vscode.extension.contributes.configuration": "Aporta opciones de configuración.", "invalid.title": "configuration.title debe ser una cadena", "vscode.extension.contributes.defaultConfiguration": "Contribuye a la configuración de los parámetros del editor predeterminados por lenguaje.", "invalid.properties": "configuration.properties debe ser un objeto", + "invalid.allOf": "'configuration.allOf' está en desuso y ya no debe ser utilizado. En cambio, pasar varias secciones de configuración como una matriz al punto de contribución de 'configuración'.", "workspaceConfig.folders.description": "Lista de carpetas que debe cargarse en el área de trabajo. Debe ser una ruta de acceso de archivo; por ejemplo, \"/raíz/carpetaA\" o \"./carpetaA\" para una ruta de acceso relativa que se resolverá respecto a la ubicación del archivo del área de trabajo.", "workspaceConfig.folder.description": "Ruta de acceso de archivo; por ejemplo, \"/raíz/carpetaA\" o \"./carpetaA\" para una ruta de acceso de archivo que se resolverá respecto a la ubicación del archivo del área de trabajo.", "workspaceConfig.settings.description": "Configuración de área de trabajo" diff --git a/i18n/esn/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/esn/src/vs/workbench/services/files/node/fileService.i18n.json index fc60db843fa..64389cb9764 100644 --- a/i18n/esn/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/esn/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Recurso de archivo no válido ({0})", - "fileIsDirectoryError": "El archivo es un directorio ({0})", + "fileIsDirectoryError": "Archivo es el directorio", "fileNotModifiedError": "Archivo no modificado desde", "fileTooLargeError": "Archivo demasiado grande para abrirlo", "fileBinaryError": "El archivo parece ser binario y no se puede abrir como texto", diff --git a/i18n/fra/extensions/azure-account/out/azure-account.i18n.json b/i18n/fra/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..7ee7c75a5ab --- /dev/null +++ b/i18n/fra/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Copier & Ouvrir", + "azure-account.close": "Fermer", + "azure-account.login": "Connexion", + "azure-account.loginFirst": "Non connecté, se connecter d'abord.", + "azure-account.userCodeFailed": "L'acquisition de code utilisateur a échoué", + "azure-account.tokenFailed": "Acquisition du jeton avec le code de l’appareil", + "azure-account.tokenFromRefreshTokenFailed": "Acquisition de jeton avec le jeton d'actualisation" +} \ No newline at end of file diff --git a/i18n/fra/extensions/azure-account/out/extension.i18n.json b/i18n/fra/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..c9ceccea29e --- /dev/null +++ b/i18n/fra/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure : Connexion en cours...", + "azure-account.loggedIn": "Azure : {0}" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/code/electron-main/windows.i18n.json b/i18n/fra/src/vs/code/electron-main/windows.i18n.json index 541158a91ef..99857324e72 100644 --- a/i18n/fra/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/fra/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "OK", "pathNotExistTitle": "Le chemin d'accès n'existe pas", "pathNotExistDetail": "Le chemin d'accès '{0}' ne semble plus exister sur le disque.", - "openWorkspace": "&&Ouvrir...", - "openWorkspaceTitle": "Ouvrir un espace de travail", - "save": "&&Enregistrer", - "doNotSave": "&&Ne pas enregistrer", - "cancel": "Annuler", - "saveWorkspaceMessage": "Voulez-vous enregistrer la configuration de votre espace de travail dans un fichier ?", - "saveWorkspaceDetail": "Enregistrez votre espace de travail si vous avez l’intention de le rouvrir.", - "saveWorkspace": "Enregistrer l’espace de travail", "reopen": "Rouvrir", "wait": "Continuer à attendre", "close": "Fermer", @@ -24,5 +16,13 @@ "appCrashedDetail": "Nous vous prions de nous excuser pour ce désagrément. Vous pouvez rouvrir la fenêtre pour reprendre l'action au moment où elle a été interrompue.", "open": "Ouvrir", "openFolder": "Ouvrir le dossier", - "openFile": "Ouvrir le fichier" + "openFile": "Ouvrir le fichier", + "openWorkspace": "&&Ouvrir...", + "openWorkspaceTitle": "Ouvrir un espace de travail", + "save": "&&Enregistrer", + "doNotSave": "&&Ne pas enregistrer", + "cancel": "Annuler", + "saveWorkspaceMessage": "Voulez-vous enregistrer la configuration de votre espace de travail dans un fichier ?", + "saveWorkspaceDetail": "Enregistrez votre espace de travail si vous avez l’intention de le rouvrir.", + "saveWorkspace": "Enregistrer l’espace de travail" } \ No newline at end of file diff --git a/i18n/fra/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/fra/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..e7284c958c2 --- /dev/null +++ b/i18n/fra/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Fermer" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/platform/environment/node/argv.i18n.json b/i18n/fra/src/vs/platform/environment/node/argv.i18n.json index 7668f1d1a83..f8792338e56 100644 --- a/i18n/fra/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/fra/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,6 @@ "reuseWindow": "Forcez l'ouverture d'un fichier ou dossier dans la dernière fenêtre active.", "userDataDir": "Spécifie le répertoire où sont conservées les données des utilisateurs. S'avère utile pour une exécution en tant que root.", "verbose": "Affichez la sortie détaillée (implique --wait).", - "wait": "Attendez la fermeture de la fenêtre avant un retour.", "extensionHomePath": "Définissez le chemin racine des extensions.", "listExtensions": "Listez les extensions installées.", "showVersions": "Affichez les versions des extensions installées, quand --list-extension est utilisé.", diff --git a/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 1b99c644dbb..29156c8b5c9 100644 --- a/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/fra/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "Événements d'activation pour l'extension VS Code.", "vscode.extension.activationEvents.onLanguage": "Événement d'activation envoyé quand un fichier résolu dans le langage spécifié est ouvert.", "vscode.extension.activationEvents.onCommand": "Événement d'activation envoyé quand la commande spécifiée est appelée.", - "vscode.extension.activationEvents.onDebug": "Événement d'activation envoyé quand une session de débogage du type spécifié est démarrée.", "vscode.extension.activationEvents.workspaceContains": "Événement d'activation envoyé quand un dossier ouvert contient au moins un fichier correspondant au modèle glob spécifié.", "vscode.extension.activationEvents.onView": "Événement d'activation envoyé quand la vue spécifiée est développée.", "vscode.extension.activationEvents.star": "Événement d'activation envoyé au démarrage de VS Code. Pour garantir la qualité de l'expérience utilisateur, utilisez cet événement d'activation dans votre extension uniquement quand aucune autre combinaison d'événements d'activation ne fonctionne dans votre cas d'utilisation.", diff --git a/i18n/fra/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/fra/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index 9bf03d39312..bed03d02fba 100644 --- a/i18n/fra/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/fra/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "La couleur par défaut pour les thèmes de contraste élevé. Soit une valeur de couleur en hexadécimal (#RRGGBB[AA]) ou l’identifiant d’une couleur dont le thème peut être changé qui fournit la valeur par défaut.", "invalid.colorConfiguration": "'configuration.colors' doit être un tableau", "invalid.default.colorType": "{0} doit être soit une valeur de couleur en hexadécimal (#RRGGBB[AA] ou #RGB[A]) ou l’identifiant d’une couleur dont le thème peut être changé qui fournit la valeur par défaut.", - "invalid.id": "'configuration.colors.id' doit être défini et ne peut pas être vide", "invalid.id.format": "'configuration.colors.id' doit suivre le word[.word]*", - "invalid.description": "'configuration.colors.description' doit être défini et ne peut pas être vide", "invalid.defaults": "'configuration.colors.defaults' doit être défini et doit contenir 'light', 'dark' et 'highContrast'" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/fra/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..f29fc92b3e6 --- /dev/null +++ b/i18n/fra/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "les vues doivent figurer dans un tableau", + "requirestring": "la propriété '{0}' est obligatoire et doit être de type 'string'", + "optstring": "La propriété '{0}' peut être omise ou doit être de type 'string'", + "vscode.extension.contributes.view.id": "Identificateur de la vue. Utilisez-le pour inscrire un fournisseur de données au moyen de l'API 'vscode.window.registerTreeDataProviderForView', ainsi que pour déclencher l'activation de votre extension en inscrivant l'événement 'onView:${id}' dans 'activationEvents'.", + "vscode.extension.contributes.view.name": "Nom de la vue, contrôlable de visu. Affiché", + "vscode.extension.contributes.view.when": "Condition qui doit être vraie pour afficher cette vue", + "vscode.extension.contributes.views": "Ajoute des vues à l'éditeur", + "views.explorer": "Mode Explorateur", + "views.debug": "Debug View", + "locationId.invalid": "'{0}' n'est pas un emplacement de vue valide" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index b512a195332..1147d510ce6 100644 --- a/i18n/fra/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/fra/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Supprimer de la barre d'activités", - "keepInActivityBar": "Conserver dans la barre d'activités", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "Conserver dans la barre d'activités", "additionalViews": "Vues supplémentaires", "numberBadge": "{0} ({1})", "manageExtension": "Gérer l'extension", diff --git a/i18n/fra/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/fra/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..fcd571da926 --- /dev/null +++ b/i18n/fra/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} actions", + "hideView": "Masquer dans la barre latérale" +} \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index c8681a6e261..c9d61f5102b 100644 --- a/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "ID", "view name": "Nom", "view location": "Emplacement", - "themes": "Thèmes ({0})", "JSON Validation": "Validation JSON ({0})", "commands": "Commandes ({0})", "command name": "Nom", diff --git a/i18n/fra/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index df8712b707b..c3da7244da9 100644 --- a/i18n/fra/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "Modèle Glob auquel les chemins de fichiers doivent correspondre. Affectez la valeur true ou false pour activer ou désactiver le modèle.", "files.exclude.when": "Vérification supplémentaire des frères d'un fichier correspondant. Utilisez $(basename) comme variable pour le nom de fichier correspondant.", "associations": "Configurez les associations entre les fichiers et les langages (par exemple, \"*.extension\": \"html\"). Celles-ci ont priorité sur les associations par défaut des langages installés.", - "encoding": "Encodage du jeu de caractères par défaut à utiliser durant la lecture et l'écriture des fichiers.", - "autoGuessEncoding": "Quand cette option est activée, tente de deviner l'encodage du jeu de caractères à l'ouverture des fichiers", "eol": "Caractère de fin de ligne par défaut. Utilisez \\n pour LF et \\r\\n pour CRLF.", "trimTrailingWhitespace": "Si l'option est activée, l'espace blanc de fin est supprimé au moment de l'enregistrement d'un fichier.", "insertFinalNewline": "Quand l'option est activée, une nouvelle ligne finale est insérée à la fin du fichier au moment de son enregistrement.", diff --git a/i18n/fra/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/fra/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index b3844c69018..f944e7fc14f 100644 --- a/i18n/fra/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Utiliser les actions dans la barre d’outils de l’éditeur vers la droite pour soit **annuler** vos modifications ou **écraser** le contenu sur le disque avec vos modifications", "discard": "Abandonner", "overwrite": "Remplacer", "retry": "Réessayer", @@ -11,6 +12,5 @@ "genericSaveError": "Échec d'enregistrement de '{0}' ({1}).", "staleSaveError": "Échec de l'enregistrement de '{0}' : le contenu sur disque est plus récent. Cliquez sur **Comparer** pour comparer votre version à celle située sur le disque.", "compareChanges": "Comparer", - "saveConflictDiffLabel": "{0} (sur le disque) ↔ {1} (dans {2}) - Résoudre le conflit d'enregistrement", - "userGuide": "Utiliser les actions dans la barre d’outils de l’éditeur vers la droite pour soit **annuler** vos modifications ou **écraser** le contenu sur le disque avec vos modifications" + "saveConflictDiffLabel": "{0} (sur le disque) ↔ {1} (dans {2}) - Résoudre le conflit d'enregistrement" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 58e4c5b939e..a7fc2987a18 100644 --- a/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "Installer des fournisseurs SCM supplémentaires...", - "no open repo": "Aucun contrôle de code source actif.", "source control": "Contrôle de code source", "viewletTitle": "{0} : {1}" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 0412e7f268a..a2647c9191c 100644 --- a/i18n/fra/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Atteindre le symbole dans l'espace de travail...", "name": "Rechercher", + "search": "Rechercher", "showSearchViewlet": "Afficher la zone de recherche", "view": "Affichage", "findInFiles": "Chercher dans les fichiers", diff --git a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 94092e12ea5..7f0f8335a8c 100644 --- a/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Langage inconnu dans 'contributes.{0}.language'. Valeur fournie : {1}", + "invalid.path.0": "Chaîne attendue dans 'contributes.{0}.path'. Valeur fournie : {1}", + "invalid.path.1": "'contributes.{0}.path' ({1}) est censé être inclus dans le dossier ({2}) de l'extension. Cela risque de rendre l'extension non portable.", + "vscode.extension.contributes.snippets": "Ajoute des extraits de code.", + "vscode.extension.contributes.snippets-language": "Identificateur de langage pour lequel cet extrait de code est ajouté.", + "vscode.extension.contributes.snippets-path": "Chemin du fichier d'extraits de code. Le chemin est relatif au dossier d'extensions et commence généralement par './snippets/'.", + "badVariableUse": "L'extrait de code \"{0}\" confond très probablement les variables et les espaces réservés d'extrait de code. Consultez https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax pour plus d'informations.", "source.snippet": "Extrait de code utilisateur", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/fra/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index ec626616bb1..be9fba5ac79 100644 --- a/i18n/fra/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99", "runningTasks": "Afficher les tâches en cours d'exécution", "tasks": "Tâches", - "TaskSystem.noHotSwap": "Le changement du moteur d’exécution de tâches nécessite de recharger la fenêtre", "TaskService.noBuildTask1": "Aucune tâche de build définie. Marquez une tâche avec 'isBuildCommand' dans le fichier tasks.json.", "TaskService.noBuildTask2": "Aucune tâche de génération définie. Marquez une tâche comme groupe 'build' dans le fichier tasks.json.", "TaskService.noTestTask1": "Aucune tâche de test définie. Marquez une tâche avec 'isTestCommand' dans le fichier tasks.json.", diff --git a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index f19cecf97ca..8a455dbd3c0 100644 --- a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Afficher tous les terminaux ouverts", + "terminal": "Terminal", "terminalIntegratedConfigurationTitle": "Terminal intégré", "terminal.integrated.shell.linux": "Chemin de l'interpréteur de commandes utilisé par le terminal sur Linux.", "terminal.integrated.shellArgs.linux": "Arguments de ligne de commande à utiliser sur le terminal Linux.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Arguments de ligne de commande à utiliser sur le terminal Windows.", "terminal.integrated.rightClickCopyPaste": "Une fois le paramètre défini, le menu contextuel cesse de s'afficher quand l'utilisateur clique avec le bouton droit dans le terminal. À la place, une opération de copie est effectuée quand il existe une sélection, et une opération de collage est effectuée en l'absence de sélection.", "terminal.integrated.fontFamily": "Contrôle la famille de polices du terminal. La valeur par défaut est la valeur associée à editor.fontFamily.", - "terminal.integrated.fontLigatures": "Contrôle si les ligatures de police sont activées sur le terminal.", "terminal.integrated.fontSize": "Contrôle la taille de police en pixels du terminal.", "terminal.integrated.lineHeight": "Contrôle la hauteur de ligne du terminal. La multiplication de ce nombre par la taille de police du terminal permet d'obtenir la hauteur de ligne réelle en pixels.", - "terminal.integrated.enableBold": "Indique s'il faut activer ou non le texte en gras dans le terminal, ce qui nécessite une prise en charge de l'interpréteur de commandes du terminal.", "terminal.integrated.cursorBlinking": "Contrôle si le curseur du terminal clignote.", "terminal.integrated.cursorStyle": "Contrôle le style du curseur du terminal.", "terminal.integrated.scrollback": "Contrôle la quantité maximale de lignes que le terminal conserve dans sa mémoire tampon.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "Objet avec les variables d’environnement qui seront ajoutées au processus VS Code pour être utilisées par le terminal sous OS X", "terminal.integrated.env.linux": "Objet avec les variables d’environnement qui seront ajoutées au processus VS Code pour être utilisées par le terminal sous Linux", "terminal.integrated.env.windows": "Objet avec les variables d’environnement qui seront ajoutées au processus VS Code pour être utilisées par le terminal sous Windows", - "terminal": "Terminal", "terminalCategory": "Terminal", "viewCategory": "Affichage" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 931ab6165f2..bd855cdf8da 100644 --- a/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "Focus sur le widget de recherche", "workbench.action.terminal.hideFindWidget": "Masquer le widget de recherche", "nextTerminalFindTerm": "Afficher le terme de recherche suivant", - "previousTerminalFindTerm": "Afficher le terme de recherche précédent", - "quickOpenTerm": "Terminal : Changer de terminal actif" + "previousTerminalFindTerm": "Afficher le terme de recherche précédent" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/fra/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index a3d8226e672..8f490ebe701 100644 --- a/i18n/fra/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/fra/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "La palette de commandes ({0}) permet d'accéder rapidement aux commandes pour en rechercher une", "welcomePage.interfaceOverview": "Vue d'ensemble de l'interface", "welcomePage.interfaceOverviewDescription": "Obtenez une superposition visuelle mettant en évidence les principaux composants de l'IU", - "welcomePage.deployToAzure": "Déployer des applications sur le cloud", - "welcomePage.deployToAzureDescription": "Découvrir comment déployer vos applications Node sur Azure App Service", "welcomePage.interactivePlayground": "Terrain de jeu interactif", "welcomePage.interactivePlaygroundDescription": "Essayez les fonctionnalités essentielles de l'éditeur en suivant une brève procédure pas à pas" } \ No newline at end of file diff --git a/i18n/fra/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/fra/src/vs/workbench/services/configuration/node/configuration.i18n.json index 4737f22d471..82a641c7444 100644 --- a/i18n/fra/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/fra/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Ajoute des paramètres de configuration.", "vscode.extension.contributes.configuration.title": "Résumé des paramètres. Cette étiquette va être utilisée dans le fichier de paramètres en tant que commentaire de séparation.", "vscode.extension.contributes.configuration.properties": "Description des propriétés de configuration.", "scope.window.description": "Configuration spécifique de la fenêtre, qui peut être configurée dans les paramètres utilisateur ou de l'espace de travail.", "scope.resource.description": "Configuration spécifique de la ressource, qui peut être configurée dans les paramètres utilisateur, de l'espace de travail ou du dossier.", "scope.description": "Portée dans laquelle la configuration s’applique. Les portées disponibles sont `window` et `resource`.", - "invalid.type": "s'il est défini, 'configuration.type' doit avoir la valeur 'object", + "vscode.extension.contributes.configuration": "Ajoute des paramètres de configuration.", "invalid.title": "'configuration.title' doit être une chaîne", "vscode.extension.contributes.defaultConfiguration": "Contribue aux paramètres de configuration d'éditeur par défaut en fonction du langage.", "invalid.properties": "'configuration.properties' doit être un objet", diff --git a/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json index 6a723324a19..53f8c612cf7 100644 --- a/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/fra/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Ressource de fichier non valide ({0})", - "fileIsDirectoryError": "Le fichier est un répertoire ({0})", "fileNotModifiedError": "Fichier non modifié depuis", "fileTooLargeError": "Fichier trop volumineux pour être ouvert", "fileBinaryError": "Il semble que le fichier soit binaire. Impossible de l'ouvrir en tant que texte", diff --git a/i18n/hun/extensions/azure-account/out/azure-account.i18n.json b/i18n/hun/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..fce78b4ff62 --- /dev/null +++ b/i18n/hun/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Másolás és megnyitás", + "azure-account.close": "Bezárás", + "azure-account.login": "Bejelentkezés", + "azure-account.loginFirst": "Nincs bejelentkezve. Először jelentkezzen be.", + "azure-account.userCodeFailed": "Felhasználói kód lekérése nem sikerült", + "azure-account.tokenFailed": "Token lekérése eszközkóddal", + "azure-account.tokenFromRefreshTokenFailed": "Token lekérése frissítési tokennel" +} \ No newline at end of file diff --git a/i18n/hun/extensions/azure-account/out/extension.i18n.json b/i18n/hun/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..3b2b1940bb6 --- /dev/null +++ b/i18n/hun/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: Bejelentkezés...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/hun/extensions/css/package.i18n.json b/i18n/hun/extensions/css/package.i18n.json index fca40c15eed..5b083d46503 100644 --- a/i18n/hun/extensions/css/package.i18n.json +++ b/i18n/hun/extensions/css/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "css.title": "CSS", "css.lint.argumentsInColorFunction.desc": "Nem megfelelő számú paraméter", "css.lint.boxModel.desc": "A width és a height tulajdonság kerülése a padding és a border tulajdonság használata esetén", "css.lint.compatibleVendorPrefixes.desc": "Gyártóspecifikus előtag használata esetén minden más gyártóspecifikus tulajdonságot is meg kell adni", @@ -25,6 +26,7 @@ "css.trace.server.desc": "A VS Code és a CSS nyelvi szerver közötti kommunikáció naplózása.", "css.validate.title": "Meghatározza a CSS-validáció működését és a problémák súlyosságát.", "css.validate.desc": "Összes validálás engedélyezése vagy letiltása", + "less.title": "LESS", "less.lint.argumentsInColorFunction.desc": "Nem megfelelő számú paraméter", "less.lint.boxModel.desc": "A width és a height tulajdonság kerülése a padding és a border tulajdonság használata esetén", "less.lint.compatibleVendorPrefixes.desc": "Gyártóspecifikus előtag használata esetén minden más gyártóspecifikus tulajdonságot is meg kell adni", @@ -45,6 +47,7 @@ "less.lint.zeroUnits.desc": "A 0 értékhez nem szükséges mértékegység", "less.validate.title": "Meghatározza a LESS-validáció működését és a problémák súlyosságát.", "less.validate.desc": "Összes validálás engedélyezése vagy letiltása", + "scss.title": "SCSS (Sass)", "scss.lint.argumentsInColorFunction.desc": "Nem megfelelő számú paraméter", "scss.lint.boxModel.desc": "A width és a height tulajdonság kerülése a padding és a border tulajdonság használata esetén", "scss.lint.compatibleVendorPrefixes.desc": "Gyártóspecifikus előtag használata esetén minden más gyártóspecifikus tulajdonságot is meg kell adni", diff --git a/i18n/hun/src/vs/code/electron-main/menus.i18n.json b/i18n/hun/src/vs/code/electron-main/menus.i18n.json index f2b24a52246..5c7640234ef 100644 --- a/i18n/hun/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/hun/src/vs/code/electron-main/menus.i18n.json @@ -151,6 +151,10 @@ "mZoom": "Nagyítás", "mBringToFront": "Legyen az összes előtérben", "miSwitchWindow": "&&Ablak váltása...", + "mShowPreviousTab": "Előző fül megjelenítése", + "mShowNextTab": "Következő fül megjelenítése", + "mMoveTabToNewWindow": "Fül átmozgatása új ablakba", + "mMergeAllWindows": "Összes ablak összeolvasztása", "miToggleDevTools": "&&Fejlesztői eszközök be- és kikapcsolása", "miAccessibilityOptions": "&&Kisegítő lehetőségek", "miReportIssues": "&&Problémák jelentése", diff --git a/i18n/hun/src/vs/code/electron-main/windows.i18n.json b/i18n/hun/src/vs/code/electron-main/windows.i18n.json index b1266fdcb51..46466fb1dfe 100644 --- a/i18n/hun/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/hun/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "OK", "pathNotExistTitle": "Az elérési út nem létezik", "pathNotExistDetail": "Úgy tűnik, hogy a(z) „{0}” elérési út már nem létezik a lemezen.", - "openWorkspace": "&&Megnyitás", - "openWorkspaceTitle": "Munkaterület megnyitása", - "save": "Menté&&s", - "doNotSave": "&&Ne mentse", - "cancel": "Mégse", - "saveWorkspaceMessage": "Szeretné menteni a munkaterület konfigurációját egy fájlba?", - "saveWorkspaceDetail": "Mentse el a munkaterületet, ha meg szeretné nyitni újra!", - "saveWorkspace": "Munkaterület mentése", "reopen": "Újranyitás", "wait": "Várakozás tovább", "close": "Bezárás", @@ -24,5 +16,14 @@ "appCrashedDetail": "Elnézést kérünk az okozott kellemetlenségért. Nyissa újra az ablakot, ha onnan szeretné folytatni a munkát, ahol abbahagyta.", "open": "Megnyitás", "openFolder": "Mappa megnyitása", - "openFile": "Fájl megnyitása" + "openFile": "Fájl megnyitása", + "workspaceOpenedMessage": "Nem sikerült menteni a(z) '{0}' munkaterületet", + "openWorkspace": "&&Megnyitás", + "openWorkspaceTitle": "Munkaterület megnyitása", + "save": "Menté&&s", + "doNotSave": "&&Ne mentse", + "cancel": "Mégse", + "saveWorkspaceMessage": "Szeretné menteni a munkaterület konfigurációját egy fájlba?", + "saveWorkspaceDetail": "Mentse el a munkaterületet, ha meg szeretné nyitni újra!", + "saveWorkspace": "Munkaterület mentése" } \ No newline at end of file diff --git a/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json index b183a47b5af..24a40dd95fc 100644 --- a/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/hun/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -88,6 +88,7 @@ "accessibilitySupport": "Meghatározza, hogy a szerkesztő olyan módban fusson-e, ami optimalizálva van képernyőolvasóval való használathoz.", "links": "Meghatározza, hogy a szerkesztőablak érzékelje-e a hivatkozásokat, és kattinthatóvá tegye-e őket.", "colorDecorators": "Meghatározza, hogy a szerkesztőablakban ki legyenek-e rajzolva a színdekorátorok és színválasztók.", + "codeActions": "Engedélyezi a kódműveletek végrehajtásához használható villanykörtét", "sideBySide": "Meghatározza, hogy a differenciaszerkesztő ablakban egymás mellett vagy a sorban jelenjenek meg az eltérések", "ignoreTrimWhitespace": "Meghatározza, hogy a differenciaszerkesztő ablakban megjelenjenek-e a sor elején vagy végén a szóközökben talált különbségek", "renderIndicators": "Meghatározza, hogy a differenciaszerkesztő ablakban megjelenjenek-e a +/- jelzők az hozzáadott/eltávolított változásoknál", diff --git a/i18n/hun/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/hun/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..a40829f1ae6 --- /dev/null +++ b/i18n/hun/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Bezárás" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/platform/environment/node/argv.i18n.json b/i18n/hun/src/vs/platform/environment/node/argv.i18n.json index 00566165ace..bce6090ca24 100644 --- a/i18n/hun/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/hun/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,7 @@ "reuseWindow": "Fájl vagy mappa megnyitása a legutoljára aktív ablakban.", "userDataDir": "Meghatározza a könyvtárat, ahol a felhasználói adatok vannak tárolva. Hasznás, ha rootként van futtatva.", "verbose": "Részletes kimenet kiírása (magába foglalja a --wait kapcsolót)", - "wait": "Várjon az ablak bezárására a visszatérés előtt.", + "wait": "Várjon a fájlok bezárására a visszatérés előtt.", "extensionHomePath": "A kiegészítők gyökérkönyvtárának beállítása.", "listExtensions": "Telepített kiegészítők listázása.", "showVersions": "Telepített kiegészítők verziójának megjelenítése a --list-extension kapcsoló használata esetén.", diff --git a/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index d7c85757ebd..5b5fef0ea32 100644 --- a/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/hun/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,7 @@ "vscode.extension.activationEvents": "A VS Code kiegészítő aktiválási eseményei.", "vscode.extension.activationEvents.onLanguage": "Aktiváló esemény, ami akkor fut le, ha az adott nyelvhez társított fájl kerül megnyitásra.", "vscode.extension.activationEvents.onCommand": "Aktiváló esemény, ami akkor fut le, amikor a megadott parancsot meghívják.", - "vscode.extension.activationEvents.onDebug": "Aktiváló esemény, ami akkor fut le, amikor elindul az adott típusú hibakeresési folyamat.", + "vscode.extension.activationEvents.onDebug": "Aktiváló esemény, ami akkor fut le, ha a felhasználó hibakeresést indít el vagy beállítani készül a hibakeresési konfigurációt.", "vscode.extension.activationEvents.workspaceContains": "Aktiváló esemény, ami akkor fut le, ha egy olyan mappa kerül megnyitásra, amiben legalább egy olyan fájl van, amely illeszkedik a megadott globális mintára.", "vscode.extension.activationEvents.onView": "Aktiváló esemény, ami akkor fut le, amikor a megadott nézetet kiterjesztik.", "vscode.extension.activationEvents.star": "Aktiváló esemény, ami a VS Code indításakor fut le. A jó felhasználói élmény érdekében csak akkor használja ezt az eseményt, ha más aktiváló események nem alkalmasak az adott kiegészítő esetében.", diff --git a/i18n/hun/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/hun/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..b7933d496e4 --- /dev/null +++ b/i18n/hun/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "a nézeteket tömbként kell megadni", + "requirestring": "a(z) `{0}` tulajdonság kötelező és `string` típusúnak kell lennie", + "optstring": "a(z) `{0}` tulajdonság elhagyható vagy `string` típusúnak kell lennie", + "vscode.extension.contributes.view.id": "A nézet azonosítója. Ez használható az adatszolgáltató regisztrálásához a `vscode.window.registerTreeDataProviderForView` API-n keresztül. Ezen túl a kiegészítő aktiválásához regisztrálni kell az `onView:${id}` eseményt az `activationEvents`-nél.", + "vscode.extension.contributes.view.name": "A nézet emberek számára olvasható neve. Meg fog jelenni", + "vscode.extension.contributes.view.when": "A nézet megjelenítésének feltétele", + "vscode.extension.contributes.views": "Nézeteket szolgáltat a szerkesztőhöz", + "views.explorer": "Fájlkezelő-nézet", + "views.debug": "Hibakeresési nézet", + "locationId.invalid": "A(z) `{0}` nem érvényes nézethelyszín" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 38f496cc0ee..21034f249a0 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Eltávolítás a tevékenységsávról", - "keepInActivityBar": "Megtartás a tevékenységsávon", + "badgeTitle": "{0} – {1}", "titleKeybinding": "{0} ({1})", + "removeFromActivityBar": "Elrejtés a tevékenységsávról", + "keepInActivityBar": "Megtartás a tevékenységsávon", "additionalViews": "További nézetek", "numberBadge": "{0} ({1})", "manageExtension": "Kiegészítő kezelése", diff --git a/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index a7c8a9b8eeb..505c556c227 100644 --- a/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/hun/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -35,6 +35,7 @@ "openPreviousEditorInGroup": "A csoport előző szerkesztőablakának megnyitása", "navigateNext": "Ugrás előre", "navigatePrevious": "Ugrás vissza", + "navigateLast": "Ugrás az utolsóra", "reopenClosedEditor": "Bezárt szerkesztőablak újranyitása", "clearRecentFiles": "Legutóbb megnyitottak listájának ürítése", "showEditorsInFirstGroup": "Az első csoportban található szerkesztőablakok megjelenítése", diff --git a/i18n/hun/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/hun/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..f00a5e742b6 --- /dev/null +++ b/i18n/hun/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} művelet", + "hideView": "Elrejtés az oldalsávról" +} \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json index 07e209f9fa9..b81dfc62fd3 100644 --- a/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/hun/src/vs/workbench/electron-browser/actions.i18n.json @@ -42,5 +42,10 @@ "navigateUp": "Navigálás a felül lévő nézetre", "navigateDown": "Navigálás az alul lévő nézetre", "increaseViewSize": "Jelenlegi nézet méretének növelése", - "decreaseViewSize": "Jelenlegi nézet méretének csökkentése" + "decreaseViewSize": "Jelenlegi nézet méretének csökkentése", + "showPreviousTab": "Előző ablakfül megjelenítése", + "showNextWindowTab": "Következő ablakfül megjelenítése", + "moveWindowTabToNewWindow": "Ablakfül átmozgatása új ablakba", + "mergeAllWindowTabs": "Összes ablak összeolvasztása", + "toggleWindowTabsBar": "Ablakfülsáv be- és kikapcsolása" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json index 12a7eedd3e9..7eab1a0f361 100644 --- a/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -10,6 +10,11 @@ "workspaces": "Munkaterületek", "developer": "Fejlesztői", "showEditorTabs": "Meghatározza, hogy a megnyitott szerkesztőablakok telején megjelenjenek-e a fülek", + "workbench.editor.labelFormat.default": "Fájl nevének megjelenítése. Ha a fülek engedélyezve vannak, és két egyező nevű fájl van egy csoportban, az elérési útjuk eltérő része lesz hozzájuk fűzve. Ha a fülek le vannak tiltva, a fájl munkaterület gyökérkönyvtárához képest relatív elérési útja jelenik meg, ha a szerkesztőablak aktív.", + "workbench.editor.labelFormat.short": "A fájl nevének megjelenítése a könyvtár nevével együtt.", + "workbench.editor.labelFormat.medium": "Fájl nevének megjelenítése a fájl munkaterület gyökérkönyvtárához képest relatív elérési útjával együtt.", + "workbench.editor.labelFormat.long": "Fájl nevének megjelenítése a fájl abszolút elérési útjával együtt.", + "tabDescription": "Meghatározza a szerkesztőablakok címkéje formáját. A beállítás módosítása könnyebbé teheti a fájl helyének kiderítését:\n- short: 'parent'\n- medium: 'workspace/src/parent'\n- long: '/home/user/workspace/src/parent'\n- default: '.../parent', ha egy másik fülnek ugyanaz a címe, vagy a relatív elérési út, ha a fülek le vannak tiltva", "editorTabCloseButton": "Meghatározza a szerkesztőablakok fülein található bezárógomb pozícióját vagy eltávolítja őket, ha a beállítás értéke 'off'.", "showIcons": "Meghatározza, hogy a megnyitott szerkesztőablakok ikonnal együtt jelenjenek-e meg. A működéshez szükséges egy ikontéma engedélyezése is.", "enablePreview": "Meghatározza, hogy a megnyitott szerkesztőablakok előnézetként jelenjenek-e meg. Az előnézetként használt szerkesztőablakok újra vannak hasznosítva, amíg meg nem tartja őket a felhasználó (pl. dupla kattintás vagy szerkesztés esetén).", diff --git a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 4b2b5f704cd..30c54c1d5f0 100644 --- a/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,8 @@ "breakpointRemoved": "Töréspont eltávoíltva, {0}. sor, fájl: {1}", "compoundMustHaveConfigurations": "A kombinációk \"configurations\" tulajdonságát be kell állítani több konfiguráció elindításához.", "configMissing": "A(z) '{0}' konfiguráció hiányzik a 'launch.json'-ból.", + "debugRequestNotSupported": "A beállított hibakeresési kérés ('{0}') nem támogatott", + "debugRequesMissing": "A hibakeresési kéréshez hiányzik a kiválasztott indítási konfiguráció.", "debugTypeNotSupported": "A megadott hibakeresési típus ('{0}') nem támogatott.", "debugTypeMissing": "A kiválasztott indítási konfigurációnak hiányzik a 'type' tulajdonsága.", "preLaunchTaskErrors": "Buildelési hibák léptek fel a(z) '{0}' preLaunchTask futása közben.", diff --git a/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index b3bbb32e886..806ae8197d4 100644 --- a/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,13 @@ "view id": "Azonosító", "view name": "Név", "view location": "Hol?", - "themes": "Témák ({0})", + "colorThemes": "Színtémák ({0})", + "iconThemes": "Ikontémák ({0})", + "colors": "Színek ({0})", + "colorId": "Azonosító", + "defaultDark": "Alapértelmezett sötét", + "defaultLight": "Alapértelmezett világos", + "defaultHC": "Alapértelmezett nagy kontrasztú", "JSON Validation": "JSON-validációk ({0})", "commands": "Parancsok ({0})", "command name": "Név", diff --git a/i18n/hun/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index 2d048ca64f9..f941e302591 100644 --- a/i18n/hun/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,8 @@ "files.exclude.boolean": "A globális minta, amire illesztve lesznek a fájlok elérési útjai. A minta engedélyezéséhez vagy letiltásához állítsa igaz vagy hamis értékre.", "files.exclude.when": "További ellenőrzés elvégzése egy egyező fájl testvérein. Az egyező fájlnévhez használja a $(basename) változót.", "associations": "Rendeljen nyelveket a fájlokhoz (pl: \"*.kiterjesztés\": \"html\"). Ezek a hozzárendelések elsőbbséget élveznek a telepített nyelvek által definiált alapértelmezett beállításokkal szemben.", - "encoding": "A fájlok olvasásakor és írásakor használt alapértelmezett karakterkódolás.", - "autoGuessEncoding": "Ha engedélyezve van, az alkalmazás automatikusan megpróbálja kitalálni a fájlok kódolását megnyitáskor", + "encoding": "A fájlok írásánál és olvasásánál használt alapértelmezett karakterkészlet. A beállítás nyelvenként is konfigurálható.", + "autoGuessEncoding": "Ha engedélyezve van, fájlok megnyitásakor megpróbálja kitalálni a karakterkészletüket. A beállítás nyelvenként is konfigurálható.", "eol": "Az alapértelmezett sorvégjel. LF-hez használjon \\n-t, CRLF-hez pedig \\r\\n-t.", "trimTrailingWhitespace": "Ha engedélyezve van, a fájl mentésekor levágja a sor végén található szóközöket.", "insertFinalNewline": "Ha engedélyezve van, mentéskor beszúr egy záró újsort a fájl végére.", diff --git a/i18n/hun/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/hun/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 1e6952cc6a7..0bb33fdc628 100644 --- a/i18n/hun/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Használja a jobbra lévő szerkesztői eszköztáron található műveleteket a saját módosítások **visszavonására** vagy **írja felül** a lemezen lévő tartalmat a változtatásokkal", "discard": "Elvetés", "overwrite": "Felülírás", "retry": "Újrapróbálkozás", @@ -11,6 +12,5 @@ "genericSaveError": "Hiba a(z) '{0}' mentése közben: {1}", "staleSaveError": "Nem sikerült menteni a(z) '{0}' fájlt: a lemezen lévő tartalom újabb. Kattintson az **Összehasonlítás*** gombra a helyi és a lemezen lévő változat összehasonlításához.", "compareChanges": "Összehasonlítás", - "saveConflictDiffLabel": "{0} (a lemezen) ↔ {1} ({2}) – Mentési konfliktus feloldása", - "userGuide": "Használja a jobbra lévő szerkesztői eszköztáron található műveleteket a saját módosítások **visszavonására** vagy **írja felül** a lemezen lévő tartalmat a változtatásokkal" + "saveConflictDiffLabel": "{0} (a lemezen) ↔ {1} ({2}) – Mentési konfliktus feloldása" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json b/i18n/hun/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json index 24ed237c8fe..757e243c9a7 100644 --- a/i18n/hun/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "dirtyFile": "1 nem mentett fájl", "dirtyFiles": "{0} nem mentett fájl" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 47387e215d8..ed407924b94 100644 --- a/i18n/hun/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Szimbólum megkeresése a munkaterületen...", "name": "Keresés", + "search": "Keresés", "showSearchViewlet": "Keresés megjelenítése", "view": "Nézet", "findInFiles": "Keresés a fájlokban", diff --git a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json index 8a772b44962..7c0eceed2d8 100644 --- a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "snippet.suggestions.label": "Kódrészlet beszúrása" + "snippet.suggestions.label": "Kódrészlet beszúrása", + "sep.userSnippet": "Felhasználói kódrészletek", + "sep.extSnippet": "Kiegészítők kódrészletei" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index f8980547dd7..94cfdc9e1d9 100644 --- a/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Ismeretlen nyelv található a következőben: `contributes.{0}.language`. A megadott érték: {1}", + "invalid.path.0": "Hiányzó karakterlánc a `contributes.{0}.path`-ban. A megadott érték: {1}", + "invalid.path.1": "A `contributes.{0}.path` ({1}) nem a kiegészítő mappáján belül található ({2}). Emiatt előfordulhat, hogy a kiegészítő nem lesz hordozható.", + "vscode.extension.contributes.snippets": "Kódrészleteket szolgáltat.", + "vscode.extension.contributes.snippets-language": "Azon nyelv azonosítója, amely számára szolgáltatva van ez a kódrészlet.", + "vscode.extension.contributes.snippets-path": "A kódrészlet-fájl elérési útja. Az elérési út relatív a kiegészítő mappájához, és általában a következővel kezdődik: './snippets/',", + "badFile": "A(z) \"{0}\" kódrészletet tartalmazó fájlt nem sikerült beolvasni.", + "badVariableUse": "A(z) \"{0}\" kódrészlet nagy valószínűséggel keveri a kódrészletváltozók és a kódrészlet-helyjelölők fogalmát. További információ a következő oldalon található: https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax", "source.snippet": "Felhasználói kódrészlet", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/hun/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 14edf183a4a..d6497ea60ab 100644 --- a/i18n/hun/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "Futó feladatok megjelenítése", "tasks": "Feladatok", - "TaskSystem.noHotSwap": "A feladatvégrehajtó motor megváltoztatása az ablak újraindítását igényli.", "TaskService.noBuildTask1": "Nincs buildelési feladat definiálva. Jelöljön meg egy feladatot az 'isBuildCommand' tulajdonsággal a tasks.json fájlban!", "TaskService.noBuildTask2": "Nincs buildelési feladat definiálva. Jelöljön meg egy feladatot a 'build' csoporttal a tasks.json fájlban!", "TaskService.noTestTask1": "Nincs tesztelési feladat definiálva. Jelöljön meg egy feladatot az 'isTestCommand' tulajdonsággal a tasks.json fájlban!", diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 2b495e02924..edc638fe092 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Összes megnyitott terminál megjelenítése", + "terminal": "Terminál", "terminalIntegratedConfigurationTitle": "Beépített terminál", "terminal.integrated.shell.linux": "A terminál által használt shell elérési útja Linuxon.", "terminal.integrated.shellArgs.linux": "Linux-terminál esetén használt parancssori argumentumok.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Windows-terminál esetén használt parancssori argumentumok.", "terminal.integrated.rightClickCopyPaste": "Ha be van állítva, megakadályozza a helyi menü megjelenését a terminálon történő jobb kattintás esetén. Helyette másol, ha van kijelölés, és beilleszt, ha nincs.", "terminal.integrated.fontFamily": "Meghatározza a terminál betűtípusát. Alapértelmezett értéke az editor.fontFamily értéke.", - "terminal.integrated.fontLigatures": "Meghatározza, hogy a terminálban engedélyezve vannak-e a betűtípus-ligatúrák.", "terminal.integrated.fontSize": "Meghatározza a terminálban használt betű méretét, pixelekben.", "terminal.integrated.lineHeight": "Meghatározza a sormagasságot a terminálban. A tényleges méret a megadott szám és a terminál betűméretének szorzatából jön ki.", - "terminal.integrated.enableBold": "Engedélyezve van-e a félkövér szöveg a terminálban. A működéshez szükséges, hogy a terminál shellje támogassa a félkövér betűket.", "terminal.integrated.cursorBlinking": "Meghatározza, hogy a terminál kurzora villog-e.", "terminal.integrated.cursorStyle": "Meghatározza a terminál kurzorának stílusát.", "terminal.integrated.scrollback": "Meghatározza, hogy a terminál legfeljebb hány sort tárol a pufferben.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "A VS Code folyamatához hozzáadott környezeti változókat tartalmazó objektum, amit az OS X-es terminál használ.", "terminal.integrated.env.linux": "A VS Code folyamatához hozzáadott környezeti változókat tartalmazó objektum, amit a linuxos terminál használ.", "terminal.integrated.env.windows": "A VS Code folyamatához hozzáadott környezeti változókat tartalmazó objektum, amit a windowsos terminál használ.", - "terminal": "Terminál", "terminalCategory": "Terminál", "viewCategory": "Nézet" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index ed14d5780e7..9883a94a201 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -39,5 +39,5 @@ "workbench.action.terminal.hideFindWidget": "Keresőmodul elrejtése", "nextTerminalFindTerm": "Következő keresési kifejezés megjelenítése", "previousTerminalFindTerm": "Előző keresési kifejezés megjelenítése", - "quickOpenTerm": "Terminál: Aktív terminál váltása" + "quickOpenTerm": "Aktív terminál váltása" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index 62724fd2402..3471cfec5dc 100644 --- a/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,5 +8,6 @@ "terminal.foreground": "A terminál előtérszíne.", "terminalCursor.foreground": "A terminál kurzorának előtérszíne.", "terminalCursor.background": "A terminál kurzorának háttérszíne. Lehetővé teszik az olyan karakterek színének módosítását, amelyek fölött egy blokk-típusú kurzor áll.", + "terminal.selectionBackground": "A terminálban kijelölt tartalom háttérszíne.", "terminal.ansiColor": "A(z) '{0}' ANSI-szín a terminálban." } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/hun/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index cd933cb6f9f..e788adca5bc 100644 --- a/i18n/hun/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/hun/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -10,6 +10,7 @@ "welcomePage.newFile": "Új fájl", "welcomePage.openFolder": "Mappa megnyitása...", "welcomePage.cloneGitRepository": "Git forráskódtár klónozása...", + "welcomePage.addWorkspaceFolder": "Mappa hozzáadása a munkaterülethez...", "welcomePage.recent": "Legutóbbi", "welcomePage.moreRecent": "Tovább...", "welcomePage.noRecentFolders": "Nincsenek megnyitott mappák", @@ -35,8 +36,6 @@ "welcomePage.showCommandsDescription": "Parancsok gyors listázása és keresése a parancskatalógusban ({0})", "welcomePage.interfaceOverview": "Felhasználói felület áttekintése", "welcomePage.interfaceOverviewDescription": "Fedvény, ami vizuálisan bemutatja a felhasználói felület legfőbb részeit.", - "welcomePage.deployToAzure": "Alkalmazások telepítése a felhőbe", - "welcomePage.deployToAzureDescription": "Tudja meg, hogyan telepítheti Node-alkalmazásait az Azure App Service-re", "welcomePage.interactivePlayground": "Interaktív játszótér", "welcomePage.interactivePlaygroundDescription": "Próbálja ki a szerkesztő funkcióit egy rövid bemutató keretében!" } \ No newline at end of file diff --git a/i18n/hun/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/hun/src/vs/workbench/services/configuration/node/configuration.i18n.json index 617531fdba6..4ec73bfcb21 100644 --- a/i18n/hun/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/hun/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Konfigurációs beállításokat szolgáltat.", "vscode.extension.contributes.configuration.title": "A beállítások összefoglaló leírása. Ez a címke jelenik meg a beállítások fájlban egy különálló megjegyzésként.", "vscode.extension.contributes.configuration.properties": "A konfigurációs tulajdonságok leírása.", "scope.window.description": "Ablakspecifikus beállítás, ami konfigurálható a felhasználói vagy munkaterületi beállításokban.", "scope.resource.description": "Erőforrásspecifikus beállítás, ami beállítható a felhasználói, munkaterületi és mappaszintű beállításokban.", "scope.description": "A hatókör, amire a beállítás vonatkozik. Az elérhető hatókörök: `window` és `resource`.", - "invalid.type": "ha meg van adva, a 'configuration.type' értékét egy objektumként kell megadnii", + "vscode.extension.contributes.configuration": "Konfigurációs beállításokat szolgáltat.", "invalid.title": "a 'configuration.title' értékét karakterláncként kell megadni", "vscode.extension.contributes.defaultConfiguration": "Adott nyelvre vonatkozóan szerkesztőbeállításokat szolgáltat.", "invalid.properties": "A 'configuration.properties' értékét egy objektumként kell megadni", + "invalid.allOf": "A 'configuration.allOf' elavult, és használata nem javasolt. Helyette több konfigurációs szakaszt kell átadni tömbként a 'configuration' értékeként.", "workspaceConfig.folders.description": "A munkaterületre betöltött mappák listája. Elérési útnak kell lennie, pl. `/root/folderA` vagy `./folderA` relatív elérési út esetén, ami a munkaterületfájl helye alapján lesz feloldva.", "workspaceConfig.folder.description": "Egy fájl elérési útja, pl. `/root/folderA` vagy `./folderA` relatív elérési út esetén, ami a munkaterületfájl helye alapján lesz feloldva.", "workspaceConfig.settings.description": "Munkaterület-beállítások" diff --git a/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json index f303a5e38e2..94c9d3c7732 100644 --- a/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/hun/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Érvénytelen fájlerőforrás ({0})", - "fileIsDirectoryError": "A fájl egy kövtár ({0})", + "fileIsDirectoryError": "A fájl egy könyvtár", "fileNotModifiedError": "A fájl azóta nem módosult", "fileTooLargeError": "A fájl túl nagy a megnyitáshoz", "fileBinaryError": "A fájl binárisnak tűnik és nem nyitható meg szövegként", diff --git a/i18n/ita/extensions/azure-account/out/azure-account.i18n.json b/i18n/ita/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..7417dd475b9 --- /dev/null +++ b/i18n/ita/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Copia e apri", + "azure-account.close": "Chiudi", + "azure-account.login": "Accedi", + "azure-account.loginFirst": "Non è stato eseguito l'accesso. Eseguirlo.", + "azure-account.userCodeFailed": "L'acquisizione del codice utente non è riuscita", + "azure-account.tokenFailed": "Acquisizione del token con il codice dispositivo", + "azure-account.tokenFromRefreshTokenFailed": "Acquisizione del token con il token di aggiornamento" +} \ No newline at end of file diff --git a/i18n/ita/extensions/azure-account/out/extension.i18n.json b/i18n/ita/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..a89b7f23c89 --- /dev/null +++ b/i18n/ita/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: accesso...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/code/electron-main/windows.i18n.json b/i18n/ita/src/vs/code/electron-main/windows.i18n.json index 68df6f86878..0976da778ff 100644 --- a/i18n/ita/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/ita/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "OK", "pathNotExistTitle": "Il percorso non esiste", "pathNotExistDetail": "Il percorso '{0}' sembra non esistere più sul disco.", - "openWorkspace": "&&Apri", - "openWorkspaceTitle": "Apri area di lavoro", - "save": "&&Salva", - "doNotSave": "&&Non salvare", - "cancel": "Annulla", - "saveWorkspaceMessage": "Salvare la configurazione dell'area di lavoro in un file?", - "saveWorkspaceDetail": "Salvare l'area di lavoro se si prevede di aprirla di nuovo.", - "saveWorkspace": "Salva area di lavoro", "reopen": "Riapri", "wait": "Continua ad attendere", "close": "Chiudi", @@ -24,5 +16,13 @@ "appCrashedDetail": "Ci scusiamo per l'inconveniente. Per riprendere dal punto in cui si è verificata l'interruzione, riaprire la finestra.", "open": "Apri", "openFolder": "Apri cartella", - "openFile": "Apri file" + "openFile": "Apri file", + "openWorkspace": "&&Apri", + "openWorkspaceTitle": "Apri area di lavoro", + "save": "&&Salva", + "doNotSave": "&&Non salvare", + "cancel": "Annulla", + "saveWorkspaceMessage": "Salvare la configurazione dell'area di lavoro in un file?", + "saveWorkspaceDetail": "Salvare l'area di lavoro se si prevede di aprirla di nuovo.", + "saveWorkspace": "Salva area di lavoro" } \ No newline at end of file diff --git a/i18n/ita/src/vs/editor/contrib/find/browser/findWidget.i18n.json b/i18n/ita/src/vs/editor/contrib/find/browser/findWidget.i18n.json index aadb8148c62..76cf5a81fb0 100644 --- a/i18n/ita/src/vs/editor/contrib/find/browser/findWidget.i18n.json +++ b/i18n/ita/src/vs/editor/contrib/find/browser/findWidget.i18n.json @@ -17,5 +17,5 @@ "label.toggleReplaceButton": "Attiva/Disattiva modalità sostituzione", "title.matchesCountLimit": "Vengono evidenziati solo i primi 999 risultati, ma tutte le operazioni di ricerca funzionano sull'intero testo.", "label.matchesLocation": "{0} di {1}", - "label.noResults": "Nessuna impostazione corrispondente" + "label.noResults": "Nessun risultato" } \ No newline at end of file diff --git a/i18n/ita/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/ita/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..fe8e7a6d653 --- /dev/null +++ b/i18n/ita/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Chiudi" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/platform/environment/node/argv.i18n.json b/i18n/ita/src/vs/platform/environment/node/argv.i18n.json index d0294d7c7cd..24f7adaa11d 100644 --- a/i18n/ita/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/ita/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,6 @@ "reuseWindow": "Forza l'apertura di un file o di una cartella nell'ultima finestra attiva.", "userDataDir": "Consente di specificare la directory in cui si trovano i dati utente. Utile quando viene eseguito come root.", "verbose": "Visualizza l'output dettagliato (implica --wait).", - "wait": "Attende la chiusura della finestra prima della restituzione.", "extensionHomePath": "Impostare il percorso radice per le estensioni.", "listExtensions": "Elenca le estensioni installate.", "showVersions": "Mostra le versioni delle estensioni installate, quando si usa --list-extension.", diff --git a/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index afe0f0f2880..89bc12c6040 100644 --- a/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/ita/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "Eventi di attivazione per l'estensione Visual Studio Code.", "vscode.extension.activationEvents.onLanguage": "Un evento di attivazione emesso ogni volta che viene aperto un file che risolve nella lingua specificata.", "vscode.extension.activationEvents.onCommand": "Un evento di attivazione emesso ogni volta che viene invocato il comando specificato.", - "vscode.extension.activationEvents.onDebug": "Un evento di attivazione emesso ogni volta che viene iniziata una sessione di debug del tipo specificato.", "vscode.extension.activationEvents.workspaceContains": "Un evento di attivazione emesso ogni volta che si apre una cartella che contiene almeno un file corrispondente al criterio GLOB specificato.", "vscode.extension.activationEvents.onView": "Un evento di attivazione emesso ogni volta che la visualizzazione specificata viene espansa.", "vscode.extension.activationEvents.star": "Un evento di attivazione emesso all'avvio di VS Code. Per garantire la migliore esperienza per l'utente finale, sei pregato di utilizzare questo evento di attivazione nella tua estensione solo quando nessun'altra combinazione di eventi di attivazione funziona nel tuo caso.", diff --git a/i18n/ita/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/ita/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index 88108cb9b11..ca84c96c191 100644 --- a/i18n/ita/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/ita/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "Colore predefinito per i temi a contrasto elevato. Può essere un valore di colore in formato esadecimale (#RRGGBB[AA]) oppure l'identificativo di un colore che supporta i temi e fornisce l'impostazione predefinita.", "invalid.colorConfiguration": "'configuration.colors' deve essere un array", "invalid.default.colorType": "{0} deve essere un valore di colore in formato esadecimale (#RRGGBB [AA] o #RGB[A]) o l'identificativo di un colore che supporta i temi e che fornisce il valore predefinito. ", - "invalid.id": "'configuration.colors.id' deve essere definito e non può essere vuoto", "invalid.id.format": "'configuration.colors.id' deve essere specificato dopo parola[.parola]*", - "invalid.description": "'configuration.colors.description' deve essere definito e non può essere vuoto", "invalid.defaults": "'configuration.colors.defaults' deve essere definito e deve contenere 'light', 'dark' e 'highContrast'" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/ita/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..79ac78f96ad --- /dev/null +++ b/i18n/ita/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "Visualizzazioni devono essere una matrice", + "requirestring": "la proprietà `{0}` è obbligatoria e deve essere di tipo `string`", + "optstring": "la proprietà `{0}` può essere omessa o deve essere di tipo `string`", + "vscode.extension.contributes.view.id": "Identificatore della vista. Utilizzare questo per registrare un provider di dati tramite l'API 'vscode.window.registerTreeDataProviderForView'. Anche per innescare l'attivazione dell'estensione tramite la registrazione dell'evento 'onView: ${id}' a 'activationEvents'.", + "vscode.extension.contributes.view.name": "Il nome della visualizzazione. Verrà mostrato", + "vscode.extension.contributes.view.when": "Condizione che deve essere vera per mostrare questa visualizzazione", + "vscode.extension.contributes.views": "Contribuisce visualizzazioni all'editor", + "views.explorer": "Visualizzazione di esplorazione", + "views.debug": "Visualizzazione Debug", + "locationId.invalid": "'{0}' non è una posizione valida per la visualizzazione" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index f4d0bdccbf0..1be4247d7af 100644 --- a/i18n/ita/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/ita/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Rimuovi da barra attività", - "keepInActivityBar": "Mantieni in barra attività", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "Mantieni in barra attività", "additionalViews": "Visualizzazioni aggiuntive", "numberBadge": "{0} ({1})", "manageExtension": "Gestisci estensione", diff --git a/i18n/ita/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/ita/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..860e3f239f2 --- /dev/null +++ b/i18n/ita/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "Azioni di {0}", + "hideView": "Nascondi da barra laterale" +} \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index d621f11350a..eef179b48d3 100644 --- a/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "ID", "view name": "Nome", "view location": "Dove", - "themes": "Temi ({0})", "JSON Validation": "Convalida JSON ({0})", "commands": "Comandi ({0})", "command name": "Nome", diff --git a/i18n/ita/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index 6daccd9cf8d..ed17ff0c241 100644 --- a/i18n/ita/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "Criterio GLOB da usare per trovare percorsi file. Impostare su True o False per abilitare o disabilitare il criterio.", "files.exclude.when": "Controllo aggiuntivo sugli elementi di pari livello di un file corrispondente. Usare $(basename) come variabile del nome file corrispondente.", "associations": "Consente di configurare le associazioni tra file e linguaggi, ad esempio \"*.extension\": \"html\". Queste hanno la precedenza sulle associazioni predefinite dei linguaggi installate.", - "encoding": "Codifica del set di caratteri predefinita da usare durante la lettura e la scrittura di file.", - "autoGuessEncoding": "Quando questa opzione è abilitata, la codifica del set di caratteri viene ipotizzata all'apertura dei file", "eol": "Il carattere di fine riga predefinito. Utilizzare \\n per LF e \\r\\n per CRLF.", "trimTrailingWhitespace": "Se è abilitato, taglierà lo spazio vuoto quando si salva un file.", "insertFinalNewline": "Se è abilitato, inserisce un carattere di nuova riga finale alla fine del file durante il salvataggio.", diff --git a/i18n/ita/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/ita/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 7e522e82f6b..49ebceb9611 100644 --- a/i18n/ita/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Usare le azioni della barra degli strumenti dell'editor a destra per **annullare** le modifiche o per **sovrascrivere** il contenuto su disco con le modifiche", "discard": "Rimuovi", "overwrite": "Sovrascrivi", "retry": "Riprova", @@ -11,6 +12,5 @@ "genericSaveError": "Non è stato possibile salvare '{0}': {1}", "staleSaveError": "Non è stato possibile salvare '{0}': il contenuto sul disco è più recente. Fare clic su **Confronta** per confrontare la versione corrente con quella sul disco.", "compareChanges": "Confronta", - "saveConflictDiffLabel": "{0} (su disco) ↔ {1} (in {2}) - Risolvere conflitto in fase di salvataggio", - "userGuide": "Usare le azioni della barra degli strumenti dell'editor a destra per **annullare** le modifiche o per **sovrascrivere** il contenuto su disco con le modifiche" + "saveConflictDiffLabel": "{0} (su disco) ↔ {1} (in {2}) - Risolvere conflitto in fase di salvataggio" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 01d88af1ee7..6d5ec692c0c 100644 --- a/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "Installa ulteriori provider SCM ...", - "no open repo": "Non ci sono controlli del codice sorgente attivi.", "source control": "Controllo del codice sorgente", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 4daa1ea7025..7b4843f3a16 100644 --- a/i18n/ita/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Vai al simbolo nell'area di lavoro...", "name": "Cerca", + "search": "Cerca", "showSearchViewlet": "Mostra Cerca", "view": "Visualizza", "findInFiles": "Cerca nei file", diff --git a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index d64cfaa2128..4df49b140ce 100644 --- a/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Il linguaggio in `contributes.{0}.language` è sconosciuto. Valore specificato: {1}", + "invalid.path.0": "È previsto un valore stringa in `contributes.{0}.path`. Valore specificato: {1}", + "invalid.path.1": "Valore previsto di `contributes.{0}.path` ({1}) da includere nella cartella dell'estensione ({2}). L'estensione potrebbe non essere più portatile.", + "vscode.extension.contributes.snippets": "Frammenti per contributes.", + "vscode.extension.contributes.snippets-language": "Identificatore di linguaggio per cui si aggiunge come contributo questo frammento.", + "vscode.extension.contributes.snippets-path": "Percorso del file snippets. È relativo alla cartella delle estensioni e in genere inizia con './snippets/'.", + "badVariableUse": "Il frammento \"{0}\" molto probabilmente confonde variabili-frammento con segnaposti-frammento. Vedere https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax per ulteriori dettagli.", "source.snippet": "Frammento utente", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/ita/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 4891e50a402..2d3712bd868 100644 --- a/i18n/ita/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "Più di 99", "runningTasks": "Visualizza attività in esecuzione", "tasks": "Attività", - "TaskSystem.noHotSwap": "Se si cambia il motore di esecuzione delle attività, è necessario ricaricare la finestra", "TaskService.noBuildTask1": "Non è stata definita alcuna attività di compilazione. Contrassegnare un'attività con 'isBuildCommand' nel file tasks.json.", "TaskService.noBuildTask2": "Non è stata definita alcuna attività di compilazione. Contrassegnare un'attività come gruppo 'build' nel file tasks.json.", "TaskService.noTestTask1": "Non è stata definita alcuna attività di test. Contrassegnare un'attività con 'isTestCommand' nel file tasks.json.", diff --git a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index c901f072c33..971b68006b6 100644 --- a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Mostra tutti i terminali aperti", + "terminal": "Terminale", "terminalIntegratedConfigurationTitle": "Terminale integrato", "terminal.integrated.shell.linux": "Percorso della shell usata dal terminale in Linux.", "terminal.integrated.shellArgs.linux": "Argomenti della riga di comando da usare nel terminale Linux.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Argomenti della riga di comando da usare nel terminale Windows.", "terminal.integrated.rightClickCopyPaste": "Se impostata, impedirà la visualizzazione del menu di scelta rapida quando si fa clic con il pulsante destro del mouse all'interno del terminale, ma eseguirà il comando Copia in presenza di una selezione e il comando Incolla in assenza di una selezione.", "terminal.integrated.fontFamily": "Controlla la famiglia di caratteri del terminale. L'impostazione predefinita è il valore di editor.fontFamily.", - "terminal.integrated.fontLigatures": "Controlla se i caratteri legatura sono abilitati nel terminale.", "terminal.integrated.fontSize": "Consente di controllare le dimensioni del carattere in pixel del terminale.", "terminal.integrated.lineHeight": "Controlla l'altezza della riga del terminale. Questo numero è moltiplicato dalle dimensioni del carattere del terminale per ottenere l'altezza di riga effettiva in pixel.", - "terminal.integrated.enableBold": "Indica se abilitare il testo in grassetto nella console del terminale. Richiede il supporto da parte della console", "terminal.integrated.cursorBlinking": "Controlla se il cursore del terminale è intermittente o meno.", "terminal.integrated.cursorStyle": "Controlla lo stile del cursore del terminale.", "terminal.integrated.scrollback": "Consente di controllare il numero massimo di righe che il terminale mantiene nel buffer.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "Oggetto con variabili di ambiente che verrà aggiunto al processo VS Code per essere utilizzato dal terminale su OS X", "terminal.integrated.env.linux": "Oggetto con variabili di ambiente che verrà aggiunto al processo VS Code per essere utilizzato dal terminale su Linux", "terminal.integrated.env.windows": "Oggetto con variabili di ambiente che verrà aggiunto al processo VS Code per essere utilizzato dal terminale su Windows", - "terminal": "Terminale", "terminalCategory": "Terminale", "viewCategory": "Visualizza" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 0caa97a52a0..f11b3608f65 100644 --- a/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "Stato attivo su widget Trova", "workbench.action.terminal.hideFindWidget": "Nascondi widget Trova", "nextTerminalFindTerm": "Mostra il termine di ricerca successivo", - "previousTerminalFindTerm": "Mostra il termine di ricerca precedente", - "quickOpenTerm": "Terminale: Cambia terminale attivo" + "previousTerminalFindTerm": "Mostra il termine di ricerca precedente" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/ita/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 54f09dc2127..4d0a4f3dde5 100644 --- a/i18n/ita/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/ita/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "Accesso e ricerca rapida di comandi dal riquadro comandi ({0})", "welcomePage.interfaceOverview": "Panoramica dell'interfaccia", "welcomePage.interfaceOverviewDescription": "Immagine in sovrimpressione che evidenzia i principali componenti dell'interfaccia utente", - "welcomePage.deployToAzure": "Distribuisci le applicazioni nel cloud", - "welcomePage.deployToAzureDescription": "Informazioni sulla distribuzione di app Node in Servizio app di Azure", "welcomePage.interactivePlayground": "Playground interattivo", "welcomePage.interactivePlaygroundDescription": "Breve panoramica delle funzionalità essenziali dell'editor" } \ No newline at end of file diff --git a/i18n/ita/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/ita/src/vs/workbench/services/configuration/node/configuration.i18n.json index 31fce73e2d6..ccaa20ccc11 100644 --- a/i18n/ita/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/ita/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Impostazioni di configurazione di contributes.", "vscode.extension.contributes.configuration.title": "Riepilogo delle impostazioni. Questa etichetta verrà usata nel file di impostazioni come commento di separazione.", "vscode.extension.contributes.configuration.properties": "Descrizione delle proprietà di configurazione.", "scope.window.description": "Configurazione specifica della finestra, che può essere configurata nelle impostazioni dell'utente o dell'area di lavoro.", "scope.resource.description": "Configurazione specifica di risorse, che possono essere configurate nelle impostazioni utente, in quelle dell'area di lavoro o di una cartella.", "scope.description": "Ambito in cui la configurazione è applicabile. Gli ambiti disponibili sono 'finestra' e 'risorsa'.", - "invalid.type": "se impostato, 'configuration.type' deve essere impostato su 'object", + "vscode.extension.contributes.configuration": "Impostazioni di configurazione di contributes.", "invalid.title": "'configuration.title' deve essere una stringa", "vscode.extension.contributes.defaultConfiguration": "Aggiunge come contributo le impostazioni di configurazione predefinite dell'editor in base al linguaggio.", "invalid.properties": "'configuration.properties' deve essere un oggetto", diff --git a/i18n/ita/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/ita/src/vs/workbench/services/files/node/fileService.i18n.json index ea915074a17..635f4a0b0d1 100644 --- a/i18n/ita/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/ita/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Risorsa del file non valida ({0})", - "fileIsDirectoryError": "Il file è la directory ({0})", "fileNotModifiedError": "File non modificato dal giorno", "fileTooLargeError": "File troppo grande per essere aperto", "fileBinaryError": "Il file sembra essere binario e non può essere aperto come file di testo", diff --git a/i18n/jpn/extensions/azure-account/out/azure-account.i18n.json b/i18n/jpn/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..30b2830386c --- /dev/null +++ b/i18n/jpn/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "コピーして開く", + "azure-account.close": "閉じる", + "azure-account.login": "ログイン", + "azure-account.loginFirst": "最初にログインが必要です。", + "azure-account.userCodeFailed": "ユーザーコードの取得に失敗しました", + "azure-account.tokenFailed": "デバイス コードを持つトークンを取得", + "azure-account.tokenFromRefreshTokenFailed": "リフレッシュ トークンを含むトークンの取得" +} \ No newline at end of file diff --git a/i18n/jpn/extensions/azure-account/out/extension.i18n.json b/i18n/jpn/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..e643d542223 --- /dev/null +++ b/i18n/jpn/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: ログイン...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/code/electron-main/windows.i18n.json b/i18n/jpn/src/vs/code/electron-main/windows.i18n.json index 8297ee97c1a..83ca2a71403 100644 --- a/i18n/jpn/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/jpn/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "OK", "pathNotExistTitle": "パスが存在しません", "pathNotExistDetail": "パス '{0}' はディスクに存在しなくなったようです。", - "openWorkspace": "開く(&&O)", - "openWorkspaceTitle": "ワークスペースを開く", - "save": "保存(&&S)", - "doNotSave": "保存しない(&&N)", - "cancel": "キャンセル", - "saveWorkspaceMessage": "ワークスペースの構成をファイルとして保存しますか?", - "saveWorkspaceDetail": "再度開く予定があるならワークスペースを保存します。", - "saveWorkspace": "ワークスペースを保存", "reopen": "もう一度開く", "wait": "待機を続ける", "close": "閉じる", @@ -24,5 +16,13 @@ "appCrashedDetail": "ご不便をおかけして申し訳ありません。ウィンドウを再度開いて、中断したところから続行できます。", "open": "開く", "openFolder": "フォルダーを開く", - "openFile": "ファイルを開く" + "openFile": "ファイルを開く", + "openWorkspace": "開く(&&O)", + "openWorkspaceTitle": "ワークスペースを開く", + "save": "保存(&&S)", + "doNotSave": "保存しない(&&N)", + "cancel": "キャンセル", + "saveWorkspaceMessage": "ワークスペースの構成をファイルとして保存しますか?", + "saveWorkspaceDetail": "再度開く予定があるならワークスペースを保存します。", + "saveWorkspace": "ワークスペースを保存" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/jpn/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..e6139bff349 --- /dev/null +++ b/i18n/jpn/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "閉じる" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json b/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json index 7fcdc0fb8dd..65f0ae56870 100644 --- a/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/jpn/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,7 @@ "reuseWindow": "最後のアクティブ ウィンドウにファイルまたはフォルダーを強制的に開きます。", "userDataDir": "ユーザー データを保持するディレクトリを指定します。ルートで実行している場合に役立ちます。", "verbose": "詳細出力を表示します (--wait を含みます)。", - "wait": "現在のウィンドウが閉じるまで待機します。", + "wait": "戻る前にファイルが閉じるまでお待ちください。", "extensionHomePath": "拡張機能のルート パスを設定します。", "listExtensions": "インストールされている拡張機能を一覧表示します。", "showVersions": "--list-extension と使用するとき、インストールされている拡張機能のバージョンを表示します。", diff --git a/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 38e5bf8d7a1..ebcd92b7c61 100644 --- a/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/jpn/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,7 @@ "vscode.extension.activationEvents": "VS Code 拡張機能のアクティブ化イベント。", "vscode.extension.activationEvents.onLanguage": "指定された言語を解決するファイルが開かれるたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.onCommand": "指定したコマンドが呼び出されるたびにアクティブ化イベントが発行されます。", - "vscode.extension.activationEvents.onDebug": "指定されたタイプのデバッグ セッションが開始されるたびにアクティブ化イベントが発行されます。", + "vscode.extension.activationEvents.onDebug": "デバッグの開始またはデバッグ構成がセットアップされるたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.workspaceContains": "指定した glob パターンに一致するファイルを少なくとも 1 つ以上含むフォルダーを開くたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.onView": "指定したビューを展開するたびにアクティブ化イベントが発行されます。", "vscode.extension.activationEvents.star": "VS Code 起動時にアクティブ化イベントを発行します。優れたエンドユーザー エクスペリエンスを確保するために、他のアクティブ化イベントの組み合わせでは望む動作にならないときのみ使用してください。", diff --git a/i18n/jpn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/jpn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index ae9d901594c..5a5b9134955 100644 --- a/i18n/jpn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/jpn/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,8 @@ "contributes.defaults.highContrast": "high contrast テーマの既定の配色。配色の値は 16 進数(#RRGGBB[AA]) 、または 既定で提供されているテーマ設定可能な配色の識別子の既定値のいずれか。", "invalid.colorConfiguration": "'configuration.colors' は配列である必要があります", "invalid.default.colorType": "{0} は 16 進数(#RRGGBB[AA] または #RGB[A]) 、または 既定で提供されているテーマ設定可能な配色の識別子の既定値のいずれかでなければなりません。", - "invalid.id": "'configuration.colors.id' は定義する必要があり、空にできません", + "invalid.id": "'configuration.colors.id' を定義してください。空にはできません。", "invalid.id.format": "'configuration.colors.id' は word[.word]* の形式である必要があります", - "invalid.description": "'configuration.colors.description' は定義する必要があり、空にできません \n", + "invalid.description": "'configuration.colors.description' を定義してください。空にはできません。", "invalid.defaults": "'configuration.colors.defaults' は定義する必要があります。'light' か 'dark'、'highContrast' を含める必要があります。" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/jpn/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..7b7a2d57fdc --- /dev/null +++ b/i18n/jpn/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "ビューは配列にする必要があります", + "requirestring": " `{0}` プロパティは必須で、`string` 型でなければなりません", + "optstring": "`{0}` プロパティは省略するか、`string` 型にする必要があります", + "vscode.extension.contributes.view.id": "ビューの識別子。`vscode.window.registerTreeDataProviderForView` API を介してデータ プロバイダーを登録するには、これを使用します。また、`onView:${id}` イベントを `activationEvents` に登録することによって、拡張機能のアクティブ化をトリガーするためにも使用できます。", + "vscode.extension.contributes.view.name": "ビューの判読できる名前。表示されます", + "vscode.extension.contributes.view.when": "このビューを表示するために満たす必要がある条件", + "vscode.extension.contributes.views": "ビューをエディターに提供します", + "views.explorer": "エクスプローラー ビュー", + "views.debug": "デバッグ ビュー", + "locationId.invalid": "`{0}` は有効なビューの場所ではありません" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 7a03a21eed0..4a9a751d98c 100644 --- a/i18n/jpn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "アクティビティ バーから削除", - "keepInActivityBar": "アクティビティ バーに保持", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "アクティビティ バーに保持", "additionalViews": "その他のビュー", "numberBadge": "{0} ({1})", "manageExtension": "拡張機能を管理", diff --git a/i18n/jpn/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/jpn/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..77323e2fdd2 --- /dev/null +++ b/i18n/jpn/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} 個のアクション", + "hideView": "サイド バーから非表示" +} \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index b8608b055ff..6681f4c4778 100644 --- a/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,7 @@ "view id": "ID", "view name": "名前", "view location": "場所", - "themes": "テーマ ({0})", + "colorId": "Id", "JSON Validation": "JSON 検証 ({0})", "commands": "コマンド ({0})", "command name": "名前", diff --git a/i18n/jpn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index a6f39fd24c3..9cfd4305ea8 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "ファイル パスの照合基準となる glob パターン。これを true または false に設定すると、パターンがそれぞれ有効/無効になります。", "files.exclude.when": "一致するファイルの兄弟をさらにチェックします。一致するファイル名の変数として $(basename) を使用します。", "associations": "言語に対するファイルの関連付け (例 \"*.extension\": \"html\") を構成します。これらの関連付けは、インストールされている言語の既定の関連付けより優先されます。", - "encoding": "ファイルの読み取り/書き込みで使用する既定の文字セット エンコーディング。", - "autoGuessEncoding": "有効な場合、ファイルを開くときに文字セット エンコードを推測します", "eol": "既定の改行文字。LF の場合には \\n を CRLF の場合には \\r\\n を使用してください。", "trimTrailingWhitespace": "有効にすると、ファイルの保存時に末尾の空白をトリミングします。", "insertFinalNewline": "有効にすると、ファイルの保存時に最新の行を末尾に挿入します。", diff --git a/i18n/jpn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/jpn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 32f19d4912e..a11f1cb6ffc 100644 --- a/i18n/jpn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "右側のエディター ツール バーの操作で、変更を [元に戻す] か、ディスクの内容を変更内容で [上書き] します", "discard": "破棄", "overwrite": "上書き", "retry": "再試行", @@ -11,6 +12,5 @@ "genericSaveError": "'{0}' の保存に失敗しました: {1}", "staleSaveError": "'{0} の保存に失敗しました。ディスクの内容の方が新しくなっています。[比較] をクリックしてご使用のバージョンをディスク上のバージョンと比較してください。", "compareChanges": "比較", - "saveConflictDiffLabel": "{0} (ディスク上) ↔ {1} ({2} 内) - 保存の競合を解決", - "userGuide": "右側のエディター ツール バーの操作で、変更を [元に戻す] か、ディスクの内容を変更内容で [上書き] します" + "saveConflictDiffLabel": "{0} (ディスク上) ↔ {1} ({2} 内) - 保存の競合を解決" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 25592200f55..479d741087b 100644 --- a/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "その他の SCM プロバイダーをインストール...", - "no open repo": "有効なソース管理がありません。", "source control": "ソース管理", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 3f7491c52a6..d39ad81f948 100644 --- a/i18n/jpn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "ワークスペース内のシンボルへ移動...", "name": "検索", + "search": "検索", "showSearchViewlet": "検索の表示", "view": "表示", "findInFiles": "フォルダーを指定して検索", diff --git a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index dcf5681cf72..5543f202fbd 100644 --- a/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "`contributes.{0}.language` で不明な言語です。提供された値: {1}", + "invalid.path.0": "`contributes.{0}.path` に文字列が必要です。提供された値: {1}", + "invalid.path.1": "拡張機能のフォルダー ({2}) の中に `contributes.{0}.path` ({1}) が含まれている必要があります。これにより拡張を移植できなくなる可能性があります。", + "vscode.extension.contributes.snippets": "スニペットを提供します。", + "vscode.extension.contributes.snippets-language": "このスニペットの提供先の言語識別子です。", + "vscode.extension.contributes.snippets-path": "スニペット ファイルのパス。拡張機能フォルダーの相対パスであり、通常 './snippets/' で始まります。", + "badVariableUse": "スニペット \"{0}\" は、スニペット変数とスニペット プレースホルダーを混乱させる可能性が非常にあります。詳細については https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax をご覧ください。", "source.snippet": "ユーザー スニペット", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/jpn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 25833416f11..2308da613b4 100644 --- a/i18n/jpn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "実行中のタスクを表示", "tasks": "タスク", - "TaskSystem.noHotSwap": "タスクの実行エンジンを変更するにはウィンドウの再読み込みが必要です", "TaskService.noBuildTask1": "ビルド タスクが定義されていません。tasks.json ファイルでタスクに 'isBuildCommand' というマークを付けてください。", "TaskService.noBuildTask2": "ビルド タスクが定義されていません。tasks.json ファイルでタスクに 'build' グループとしてマークを付けてください。", "TaskService.noTestTask1": "テスト タスクが定義されていません。tasks.json ファイルでタスクに 'isTestCommand' というマークを付けてください。", diff --git a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 6f1481812dd..4d0ecdd18b0 100644 --- a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "開いているすべてのターミナルを表示", + "terminal": "ターミナル", "terminalIntegratedConfigurationTitle": "統合ターミナル", "terminal.integrated.shell.linux": "ターミナルが Linux で使用するシェルのパス。", "terminal.integrated.shellArgs.linux": "Linux のターミナルで使用するコマンド ライン引数。", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Windows ターミナル上の場合に使用されるコマンド ライン引数。", "terminal.integrated.rightClickCopyPaste": "設定している場合、ターミナル内で右クリックしたときにコンテキスト メニューを表示させず、選択範囲がある場合はコピー、選択範囲がない場合は貼り付けの操作を行います。", "terminal.integrated.fontFamily": "端末のフォント ファミリを制御します。既定値は editor.fontFamily になります。", - "terminal.integrated.fontLigatures": "ターミナルでフォントの合字が有効かどうかを制御します。", "terminal.integrated.fontSize": "ターミナルのフォント サイズをピクセル単位で制御します。", "terminal.integrated.lineHeight": "ターミナルの行の高さを制御します。この数値にターミナルのフォント サイズを乗算すると、実際の行の高さ (ピクセル単位) になります。", - "terminal.integrated.enableBold": "ターミナル内で太字を有効にするかどうか。これにはターミナルシェルからのサポートがひつようです。", "terminal.integrated.cursorBlinking": "ターミナルのカーソルを点滅させるかどうかを制御します。", "terminal.integrated.cursorStyle": "端末のカーソルのスタイルを制御します。", "terminal.integrated.scrollback": "端末がそのバッファーに保持できる最大行数を制御します。", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "OS X のターミナルで使用される VS Code のプロセスに追加される環境変数を持つオブジェクト", "terminal.integrated.env.linux": "Linux のターミナルで使用される VS Code のプロセスに追加される環境変数を持つオブジェクト", "terminal.integrated.env.windows": "Windows のターミナルで使用される VS Code のプロセスに追加される環境変数を持つオブジェクト", - "terminal": "ターミナル", "terminalCategory": "ターミナル", "viewCategory": "表示" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 8877f9b0a8b..b957e64c6eb 100644 --- a/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "検索ウィジェットにフォーカスする", "workbench.action.terminal.hideFindWidget": "検索ウィジェットを非表示にする", "nextTerminalFindTerm": "次の検索語句を表示", - "previousTerminalFindTerm": "前の検索語句を表示", - "quickOpenTerm": "ターミナル: アクティブなターミナルの切り替え" + "previousTerminalFindTerm": "前の検索語句を表示" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 5dbb0f484f3..6b8b81bf3c1 100644 --- a/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/jpn/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "コマンド パレットからコマンドを検索してすばやくアクセスします ({0})", "welcomePage.interfaceOverview": "インターフェイスの概要", "welcomePage.interfaceOverviewDescription": "UI の主要コンポーネントを解説した視覚オーバーレイを表示します", - "welcomePage.deployToAzure": "クラウドにアプリケーションをデプロイ", - "welcomePage.deployToAzureDescription": "Node アプリケーションを Azure App Service にデプロイする方法を学ぶ", "welcomePage.interactivePlayground": "対話型プレイグラウンド", "welcomePage.interactivePlaygroundDescription": "エディターの基本機能を簡潔なチュートリアルで体験します" } \ No newline at end of file diff --git a/i18n/jpn/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/jpn/src/vs/workbench/services/configuration/node/configuration.i18n.json index 47295547a7e..50b9ab7d867 100644 --- a/i18n/jpn/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "構成の設定を提供します。", "vscode.extension.contributes.configuration.title": "設定の概要です。このラベルは、設定ファイルでコメントの区切り文字として使用します。", "vscode.extension.contributes.configuration.properties": "構成のプロパティの説明です。", "scope.window.description": "ウィンドウ固有の構成。ユーザーまたはワークスペースの設定で構成できます。", "scope.resource.description": "リソース固有の構成。ユーザー、ワークスペース、またはフォルダーの設定で構成できます。", "scope.description": "構成が適用される範囲。 使用可能なスコープは `window` と ` resource` です。", - "invalid.type": "設定すると、'configuration.type' は 'オブジェクトに設定されなければなりません", + "vscode.extension.contributes.configuration": "構成の設定を提供します。", "invalid.title": "'configuration.title' は、文字列である必要があります", "vscode.extension.contributes.defaultConfiguration": "言語ごとに既定のエディター構成の設定を提供します。", "invalid.properties": "'configuration.properties' は、オブジェクトである必要があります", diff --git a/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json index 021b92585e2..8c65920db65 100644 --- a/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/jpn/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "ファイルのリソース ({0}) が無効です", - "fileIsDirectoryError": "ファイルがディレクトリです ({0})", "fileNotModifiedError": "ファイルは次の時点以後に変更されていません:", "fileTooLargeError": "開くファイルが大きすぎます", "fileBinaryError": "ファイルはバイナリのようなので、テキストとして開くことができません", diff --git a/i18n/kor/extensions/azure-account/out/azure-account.i18n.json b/i18n/kor/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..c939d0255af --- /dev/null +++ b/i18n/kor/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "복사 및 열기", + "azure-account.close": "닫기", + "azure-account.login": "로그인", + "azure-account.loginFirst": "로그인하지 않았습니다. 먼저 로그인하세요.", + "azure-account.userCodeFailed": "사용자 코드를 가져오지 못했습니다.", + "azure-account.tokenFailed": "장치 토큰을 사용하여 토큰을 가져오는 중", + "azure-account.tokenFromRefreshTokenFailed": "새로 고침 토큰을 사용하여 토큰을 가져오는 중" +} \ No newline at end of file diff --git a/i18n/kor/extensions/azure-account/out/extension.i18n.json b/i18n/kor/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..f17dba5f8b8 --- /dev/null +++ b/i18n/kor/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: 로그인하는 중...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/kor/extensions/git/package.i18n.json b/i18n/kor/extensions/git/package.i18n.json index a39479125fe..836154a75aa 100644 --- a/i18n/kor/extensions/git/package.i18n.json +++ b/i18n/kor/extensions/git/package.i18n.json @@ -59,5 +59,5 @@ "config.defaultCloneDirectory": "git 리포지토리를 복제할 기본 위치", "config.enableSmartCommit": "단계적 변경 사항이 없는 경우 모든 변경 사항을 저장합니다.", "config.enableCommitSigning": "GPG를 사용한 커밋 서명을 사용하도록 설정합니다.", - "config.discardAllScope": "`모든 변경 내용 취소` 명령으로 취소되는 변경 내용을 제어합니다. `모두`이면 모든 변경 내용을 취소합니다. `추적됨`이면 추적된 파일만 취소합니다. `프롬프트`이면 작업을 실행할 때마다 프롬프트 대화 상자를 표시합니다." + "config.discardAllScope": "`모든 변경 내용 취소` 명령으로 취소되는 변경 내용을 제어합니다. `all`이면 모든 변경 내용을 취소합니다. `tracked`이면 추적된 파일만 취소합니다. `prompt`이면 작업을 실행할 때마다 프롬프트 대화 상자를 표시합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/code/electron-main/windows.i18n.json b/i18n/kor/src/vs/code/electron-main/windows.i18n.json index da140f0ae88..a4902f09f10 100644 --- a/i18n/kor/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/kor/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "확인", "pathNotExistTitle": "경로가 없습니다.", "pathNotExistDetail": "'{0}' 경로가 디스크에 더 이상 없는 것 같습니다.", - "openWorkspace": "열기(&&O)", - "openWorkspaceTitle": "작업 영역 열기", - "save": "저장(&&S)", - "doNotSave": "저장 안 함(&&N)", - "cancel": "취소", - "saveWorkspaceMessage": "작업 영역 구성을 파일로 저장하시겠습니까?", - "saveWorkspaceDetail": "작업 영역을 다시 열려면 작업 영역을 저장하세요.", - "saveWorkspace": "작업 영역 저장", "reopen": "다시 열기", "wait": "계속 대기", "close": "닫기", @@ -24,5 +16,13 @@ "appCrashedDetail": "불편을 드려서 죄송합니다. 창을 다시 열면 중단된 위치에서 계속할 수 있습니다.", "open": "열기", "openFolder": "폴더 열기", - "openFile": "파일 열기" + "openFile": "파일 열기", + "openWorkspace": "열기(&&O)", + "openWorkspaceTitle": "작업 영역 열기", + "save": "저장(&&S)", + "doNotSave": "저장 안 함(&&N)", + "cancel": "취소", + "saveWorkspaceMessage": "작업 영역 구성을 파일로 저장하시겠습니까?", + "saveWorkspaceDetail": "작업 영역을 다시 열려면 작업 영역을 저장하세요.", + "saveWorkspace": "작업 영역 저장" } \ No newline at end of file diff --git a/i18n/kor/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/kor/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..9befc5560b1 --- /dev/null +++ b/i18n/kor/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "닫기" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/platform/environment/node/argv.i18n.json b/i18n/kor/src/vs/platform/environment/node/argv.i18n.json index a17aa5d4532..614e1274b87 100644 --- a/i18n/kor/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/kor/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,6 @@ "reuseWindow": "마지막 활성 창에서 파일 또는 폴더를 강제로 엽니다.", "userDataDir": "사용자 데이터가 저장되는 디렉터리를 지정합니다(루트로 실행할 경우 유용함).", "verbose": "자세한 정보 표시를 출력합니다(--wait를 의미).", - "wait": "창이 닫힐 때까지 기다린 후 돌아갑니다.", "extensionHomePath": "확장의 루트 경로를 설정합니다.", "listExtensions": "설치된 확장을 나열합니다.", "showVersions": "#NAME?", diff --git a/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 7207158c622..005dd7fd2b3 100644 --- a/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/kor/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "VS Code 확장에 대한 활성화 이벤트입니다.", "vscode.extension.activationEvents.onLanguage": "지정된 언어로 확인되는 파일을 열 때마다 활성화 이벤트가 발송됩니다.", "vscode.extension.activationEvents.onCommand": "지정된 명령을 호출할 때마다 활성화 이벤트가 발송됩니다.", - "vscode.extension.activationEvents.onDebug": "지정된 유형의 디버깅 세션을 시작할 때마다 활성화 알림이 발송됩니다.", "vscode.extension.activationEvents.workspaceContains": "지정된 glob 패턴과 일치하는 파일이 하나 이상 있는 폴더를 열 때마다 활성화 알림이 발송됩니다.", "vscode.extension.activationEvents.onView": "지정된 뷰가 확장될 때마다 활성화 이벤트가 내보내 집니다.", "vscode.extension.activationEvents.star": "VS Code 시작 시 활성화 이벤트가 발송됩니다. 훌륭한 최종 사용자 경험을 보장하려면 사용 케이스에서 다른 활성화 이벤트 조합이 작동하지 않을 때에만 확장에서 이 활성화 이벤트를 사용하세요.", diff --git a/i18n/kor/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/kor/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index 50827151bc9..3f1ee411c6a 100644 --- a/i18n/kor/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/kor/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "고대비 테마의 기본 색상입니다. 기본값을 제공하는 16진수(#RRGGBB[AA])의 색상 값 또는 테마 지정 가능 색의 식별자입니다.", "invalid.colorConfiguration": "'configuration.colors'는 배열이어야 합니다.", "invalid.default.colorType": "{0}은(는) 16진수의 색 값(#RRGGBB[AA] 또는 #RGB[A]) 또는 기본값을 제공하는 테마 지정 가능 색의 식별자입니다.", - "invalid.id": "'configuration.colors.id'를 정의해야 하여 비워 둘 수 없습니다.", "invalid.id.format": "'configuration.colors.id'는 단어[.word]* 다음에 와야 합니다.", - "invalid.description": "'configuration.colors.description'를 정의해야 하며 비워 둘 수 없습니다.", "invalid.defaults": "'configuration.colors.defaults'를 정의해야 하며 'light', 'dark' 및 'highContrast'를 포함해야 합니다." } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/kor/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..25892e50a69 --- /dev/null +++ b/i18n/kor/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "뷰는 배열이어야 합니다.", + "requirestring": "속성 `{0}`은(는) 필수이며 `string` 형식이어야 합니다.", + "optstring": "속성 `{0}`은(는) 생략할 수 있으며 `string` 형식이어야 합니다.", + "vscode.extension.contributes.view.id": "뷰의 식별자입니다. 'vscode.window.registerTreeDataProviderForView` API를 통해 데이터 공급자를 등록하는 데 사용합니다. `onView:${id}` 이벤트를 `activationEvents`에 등록하여 확장 활성화를 트리거하는 데에도 사용합니다.", + "vscode.extension.contributes.view.name": "사용자가 읽을 수 있는 뷰 이름입니다. 표시됩니다.", + "vscode.extension.contributes.view.when": "이 보기를 표시하기 위해 true여야 하는 조건입니다.", + "vscode.extension.contributes.views": "뷰를 에디터에 적용합니다.", + "views.explorer": "탐색기 뷰", + "views.debug": "디버그 보기", + "locationId.invalid": "`{0}`은(는) 유효한 뷰 위치가 아닙니다." +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 9f4e768eccf..06b58ca3a23 100644 --- a/i18n/kor/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/kor/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "작업 막대에서 제거", - "keepInActivityBar": "작업 막대에 유지", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0}({1})", + "keepInActivityBar": "작업 막대에 유지", "additionalViews": "추가 뷰", "numberBadge": "{0}({1})", "manageExtension": "확장 관리", diff --git a/i18n/kor/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/kor/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..126ed4fd56c --- /dev/null +++ b/i18n/kor/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} 동작", + "hideView": "사이드바에서 숨기기" +} \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 14206f8db05..f0bb9eb253a 100644 --- a/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "ID", "view name": "이름", "view location": "위치", - "themes": "테마({0})", "JSON Validation": "JSON 유효성 검사({0})", "commands": "명령({0})", "command name": "이름", diff --git a/i18n/kor/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index e75ec609b89..f64b01530c1 100644 --- a/i18n/kor/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "파일 경로를 일치시킬 GLOB 패턴입니다. 패턴을 사용하거나 사용하지 않도록 설정하려면 true 또는 false로 설정하세요.", "files.exclude.when": "일치하는 파일의 형제에 대한 추가 검사입니다. $(basename)을 일치하는 파일 이름에 대한 변수로 사용하세요.", "associations": "파일과 언어의 연결을 구성하세요(예: \"*.extension\": \"html\"). 이러한 구성은 설치된 언어의 기본 연결보다 우선 순위가 높습니다.", - "encoding": "파일을 읽고 쓸 때 사용할 기본 문자 집합 인코딩입니다.", - "autoGuessEncoding": "사용하도록 설정하는 경우 파일을 열 때 문자 집합 인코딩을 추측합니다.", "eol": "줄 바꿈 문자의 기본 끝입니다. LF에는 \\n, CRLF에는 \\r\\n을 사용하세요.", "trimTrailingWhitespace": "사용하도록 설정되면 파일을 저장할 때 후행 공백이 잘립니다.", "insertFinalNewline": "사용하도록 설정되면 저장할 때 파일 끝에 마지막 줄바꿈을 삽입합니다.", diff --git a/i18n/kor/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/kor/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index a59e72f5c39..6cf353ae712 100644 --- a/i18n/kor/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "오른쪽 편집기 도구 모음의 작업을 사용하여 변경 내용을 **실행 취소**하거나 디스크의 콘텐츠를 변경 내용으로 **덮어쓰기**", "discard": "삭제", "overwrite": "덮어쓰기", "retry": "다시 시도", @@ -11,6 +12,5 @@ "genericSaveError": "'{0}'을(를) 저장하지 못했습니다. {1}", "staleSaveError": "'{0}'을(를) 저장하지 못했습니다. 디스크의 내용이 최신 버전입니다. 버전을 디스크에 있는 버전과 비교하려면 **비교**를 클릭하세요.", "compareChanges": "비교", - "saveConflictDiffLabel": "{0}(디스크에 있음) ↔ {1}({2}에 있음) - 저장 충돌 해결", - "userGuide": "오른쪽 편집기 도구 모음의 작업을 사용하여 변경 내용을 **실행 취소**하거나 디스크의 콘텐츠를 변경 내용으로 **덮어쓰기**" + "saveConflictDiffLabel": "{0}(디스크에 있음) ↔ {1}({2}에 있음) - 저장 충돌 해결" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index ddc3c58328d..613ba80ad4e 100644 --- a/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "추가 SCM 공급자 설치...", - "no open repo": "활성 상태인 소스 제어가 없습니다.", "source control": "소스 제어", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 43025c6d45c..eda87691830 100644 --- a/i18n/kor/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "작업 영역에서 기호로 이동...", "name": "검색", + "search": "검색", "showSearchViewlet": "검색 표시", "view": "보기", "findInFiles": "파일에서 찾기", diff --git a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 3019664bb2a..ff965d875e1 100644 --- a/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "`contributes.{0}.language`에 알 수 없는 언어가 있습니다. 제공된 값: {1}", + "invalid.path.0": "`contributes.{0}.path`에 문자열이 필요합니다. 제공된 값: {1}", + "invalid.path.1": "확장 폴더({2})에 포함할 `contributes.{0}.path`({1})가 필요합니다. 확장이 이식 불가능해질 수 있습니다.", + "vscode.extension.contributes.snippets": "코드 조각을 적용합니다.", + "vscode.extension.contributes.snippets-language": "이 코드 조각이 적용되는 언어 식별자입니다.", + "vscode.extension.contributes.snippets-path": "코드 조각 파일의 경로입니다. 이 경로는 확장 폴더의 상대 경로이며 일반적으로 './snippets/'로 시작합니다.", + "badVariableUse": "\"{0}\"-snippet은 snippet-variables 및 snippet-placeholders와 혼동하기 쉽습니다. 자세한 내용은\n https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax를 참조하세요.", "source.snippet": "사용자 코드 조각", "detail.snippet": "{0}({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 9b7e29a9d95..f3414039077 100644 --- a/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "실행 중인 작업 표시", "tasks": "작업", - "TaskSystem.noHotSwap": "작업 실행 엔진을 변경하면 창을 다시 로드해야 합니다.", "TaskService.noBuildTask1": "정의된 빌드 작업이 없습니다. tasks.json 파일에서 작업을 'isBuildCommand'로 표시하세요.", "TaskService.noBuildTask2": "정의된 빌드 작업이 없습니다. tasks.json 파일에서 작업을 'build'로 표시하세요.", "TaskService.noTestTask1": "정의된 테스트 작업이 없습니다. tasks.json 파일에서 작업을 'isTestCommand'로 표시하세요.", diff --git a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 65227b7a9de..3a48f647ff2 100644 --- a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "모든 열려 있는 터미널 표시", + "terminal": "터미널", "terminalIntegratedConfigurationTitle": "통합 터미널", "terminal.integrated.shell.linux": "터미널이 Linux에서 사용하는 셸의 경로입니다.", "terminal.integrated.shellArgs.linux": "Linux 터미널에 있을 때 사용할 명령줄 인수입니다.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Windows 터미널에 있을 때 사용할 명령줄 인수입니다.", "terminal.integrated.rightClickCopyPaste": "설정하는 경우 터미널 내에서 마우스 오른쪽 단추를 클릭할 때 상황에 맞는 메뉴가 표시되지 않고 대신 선택 항목이 있으면 복사하고 선택 항목이 없으면 붙여넣습니다.", "terminal.integrated.fontFamily": "터미널의 글꼴 패밀리를 제어하며, 기본값은 editor.fontFamily의 값입니다.", - "terminal.integrated.fontLigatures": "터미널에서 글꼴 합자가 사용되는지를 제어합니다.", "terminal.integrated.fontSize": "터미널의 글꼴 크기(픽셀)를 제어합니다.", "terminal.integrated.lineHeight": "터미널의 줄 높이를 제어하며, 이 숫자는 터미널 글꼴 크기를 곱하여 실제 줄 높이(픽셀)를 얻습니다.", - "terminal.integrated.enableBold": "터미널 내에서 굵은 텍스트를 사용하도록 설정할지 여부이며, 터미널 셸의 지원이 필요합니다.", "terminal.integrated.cursorBlinking": "터미널 커서 깜박임 여부를 제어합니다.", "terminal.integrated.cursorStyle": "터미널 커서의 스타일을 제어합니다.", "terminal.integrated.scrollback": "터미널에서 버퍼에 유지하는 최대 줄 수를 제어합니다.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "OS X의 터미널이 사용하는 VS Code 프로세스에 추가될 환경 변수를 포함한 개체", "terminal.integrated.env.linux": "Linux의 터미널에서 사용할 VS Code 프로세스에 추가되는 환경 변수를 포함한 개체", "terminal.integrated.env.windows": "Windows의 터미널에서 사용할 VS Code 프로세스에 추가되는 환경 변수를 포함한 개체", - "terminal": "터미널", "terminalCategory": "터미널", "viewCategory": "보기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 56cc67cff46..d5e2c68ddac 100644 --- a/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "파인드 위젯 포커스", "workbench.action.terminal.hideFindWidget": "파인드 위젯 숨기기", "nextTerminalFindTerm": "다음 검색어 표시", - "previousTerminalFindTerm": "이전 검색어 표시", - "quickOpenTerm": "터미널: 활성 터미널에 전환" + "previousTerminalFindTerm": "이전 검색어 표시" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/kor/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index e18166f17b4..a7a11fff031 100644 --- a/i18n/kor/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/kor/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "명령 팔레트({0})에서 빠른 액세스 및 명령 검색", "welcomePage.interfaceOverview": "인터페이스 개요", "welcomePage.interfaceOverviewDescription": "UI의 주요 구성 요소를 강조 표시하는 시각적 오버레이 가져오기", - "welcomePage.deployToAzure": "클라우드에 응용 프로그램 배포", - "welcomePage.deployToAzureDescription": "Azure App Service에 Node 앱을 배포하는 방법 알아보기", "welcomePage.interactivePlayground": "대화형 실습", "welcomePage.interactivePlaygroundDescription": "짧은 연습에서 기본 편집기 기능 사용해 보기" } \ No newline at end of file diff --git a/i18n/kor/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/kor/src/vs/workbench/services/configuration/node/configuration.i18n.json index ecd7ef483a3..529c4144533 100644 --- a/i18n/kor/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/kor/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "구성 설정을 적용합니다.", "vscode.extension.contributes.configuration.title": "설정을 요약합니다. 이 레이블은 설정 파일에서 구분 주석으로 사용됩니다.", "vscode.extension.contributes.configuration.properties": "구성 속성에 대한 설명입니다.", "scope.window.description": "[사용자] 설정 또는 [작업 영역] 설정에서 구성할 수 있는 창 특정 구성입니다.", "scope.resource.description": "사용자, 작업 영역 또는 폴더 설정에서 구성할 수 있는 리소스 특정 구성", "scope.description": "구성이 적용되는 범위입니다. 사용 가능 범위는 '창'과 '리소스'입니다.", - "invalid.type": "설정된 경우 'configuration.type'을 '개체'로 설정해야 합니다.", + "vscode.extension.contributes.configuration": "구성 설정을 적용합니다.", "invalid.title": "'configuration.title'은 문자열이어야 합니다.", "vscode.extension.contributes.defaultConfiguration": "언어별로 기본 편집기 구성 설정을 적용합니다.", "invalid.properties": "'configuration.properties'는 개체여야 합니다.", diff --git a/i18n/kor/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/kor/src/vs/workbench/services/files/node/fileService.i18n.json index 88223fce427..ff2c5e9f172 100644 --- a/i18n/kor/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/kor/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "잘못된 파일 리소스({0})", - "fileIsDirectoryError": "파일이 디렉터리({0})입니다.", "fileNotModifiedError": "파일 수정 안 됨", "fileTooLargeError": "파일이 너무 커서 열 수 없음", "fileBinaryError": "파일이 이진인 것 같으므로 테스트로 열 수 없습니다.", diff --git a/i18n/ptb/extensions/azure-account/out/azure-account.i18n.json b/i18n/ptb/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..be4c29f593c --- /dev/null +++ b/i18n/ptb/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Copiar e Abrir", + "azure-account.close": "Fechar", + "azure-account.login": "Login", + "azure-account.loginFirst": "Não está logado, faça o login primeiro", + "azure-account.userCodeFailed": "Falha na aquisição do código do usuário.", + "azure-account.tokenFailed": "Adquirindo Token pelo código do dispositivo.", + "azure-account.tokenFromRefreshTokenFailed": "Adquirindo token com token de atualização" +} \ No newline at end of file diff --git a/i18n/ptb/extensions/azure-account/out/extension.i18n.json b/i18n/ptb/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..584e7c82e0f --- /dev/null +++ b/i18n/ptb/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: Login...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/ptb/extensions/css/package.i18n.json b/i18n/ptb/extensions/css/package.i18n.json index 57b5e3227e1..b0f3195c149 100644 --- a/i18n/ptb/extensions/css/package.i18n.json +++ b/i18n/ptb/extensions/css/package.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "css.title": "CSS", "css.lint.argumentsInColorFunction.desc": "Número inválido de parâmetros", "css.lint.boxModel.desc": "Não use largura ou altura ao usar preenchimento ou borda", "css.lint.compatibleVendorPrefixes.desc": "Ao usar um prefixo específico de fornecedor, certifique-se de também incluir todas as outras propriedades específicas do fornecedor", @@ -25,6 +26,7 @@ "css.trace.server.desc": "Rastrear a comunicação entre o VS Code e o servidor de linguagem CSS.", "css.validate.title": "Controla a validação CSS and a gravidade dos problemas.", "css.validate.desc": "Habilita ou desabilita todas as validações", + "less.title": "LESS", "less.lint.argumentsInColorFunction.desc": "Número inválido de parâmetros", "less.lint.boxModel.desc": "Não use largura ou altura ao usar preenchimento ou borda", "less.lint.compatibleVendorPrefixes.desc": "Ao usar um prefixo específico de fornecedor, certifique-se de também incluir todas as outras propriedades específicas do fornecedor", @@ -45,6 +47,7 @@ "less.lint.zeroUnits.desc": "Nenhuma unidade para zero é necessária", "less.validate.title": "Controla MENOS as severidades de validação e problemas.", "less.validate.desc": "Habilita ou desabilita todas as validações", + "scss.title": "SCSS (Sass)", "scss.lint.argumentsInColorFunction.desc": "Número inválido de parâmetros", "scss.lint.boxModel.desc": "Não use largura ou altura ao usar preenchimento ou borda", "scss.lint.compatibleVendorPrefixes.desc": "Ao usar um prefixo específico de fornecedor, certifique-se de também incluir todas as outras propriedades específicas do fornecedor", diff --git a/i18n/ptb/src/vs/code/electron-main/menus.i18n.json b/i18n/ptb/src/vs/code/electron-main/menus.i18n.json index 66922911973..709c9b4bbc4 100644 --- a/i18n/ptb/src/vs/code/electron-main/menus.i18n.json +++ b/i18n/ptb/src/vs/code/electron-main/menus.i18n.json @@ -151,6 +151,10 @@ "mZoom": "Ampliar", "mBringToFront": "Trazer Tudo para a Frente", "miSwitchWindow": "Alternar &&Janela...", + "mShowPreviousTab": "Mostrar a guia anterior", + "mShowNextTab": "Mostrar próxima guia", + "mMoveTabToNewWindow": "Mover guia para nova janela", + "mMergeAllWindows": "Mesclar todas as janelas", "miToggleDevTools": "&&Alternar Ferramentas do Desenvolvedor", "miAccessibilityOptions": "&&Opções de Acessibilidade", "miReportIssues": "Relatar &&Problemas", diff --git a/i18n/ptb/src/vs/code/electron-main/windows.i18n.json b/i18n/ptb/src/vs/code/electron-main/windows.i18n.json index 05960bd5350..c8c821ec8a6 100644 --- a/i18n/ptb/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/ptb/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "OK", "pathNotExistTitle": "O caminho não existe", "pathNotExistDetail": "O caminho '{0}' não parece mais existir no disco.", - "openWorkspace": "&&Abrir", - "openWorkspaceTitle": "Abrir o Espaço de Trabalho", - "save": "&&Salvar", - "doNotSave": "&&Não Salvar", - "cancel": "Cancelar", - "saveWorkspaceMessage": "Você quer salvar a sua configuração de área de trabalho como um arquivo?", - "saveWorkspaceDetail": "Salve seu espaço de trabalho se pretende abri-lo novamente.", - "saveWorkspace": "Salvar o espaço de trabalho", "reopen": "Reabrir", "wait": "Continuar Esperando", "close": "Fechar", @@ -24,5 +16,14 @@ "appCrashedDetail": "Pedimos desculpas pelo inconveniente! Você pode reabrir a janela para continuar de onde parou.", "open": "Abrir", "openFolder": "Abrir Pasta", - "openFile": "Abrir Arquivo" + "openFile": "Abrir Arquivo", + "workspaceOpenedMessage": "Não é possível salvar espaço de trabalho '{0}'", + "openWorkspace": "&&Abrir", + "openWorkspaceTitle": "Abrir o Espaço de Trabalho", + "save": "&&Salvar", + "doNotSave": "&&Não Salvar", + "cancel": "Cancelar", + "saveWorkspaceMessage": "Você quer salvar a sua configuração de área de trabalho como um arquivo?", + "saveWorkspaceDetail": "Salve seu espaço de trabalho se pretende abri-lo novamente.", + "saveWorkspace": "Salvar o espaço de trabalho" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json b/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json index 44d5ecaf2b3..31c006174d1 100644 --- a/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json +++ b/i18n/ptb/src/vs/editor/common/config/commonEditorConfig.i18n.json @@ -88,6 +88,7 @@ "accessibilitySupport": "Controla quando o editor deve executar em modo otimizado para leitores de tela.", "links": "Controla se o editor deve detectar links e torná-los clicáveis", "colorDecorators": "Controla se o editor deve processar os decoradores de cor inline e o seletor de cores.", + "codeActions": "Habilita a ação de código lightbulb", "sideBySide": "Controla se o editor de diff mostra as diff lado a lado ou inline.", "ignoreTrimWhitespace": "Controla se o editor de diff mostra alterações nos espaços iniciais ou finais como diferenças", "renderIndicators": "Controla se o editor de diff mostra indicadores +/- para alterações adicionadas/removidas", diff --git a/i18n/ptb/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/ptb/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..41ad7313b7d --- /dev/null +++ b/i18n/ptb/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Fechar" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json b/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json index c7feb1525e8..0aa4f21b3dd 100644 --- a/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/ptb/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,7 @@ "reuseWindow": "Forçar a abertura de um arquivo ou pasta na última janela ativa", "userDataDir": "Especifica o diretório que os dados do usuário serão mantidos, útil quando estiver rodando como root.", "verbose": "Imprimir a saída detalhada (Implica -- esperar).", - "wait": "Aguarde a janela ser fechada antes de retornar.", + "wait": "Espere pelos arquivos a serem fechados antes de retornar.", "extensionHomePath": "Defina o caminho raíz para as extensões.", "listExtensions": "Lista de extensões instaladas", "showVersions": "Exibir versões de extensões instaladas, quando estiver usando --list-extension", diff --git a/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 8de8bd11bbf..3f6e49c05ce 100644 --- a/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/ptb/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,7 @@ "vscode.extension.activationEvents": "Eventos de ativação para a extensão VS Code.", "vscode.extension.activationEvents.onLanguage": "Um evento de ativação emitido sempre que um arquivo que resolve para a linguagem especificada é aberto.", "vscode.extension.activationEvents.onCommand": "Um evento de ativação emitido sempre que o comando especificado for invocado.", - "vscode.extension.activationEvents.onDebug": "Um evento de ativação emitido sempre que uma sessão de depuração do tipo especificado é iniciada.", + "vscode.extension.activationEvents.onDebug": "Um evento de ativação emitido sempre que um usuário está prestes a iniciar a depuração ou a definir as configurações de depuração.", "vscode.extension.activationEvents.workspaceContains": "Um evento de ativação emitido quando uma pasta que contém pelo menos um arquivo correspondente ao padrão global especificado é aberta.", "vscode.extension.activationEvents.onView": "Um evento de ativação emitido sempre que o modo de visualização especificado é expandido.", "vscode.extension.activationEvents.star": "Um evento de ativação emitido na inicialização do VS Code. Para garantir uma ótima experiência de usuário, por favor, use este evento de ativação em sua extensão somente quando nenhuma outra combinação de eventos de ativação funcionar em seu caso de uso.", diff --git a/i18n/ptb/src/vs/platform/extensions/node/extensionValidator.i18n.json b/i18n/ptb/src/vs/platform/extensions/node/extensionValidator.i18n.json index fe37dd1820f..a49ac3b2df8 100644 --- a/i18n/ptb/src/vs/platform/extensions/node/extensionValidator.i18n.json +++ b/i18n/ptb/src/vs/platform/extensions/node/extensionValidator.i18n.json @@ -17,7 +17,7 @@ "extensionDescription.extensionDependencies": "a propriedade `{0}` pode ser omitida ou deve ser do tipo `string[]`", "extensionDescription.activationEvents1": "a propriedade `{0}` pode ser omitida ou deve ser do tipo `string[]`", "extensionDescription.activationEvents2": "Propriedades '{0}' e '{1}' devem ser especificadas ou devem ambas ser omitidas", - "extensionDescription.main1": "a propriedade `{0}` é opcional ou pode ser do tipo `string`", + "extensionDescription.main1": "a propriedade `{0}` é opcional ou deve ser do tipo `string`", "extensionDescription.main2": "Esperado 'main' ({0}) ser incluído dentro da pasta da extensão ({1}). Isto pode fazer a extensão não-portável.", "extensionDescription.main3": "propriedades '{0}' e '{1}' devem ser especificadas ou devem ambas ser omitidas", "notSemver": "Versão da extensão não é compatível a semver" diff --git a/i18n/ptb/src/vs/platform/markers/common/problemMatcher.i18n.json b/i18n/ptb/src/vs/platform/markers/common/problemMatcher.i18n.json index 468301da2b6..ccfeff369a4 100644 --- a/i18n/ptb/src/vs/platform/markers/common/problemMatcher.i18n.json +++ b/i18n/ptb/src/vs/platform/markers/common/problemMatcher.i18n.json @@ -33,7 +33,7 @@ "ProblemMatcherParser.noIdentifier": "Erro: a propriedade padrão se refere a um identificador vazio.", "ProblemMatcherParser.noValidIdentifier": "Erro: a propriedade padrão {0} não é uma variável de padrões válida.", "ProblemMatcherParser.problemPattern.watchingMatcher": "Um problema de correspondência deve obrigatoriamente definir padrão inicial e um padrão final para monitoramento.", - "ProblemMatcherParser.invalidRegexp": "Erro: a cadeia de caracteres {0} não é uma expressão regular válida.\n", + "ProblemMatcherParser.invalidRegexp": "Erro: a cadeia de caracteres {0} não é uma expressão regular válida. ", "WatchingPatternSchema.regexp": "A expressão regular para detectar o início ou o fim de uma tarefa em segundo plano.", "WatchingPatternSchema.file": "O índice do grupo de correspondência do arquivo. Pode ser omitido.", "PatternTypeSchema.name": "O nome de um padrão pré-definido ou contribuído.", diff --git a/i18n/ptb/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/ptb/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..fe9bcf24664 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "visualizações devem ser uma matriz", + "requirestring": "a propriedade `{0}` é obrigatória e deve ser do tipo `string`", + "optstring": "a propriedade `{0}` é opcional ou deve ser do tipo `string`", + "vscode.extension.contributes.view.id": "Identificador da visualiozação. Use isto para registrar um provedor de dados através de 'vscode.window.registerTreeDataProviderForView' API. Também para acionar ativando sua extensão registrando o evento 'onView: ${id}' para 'activationEvents'.", + "vscode.extension.contributes.view.name": "O nome legível da visualização. Será mostrado", + "vscode.extension.contributes.view.when": "Condição que deve ser verdadeira para mostrar esta visualização", + "vscode.extension.contributes.views": "Contribui visualizações ao editor", + "views.explorer": "Visualização do explorador", + "views.debug": "Visualizar Depurador", + "locationId.invalid": "'{0}' não é um local válido de visualização" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 8dab311a65f..5a931aa160b 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,10 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Remover da Barra de Atividades", - "keepInActivityBar": "Manter na Barra de Atividades", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "removeFromActivityBar": "Ocultar da barra de atividade", + "keepInActivityBar": "Manter na Barra de Atividades", "additionalViews": "Visualizações Adicionais", "numberBadge": "{0} ({1})", "manageExtension": "Gerenciar Extensão", diff --git a/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json index 1d6013b09e5..7c10c0e60fd 100644 --- a/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/browser/parts/editor/editorActions.i18n.json @@ -35,6 +35,7 @@ "openPreviousEditorInGroup": "Abrir editor anterior no grupo", "navigateNext": "Avançar", "navigatePrevious": "Voltar", + "navigateLast": "Ir para o último", "reopenClosedEditor": "Reabrir Editor Fechado", "clearRecentFiles": "Limpar Abertos Recentemente", "showEditorsInFirstGroup": "Mostrar editores no primeiro grupo", diff --git a/i18n/ptb/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/ptb/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..d210a742451 --- /dev/null +++ b/i18n/ptb/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} ações ", + "hideView": "Ocultar a Barra Lateral" +} \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json b/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json index adcd512f7bf..ac9c586bc14 100644 --- a/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json +++ b/i18n/ptb/src/vs/workbench/electron-browser/actions.i18n.json @@ -42,5 +42,10 @@ "navigateUp": "Navegar para a Visualização Acima", "navigateDown": "Navegar para a Visualização Abaixo", "increaseViewSize": "Aumentar o Tamanho da Visualização Atual", - "decreaseViewSize": "Diminuir o Tamanho da Visualização Atual" + "decreaseViewSize": "Diminuir o Tamanho da Visualização Atual", + "showPreviousTab": "Mostrar a guia da janela anterior", + "showNextWindowTab": "Mostrar guia da próxima janela", + "moveWindowTabToNewWindow": "Mover a guia da janela para a nova janela", + "mergeAllWindowTabs": "Mesclar todas as janelas", + "toggleWindowTabsBar": "Alternar a Barra de Guias da Janela" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json b/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json index 187a9d8fc3e..cce59df50bf 100644 --- a/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/electron-browser/main.contribution.i18n.json @@ -10,6 +10,11 @@ "workspaces": "Espaços de trabalho", "developer": "Desenvolvedor", "showEditorTabs": "Controla se os editores abertos devem ou não serem exibidos em abas.", + "workbench.editor.labelFormat.default": "Mostrar o nome do arquivo. Quando as guias estão habilitadas e dois arquivos têm o mesmo nome em um grupo, as seções distintas de cada caminho de arquivo são adicionadas. Quando as guias estão desativadas, o caminho relativo à raiz do espaço de trabalho é mostrado se o editor estiver ativo.", + "workbench.editor.labelFormat.short": "Mostrar o nome do arquivo seguido pelo nome do diretório.", + "workbench.editor.labelFormat.medium": "Mostrar o nome do arquivo seguido pelo seu caminho relativo à raiz do espaço de trabalho.", + "workbench.editor.labelFormat.long": "Mostrar o nome do arquivo seguido pelo seu caminho absoluto.", + "tabDescription": "Controla o formato do rótulo para um editor. Alterar essa configuração pode por exemplo tornar mais fácil entender a localização de um arquivo:\n- curto: 'parent'\n- médio: 'workspace/src/parent'\n- longa: '/ home/user/workspace/src/parent'\n- padrão: '... /parent, quando outra guia compartilha o mesmo título, ou o caminho relativo do espaço de trabalho se as guias estão desabilitadas", "editorTabCloseButton": "Controla a posição dos botões de fechar das abas do editor ou os desabilita quando configurados para 'desligado'.", "showIcons": "Controla se os editores abertos devem ou não ser exibidos com um ícone. Requer um tema de ícone para ser habilitado. ", "enablePreview": "Controla se os editores abertos são exibidos como visualização. Editores de visualização são reutilizados até que eles sejam preservados (por exemplo, através de um duplo clique ou edição).", diff --git a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json index 86218bade61..8532e53b63f 100644 --- a/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/debug/electron-browser/debugService.i18n.json @@ -12,6 +12,8 @@ "breakpointRemoved": "Ponto de interrupção removido, linha {0}, arquivo {1}", "compoundMustHaveConfigurations": "Composição deve ter o atributo \"configurations\" definido para iniciar várias configurações.", "configMissing": "Configuração '{0}' não tem 'launch.json'.", + "debugRequestNotSupported": "Solicitação de depuração configurada '{0}' não é suportada", + "debugRequesMissing": "Solicitação de depuração está faltando na configuração de lançamento escolhida", "debugTypeNotSupported": "Tipo de depuração configurado '{0}' não é suportado.", "debugTypeMissing": "Falta a propriedade 'type' para a configuração de lançamento escolhida.", "preLaunchTaskErrors": "Erros de build foram detectados durante a preLaunchTask '{0}'.", diff --git a/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 5e56d61c26b..dfd7672ae26 100644 --- a/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,13 @@ "view id": "ID", "view name": "Nome", "view location": "Onde", - "themes": "Temas ({0})", + "colorThemes": "Temas de cores ({0})", + "iconThemes": "Temas de ícones ({0})", + "colors": "Cores ({0})", + "colorId": "Id", + "defaultDark": "Padrão Escuro", + "defaultLight": "Padrão Claro", + "defaultHC": "Padrão de alto contraste", "JSON Validation": "Validação JSON ({0})", "commands": "Comandos ({0})", "command name": "Nome", diff --git a/i18n/ptb/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index ee171bb5759..c022abf370d 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,8 @@ "files.exclude.boolean": "O padrão glob com o qual combinar os caminhos de arquivo. Defina para verdadeiro ou falso para habilitar ou desabilitar o padrão.", "files.exclude.when": "Verificação adicional nos irmãos de um arquivo correspondente. Use $(basename) como variável para o nome do arquivo correspondente.", "associations": "Configurar as associações de arquivo para linguagens (por exemplo, \"* Extension\": \"html\"). Estas têm precedência sobre as associações padrão das linguagens instaladas.", - "encoding": "A codificação padrão do conjunto de caracteres para ser usada ao ler e gravar arquivos.", - "autoGuessEncoding": "Quando habilitado, tentará adivinhar a codificação do conjunto de caracteres ao abrir arquivos", + "encoding": "O conjunto de codificação de caracteres padrão a ser usado ao ler e gravar arquivos. Essa configuração também pode ser configurada por linguagem.", + "autoGuessEncoding": "Quando habilitado, tentará adivinhar o conjunto de codificação de caracteres ao abrir arquivos. Essa configuração também pode ser configurada por linguagem.", "eol": "O caractere padrão de fim de linha. Use \\n para LF e \\r\\n para CRLF.", "trimTrailingWhitespace": "Quando habilitado, removerá espaços em branco à direita ao salvar um arquivo.", "insertFinalNewline": "Quando habilitado, inseririrá uma nova linha no final do arquivo quando salvá-lo.", diff --git a/i18n/ptb/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 86ac69a7d68..09a29894643 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Use as ações na barra de ferramentas de editor para a direita para **desfazer** suas alterações ou **substituir** o conteúdo no disco com as alterações", "discard": "Descartar", "overwrite": "Sobrescrever", "retry": "Tentar novamente", @@ -11,6 +12,5 @@ "genericSaveError": "Erro ao salvar '{0}': {1}", "staleSaveError": "Falha ao salvar '{0}': O conteúdo no disco é mais recente. Clique em **Comparar** para comparar a sua versão com a do disco.", "compareChanges": "Comparar", - "saveConflictDiffLabel": "{0} (no disco) ↔ {1} (em {2}) - Resolver conflitos de salvamento", - "userGuide": "Use as ações na barra de ferramentas de editor para a direita para **desfazer** suas alterações ou **substituir** o conteúdo no disco com as alterações" + "saveConflictDiffLabel": "{0} (no disco) ↔ {1} (em {2}) - Resolver conflitos de salvamento" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json b/i18n/ptb/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json index 9e75b7b2a89..f5b56baf44a 100644 --- a/i18n/ptb/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/files/common/dirtyFilesTracker.i18n.json @@ -4,5 +4,6 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "dirtyFile": "1 arquivo não salvo", "dirtyFiles": "{0} arquivos não salvos" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index aec6c7e3ba5..69380915390 100644 --- a/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,7 @@ { "commitMessage": "Mensagem (tecle {0} para confirmar)", "installAdditionalSCMProviders": "Instalar provedores de SCM adicionais...", - "no open repo": "Não há um controle de código fonte ativo", + "no open repo": "Não há nenhum provedor de controle de fonte ativo.", "source control": "Controle de código-fonte", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index b14e20a1487..6e7cef32f55 100644 --- a/i18n/ptb/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Ir para Símbolo no Espaço de Trabalho...", "name": "Pesquisar", + "search": "Pesquisar", "showSearchViewlet": "Mostrar Busca", "view": "Exibir", "findInFiles": "Localizar nos Arquivos", diff --git a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json index 6c34a620b89..d0ebe51ea9b 100644 --- a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/insertSnippet.i18n.json @@ -4,5 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "snippet.suggestions.label": "Inserir trecho de código" + "snippet.suggestions.label": "Inserir trecho de código", + "sep.userSnippet": "Trecho de código do usuário", + "sep.extSnippet": "Trechos de Código de Extensão" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 97a09842720..d1afc5ef25a 100644 --- a/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,14 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Linguagem desconhecida em `contributes.{0}.language`. Valor fornecido: {1}", + "invalid.path.0": "Esperada uma string em `contributes.{0}.path`. Valor informado: {1}", + "invalid.path.1": "É esperado que `contributes.{0}.path` ({1}) seja incluído na pasta da extensão ({2}). Isto pode tornar a extensão não portável.", + "vscode.extension.contributes.snippets": "Contribui aos trechos de código.", + "vscode.extension.contributes.snippets-language": "Identificador de linguagem para o qual este trecho de código contribui.", + "vscode.extension.contributes.snippets-path": "Caminho do arquivo de trechos de código. O caminho é relativo à pasta de extensão e normalmente começa com '. /snippets/'.", + "badFile": "O arquivo de trechos \"{0}\" não pôde ser lido.", + "badVariableUse": "O trecho de código \"{0}\" muito provavelmente confunde as variáveis de trecho de código e espaços reservados do trecho de código. Consulte https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax para obter mais detalhes.", "source.snippet": "Trecho de código do usuário", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/ptb/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 450948fc045..a14587dfc3c 100644 --- a/i18n/ptb/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "Mostrar tarefas em execução", "tasks": "Tarefas", - "TaskSystem.noHotSwap": "Alterar o mecanismo de execução de tarefa exige que a Janela seja recarregada.", "TaskService.noBuildTask1": "Nenhuma tarefa de compilação definida. Marque uma tarefa com 'isBuildCommand' no arquivo tasks.json.", "TaskService.noBuildTask2": "Nenhuma tarefa de compilação definida. Marque uma tarefa como um grupo 'build' no arquivo tasks.json.", "TaskService.noTestTask1": "Nenhuma tarefa de teste definida. Marque uma tarefa com 'isTestCommand' no arquivo tasks.json.", diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index e247ed12a3d..b075d6f0b92 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Mostrar Todos os Terminais Abertos", + "terminal": "Terminal", "terminalIntegratedConfigurationTitle": "Terminal Integrado", "terminal.integrated.shell.linux": "O caminho do shell que o terminal usa no Linux.", "terminal.integrated.shellArgs.linux": "Os argumentos de linha de comando a serem usados no terminal do Linux.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Os argumentos de linha de comando a serem utilizados no terminal do Windows.", "terminal.integrated.rightClickCopyPaste": "Quando configurado, isto evitará que o menu de contexto apareça quando pressionado o botão direito do mouse dentro do terminal, em vez disso vai copiar quando há uma seleção e colar quando não há nenhuma seleção.", "terminal.integrated.fontFamily": "Controla a família de fontes do terminal, este padrão é o valor do editor.fontFamily.", - "terminal.integrated.fontLigatures": "Controla se as ligações de fonte são habilitadas no terminal.", "terminal.integrated.fontSize": "Controla o tamanho da fonte em pixels do terminal.", "terminal.integrated.lineHeight": "Controles a altura da linha do terminal, este número é multiplicada pelo tamanho da fonte terminal para obter a altura real da linha em pixels.", - "terminal.integrated.enableBold": "Se habilitar o texto em negrito dentro do terminal requer suporte do terminal shell.", "terminal.integrated.cursorBlinking": "Controla se o cursor do terminal pisca.", "terminal.integrated.cursorStyle": "Controla o estilo do cursor do terminal.", "terminal.integrated.scrollback": "Controla a quantidade máxima de linhas que o terminal mantém em seu buffer.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "Objeto com variáveis de ambiente que serão adicionadas ao VS Code e utilizadas pelo terminal no Mac OS X", "terminal.integrated.env.linux": "Objeto com variáveis de ambiente que serão adicionadas ao VS Code e utilizadas pelo terminal no Linux", "terminal.integrated.env.windows": "Objeto com variáveis de ambiente que serão adicionadas ao VS Code e utilizadas pelo terminal no Windows", - "terminal": "Terminal", "terminalCategory": "Terminal", "viewCategory": "Exibir" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 8d7c9ccb011..7379c161275 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -39,5 +39,5 @@ "workbench.action.terminal.hideFindWidget": "Ocultar Ferramenta de Pesquisa", "nextTerminalFindTerm": "Mostrar Próximo Termo de Busca", "previousTerminalFindTerm": "Mostrar Termo de Busca Anterior", - "quickOpenTerm": "Terminal: Trocar o Terminal Ativo" + "quickOpenTerm": "Alternar o Terminal Ativo" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json index deba202bc24..655ae8902e5 100644 --- a/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/terminal/electron-browser/terminalColorRegistry.i18n.json @@ -8,5 +8,6 @@ "terminal.foreground": "A cor de primeiro plano do terminal.", "terminalCursor.foreground": "A cor de primeiro plano do cursor do terminal.", "terminalCursor.background": "A cor de fundo do cursor do terminal. Permite personalizar a cor de um personagem sobreposto por um cursor de bloco.", + "terminal.selectionBackground": "A cor de fundo de seleção do terminal.", "terminal.ansiColor": "'{0}' cor ansi no terminal." } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/ptb/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 984a4a38e3f..a57812b5c4f 100644 --- a/i18n/ptb/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/ptb/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -10,6 +10,7 @@ "welcomePage.newFile": "Novo arquivo", "welcomePage.openFolder": "Abrir pasta...", "welcomePage.cloneGitRepository": "Clonar repositório Git...", + "welcomePage.addWorkspaceFolder": "Adicionar pasta do espaço de trabalho...", "welcomePage.recent": "Recente", "welcomePage.moreRecent": "Mais...", "welcomePage.noRecentFolders": "Não há pastas recentes", @@ -35,8 +36,6 @@ "welcomePage.showCommandsDescription": "Comandos de acesso rápido e de pesquisa da paleta de comando ({0})", "welcomePage.interfaceOverview": "Visão geral da interface", "welcomePage.interfaceOverviewDescription": "Obter uma sobreposição visual, destacando os principais componentes da interface do usuário", - "welcomePage.deployToAzure": "Implantar aplicativos na nuvem", - "welcomePage.deployToAzureDescription": "Aprenda como implantar seus aplicativos Node no Serviço de aplicativo do Azure", "welcomePage.interactivePlayground": "Playground interativo", "welcomePage.interactivePlaygroundDescription": "Experimente as características essenciais do editor em um curto passo-a-passo" } \ No newline at end of file diff --git a/i18n/ptb/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/ptb/src/vs/workbench/services/configuration/node/configuration.i18n.json index c2ace7f2fb1..3eda0fa5544 100644 --- a/i18n/ptb/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,16 +4,16 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Contribui às definições de configuração.", "vscode.extension.contributes.configuration.title": "Um resumo das configurações. Este rótulo será usado no arquivo de configurações como um comentário de separação.", "vscode.extension.contributes.configuration.properties": "Descrição das propriedades de configuração.", "scope.window.description": "Janela de configuração específica que pode ser configurada nas configurações do usuário ou área de trabalho.", "scope.resource.description": "Configuração específica do recurso que pode ser configurada nas configurações do usuário, espaço de trabalho ou pasta.", "scope.description": "Escopo em que a configuração é aplicável. Escopos disponíveis são 'janela' e 'recurso'.", - "invalid.type": "Se definido, 'configuration.type' deve ser do tipo 'object'", + "vscode.extension.contributes.configuration": "Contribui às definições de configuração.", "invalid.title": "'configuration.title' deve ser um string", "vscode.extension.contributes.defaultConfiguration": "Contribui às definições de configuração padrão do editor por linguagem.", "invalid.properties": "'configuration.properties' deve ser um objeto", + "invalid.allOf": "'configuration.allOf' está obsoleto e não deve ser usado. Em vez disso, passe várias seções de configuração como uma matriz para o ponto de contribuição 'configuration'.", "workspaceConfig.folders.description": "Lista de pastas para ser carregada no espaço de trabalho. Deve ser um caminho para um arquivo. Por exemplo '/root/pastaA' ou './pastaA' para um caminho relativo que será determinado de acordo com o local do arquivo no espaço de trabalho.", "workspaceConfig.folder.description": "Um caminho para um arquivo. Por exemplo, '/root /pastaA' ou './pastaA' para um caminho relativo que será determinado de acordo com o local do arquivo no espaço de trabalho.", "workspaceConfig.settings.description": "Configurações de espaço de trabalho" diff --git a/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json index cb5fa24e4f0..1eeed79c955 100644 --- a/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/ptb/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,7 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Recurso de arquivo inválido ({0})", - "fileIsDirectoryError": "Arquivo é diretório ({0})", + "fileIsDirectoryError": "Arquivo é um diretório", "fileNotModifiedError": "Arquivo não modificado desde", "fileTooLargeError": "Arquivo muito grande para abrir", "fileBinaryError": "Arquivo parece ser binário e não pode ser aberto como texto", diff --git a/i18n/rus/extensions/azure-account/out/azure-account.i18n.json b/i18n/rus/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..d91c6279d44 --- /dev/null +++ b/i18n/rus/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Скопировать и открыть", + "azure-account.close": "Закрыть", + "azure-account.login": "Вход", + "azure-account.loginFirst": "Вы не вошли в систему. Сначала войдите в систему.", + "azure-account.userCodeFailed": "Не удалось получить код пользователя", + "azure-account.tokenFailed": "Получение маркера с кодом устройства", + "azure-account.tokenFromRefreshTokenFailed": "Получение маркера с маркером обновления" +} \ No newline at end of file diff --git a/i18n/rus/extensions/azure-account/out/extension.i18n.json b/i18n/rus/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..d1f24dd3a8c --- /dev/null +++ b/i18n/rus/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: выполняется вход...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/code/electron-main/windows.i18n.json b/i18n/rus/src/vs/code/electron-main/windows.i18n.json index 4241dda94d8..6d52d829bc3 100644 --- a/i18n/rus/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/rus/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "ОК", "pathNotExistTitle": "Путь не существует.", "pathNotExistDetail": "Путь \"{0}\" больше не существует на диске.", - "openWorkspace": "&&Открыть...", - "openWorkspaceTitle": "Открыть рабочую область", - "save": "Сохранить", - "doNotSave": "&&Не сохранять", - "cancel": "Отмена", - "saveWorkspaceMessage": "Вы хотите сохранить конфигурацию рабочей области в файле?", - "saveWorkspaceDetail": "Сохраните рабочую область, если хотите открыть ее позже.", - "saveWorkspace": "Сохранить рабочую область", "reopen": "Открыть повторно", "wait": "Подождать", "close": "Закрыть", @@ -24,5 +16,13 @@ "appCrashedDetail": "Приносим извинения за неудобство! Вы можете повторно открыть окно, чтобы продолжить работу с того места, на котором остановились.", "open": "Открыть", "openFolder": "Открыть папку", - "openFile": "Открыть файл" + "openFile": "Открыть файл", + "openWorkspace": "&&Открыть...", + "openWorkspaceTitle": "Открыть рабочую область", + "save": "Сохранить", + "doNotSave": "&&Не сохранять", + "cancel": "Отмена", + "saveWorkspaceMessage": "Вы хотите сохранить конфигурацию рабочей области в файле?", + "saveWorkspaceDetail": "Сохраните рабочую область, если хотите открыть ее позже.", + "saveWorkspace": "Сохранить рабочую область" } \ No newline at end of file diff --git a/i18n/rus/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/rus/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..6f6dde161df --- /dev/null +++ b/i18n/rus/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Закрыть" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/platform/environment/node/argv.i18n.json b/i18n/rus/src/vs/platform/environment/node/argv.i18n.json index 0821eccbd29..b078834959a 100644 --- a/i18n/rus/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/rus/src/vs/platform/environment/node/argv.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "gotoValidation": "Аргументы в режиме \"--goto\" должны быть в формате \"ФАЙЛ(:СТРОКА(:СИМВОЛ))\".", + "diff": "Сравнение двух файлов друг с другом", "add": "Добавление папок в последнее активное окно.", "goto": "Открытие файла по указанному пути с выделением указанного символа в указанной строке.", "locale": "Языковой стандарт, который следует использовать (например, en-US или zh-TW).", @@ -14,7 +15,6 @@ "reuseWindow": "Принудительно открыть файл или папку в последнем активном окне.", "userDataDir": "Указывает каталог, в котором хранятся данные пользователей, используется в случае выполнения от имени привилегированного пользователя.", "verbose": "Печать подробного вывода (подразумевает использование параметра \"--wait\").", - "wait": "Дождаться закрытия окна, прежде чем вернуть результат.", "extensionHomePath": "Задайте корневой путь для расширений.", "listExtensions": "Перечислить существующие расширения.", "showVersions": "Показать версии установленных расширений при указании параметра --list-extension.", diff --git a/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index 1cc3bfcebce..fc0e79cc260 100644 --- a/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/rus/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "События активации для расширения кода VS Code.", "vscode.extension.activationEvents.onLanguage": "Событие активации выдается каждый раз, когда открывается файл, который разрешается к указанному языку.", "vscode.extension.activationEvents.onCommand": "Событие активации выдается каждый раз при вызове указанной команды.", - "vscode.extension.activationEvents.onDebug": "Событие активации выдается каждый раз при запуске сеанса отладки указанного типа.", "vscode.extension.activationEvents.workspaceContains": "Событие активации выдается каждый раз при открытии папки, содержащей по крайней мере один файл, который соответствует указанной стандартной маске.", "vscode.extension.activationEvents.onView": "Событие активации выдается каждый раз при развертывании указанного окна.", "vscode.extension.activationEvents.star": "Событие активации выдается при запуске VS Code. Для удобства пользователя используйте это событие в своем расширении только в том случае, если другие сочетания событий не подходят.", diff --git a/i18n/rus/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/rus/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index b29f1cb46ab..88665d47b93 100644 --- a/i18n/rus/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/rus/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "Цвет по умолчанию для тем с высоким контрастом. Укажите значение цвета в шестнадцатеричном формате (#RRGGBB[AA]) или идентификатор цвета темы.", "invalid.colorConfiguration": "'configuration.colors' должен быть массивом", "invalid.default.colorType": "{0} должен представлять собой значение цвета в шестнадцатеричном формате (#RRGGBB[AA] или #RGB[A]) или идентификатор цвета темы.", - "invalid.id": "Параметр 'configuration.colors.id' должен быть указан и не может быть пустым", "invalid.id.format": "Параметр 'configuration.colors.id' должен следовать за word[.word]*", - "invalid.description": "Параметр 'configuration.colors.description' должен быть указан и не может быть пустым ", "invalid.defaults": "'configuration.colors.defaults' может быть указан и может содержать значения 'light', 'dark' и 'highContrast'" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/rus/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..1ad62d4bc9b --- /dev/null +++ b/i18n/rus/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "представления должны быть массивом", + "requirestring": "свойство \"{0}\" является обязательным и должно иметь тип string", + "optstring": "свойство \"{0}\" может быть опущено или должно иметь тип string", + "vscode.extension.contributes.view.id": "Идентификатор представления. Используйте его для регистрации поставщика данных с помощью API-интерфейса \"vscode.window.registerTreeDataProviderForView\", а также для активации расширения с помощью регистрации события \"onView:${id}\" в \"activationEvents\".", + "vscode.extension.contributes.view.name": "Понятное имя представления. Будет отображаться на экране", + "vscode.extension.contributes.view.when": "Условие, которое должно иметь значение 'true', чтобы отображалось это представление", + "vscode.extension.contributes.views": "Добавляет представления в редактор", + "views.explorer": "Представление проводника", + "views.debug": "Представление отладки", + "locationId.invalid": "\"{0}\" не является допустимым расположением представления" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index 6ac555ac896..d24ed6f5d96 100644 --- a/i18n/rus/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/rus/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Удалить из панели действий", - "keepInActivityBar": "Хранить в панели действий", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "Хранить в панели действий", "additionalViews": "Дополнительные представления", "numberBadge": "{0} ({1})", "manageExtension": "Управление расширениями", diff --git a/i18n/rus/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/rus/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..b0fa6d5e7e3 --- /dev/null +++ b/i18n/rus/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "Действий: {0}", + "hideView": "Скрыть из боковой панели" +} \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 87974585442..b56949c4101 100644 --- a/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "Идентификатор", "view name": "Имя", "view location": "Где", - "themes": "Темы ({0})", "JSON Validation": "Проверка JSON ({0})", "commands": "Команды ({0})", "command name": "Имя", diff --git a/i18n/rus/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index c22b02a06e4..71bba9f40c9 100644 --- a/i18n/rus/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "Стандартная маска, соответствующая путям к файлам. Задайте значение true или false, чтобы включить или отключить маску.", "files.exclude.when": "Дополнительная проверка элементов того же уровня соответствующего файла. Используйте $(basename) в качестве переменной для соответствующего имени файла.", "associations": "Настройте сопоставления файлов с языками (например, \"*.extension\": \"html\"). У них будет приоритет перед заданными по умолчанию сопоставлениями установленных языков.", - "encoding": "Кодировка набора символов по умолчанию, используемая при чтении и записи файлов", - "autoGuessEncoding": "Если параметр включен, производится попытка определить кодировку набора символов при открытии файлов", "eol": "Символ конца строки по умолчанию. Используйте \\n для LF и \\r\\n для CRLF.", "trimTrailingWhitespace": "Если этот параметр включен, при сохранении файла будут удалены концевые пробелы.", "insertFinalNewline": "Если этот параметр включен, при сохранении файла в его конец вставляется финальная новая строка.", diff --git a/i18n/rus/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/rus/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index fa76089bc65..d5622eec39a 100644 --- a/i18n/rus/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Используйте команды на панели инструментов редактора справа для **отмены** изменений или **перезаписи** содержимого на диске с учетом этих изменений", "discard": "Отмена", "overwrite": "Перезаписать", "retry": "Повторить попытку", @@ -11,6 +12,5 @@ "genericSaveError": "Не удалось сохранить \"{0}\": {1}", "staleSaveError": "Не удалось сохранить \"{0}\": содержимое на диске более новое. Чтобы сравнить свою версию с версией на диске, нажмите **Сравнить**.", "compareChanges": "Сравнить", - "saveConflictDiffLabel": "{0} (на диске) ↔ {1} (в {2}) - Разрешить конфликт сохранения", - "userGuide": "Используйте команды на панели инструментов редактора справа для **отмены** изменений или **перезаписи** содержимого на диске с учетом этих изменений" + "saveConflictDiffLabel": "{0} (на диске) ↔ {1} (в {2}) - Разрешить конфликт сохранения" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 9eeb4643e0d..8aaaf54a7a2 100644 --- a/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Message (press {0} to commit)", "installAdditionalSCMProviders": "Установить дополнительных поставщиков SCM...", - "no open repo": "Отсутствуют активные системы управления версиями.", "source control": "Система управления версиями", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index a7795c75dba..f26e342d6b3 100644 --- a/i18n/rus/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Перейти к символу в рабочей области...", "name": "Поиск", + "search": "Поиск", "showSearchViewlet": "Показать средство поиска", "view": "Просмотр", "findInFiles": "Найти в файлах", diff --git a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 0b174ce00f9..7d6c740e5bc 100644 --- a/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "Неизвестный язык в contributes.{0}.language. Указанное значение: {1}", + "invalid.path.0": "В contributes.{0}.path требуется строка. Указанное значение: {1}", + "invalid.path.1": "contributes.{0}.path ({1}) должен был быть включен в папку расширения ({2}). Это может сделать расширение непереносимым.", + "vscode.extension.contributes.snippets": "Добавляет фрагменты.", + "vscode.extension.contributes.snippets-language": "Идентификатор языка, для которого добавляется этот фрагмент.", + "vscode.extension.contributes.snippets-path": "Путь к файлу фрагментов. Путь указывается относительно папки расширения и обычно начинается с \"./snippets/\".", + "badVariableUse": "Похоже, во фрагменте \"{0}\" перепутаны переменные и заполнители. Дополнительные сведения см. на странице https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax.", "source.snippet": "Фрагмент кода пользователя", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 4a632d48414..edbb663b01e 100644 --- a/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "Показать выполняемые задачи", "tasks": "Задачи", - "TaskSystem.noHotSwap": "Чтобы изменить подсистему выполнения задач, необходимо перезагрузить окно", "TaskService.noBuildTask1": "Задача сборки не определена. Отметьте задачу с помощью \"isBuildCommand\" в файле tasks.json.", "TaskService.noBuildTask2": "Задача сборки не определена. Отметьте задачу с помощью группы 'build' в файле tasks.json.", "TaskService.noTestTask1": "Задача теста не определена. Отметьте задачу с помощью \"isTestCommand\" в файле tasks.json.", diff --git a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 09ebc373f54..33131ec5a92 100644 --- a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Показать все открытые терминалы", + "terminal": "Терминал", "terminalIntegratedConfigurationTitle": "Интегрированный терминал", "terminal.integrated.shell.linux": "Путь оболочки, который используется терминалом в Linux.", "terminal.integrated.shellArgs.linux": "Аргументы командной строки, которые следует использовать в терминале Linux.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Аргументы командной строки, используемые в терминале Windows.", "terminal.integrated.rightClickCopyPaste": "Если задано, блокирует отображение контекстного меню при щелчке правой кнопкой мыши в терминале. Вместо этого будет выполняться копирование выбранного элемента и вставка в область, в которой нет выбранных элементов.", "terminal.integrated.fontFamily": "Определяет семейство шрифтов терминала, значение по умолчанию — editor.fontFamily.", - "terminal.integrated.fontLigatures": "Определяет, будут ли включены лигатуры шрифтов для терминала.", "terminal.integrated.fontSize": "Определяет размер шрифта (в пикселях) для терминала.", "terminal.integrated.lineHeight": "Определяет высоту строки терминала; это число умножается на размер шрифта терминала, что дает фактическую высоту строки в пикселях.", - "terminal.integrated.enableBold": "Следует ли разрешить полужирный текст в терминале. Эта функция должна поддерживаться оболочкой терминала.", "terminal.integrated.cursorBlinking": "Управляет миганием курсора терминала.", "terminal.integrated.cursorStyle": "Определяет стиль курсора терминала.", "terminal.integrated.scrollback": "Определяет предельное число строк в буфере терминала.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "Объект с переменными среды, которые будут добавлены к процессу VS Code для использования в терминале OS X", "terminal.integrated.env.linux": "Объект с переменными среды, которые будут добавлены к процессу VS Code для использования в терминале Linux ", "terminal.integrated.env.windows": "Объект с переменными среды, которые будут добавлены к процессу VS Code для использования в терминале Windows", - "terminal": "Терминал", "terminalCategory": "Терминал", "viewCategory": "Просмотреть" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index c26f2bb18ac..3b888b1a880 100644 --- a/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "Выделить мини-приложение поиска", "workbench.action.terminal.hideFindWidget": "Скрыть мини-приложение поиска", "nextTerminalFindTerm": "Показать следующий найденный термин", - "previousTerminalFindTerm": "Показать предыдущий найденный термин", - "quickOpenTerm": "Терминал: переключить активный терминал" + "previousTerminalFindTerm": "Показать предыдущий найденный термин" } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/rus/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 076e01bbf7e..a9a867d8cd5 100644 --- a/i18n/rus/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/rus/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "Быстро обращайтесь к командам и выполняйте поиск по командам с помощью палитры команд ({0})", "welcomePage.interfaceOverview": "Общие сведения об интерфейсе", "welcomePage.interfaceOverviewDescription": "Используйте визуальное наложение с выделением основных компонентов пользовательского интерфейса.", - "welcomePage.deployToAzure": "Развертывание приложений в облако", - "welcomePage.deployToAzureDescription": "Узнайте, как развернуть приложения Node в службу приложений Azure", "welcomePage.interactivePlayground": "Интерактивная площадка", "welcomePage.interactivePlaygroundDescription": "Опробуйте основные функции редактора в ходе краткого пошагового руководства." } \ No newline at end of file diff --git a/i18n/rus/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/rus/src/vs/workbench/services/configuration/node/configuration.i18n.json index 485972bfcb3..dd33949d1f2 100644 --- a/i18n/rus/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/rus/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Добавляет параметры конфигурации.", "vscode.extension.contributes.configuration.title": "Краткая сводка параметров. Эта метка будет использоваться в файле параметров в качестве разделяющего комментария.", "vscode.extension.contributes.configuration.properties": "Описание свойств конфигурации.", "scope.window.description": "Конфигурация окна, которая может быть задана в параметрах пользователя или рабочей области.", "scope.resource.description": "Конфигурации ресурсов, которые могут быть заданы в параметрах пользователей, рабочих областей или папок.", "scope.description": "Область, в которой применяется конфигурация. Доступные области — 'window' и 'resource'.", - "invalid.type": "Если тип configuration.type задан, то он должен иметь значение object", + "vscode.extension.contributes.configuration": "Добавляет параметры конфигурации.", "invalid.title": "configuration.title должно быть строкой", "vscode.extension.contributes.defaultConfiguration": "Предоставляет параметры конфигурации редактора по умолчанию в соответствии с языком.", "invalid.properties": "configuration.properties должно быть объектом", diff --git a/i18n/rus/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/rus/src/vs/workbench/services/files/node/fileService.i18n.json index e3ae0bc304d..975e12c9b23 100644 --- a/i18n/rus/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/rus/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Недопустимый ресурс файла ({0})", - "fileIsDirectoryError": "Файл является каталогом ({0})", "fileNotModifiedError": "undefined", "fileTooLargeError": "Не удается открыть файл, так как он имеет слишком большой размер", "fileBinaryError": "Похоже, файл является двоичным, и его нельзя открыть как текстовый.", diff --git a/i18n/trk/extensions/azure-account/out/azure-account.i18n.json b/i18n/trk/extensions/azure-account/out/azure-account.i18n.json new file mode 100644 index 00000000000..83a29fc7089 --- /dev/null +++ b/i18n/trk/extensions/azure-account/out/azure-account.i18n.json @@ -0,0 +1,14 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.copyAndOpen": "Kopyala & Aç", + "azure-account.close": "Kapat", + "azure-account.login": "Oturum Aç", + "azure-account.loginFirst": "Oturum açılmamış, ilk olarak oturum açın.", + "azure-account.userCodeFailed": "Kullanıcı kodu alımı başarısız oldu", + "azure-account.tokenFailed": "Cihaz kodu ile anahtar alınıyor", + "azure-account.tokenFromRefreshTokenFailed": "Yenileme anahtarı ile anahtar alınıyor" +} \ No newline at end of file diff --git a/i18n/trk/extensions/azure-account/out/extension.i18n.json b/i18n/trk/extensions/azure-account/out/extension.i18n.json new file mode 100644 index 00000000000..68e607e17d3 --- /dev/null +++ b/i18n/trk/extensions/azure-account/out/extension.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "azure-account.loggingIn": "Azure: Oturum açılıyor...", + "azure-account.loggedIn": "Azure: {0}" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/code/electron-main/windows.i18n.json b/i18n/trk/src/vs/code/electron-main/windows.i18n.json index 03fcb4b6a05..1331e489083 100644 --- a/i18n/trk/src/vs/code/electron-main/windows.i18n.json +++ b/i18n/trk/src/vs/code/electron-main/windows.i18n.json @@ -7,14 +7,6 @@ "ok": "Tamam", "pathNotExistTitle": "Yol yok", "pathNotExistDetail": "'{0}' yolu artık diskte değil.", - "openWorkspace": "&&Aç", - "openWorkspaceTitle": "Çalışma Alanı Aç", - "save": "&&Kaydet", - "doNotSave": "Kaydet&&me", - "cancel": "İptal", - "saveWorkspaceMessage": "Çalışma alanı yapılandırmanızı bir dosya olarak kaydetmek istiyor musunuz?", - "saveWorkspaceDetail": "Yeniden açmayı planlıyorsanız, çalışma alanınızı kaydedin.", - "saveWorkspace": "Çalışma Alanını Kaydet", "reopen": "Yeniden Aç", "wait": "Beklemeye Devam Et", "close": "Kapat", @@ -24,5 +16,13 @@ "appCrashedDetail": "Verdiğimiz rahatsızlıktan dolayı özür dileriz! Pencereyi yeniden açıp kaldığınız yerden devam edebilirsiniz.", "open": "Aç", "openFolder": "Klasör Aç", - "openFile": "Dosya Aç" + "openFile": "Dosya Aç", + "openWorkspace": "&&Aç", + "openWorkspaceTitle": "Çalışma Alanı Aç", + "save": "&&Kaydet", + "doNotSave": "Kaydet&&me", + "cancel": "İptal", + "saveWorkspaceMessage": "Çalışma alanı yapılandırmanızı bir dosya olarak kaydetmek istiyor musunuz?", + "saveWorkspaceDetail": "Yeniden açmayı planlıyorsanız, çalışma alanınızı kaydedin.", + "saveWorkspace": "Çalışma Alanını Kaydet" } \ No newline at end of file diff --git a/i18n/trk/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json b/i18n/trk/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json new file mode 100644 index 00000000000..8a312782515 --- /dev/null +++ b/i18n/trk/src/vs/editor/contrib/referenceSearch/browser/peekViewWidget.i18n.json @@ -0,0 +1,8 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "label.close": "Kapat" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/platform/environment/node/argv.i18n.json b/i18n/trk/src/vs/platform/environment/node/argv.i18n.json index b8fb205e6c3..2954082001b 100644 --- a/i18n/trk/src/vs/platform/environment/node/argv.i18n.json +++ b/i18n/trk/src/vs/platform/environment/node/argv.i18n.json @@ -15,7 +15,6 @@ "reuseWindow": "Bir dosya veya klasörü son etkin pencerede açmaya zorlayın.", "userDataDir": "Kullanıcı verilerinin tutulacağı klasörü belirtir, root olarak çalışırken yararlıdır.", "verbose": "Ayrıntılı çıktı oluştur (--wait anlamına gelir).", - "wait": "Geri dönmeden önce pencerenin kapanmasını bekle.", "extensionHomePath": "Eklentilerin kök dizinini belirle.", "listExtensions": "Yüklü eklentileri listele.", "showVersions": "--list-extensions'u kullanırken, yüklü eklentilerin sürümlerini gösterir.", diff --git a/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json b/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json index c156b75da26..ed2a8dac4ad 100644 --- a/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json +++ b/i18n/trk/src/vs/platform/extensions/common/extensionsRegistry.i18n.json @@ -16,7 +16,6 @@ "vscode.extension.activationEvents": "VS Code eklentisi için etkinleştirme olayları.", "vscode.extension.activationEvents.onLanguage": "Belirtilen dilde çözümlenen bir dosya her açıldığında bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.onCommand": "Belirtilen komut her çağrıldığında bir etkinleştirme olayı yayınlanır.", - "vscode.extension.activationEvents.onDebug": "Belirtilen türde bir hata ayıklama oturumu her başladığında bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.workspaceContains": "Belirtilen glob deseni ile eşleşen en az bir dosya içeren bir klasör her açıldığında bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.onView": "Belirtilen görünüm her genişletildiğinde bir etkinleştirme olayı yayınlanır.", "vscode.extension.activationEvents.star": "VS Code başlatıldığında yayılan etkinleştirme olayı. Mükemmel bir son kullanıcı deneyimi sağlandığından emin olmak için, lütfen bu etkinleştirme olayını eklentinizde sadece kullanım durumunuzda başka hiçbir aktivasyon olayı kombinasyonu çalışmıyorsa kullanın.", diff --git a/i18n/trk/src/vs/platform/theme/common/colorExtensionPoint.i18n.json b/i18n/trk/src/vs/platform/theme/common/colorExtensionPoint.i18n.json index bf71ff9729b..9f47144f8a2 100644 --- a/i18n/trk/src/vs/platform/theme/common/colorExtensionPoint.i18n.json +++ b/i18n/trk/src/vs/platform/theme/common/colorExtensionPoint.i18n.json @@ -13,8 +13,6 @@ "contributes.defaults.highContrast": "Yüksek karşıtlık temalarının varsayılan rengi. Ya hex biçiminde bir renk değeri (#RRGGBB[AA]) ya da varsayılanı sağlayan bir tema olarak kullanılabilir rengin tanımlayıcısı olabilir.", "invalid.colorConfiguration": "'configuration.colors' bir dizi olmalıdır", "invalid.default.colorType": "{0}, ya hex biçiminde bir renk değeri (#RRGGBB[AA] veya #RGB[A]) ya da varsayılanı sağlayan bir tema olarak kullanılabilir rengin tanımlayıcısı olabilir.", - "invalid.id": "'configuration.colors.id' tanımlanmalı ve boş olmamalıdır", "invalid.id.format": "'configuration.colors.id' sözcük[.sözcük]* şeklinde olmalıdır", - "invalid.description": "'configuration.colors.description' tanımlanmalı ve boş olmamalıdır", "invalid.defaults": "'configuration.colors.defaults' tanımlanmalı ve 'light', 'dark' ve 'highContrast' değerlerini içermelidir" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json b/i18n/trk/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json new file mode 100644 index 00000000000..eb1981b1969 --- /dev/null +++ b/i18n/trk/src/vs/workbench/api/browser/viewsExtensionPoint.i18n.json @@ -0,0 +1,17 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "requirearray": "görünümler bir dizi olmalıdır", + "requirestring": "`{0}` özelliği zorunludur ve `string` türünde olmalıdır", + "optstring": "`{0}` özelliği atlanabilir veya `string` türünde olmalıdır", + "vscode.extension.contributes.view.id": "Görünümün tanımlayıcısı. Bunu, `vscode.window.registerTreeDataProviderForView` API ile bir veri sağlayıcısı kaydetmek için kullanın. Ayrıca `onView:${id}` olayını `activationEvents` ögesine kaydederek eklentinizi etkinleştirmeyi tetikleyin.", + "vscode.extension.contributes.view.name": "Görünümün insanlar tarafından okunabilir adı. Gösterilecektir", + "vscode.extension.contributes.view.when": "Bu görünümü göstermek için doğru olması gereken koşul", + "vscode.extension.contributes.views": "Görünümleri düzenleyiciye ekler.", + "views.explorer": "Gezgin Görünümü", + "views.debug": "Hata Ayıklama Görünümü", + "locationId.invalid": "`{0}` geçerli bir görünüm konumu değil" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json index eaa011efe7e..087f6d6789f 100644 --- a/i18n/trk/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json +++ b/i18n/trk/src/vs/workbench/browser/parts/activitybar/activitybarActions.i18n.json @@ -4,9 +4,9 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "removeFromActivityBar": "Etkinlik Çubuğundan Kaldır", - "keepInActivityBar": "Etkinlik Çubuğunda Tut", + "badgeTitle": "{0} - {1}", "titleKeybinding": "{0} ({1})", + "keepInActivityBar": "Etkinlik Çubuğunda Tut", "additionalViews": "Ek Görünümler", "numberBadge": "{0} ({1})", "manageExtension": "Eklentiyi Yönet", diff --git a/i18n/trk/src/vs/workbench/browser/parts/views/views.i18n.json b/i18n/trk/src/vs/workbench/browser/parts/views/views.i18n.json new file mode 100644 index 00000000000..fe27ce7154b --- /dev/null +++ b/i18n/trk/src/vs/workbench/browser/parts/views/views.i18n.json @@ -0,0 +1,9 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +// Do not edit this file. It is machine generated. +{ + "viewToolbarAriaLabel": "{0} eylem", + "hideView": "Kenar Çubuğunda Gizle" +} \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json b/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json index 99ab8e650ad..39b6be390d3 100644 --- a/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/extensions/browser/extensionEditor.i18n.json @@ -29,7 +29,6 @@ "view id": "ID", "view name": "Adı", "view location": "Yeri", - "themes": "Temalar ({0})", "JSON Validation": "JSON Doğrulama ({0})", "commands": "Komutlar ({0})", "command name": "Adı", diff --git a/i18n/trk/src/vs/workbench/parts/files/browser/files.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/files/browser/files.contribution.i18n.json index a44ee520b07..dbc5b99d24f 100644 --- a/i18n/trk/src/vs/workbench/parts/files/browser/files.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/browser/files.contribution.i18n.json @@ -14,8 +14,6 @@ "files.exclude.boolean": "Dosya yollarının eşleştirileceği glob deseni. Deseni etkinleştirmek veya devre dışı bırakmak için true veya false olarak ayarlayın.", "files.exclude.when": "Eşleşen bir dosyanın eşdüzey dosyalarında ek denetim. Eşleşen dosya adı için değişken olarak $(basename) kullanın.", "associations": "Dillerle dosya ilişkilendirmelerini yapılandırın (ör. \"*.uzanti\": \"html\"). Bunların, kurulu olan dillerin varsayılan ilişkilendirmeleri karşısında önceliği vardır.", - "encoding": "Dosyalar okunurken ve yazılırken kullanılacak varsayılan karakter kümesi kodlaması.", - "autoGuessEncoding": "Etkinleştirildiğinde, dosyaları açarken karakter kümesini tahmin etmeye çalışır", "eol": "Varsayılan satır sonu karakteri. LF için \\n ve CRLF için \\r\\n kullan.", "trimTrailingWhitespace": "Etkinleştirildiğinde, bir dosyayı kaydettiğinizde sondaki boşluk kırpılır.", "insertFinalNewline": "Etkinleştirildiğinde, bir dosyayı kaydederken dosya sonuna bir boş satır ekler.", diff --git a/i18n/trk/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json b/i18n/trk/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json index 09d9b7607bd..660d16789d0 100644 --- a/i18n/trk/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/files/browser/saveErrorHandler.i18n.json @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "userGuide": "Değişikliklerinizi **geri al**mak veya diskteki içeriğin **üzerine yaz**mak için düzenleyicideki araç çubuğunu kullanabilirsiniz", "discard": "At", "overwrite": "Üzerine Yaz", "retry": "Yeniden Dene", @@ -11,6 +12,5 @@ "genericSaveError": "'{0}' kaydedilemedi: ({1}).", "staleSaveError": "'{0}' kaydedilemedi: Diskteki içerik daha yeni. Sizdeki sürüm ile disktekini karşılaştırmak için **Karşılaştır**a tıklayın.", "compareChanges": "Karşılaştır", - "saveConflictDiffLabel": "{0} (diskte) ↔ {1} ({2} uygulamasında) - Kaydetme çakışmasını çöz", - "userGuide": "Değişikliklerinizi **geri al**mak veya diskteki içeriğin **üzerine yaz**mak için düzenleyicideki araç çubuğunu kullanabilirsiniz" + "saveConflictDiffLabel": "{0} (diskte) ↔ {1} ({2} uygulamasında) - Kaydetme çakışmasını çöz" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json b/i18n/trk/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json index 00b004667ea..1aac20564f2 100644 --- a/i18n/trk/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/scm/electron-browser/scmViewlet.i18n.json @@ -6,7 +6,6 @@ { "commitMessage": "Mesaj (commit'lemek için {0} tuşlarına basın)", "installAdditionalSCMProviders": "Ek SCM Sağlayıcıları Yükle...", - "no open repo": "Aktif kaynak kontrolü yok.", "source control": "Kaynak Kontrolü", "viewletTitle": "{0}: {1}" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/search/browser/search.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/search/browser/search.contribution.i18n.json index 31355023a76..803061b0af7 100644 --- a/i18n/trk/src/vs/workbench/parts/search/browser/search.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/search/browser/search.contribution.i18n.json @@ -6,6 +6,7 @@ { "showTriggerActions": "Çalışma Alanında Sembole Git...", "name": "Ara", + "search": "Ara", "showSearchViewlet": "Aramayı Göster", "view": "Görüntüle", "findInFiles": "Dosyalarda Bul", diff --git a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json index 852c53c7188..432caec4bb9 100644 --- a/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/snippets/electron-browser/snippetsService.i18n.json @@ -4,6 +4,13 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { + "invalid.language": "`contributes.{0}.language` ögesinde bilinmeyen dil. Sağlanan değer: {1}", + "invalid.path.0": "`contributes.{0}.path` ögesinde dize bekleniyor. Sağlanan değer: {1}", + "invalid.path.1": "`contributes.{0}.path` ögesinin ({1}) eklentinin klasöründe ({2}) yer alması bekleniyor. Bu, eklentiyi taşınamaz yapabilir.", + "vscode.extension.contributes.snippets": "Parçacıklara ekleme yapar.", + "vscode.extension.contributes.snippets-language": "Bu parçacığın ekleneceği dilin tanımlayıcısı.", + "vscode.extension.contributes.snippets-path": "Parçacıklar dosyasının yolu. Yol, eklenti klasörüne görecelidir ve genellikle './snippets/' ile başlar.", + "badVariableUse": "\"{0}\"-parçacığı yüksek olasılıkla parçacık değişkenleri ile parçacık yer tutucularını karıştırıyor. Daha fazla bilgi için https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax adresini ziyaret edin.", "source.snippet": "Kullanıcı Parçacığı", "detail.snippet": "{0} ({1})", "snippetSuggest.longLabel": "{0}, {1}" diff --git a/i18n/trk/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json index 8545c2215f7..8998948fe3b 100644 --- a/i18n/trk/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/tasks/electron-browser/task.contribution.i18n.json @@ -19,7 +19,6 @@ "manyMarkers": "99+", "runningTasks": "Çalışan Görevleri Göster", "tasks": "Görevler", - "TaskSystem.noHotSwap": "Görev yürütme motorunu değiştirmek pencereyi yeniden yüklemeyi gerektirir", "TaskService.noBuildTask1": "Derleme görevi tanımlanmamış. tasks.json dosyasındaki bir görevi 'isBuildCommand' ile işaretleyin.", "TaskService.noBuildTask2": "Derleme görevi tanımlanmamış. tasks.json dosyasındaki bir görevi, bir 'build' grubu olarak işaretleyin.", "TaskService.noTestTask1": "Test görevi tanımlanmamış. tasks.json dosyasındaki bir testi 'isTestCommand' ile işaretleyin.", diff --git a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json index 4965ec13e6b..5bd7b033267 100644 --- a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.i18n.json @@ -5,6 +5,7 @@ // Do not edit this file. It is machine generated. { "quickOpen.terminal": "Tüm Açık Terminalleri Göster", + "terminal": "Terminal", "terminalIntegratedConfigurationTitle": "Entegre Terminal", "terminal.integrated.shell.linux": "Terminalin Linux'da kullandığı kabuğun yolu.", "terminal.integrated.shellArgs.linux": "Linux terminalindeyken kullanılacak komut satırı argümanları.", @@ -14,10 +15,8 @@ "terminal.integrated.shellArgs.windows": "Windows terminalindeyken kullanılacak komut satırı argümanları.", "terminal.integrated.rightClickCopyPaste": "Ayarlandığında, terminal içinde sağ tıklandığında bağlam menüsünün görünmesini engeller, onun yerine bir seçim varsa kopyalama yapar, bir seçim yoksa yapıştırma yapar.", "terminal.integrated.fontFamily": "Terminalin yazı tipi ailesini denetler; bu, varsayılan olarak editor.fontFamily'nin değeridir.", - "terminal.integrated.fontLigatures": "Terminalde yazı tipi ligatürlerinin etkinleştirilip etkinleştirilmeyeceğini denetler.", "terminal.integrated.fontSize": "Terminaldeki yazı tipi boyutunu piksel olarak denetler.", "terminal.integrated.lineHeight": "Terminalin satır yüksekliğini denetler, bu sayı gerçek satır yüksekliğini piksel olarak elde etmek için terminal yazı tipi boyutu ile çarpılır.", - "terminal.integrated.enableBold": "Terminalde kalın yazının etkinleştirilip etkinleştirilmeyeceği; bu, terminal kabuğunun desteğini gerektirir.", "terminal.integrated.cursorBlinking": "Terminaldeki imlecin yanıp sönmesini denetler.", "terminal.integrated.cursorStyle": "Terminaldeki imlecin stilini denetler.", "terminal.integrated.scrollback": "Terminalin tamponunda tuttuğu maksimum satır sayısını denetler.", @@ -28,7 +27,6 @@ "terminal.integrated.env.osx": "OS X'deki terminal tarafından kullanılacak VS Code işlemine eklenecek ortam değişkenlerini içeren nesne", "terminal.integrated.env.linux": "Linux'daki terminal tarafından kullanılacak VS Code işlemine eklenecek ortam değişkenlerini içeren nesne", "terminal.integrated.env.windows": "Windows'daki terminal tarafından kullanılacak VS Code işlemine eklenecek ortam değişkenlerini içeren nesne", - "terminal": "Terminal", "terminalCategory": "Terminal", "viewCategory": "Görüntüle" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json index 221d8d7f76e..8325d1451ce 100644 --- a/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/terminal/electron-browser/terminalActions.i18n.json @@ -38,6 +38,5 @@ "workbench.action.terminal.focusFindWidget": "Bulma Aracına Odakla", "workbench.action.terminal.hideFindWidget": "Bulma Aracını Gizle", "nextTerminalFindTerm": "Sonraki Arama Terimini Göster", - "previousTerminalFindTerm": "Önceki Arama Terimini Göster", - "quickOpenTerm": "Terminal: Aktif Terminali Değiştir" + "previousTerminalFindTerm": "Önceki Arama Terimini Göster" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json b/i18n/trk/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json index 10ee69b97f9..8098995a486 100644 --- a/i18n/trk/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json +++ b/i18n/trk/src/vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.i18n.json @@ -35,8 +35,6 @@ "welcomePage.showCommandsDescription": "Komut Paleti'nden hızlıca komutlara erişin ve arayın ({0})", "welcomePage.interfaceOverview": "Arayüze genel bakış", "welcomePage.interfaceOverviewDescription": "Kullanıcı arayüzünün ana bileşenlerini vurgulayan bir kaplamayı görüntüleyin", - "welcomePage.deployToAzure": "Uygulamaları buluta deploy edin", - "welcomePage.deployToAzureDescription": "Node uygulamalarınızı Azure Uygulama Hizmeti'ne nasıl deploy edeceğinizi öğrenin", "welcomePage.interactivePlayground": "İnteraktif oyun alanı", "welcomePage.interactivePlaygroundDescription": "Başlıca düzenleyici özelliklerini kısa örneklerle deneyin" } \ No newline at end of file diff --git a/i18n/trk/src/vs/workbench/services/configuration/node/configuration.i18n.json b/i18n/trk/src/vs/workbench/services/configuration/node/configuration.i18n.json index 56b11739e3f..22fb2b8b560 100644 --- a/i18n/trk/src/vs/workbench/services/configuration/node/configuration.i18n.json +++ b/i18n/trk/src/vs/workbench/services/configuration/node/configuration.i18n.json @@ -4,13 +4,12 @@ *--------------------------------------------------------------------------------------------*/ // Do not edit this file. It is machine generated. { - "vscode.extension.contributes.configuration": "Yapılandırma ayarlarına ekleme yapar.", "vscode.extension.contributes.configuration.title": "Ayarların bir özeti. Bu etiket ayar dosyasında ayırıcı yorum olarak kullanılacaktır.", "vscode.extension.contributes.configuration.properties": "Yapılandırma özelliklerinin açıklaması.", "scope.window.description": "Kullanıcı veya çalışma alanında yapılandırılabilen Windows'a özel yapılandırma.", "scope.resource.description": "Kullanıcı veya çalışma alanında yapılandırılabilen kaynağa özel yapılandırma.", "scope.description": "Yapılandırmanın uygulanabilir olduğu kapsam. Mevcut kapsamlar 'window' ve 'resource'tır.", - "invalid.type": "eğer ayarlanırsa, 'configuration.type' ögesi 'object' olarak ayarlanmalıdır", + "vscode.extension.contributes.configuration": "Yapılandırma ayarlarına ekleme yapar.", "invalid.title": "'configuration.title' bir dize olmalıdır", "vscode.extension.contributes.defaultConfiguration": "Varsayılan düzenleyici yapılandırma ayarlarına dil bazında ekleme yapar.", "invalid.properties": "'configuration.properties' bir nesne olmalıdır", diff --git a/i18n/trk/src/vs/workbench/services/files/node/fileService.i18n.json b/i18n/trk/src/vs/workbench/services/files/node/fileService.i18n.json index d5fcdc041a1..8b8dee30b02 100644 --- a/i18n/trk/src/vs/workbench/services/files/node/fileService.i18n.json +++ b/i18n/trk/src/vs/workbench/services/files/node/fileService.i18n.json @@ -5,7 +5,6 @@ // Do not edit this file. It is machine generated. { "fileInvalidPath": "Geçersiz dosya kaynağı ({0})", - "fileIsDirectoryError": "Dosya bir dizindir ({0})", "fileNotModifiedError": "Dosya şu tarihten beri değiştirilmemiş:", "fileTooLargeError": "Dosya, açmak için çok büyük", "fileBinaryError": "Dosya ikili olarak görünüyor ve metin olarak açılamıyor", diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 57ac074e05f..8ade909a8d4 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -567,14 +567,14 @@ "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.0.tgz" }, "windows-process-tree": { - "version": "0.1.3", - "from": "windows-process-tree@0.1.3", - "resolved": "https://registry.npmjs.org/windows-process-tree/-/windows-process-tree-0.1.3.tgz" + "version": "0.1.6", + "from": "windows-process-tree@0.1.6", + "resolved": "https://registry.npmjs.org/windows-process-tree/-/windows-process-tree-0.1.6.tgz" }, "xterm": { "version": "3.0.0", "from": "Tyriar/xterm.js#vscode-release/1.17", - "resolved": "git+https://github.com/Tyriar/xterm.js.git#35088059e61ba654ac78df453633c7a9272ed8bd" + "resolved": "git+https://github.com/Tyriar/xterm.js.git#f9b919c84d9d7b8cea1d8efb5294bb75ff5f4531" }, "yauzl": { "version": "2.8.0", diff --git a/package.json b/package.json index 2c6152bff56..8107b39bc42 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "url": "https://github.com/Microsoft/vscode/issues" }, "optionalDependencies": { - "windows-process-tree": "0.1.3", + "windows-process-tree": "0.1.6", "windows-foreground-love": "0.1.0", "windows-mutex": "^0.2.0", "fsevents": "0.3.8" diff --git a/src/vs/base/common/labels.ts b/src/vs/base/common/labels.ts index 904fc997bf7..443ca60c1f0 100644 --- a/src/vs/base/common/labels.ts +++ b/src/vs/base/common/labels.ts @@ -18,9 +18,9 @@ export interface ILabelProvider { } export interface IWorkspaceFolderProvider { - getWorkspaceFolder(resource: URI): URI; + getWorkspaceFolder(resource: URI): { uri: URI }; getWorkspace(): { - folders: URI[]; + folders: { uri: URI }[]; }; } @@ -46,14 +46,14 @@ export function getPathLabel(resource: URI | string, rootProvider?: IWorkspaceFo const hasMultipleRoots = rootProvider.getWorkspace().folders.length > 1; let pathLabel: string; - if (isEqual(baseResource.fsPath, resource.fsPath, !platform.isLinux /* ignorecase */)) { + if (isEqual(baseResource.uri.fsPath, resource.fsPath, !platform.isLinux /* ignorecase */)) { pathLabel = ''; // no label if pathes are identical } else { - pathLabel = normalize(ltrim(resource.fsPath.substr(baseResource.fsPath.length), nativeSep), true); + pathLabel = normalize(ltrim(resource.fsPath.substr(baseResource.uri.fsPath.length), nativeSep), true); } if (hasMultipleRoots) { - const rootName = basename(baseResource.fsPath); + const rootName = basename(baseResource.uri.fsPath); pathLabel = pathLabel ? join(rootName, pathLabel) : rootName; // always show root basename if there are multiple } diff --git a/src/vs/base/common/uri.ts b/src/vs/base/common/uri.ts index 4dfeff378ee..39ad9e80805 100644 --- a/src/vs/base/common/uri.ts +++ b/src/vs/base/common/uri.ts @@ -56,7 +56,6 @@ export default class URI { private static _empty = ''; private static _slash = '/'; private static _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/; - private static _driveLetter = /^[a-zA-Z]:/; private static _driveLetterPath = /^\/[a-zA-Z]:/; private static _upperCaseDrive = /^(\/)?([A-Z]:)/; @@ -213,25 +212,19 @@ export default class URI { let idx = path.indexOf(URI._slash, 2); if (idx === -1) { authority = path.substring(2); - path = URI._slash; + path = URI._empty; } else { authority = path.substring(2, idx); path = path.substring(idx); } } - // absolute windows paths get another slash - if (URI._driveLetter.test(path)) { + // Ensure that path starts with a slash + // or that it is at least a slash + if (path[0] !== URI._slash) { path = URI._slash + path; } - // path must be absolute because we cannot format them - // otherwise: `file:./foo` -> file://./foo -> `{ authority: '.', path: 'foo' }` - // https://tools.ietf.org/html/rfc8089#section-2 - else if (path[0] !== URI._slash) { - throw new Error('[UriError]: relative paths are not supported.'); - } - return new URI('file', authority, path, URI._empty, URI._empty); } diff --git a/src/vs/base/node/pfs.ts b/src/vs/base/node/pfs.ts index ce1f52d799c..e75dd48d1b5 100644 --- a/src/vs/base/node/pfs.ts +++ b/src/vs/base/node/pfs.ts @@ -194,13 +194,19 @@ export function whenDeleted(path: string): TPromise { // Complete when wait marker file is deleted return new TPromise(c => { + let running = false; const interval = setInterval(() => { - fs.exists(path, exists => { - if (!exists) { - clearInterval(interval); - c(null); - } - }); + if (!running) { + running = true; + fs.exists(path, exists => { + running = false; + + if (!exists) { + clearInterval(interval); + c(null); + } + }); + } }, 1000); }); } \ No newline at end of file diff --git a/src/vs/base/test/common/uri.test.ts b/src/vs/base/test/common/uri.test.ts index df2d989d26c..3341b0bcb6a 100644 --- a/src/vs/base/test/common/uri.test.ts +++ b/src/vs/base/test/common/uri.test.ts @@ -38,11 +38,13 @@ suite('URI', () => { assert.equal(URI.file('c:/win/path/').fsPath, 'c:\\win\\path\\'); assert.equal(URI.file('C:/win/path').fsPath, 'c:\\win\\path'); assert.equal(URI.file('/c:/win/path').fsPath, 'c:\\win\\path'); + assert.equal(URI.file('./c/win/path').fsPath, '\\.\\c\\win\\path'); } else { assert.equal(URI.file('c:/win/path').fsPath, 'c:/win/path'); assert.equal(URI.file('c:/win/path/').fsPath, 'c:/win/path/'); assert.equal(URI.file('C:/win/path').fsPath, 'c:/win/path'); assert.equal(URI.file('/c:/win/path').fsPath, 'c:/win/path'); + assert.equal(URI.file('./c/win/path').fsPath, '/./c/win/path'); } }); @@ -316,12 +318,27 @@ suite('URI', () => { test('URI#file, no path-is-uri check', () => { // we don't complain here - let value = URI.file('/file://path/to/file'); + let value = URI.file('file://path/to/file'); assert.equal(value.scheme, 'file'); assert.equal(value.authority, ''); assert.equal(value.path, '/file://path/to/file'); }); + test('URI#file, always slash', () => { + + var value = URI.file('a.file'); + assert.equal(value.scheme, 'file'); + assert.equal(value.authority, ''); + assert.equal(value.path, '/a.file'); + assert.equal(value.toString(), 'file:///a.file'); + + value = URI.parse(value.toString()); + assert.equal(value.scheme, 'file'); + assert.equal(value.authority, ''); + assert.equal(value.path, '/a.file'); + assert.equal(value.toString(), 'file:///a.file'); + }); + test('URI.toString, only scheme and query', () => { var value = URI.parse('stuff:?qüery'); assert.equal(value.toString(), 'stuff:?q%C3%BCery'); @@ -410,36 +427,13 @@ suite('URI', () => { assert.equal(uri.toString(true), 'https://twitter.com/search?src=typd&q=%23tag'); }); - test('class URI cannot represent relative file paths, #34449', function () { - const uri = URI.parse('file:./relative/path'); - assert.equal(uri.scheme, 'file'); - assert.equal(uri.authority, ''); - assert.equal(uri.path, './relative/path'); - - assert.equal(uri.toString(), 'file://./relative/path'); - - // this is asymetric to be spec-compliant - const uri2 = URI.parse(uri.toString()); - assert.equal(uri2.authority, '.'); - assert.equal(uri2.path, '/relative/path'); - }); - - test('class URI cannot represent relative file paths, #34449', function () { - - const path = '/foo/bar'; - assert.equal(URI.file(path).path, path); - - // no relative paths - assert.throws(() => URI.file('foo/bar')); - assert.throws(() => URI.file('./foo/bar')); - }); test('URI - (de)serialize', function () { var values = [ URI.parse('http://localhost:8080/far'), URI.file('c:\\test with %25\\c#code'), - URI.file('//shäres/path/c#/plugin.json'), + URI.file('\\\\shäres\\path\\c#\\plugin.json'), URI.parse('http://api/files/test.me?t=1234'), URI.parse('http://api/files/test.me?t=1234#fff'), URI.parse('http://api/files/test.me#fff'), diff --git a/src/vs/editor/contrib/quickFix/browser/lightBulbWidget.ts b/src/vs/editor/contrib/quickFix/browser/lightBulbWidget.ts index c25c621b809..2b76c9e2540 100644 --- a/src/vs/editor/contrib/quickFix/browser/lightBulbWidget.ts +++ b/src/vs/editor/contrib/quickFix/browser/lightBulbWidget.ts @@ -66,6 +66,12 @@ export class LightBulbWidget implements IDisposable, IContentWidget { dom.removeClass(this._domNode, 'hidden'); }); })); + this._disposables.push(this._editor.onDidChangeConfiguration(e => { + // hide when told to do so + if (e.contribInfo && !this._editor.getConfiguration().contribInfo.lightbulbEnabled) { + this.hide(); + } + })); } dispose(): void { @@ -124,11 +130,14 @@ export class LightBulbWidget implements IDisposable, IContentWidget { } private _show(): void { - const { fontInfo } = this._editor.getConfiguration(); + const config = this._editor.getConfiguration(); + if (!config.contribInfo.lightbulbEnabled) { + return; + } const { lineNumber } = this._model.position; const model = this._editor.getModel(); const indent = model.getIndentLevel(lineNumber); - const lineHasSpace = fontInfo.spaceWidth * indent > 22; + const lineHasSpace = config.fontInfo.spaceWidth * indent > 22; let effectiveLineNumber = lineNumber; if (!lineHasSpace) { diff --git a/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts b/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts index e6a1ef98e96..605591babeb 100644 --- a/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts +++ b/src/vs/editor/contrib/quickFix/browser/quickFixCommands.ts @@ -9,7 +9,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; -import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IMarkerService } from 'vs/platform/markers/common/markers'; import { ICommonCodeEditor, IEditorContribution } from 'vs/editor/common/editorCommon'; @@ -32,28 +32,30 @@ export class QuickFixController implements IEditorContribution { private _editor: ICodeEditor; private _model: QuickFixModel; - private _quickFixContextMenu: QuickFixContextMenu | undefined; - private _lightBulbWidget: LightBulbWidget | undefined; + private _quickFixContextMenu: QuickFixContextMenu; + private _lightBulbWidget: LightBulbWidget; private _disposables: IDisposable[] = []; - private enabled: boolean = false; - - constructor( - editor: ICodeEditor, + constructor(editor: ICodeEditor, @IMarkerService markerService: IMarkerService, - @ICommandService private readonly _commandService: ICommandService, - @IContextMenuService private readonly _contextMenuService: IContextMenuService, - @IKeybindingService private readonly _keybindingService: IKeybindingService + @IContextKeyService contextKeyService: IContextKeyService, + @ICommandService commandService: ICommandService, + @IContextMenuService contextMenuService: IContextMenuService, + @IKeybindingService private _keybindingService: IKeybindingService ) { this._editor = editor; this._model = new QuickFixModel(this._editor, markerService); + this._quickFixContextMenu = new QuickFixContextMenu(editor, contextMenuService, commandService); + this._lightBulbWidget = new LightBulbWidget(editor); + + this._updateLightBulbTitle(); this._disposables.push( - this._editor.onDidChangeConfiguration(() => this.onEditorConfigurationChange()), - this._model.onDidChangeFixes(e => this._onQuickFixEvent(e)) + this._quickFixContextMenu.onDidExecuteCodeAction(_ => this._model.trigger('auto')), + this._lightBulbWidget.onClick(this._handleLightBulbSelect, this), + this._model.onDidChangeFixes(e => this._onQuickFixEvent(e)), + this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitle, this) ); - - this.onEditorConfigurationChange(); } public dispose(): void { @@ -61,46 +63,21 @@ export class QuickFixController implements IEditorContribution { dispose(this._disposables); } - private get lightBulbWidget(): LightBulbWidget { - if (!this._lightBulbWidget) { - this._lightBulbWidget = new LightBulbWidget(this._editor); - this._disposables.push( - this._lightBulbWidget.onClick(this._handleLightBulbSelect, this), - this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitle, this) - ); - this._updateLightBulbTitle(); - } - return this._lightBulbWidget; - } - - private get quickFixContextMenu(): QuickFixContextMenu { - if (!this._quickFixContextMenu) { - this._quickFixContextMenu = new QuickFixContextMenu(this._editor, this._contextMenuService, this._commandService); - this._disposables.push(this._quickFixContextMenu.onDidExecuteCodeAction(_ => { - this._model.trigger('auto'); - })); - } - return this._quickFixContextMenu; - } - private _onQuickFixEvent(e: QuickFixComputeEvent): void { if (e && e.type === 'manual') { - this.quickFixContextMenu.show(e.fixes, e.position); + this._quickFixContextMenu.show(e.fixes, e.position); + } else if (e && e.fixes) { // auto magically triggered // * update an existing list of code actions // * manage light bulb - if (this.quickFixContextMenu.isVisible) { - this.quickFixContextMenu.show(e.fixes, e.position); + if (this._quickFixContextMenu.isVisible) { + this._quickFixContextMenu.show(e.fixes, e.position); } else { - if (this.enabled) { - this.lightBulbWidget.model = e; - } + this._lightBulbWidget.model = e; } } else { - if (this._lightBulbWidget) { - this._lightBulbWidget.hide(); - } + this._lightBulbWidget.hide(); } } @@ -109,7 +86,7 @@ export class QuickFixController implements IEditorContribution { } private _handleLightBulbSelect(coords: { x: number, y: number }): void { - this.quickFixContextMenu.show(this.lightBulbWidget.model.fixes, coords); + this._quickFixContextMenu.show(this._lightBulbWidget.model.fixes, coords); } public triggerFromEditorSelection(): void { @@ -117,10 +94,6 @@ export class QuickFixController implements IEditorContribution { } private _updateLightBulbTitle(): void { - if (!this._lightBulbWidget) { - return; - } - const kb = this._keybindingService.lookupKeybinding(QuickFixAction.Id); let title: string; if (kb) { @@ -128,18 +101,7 @@ export class QuickFixController implements IEditorContribution { } else { title = nls.localize('quickFix', "Show Fixes"); } - this.lightBulbWidget.title = title; - } - - private onEditorConfigurationChange(): void { - this.enabled = this._editor.getConfiguration().contribInfo.lightbulbEnabled; - - if (!this.enabled) { - if (this._lightBulbWidget) { - this._lightBulbWidget.dispose(); - this._lightBulbWidget = undefined; - } - } + this._lightBulbWidget.title = title; } } diff --git a/src/vs/editor/standalone/browser/simpleServices.ts b/src/vs/editor/standalone/browser/simpleServices.ts index 3dadc377cef..3eea14eb51a 100644 --- a/src/vs/editor/standalone/browser/simpleServices.ts +++ b/src/vs/editor/standalone/browser/simpleServices.ts @@ -18,7 +18,7 @@ import { KeybindingResolver } from 'vs/platform/keybinding/common/keybindingReso import { IKeybindingEvent, KeybindingSource, IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding'; import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IConfirmation, IMessageService } from 'vs/platform/message/common/message'; -import { IWorkspaceContextService, IWorkspace, WorkbenchState } from 'vs/platform/workspace/common/workspace'; +import { IWorkspaceContextService, IWorkspace, WorkbenchState, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { ICodeEditor, IDiffEditor } from 'vs/editor/browser/editorBrowser'; import { Selection } from 'vs/editor/common/core/selection'; @@ -525,14 +525,17 @@ export class SimpleWorkspaceContextService implements IWorkspaceContextService { private readonly _onDidChangeWorkspaceName: Emitter = new Emitter(); public readonly onDidChangeWorkspaceName: Event = this._onDidChangeWorkspaceName.event; - private readonly _onDidChangeWorkspaceRoots: Emitter = new Emitter(); - public readonly onDidChangeWorkspaceFolders: Event = this._onDidChangeWorkspaceRoots.event; + private readonly _onDidChangeWorkspaceFolders: Emitter = new Emitter(); + public readonly onDidChangeWorkspaceFolders: Event = this._onDidChangeWorkspaceFolders.event; + + private readonly _onDidChangeWorkbenchState: Emitter = new Emitter(); + public readonly onDidChangeWorkbenchState: Event = this._onDidChangeWorkbenchState.event; private readonly workspace: IWorkspace; constructor() { const resource = URI.from({ scheme: SimpleWorkspaceContextService.SCHEME, authority: 'model', path: '/' }); - this.workspace = { id: '4064f6ec-cb38-4ad0-af64-ee6467e63c82', folders: [resource], name: resource.fsPath }; + this.workspace = { id: '4064f6ec-cb38-4ad0-af64-ee6467e63c82', folders: [{ uri: resource, raw: { path: resource.toString() }, name: '', index: 0, }], name: resource.fsPath }; } public getWorkspace(): IWorkspace { @@ -549,7 +552,7 @@ export class SimpleWorkspaceContextService implements IWorkspaceContextService { return WorkbenchState.EMPTY; } - public getWorkspaceFolder(resource: URI): URI { + public getWorkspaceFolder(resource: URI): WorkspaceFolder { return resource && resource.scheme === SimpleWorkspaceContextService.SCHEME ? this.workspace.folders[0] : void 0; } @@ -557,7 +560,7 @@ export class SimpleWorkspaceContextService implements IWorkspaceContextService { return resource && resource.scheme === SimpleWorkspaceContextService.SCHEME; } - public toResource(workspaceRelativePath: string): URI { + public toResource(workspaceRelativePath: string, workspaceFolder: WorkspaceFolder): URI { return URI.file(workspaceRelativePath); } diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index 7b9ecd5e500..d541ed739df 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -208,7 +208,6 @@ export class Configuration { private _globalConfiguration: ConfigurationModel; private _workspaceConsolidatedConfiguration: ConfigurationModel; - private _legacyWorkspaceConsolidatedConfiguration: ConfigurationModel; protected _foldersConsolidatedConfigurations: StrictResourceMap>; constructor(protected _defaults: ConfigurationModel, protected _user: ConfigurationModel, protected _workspaceConfiguration: ConfigurationModel = new ConfigurationModel(), protected folders: StrictResourceMap> = new StrictResourceMap>(), protected _workspace?: Workspace) { @@ -226,7 +225,6 @@ export class Configuration { protected merge(): void { this._globalConfiguration = new ConfigurationModel().merge(this._defaults).merge(this._user); this._workspaceConsolidatedConfiguration = new ConfigurationModel().merge(this._globalConfiguration).merge(this._workspaceConfiguration); - this._legacyWorkspaceConsolidatedConfiguration = null; this._foldersConsolidatedConfigurations = new StrictResourceMap>(); for (const folder of this.folders.keys()) { this.mergeFolder(folder); @@ -255,20 +253,6 @@ export class Configuration { }; } - lookupLegacy(key: string): IConfigurationValue { - if (!this._legacyWorkspaceConsolidatedConfiguration) { - this._legacyWorkspaceConsolidatedConfiguration = this._workspace ? new ConfigurationModel().merge(this._workspaceConfiguration).merge(this.folders.get(this._workspace.folders[0])) : null; - } - const consolidateConfigurationModel = this.getConsolidateConfigurationModel({}); - return { - default: objects.clone(getConfigurationValue(this._defaults.contents, key)), - user: objects.clone(getConfigurationValue(this._user.contents, key)), - workspace: objects.clone(this._legacyWorkspaceConsolidatedConfiguration ? getConfigurationValue(this._legacyWorkspaceConsolidatedConfiguration.contents, key) : void 0), - folder: void 0, - value: objects.clone(getConfigurationValue(consolidateConfigurationModel.contents, key)) - }; - } - keys(overrides: IConfigurationOverrides = {}): IConfigurationKeys { const folderConfigurationModel = this.getFolderConfigurationModelForResource(overrides.resource); return { @@ -330,7 +314,7 @@ export class Configuration { return this._workspaceConsolidatedConfiguration; } - return this._foldersConsolidatedConfigurations.get(root) || this._workspaceConsolidatedConfiguration; + return this._foldersConsolidatedConfigurations.get(root.uri) || this._workspaceConsolidatedConfiguration; } private getFolderConfigurationModelForResource(resource: URI): ConfigurationModel { @@ -339,7 +323,7 @@ export class Configuration { } const root = this._workspace.getFolder(resource); - return root ? this.folders.get(root) : null; + return root ? this.folders.get(root.uri) : null; } public toData(): IConfigurationData { diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts index b4ee3dfcca3..540f812d271 100644 --- a/src/vs/platform/environment/common/environment.ts +++ b/src/vs/platform/environment/common/environment.ts @@ -40,6 +40,7 @@ export interface ParsedArgs { 'enable-proposed-api'?: string | string[]; 'open-url'?: string | string[]; 'skip-getting-started'?: boolean; + 'sticky-quickopen'?: boolean; } export const IEnvironmentService = createDecorator('environmentService'); diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index ad6e24e0eb2..6eb3036e94a 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -46,7 +46,8 @@ const options: minimist.Opts = { 'list-extensions', 'show-versions', 'nolazy', - 'skip-getting-started' + 'skip-getting-started', + 'sticky-quickopen' ], alias: { add: 'a', diff --git a/src/vs/platform/markers/common/problemMatcher.ts b/src/vs/platform/markers/common/problemMatcher.ts index cf49ef05252..e8d19b7d0db 100644 --- a/src/vs/platform/markers/common/problemMatcher.ts +++ b/src/vs/platform/markers/common/problemMatcher.ts @@ -1180,13 +1180,13 @@ export class ProblemMatcherParser extends Parser { let kind: FileLocationKind; if (Types.isUndefined(description.fileLocation)) { fileLocation = FileLocationKind.Relative; - filePrefix = '${cwd}'; + filePrefix = '${workspaceFolder}'; } else if (Types.isString(description.fileLocation)) { kind = FileLocationKind.fromString(description.fileLocation); if (kind) { fileLocation = kind; if (kind === FileLocationKind.Relative) { - filePrefix = '${cwd}'; + filePrefix = '${workspaceFolder}'; } } } else if (Types.isStringArray(description.fileLocation)) { @@ -1601,7 +1601,7 @@ class ProblemMatcherRegistryImpl implements IProblemMatcherRegistry { owner: 'typescript', applyTo: ApplyToKind.closedDocuments, fileLocation: FileLocationKind.Relative, - filePrefix: '${cwd}', + filePrefix: '${workspaceFolder}', pattern: ProblemPatternRegistry.get('gulp-tsc') }); @@ -1629,7 +1629,7 @@ class ProblemMatcherRegistryImpl implements IProblemMatcherRegistry { owner: 'eslint', applyTo: ApplyToKind.allDocuments, fileLocation: FileLocationKind.Relative, - filePrefix: '${cwd}', + filePrefix: '${workspaceFolder}', pattern: ProblemPatternRegistry.get('eslint-compact') }); @@ -1648,7 +1648,7 @@ class ProblemMatcherRegistryImpl implements IProblemMatcherRegistry { owner: 'go', applyTo: ApplyToKind.allDocuments, fileLocation: FileLocationKind.Relative, - filePrefix: '${cwd}', + filePrefix: '${workspaceFolder}', pattern: ProblemPatternRegistry.get('go') }); } diff --git a/src/vs/platform/workspace/common/workspace.ts b/src/vs/platform/workspace/common/workspace.ts index 28a0c00b7e6..e314031e926 100644 --- a/src/vs/platform/workspace/common/workspace.ts +++ b/src/vs/platform/workspace/common/workspace.ts @@ -5,12 +5,13 @@ 'use strict'; import URI from 'vs/base/common/uri'; +import * as paths from 'vs/base/common/paths'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { TrieMap } from 'vs/base/common/map'; import Event from 'vs/base/common/event'; +import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier, IStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces'; +import { coalesce, distinct } from 'vs/base/common/arrays'; import { isLinux } from 'vs/base/common/platform'; -import { distinct } from 'vs/base/common/arrays'; -import { ISingleFolderWorkspaceIdentifier, IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; export const IWorkspaceContextService = createDecorator('contextService'); @@ -38,6 +39,11 @@ export interface IWorkspaceContextService { */ getWorkbenchState(): WorkbenchState; + /** + * An event which fires on workbench state changes. + */ + onDidChangeWorkbenchState: Event; + /** * An event which fires on workspace name changes. */ @@ -52,7 +58,7 @@ export interface IWorkspaceContextService { * Returns the folder for the given resource from the workspace. * Can be null if there is no workspace or the resource is not inside the workspace. */ - getWorkspaceFolder(resource: URI): URI; + getWorkspaceFolder(resource: URI): WorkspaceFolder; /** * Return `true` if the current workspace has the given identifier otherwise `false`. @@ -65,9 +71,9 @@ export interface IWorkspaceContextService { isInsideWorkspace(resource: URI): boolean; /** - * Given a workspace relative path, returns the resource with the absolute path. + * Given a workspace relative path and workspace folder, returns the resource with the absolute path. */ - toResource: (workspaceRelativePath: string) => URI; + toResource: (workspaceRelativePath: string, workspaceFolder: WorkspaceFolder) => URI; } export interface IWorkspace { @@ -85,7 +91,7 @@ export interface IWorkspace { /** * Folders in the workspace. */ - readonly folders: URI[]; + readonly folders: WorkspaceFolder[]; /** * the location of the workspace configuration @@ -93,31 +99,51 @@ export interface IWorkspace { readonly configuration?: URI; } +export interface WorkspaceFolder { + + /** + * The associated URI for this workspace folder. + */ + readonly uri: URI; + + /** + * The name of this workspace folder. Defaults to + * the basename its [uri-path](#Uri.path) + */ + readonly name: string; + + /** + * The ordinal number of this workspace folder. + */ + readonly index: number; + + /** + * The raw path of this workspace folder + */ + readonly raw: IStoredWorkspaceFolder; +} + export class Workspace implements IWorkspace { - private _foldersMap: TrieMap = new TrieMap(); - private _folders: URI[]; + private _foldersMap: TrieMap = new TrieMap(); + private _folders: WorkspaceFolder[]; constructor( public readonly id: string, private _name: string, - folders: URI[], + folders: WorkspaceFolder[], private _configuration: URI = null, public readonly ctime?: number ) { this.folders = folders; } - private ensureUnique(folders: URI[]): URI[] { - return distinct(folders, folder => isLinux ? folder.toString() : folder.toString().toLowerCase()); - } - - public get folders(): URI[] { + public get folders(): WorkspaceFolder[] { return this._folders; } - public set folders(folders: URI[]) { - this._folders = this.ensureUnique(folders); + public set folders(folders: WorkspaceFolder[]) { + this._folders = folders; this.updateFoldersMap(); } @@ -137,7 +163,7 @@ export class Workspace implements IWorkspace { this._configuration = configuration; } - public getFolder(resource: URI): URI { + public getFolder(resource: URI): WorkspaceFolder { if (!resource) { return null; } @@ -146,9 +172,9 @@ export class Workspace implements IWorkspace { } private updateFoldersMap(): void { - this._foldersMap = new TrieMap(); + this._foldersMap = new TrieMap(); for (const folder of this.folders) { - this._foldersMap.insert(folder.scheme === 'file' ? folder.fsPath : folder.authority, folder); + this._foldersMap.insert(folder.uri.scheme === 'file' ? folder.uri.fsPath : folder.uri.authority, folder); } } @@ -156,3 +182,35 @@ export class Workspace implements IWorkspace { return { id: this.id, folders: this.folders, name: this.name }; } } + +export function toWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], relativeTo?: URI): WorkspaceFolder[] { + let workspaceFolders = parseWorkspaceFolders(configuredFolders, relativeTo); + return ensureUnique(coalesce(workspaceFolders)) + .map(({ uri, raw, name }, index) => ({ uri, raw, name: name || paths.basename(uri.fsPath), index })); +} + +function parseWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], relativeTo: URI): WorkspaceFolder[] { + return configuredFolders.map((configuredFolder, index) => { + const uri = toUri(configuredFolder.path, relativeTo); + if (!uri) { + return void 0; + } + return { uri, raw: configuredFolder, index, name: configuredFolder.name }; + }); +} + +function toUri(path: string, relativeTo: URI): URI { + if (path) { + if (paths.isAbsolute(path)) { + return URI.file(path); + } + if (relativeTo) { + return URI.file(paths.join(relativeTo.fsPath, path)); + } + } + return null; +} + +function ensureUnique(folders: WorkspaceFolder[]): WorkspaceFolder[] { + return distinct(folders, folder => isLinux ? folder.uri.fsPath : folder.uri.fsPath.toLowerCase()); +} diff --git a/src/vs/platform/workspace/test/common/testWorkspace.ts b/src/vs/platform/workspace/test/common/testWorkspace.ts index 97c90a65d03..6a204873e0c 100644 --- a/src/vs/platform/workspace/test/common/testWorkspace.ts +++ b/src/vs/platform/workspace/test/common/testWorkspace.ts @@ -4,15 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import URI from 'vs/base/common/uri'; -import { Workspace } from 'vs/platform/workspace/common/workspace'; +import { Workspace, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; +import { isWindows } from 'vs/base/common/platform'; -const wsUri = URI.file('C:\\testWorkspace'); +const wsUri = URI.file(isWindows ? 'C:\\testWorkspace' : '/testWorkspace'); export const TestWorkspace = testWorkspace(wsUri); export function testWorkspace(resource: URI): Workspace { return new Workspace( resource.toString(), resource.fsPath, - [resource] + toWorkspaceFolders([{ path: resource.fsPath }]) ); } \ No newline at end of file diff --git a/src/vs/platform/workspace/test/common/workspace.test.ts b/src/vs/platform/workspace/test/common/workspace.test.ts index dcfdff48e38..8370e2ba376 100644 --- a/src/vs/platform/workspace/test/common/workspace.test.ts +++ b/src/vs/platform/workspace/test/common/workspace.test.ts @@ -6,17 +6,195 @@ 'use strict'; import * as assert from 'assert'; -import { Workspace } from 'vs/platform/workspace/common/workspace'; +import { Workspace, WorkspaceFolder, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; import URI from 'vs/base/common/uri'; suite('Workspace', () => { - test('Workspace ensures unique roots', () => { + test('getFolder returns the folder with given uri', () => { + const expected = aWorkspaceFolder(URI.file('/src/test')); + let testObject = new Workspace('', '', [aWorkspaceFolder(URI.file('/src/main')), expected, aWorkspaceFolder(URI.file('/src/code'))]); - // Unique - let roots = [URI.file('/some/path'), URI.file('/some/path')]; - let ws = new Workspace('id', 'name', roots, URI.file('/config')); + const actual = testObject.getFolder(expected.uri); - assert.equal(ws.folders.length, 1); + assert.equal(actual, expected); }); + + test('getFolder returns the folder if the uri is sub', () => { + const expected = aWorkspaceFolder(URI.file('/src/test')); + let testObject = new Workspace('', '', [expected, aWorkspaceFolder(URI.file('/src/main')), aWorkspaceFolder(URI.file('/src/code'))]); + + const actual = testObject.getFolder(URI.file('/src/test/a')); + + assert.equal(actual, expected); + }); + + test('getFolder returns the closest folder if the uri is sub', () => { + const expected = aWorkspaceFolder(URI.file('/src/test')); + let testObject = new Workspace('', '', [aWorkspaceFolder(URI.file('/src/code')), aWorkspaceFolder(URI.file('/src')), expected]); + + const actual = testObject.getFolder(URI.file('/src/test/a')); + + assert.equal(actual, expected); + }); + + test('getFolder returns null if the uri is not sub', () => { + let testObject = new Workspace('', '', [aWorkspaceFolder(URI.file('/src/code')), aWorkspaceFolder(URI.file('/src/test'))]); + + const actual = testObject.getFolder(URI.file('/src/main/a')); + + assert.equal(actual, undefined); + }); + + test('toWorkspaceFolders with single absolute folder', () => { + const actual = toWorkspaceFolders([{ path: '/src/test' }]); + + assert.equal(actual.length, 1); + assert.equal(actual[0].uri.fsPath, '/src/test'); + assert.equal(actual[0].raw.path, '/src/test'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test'); + }); + + test('toWorkspaceFolders with single relative folder', () => { + const actual = toWorkspaceFolders([{ path: './test' }], URI.file('src')); + + assert.equal(actual.length, 1); + assert.equal(actual[0].uri.fsPath, '/src/test'); + assert.equal(actual[0].raw.path, './test'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test'); + }); + + test('toWorkspaceFolders with single absolute folder with name', () => { + const actual = toWorkspaceFolders([{ path: '/src/test', name: 'hello' }]); + + assert.equal(actual.length, 1); + assert.equal(actual[0].uri.fsPath, '/src/test'); + assert.equal(actual[0].raw.path, '/src/test'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'hello'); + }); + + test('toWorkspaceFolders with multiple unique absolute folders', () => { + const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3' }, { path: '/src/test1' }]); + + assert.equal(actual.length, 3); + assert.equal(actual[0].uri.fsPath, '/src/test2'); + assert.equal(actual[0].raw.path, '/src/test2'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test2'); + + assert.equal(actual[1].uri.fsPath, '/src/test3'); + assert.equal(actual[1].raw.path, '/src/test3'); + assert.equal(actual[1].index, 1); + assert.equal(actual[1].name, 'test3'); + + assert.equal(actual[2].uri.fsPath, '/src/test1'); + assert.equal(actual[2].raw.path, '/src/test1'); + assert.equal(actual[2].index, 2); + assert.equal(actual[2].name, 'test1'); + }); + + test('toWorkspaceFolders with multiple unique absolute folders with names', () => { + const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3', name: 'noName' }, { path: '/src/test1' }]); + + assert.equal(actual.length, 3); + assert.equal(actual[0].uri.fsPath, '/src/test2'); + assert.equal(actual[0].raw.path, '/src/test2'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test2'); + + assert.equal(actual[1].uri.fsPath, '/src/test3'); + assert.equal(actual[1].raw.path, '/src/test3'); + assert.equal(actual[1].index, 1); + assert.equal(actual[1].name, 'noName'); + + assert.equal(actual[2].uri.fsPath, '/src/test1'); + assert.equal(actual[2].raw.path, '/src/test1'); + assert.equal(actual[2].index, 2); + assert.equal(actual[2].name, 'test1'); + }); + + test('toWorkspaceFolders with multiple unique absolute and relative folders', () => { + const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/abc/test3', name: 'noName' }, { path: './test1' }], URI.file('src')); + + assert.equal(actual.length, 3); + assert.equal(actual[0].uri.fsPath, '/src/test2'); + assert.equal(actual[0].raw.path, '/src/test2'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test2'); + + assert.equal(actual[1].uri.fsPath, '/abc/test3'); + assert.equal(actual[1].raw.path, '/abc/test3'); + assert.equal(actual[1].index, 1); + assert.equal(actual[1].name, 'noName'); + + assert.equal(actual[2].uri.fsPath, '/src/test1'); + assert.equal(actual[2].raw.path, './test1'); + assert.equal(actual[2].index, 2); + assert.equal(actual[2].name, 'test1'); + }); + + test('toWorkspaceFolders with multiple absolute folders with duplicates', () => { + const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test2', name: 'noName' }, { path: '/src/test1' }]); + + assert.equal(actual.length, 2); + assert.equal(actual[0].uri.fsPath, '/src/test2'); + assert.equal(actual[0].raw.path, '/src/test2'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test2'); + + assert.equal(actual[1].uri.fsPath, '/src/test1'); + assert.equal(actual[1].raw.path, '/src/test1'); + assert.equal(actual[1].index, 1); + assert.equal(actual[1].name, 'test1'); + }); + + test('toWorkspaceFolders with multiple absolute and relative folders with duplicates', () => { + const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3', name: 'noName' }, { path: './test3' }, { path: '/abc/test1' }], URI.file('src')); + + assert.equal(actual.length, 3); + assert.equal(actual[0].uri.fsPath, '/src/test2'); + assert.equal(actual[0].raw.path, '/src/test2'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test2'); + + assert.equal(actual[1].uri.fsPath, '/src/test3'); + assert.equal(actual[1].raw.path, '/src/test3'); + assert.equal(actual[1].index, 1); + assert.equal(actual[1].name, 'noName'); + + assert.equal(actual[2].uri.fsPath, '/abc/test1'); + assert.equal(actual[2].raw.path, '/abc/test1'); + assert.equal(actual[2].index, 2); + assert.equal(actual[2].name, 'test1'); + }); + + test('toWorkspaceFolders with multiple absolute and relative folders with invalid paths', () => { + const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '', name: 'noName' }, { path: './test3' }, { path: '/abc/test1' }], URI.file('src')); + + assert.equal(actual.length, 3); + assert.equal(actual[0].uri.fsPath, '/src/test2'); + assert.equal(actual[0].raw.path, '/src/test2'); + assert.equal(actual[0].index, 0); + assert.equal(actual[0].name, 'test2'); + + assert.equal(actual[1].uri.fsPath, '/src/test3'); + assert.equal(actual[1].raw.path, './test3'); + assert.equal(actual[1].index, 1); + assert.equal(actual[1].name, 'test3'); + + assert.equal(actual[2].uri.fsPath, '/abc/test1'); + assert.equal(actual[2].raw.path, '/abc/test1'); + assert.equal(actual[2].index, 2); + assert.equal(actual[2].name, 'test1'); + }); + + function aWorkspaceFolder(uri: URI, index: number = 0): WorkspaceFolder { + return { + uri, raw: { path: uri.fsPath }, index, name: '' + }; + } + }); \ No newline at end of file diff --git a/src/vs/platform/workspaces/common/workspaces.ts b/src/vs/platform/workspaces/common/workspaces.ts index 1702cd61757..44d42a64d14 100644 --- a/src/vs/platform/workspaces/common/workspaces.ts +++ b/src/vs/platform/workspaces/common/workspaces.ts @@ -34,6 +34,7 @@ export interface IWorkspaceIdentifier { export interface IStoredWorkspaceFolder { path: string; + name?: string; } export interface IStoredWorkspace { diff --git a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts index da22362e776..c5b552022a3 100644 --- a/src/vs/platform/workspaces/electron-main/workspacesMainService.ts +++ b/src/vs/platform/workspaces/electron-main/workspacesMainService.ts @@ -9,22 +9,20 @@ import { IWorkspacesMainService, IWorkspaceIdentifier, IStoredWorkspace, WORKSPA import { TPromise } from 'vs/base/common/winjs.base'; import { isParent } from 'vs/platform/files/common/files'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; -import { extname, join, dirname, isAbsolute, resolve, relative } from 'path'; +import { extname, join, dirname, isAbsolute, resolve } from 'path'; import { mkdirp, writeFile, readFile } from 'vs/base/node/pfs'; import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'; -import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; +import { isLinux, isMacintosh } from 'vs/base/common/platform'; import { delSync, readdirSync } from 'vs/base/node/extfs'; import Event, { Emitter } from 'vs/base/common/event'; import { ILogService } from 'vs/platform/log/common/log'; -import { isEqual, isEqualOrParent, normalize } from 'vs/base/common/paths'; +import { isEqual } from 'vs/base/common/paths'; import { coalesce } from 'vs/base/common/arrays'; import { createHash } from 'crypto'; import * as json from 'vs/base/common/json'; import * as jsonEdit from 'vs/base/common/jsonEdit'; import { applyEdit } from 'vs/base/common/jsonFormatter'; -import { normalizeDriveLetter } from 'vs/base/common/labels'; - -const SLASH = '/'; +import { massageFolderPathForWorkspace } from 'vs/platform/workspaces/node/workspaces'; export class WorkspacesMainService implements IWorkspacesMainService { @@ -198,18 +196,6 @@ export class WorkspacesMainService implements IWorkspacesMainService { const sourceConfigFolder = dirname(workspace.configPath); const targetConfigFolder = dirname(targetConfigPath); - // Determine which path separator to use: - // - macOS/Linux: slash - // - Windows: use slash if already used in that file - let useSlashesForPath = !isWindows; - if (isWindows) { - storedWorkspace.folders.forEach(folder => { - if (folder.path.indexOf(SLASH) >= 0) { - useSlashesForPath = true; - } - }); - } - // Rewrite absolute paths to relative paths if the target workspace folder // is a parent of the location of the workspace file itself. Otherwise keep // using absolute paths. @@ -218,24 +204,7 @@ export class WorkspacesMainService implements IWorkspacesMainService { folder.path = resolve(sourceConfigFolder, folder.path); // relative paths get resolved against the workspace location } - if (isEqualOrParent(folder.path, targetConfigFolder, !isLinux)) { - folder.path = relative(targetConfigFolder, folder.path) || '.'; // absolute paths get converted to relative ones to workspace location if possible - } - - // Windows gets special treatment: - // - normalize all paths to get nice casing of drive letters - // - convert to slashes if we want to use slashes for paths - if (isWindows) { - if (isAbsolute(folder.path)) { - if (useSlashesForPath) { - folder.path = normalize(folder.path, false /* do not use OS path separator */); - } - - folder.path = normalizeDriveLetter(folder.path); - } else if (useSlashesForPath) { - folder.path = folder.path.replace(/[\\]/g, SLASH); - } - } + folder.path = massageFolderPathForWorkspace(folder.path, targetConfigFolder, storedWorkspace.folders); }); // Preserve as much of the existing workspace as possible by using jsonEdit diff --git a/src/vs/platform/workspaces/node/workspaces.ts b/src/vs/platform/workspaces/node/workspaces.ts new file mode 100644 index 00000000000..95757880908 --- /dev/null +++ b/src/vs/platform/workspaces/node/workspaces.ts @@ -0,0 +1,66 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +'use strict'; + +import { IStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces'; +import { isWindows, isLinux } from 'vs/base/common/platform'; +import { isAbsolute, relative } from 'path'; +import { isEqualOrParent, normalize } from 'vs/base/common/paths'; +import { normalizeDriveLetter } from 'vs/base/common/labels'; + +const SLASH = '/'; + +/** + * Given the absolute path to a folder, massage it in a way that it fits + * into an existing set of workspace folders of a workspace. + * + * @param absoluteFolderPath the absolute path of a workspace folder + * @param targetConfigFolder the folder where the workspace is living in + * @param existingFolders a set of existing folders of the workspace + */ +export function massageFolderPathForWorkspace(absoluteFolderPath: string, targetConfigFolder: string, existingFolders: IStoredWorkspaceFolder[]): string { + const useSlashesForPath = shouldUseSlashForPath(existingFolders); + + // Convert path to relative path if the target config folder + // is a parent of the path. + if (isEqualOrParent(absoluteFolderPath, targetConfigFolder, !isLinux)) { + absoluteFolderPath = relative(targetConfigFolder, absoluteFolderPath) || '.'; + } + + // Windows gets special treatment: + // - normalize all paths to get nice casing of drive letters + // - convert to slashes if we want to use slashes for paths + if (isWindows) { + if (isAbsolute(absoluteFolderPath)) { + if (useSlashesForPath) { + absoluteFolderPath = normalize(absoluteFolderPath, false /* do not use OS path separator */); + } + + absoluteFolderPath = normalizeDriveLetter(absoluteFolderPath); + } else if (useSlashesForPath) { + absoluteFolderPath = absoluteFolderPath.replace(/[\\]/g, SLASH); + } + } + + return absoluteFolderPath; +} + +function shouldUseSlashForPath(storedFolders: IStoredWorkspaceFolder[]): boolean { + + // Determine which path separator to use: + // - macOS/Linux: slash + // - Windows: use slash if already used in that file + let useSlashesForPath = !isWindows; + if (isWindows) { + storedFolders.forEach(folder => { + if (!useSlashesForPath && folder.path.indexOf(SLASH) >= 0) { + useSlashesForPath = true; + } + }); + } + + return useSlashesForPath; +} \ No newline at end of file diff --git a/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts b/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts index 884508632e9..03bddbec9e3 100644 --- a/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts +++ b/src/vs/platform/workspaces/test/electron-main/workspacesMainService.test.ts @@ -271,6 +271,32 @@ suite('WorkspacesMainService', () => { }); }); + test('saveWorkspace (saved workspace, preserves forward slashes)', done => { + return service.createWorkspace([process.cwd(), os.tmpdir(), path.join(os.tmpdir(), 'somefolder')]).then(workspace => { + const workspaceConfigPath = path.join(os.tmpdir(), `myworkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); + const newWorkspaceConfigPath = path.join(os.tmpdir(), `mySavedWorkspace.${Date.now()}.${WORKSPACE_EXTENSION}`); + + return service.saveWorkspace(workspace, workspaceConfigPath).then(savedWorkspace => { + const contents = fs.readFileSync(savedWorkspace.configPath).toString(); + fs.writeFileSync(savedWorkspace.configPath, contents.replace(/[\\]/g, '/')); // convert backslash to slash + + return service.saveWorkspace(savedWorkspace, newWorkspaceConfigPath).then(newSavedWorkspace => { + assert.ok(newSavedWorkspace.id); + assert.notEqual(newSavedWorkspace.id, workspace.id); + assert.equal(newSavedWorkspace.configPath, newWorkspaceConfigPath); + + const ws = JSON.parse(fs.readFileSync(newSavedWorkspace.configPath).toString()) as IStoredWorkspace; + assert.ok(ws.folders.every(f => f.path.indexOf('\\') < 0)); + + extfs.delSync(workspaceConfigPath); + extfs.delSync(newWorkspaceConfigPath); + + done(); + }); + }); + }); + }); + test('deleteUntitledWorkspaceSync (untitled)', done => { return service.createWorkspace([process.cwd(), os.tmpdir()]).then(workspace => { assert.ok(fs.existsSync(workspace.configPath)); diff --git a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts index cbb7073b386..950cb025900 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadWorkspace.ts @@ -66,7 +66,7 @@ export class MainThreadWorkspace implements MainThreadWorkspaceShape { return undefined; } const query: ISearchQuery = { - folderQueries: workspace.folders.map(root => ({ folder: root })), + folderQueries: workspace.folders.map(folder => ({ folder: folder.uri })), type: QueryType.File, maxResults, includePattern: { [include]: true }, diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 1f461211f6d..2a77558ba23 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -48,6 +48,7 @@ import { ITreeItem } from 'vs/workbench/common/views'; import { ThemeColor } from 'vs/platform/theme/common/themeService'; import { IDisposable } from 'vs/base/common/lifecycle'; import { SerializedError } from 'vs/base/common/errors'; +import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; export interface IEnvironment { isExtensionDevelopmentDebug: boolean; @@ -64,7 +65,7 @@ export interface IEnvironment { export interface IWorkspaceData { id: string; name: string; - folders: URI[]; + folders: WorkspaceFolder[]; } export interface IInitData { diff --git a/src/vs/workbench/api/node/extHostWorkspace.ts b/src/vs/workbench/api/node/extHostWorkspace.ts index 219bfac0312..43323d5c00c 100644 --- a/src/vs/workbench/api/node/extHostWorkspace.ts +++ b/src/vs/workbench/api/node/extHostWorkspace.ts @@ -8,7 +8,7 @@ import URI from 'vs/base/common/uri'; import Event, { Emitter } from 'vs/base/common/event'; import { normalize } from 'vs/base/common/paths'; import { delta } from 'vs/base/common/arrays'; -import { relative, basename } from 'path'; +import { relative } from 'path'; import { Workspace } from 'vs/platform/workspace/common/workspace'; import { IResourceEdit } from 'vs/editor/common/services/bulkEdit'; import { TPromise } from 'vs/base/common/winjs.base'; @@ -28,26 +28,22 @@ class Workspace2 extends Workspace { return data ? new Workspace2(data) : null; } - private readonly _folder: vscode.WorkspaceFolder[] = []; + private readonly _workspaceFolders: vscode.WorkspaceFolder[] = []; private readonly _structure = new TrieMap(s => s.split('/')); private constructor(data: IWorkspaceData) { super(data.id, data.name, data.folders); // setup the workspace folder data structure - this.folders.forEach((uri, index) => { - const folder = { - name: basename(uri.fsPath), - uri, - index - }; - this._folder.push(folder); - this._structure.insert(folder.uri.toString(), folder); + this.folders.forEach(({ name, uri, index }) => { + const workspaceFolder = { name, uri, index }; + this._workspaceFolders.push(workspaceFolder); + this._structure.insert(workspaceFolder.uri.toString(), workspaceFolder); }); } get workspaceFolders(): vscode.WorkspaceFolder[] { - return this._folder.slice(0); + return this._workspaceFolders.slice(0); } getWorkspaceFolder(uri: URI): vscode.WorkspaceFolder { @@ -114,7 +110,7 @@ export class ExtHostWorkspace implements ExtHostWorkspaceShape { if (folders.length === 0) { return undefined; } - return folders[0].fsPath; + return folders[0].uri.fsPath; } getRelativePath(pathOrUri: string | vscode.Uri, includeWorkspace?: boolean): string { diff --git a/src/vs/workbench/browser/actions/workspaceActions.ts b/src/vs/workbench/browser/actions/workspaceActions.ts index 525931079e0..00904c302f0 100644 --- a/src/vs/workbench/browser/actions/workspaceActions.ts +++ b/src/vs/workbench/browser/actions/workspaceActions.ts @@ -77,7 +77,7 @@ export abstract class BaseWorkspacesAction extends Action { let defaultPath: string; const workspace = this.contextService.getWorkspace(); if (workspace.folders.length > 0) { - defaultPath = dirname(workspace.folders[0].fsPath); // pick the parent of the first root by default + defaultPath = dirname(workspace.folders[0].uri.fsPath); // pick the parent of the first root by default } return this.windowService.showOpenDialog({ @@ -117,7 +117,7 @@ export class AddRootFolderAction extends BaseWorkspacesAction { return this.viewletService.openViewlet(this.viewletService.getDefaultViewletId(), true); }); } - return this.instantiationService.createInstance(NewWorkspaceAction, NewWorkspaceAction.ID, NewWorkspaceAction.LABEL, this.contextService.getWorkspace().folders).run(); + return this.instantiationService.createInstance(NewWorkspaceAction, NewWorkspaceAction.ID, NewWorkspaceAction.LABEL, this.contextService.getWorkspace().folders.map(folder => folder.uri)).run(); } } @@ -204,7 +204,7 @@ export class SaveWorkspaceAsAction extends BaseWorkspacesAction { switch (workspaceState) { case WorkbenchState.FOLDER: - const workspaceFolders = this.contextService.getWorkspace().folders.map(root => root.fsPath); + const workspaceFolders = this.contextService.getWorkspace().folders.map(root => root.uri.fsPath); return this.windowService.createAndOpenWorkspace(workspaceFolders, configPath); case WorkbenchState.WORKSPACE: @@ -221,7 +221,7 @@ export class SaveWorkspaceAsAction extends BaseWorkspacesAction { if (workspace.configuration && !this.isUntitledWorkspace(workspace.configuration.fsPath)) { defaultPath = workspace.configuration.fsPath; } else if (workspace.folders.length > 0) { - defaultPath = dirname(workspace.folders[0].fsPath); // pick the parent of the first root by default + defaultPath = dirname(workspace.folders[0].uri.fsPath); // pick the parent of the first root by default } return this.windowService.showSaveDialog({ diff --git a/src/vs/workbench/browser/labels.ts b/src/vs/workbench/browser/labels.ts index 350b94f71d9..a33051c8099 100644 --- a/src/vs/workbench/browser/labels.ts +++ b/src/vs/workbench/browser/labels.ts @@ -213,8 +213,8 @@ export class FileLabel extends ResourceLabel { public setFile(resource: uri, options?: IFileLabelOptions): void { const hidePath = (options && options.hidePath) || (resource.scheme === Schemas.untitled && !this.untitledEditorService.hasAssociatedFilePath(resource)); const rootProvider: IWorkspaceFolderProvider = (options && options.root) ? { - getWorkspaceFolder(): uri { return options.root; }, - getWorkspace(): { folders: uri[]; } { return { folders: [options.root] }; }, + getWorkspaceFolder(): { uri: uri } { return { uri: options.root }; }, + getWorkspace(): { folders: { uri: uri }[]; } { return { folders: [{ uri: options.root }] }; }, } : this.contextService; const description = resource.scheme === 'file' || resource.scheme === 'untitled' ? getPathLabel(paths.dirname(resource.fsPath), rootProvider, this.environmentService) : resource.authority; diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 2382884342c..f6a84feb9b9 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -30,7 +30,7 @@ import { IEditorPart } from 'vs/workbench/services/editor/browser/editorService' import { IPartService } from 'vs/workbench/services/part/common/partService'; import { Position, POSITIONS, Direction } from 'vs/platform/editor/common/editor'; import { IStorageService } from 'vs/platform/storage/common/storage'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { IMessageService, IMessageWithAction, Severity } from 'vs/platform/message/common/message'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -44,6 +44,7 @@ import { EDITOR_GROUP_BACKGROUND } from 'vs/workbench/common/theme'; import { createCSSRule } from 'vs/base/browser/dom'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { join } from 'vs/base/common/paths'; +import { isCommonCodeEditor } from 'vs/editor/common/editorCommon'; class ProgressMonitor { @@ -1298,6 +1299,20 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService } } + public invokeWithinEditorContext(fn: (accessor: ServicesAccessor) => T): T { + const activeEditor = this.getActiveEditor(); + if (activeEditor) { + const activeEditorControl = activeEditor.getControl(); + if (isCommonCodeEditor(activeEditorControl)) { + return activeEditorControl.invokeWithinContext(fn); + } + + return this.editorGroupsControl.getInstantiationService(activeEditor.position).invokeFunction(fn); + } + + return this.instantiationService.invokeFunction(fn); + } + public layout(dimension: Dimension): Dimension[] { // Pass to super diff --git a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts index ab33817c228..10d32871c4b 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts @@ -111,6 +111,7 @@ export class QuickOpenController extends Component implements IQuickOpenService @IInstantiationService private instantiationService: IInstantiationService, @IPartService private partService: IPartService, @IListService private listService: IListService, + @IEnvironmentService private environmentService: IEnvironmentService, @IThemeService themeService: IThemeService ) { super(QuickOpenController.ID, themeService); @@ -138,7 +139,11 @@ export class QuickOpenController extends Component implements IQuickOpenService } private updateConfiguration(settings: IWorkbenchQuickOpenConfiguration): void { - this.closeOnFocusLost = settings.workbench && settings.workbench.quickOpen && settings.workbench.quickOpen.closeOnFocusLost; + if (this.environmentService.args['sticky-quickopen']) { + this.closeOnFocusLost = false; + } else { + this.closeOnFocusLost = settings.workbench && settings.workbench.quickOpen && settings.workbench.quickOpen.closeOnFocusLost; + } } public get onShow(): Event { diff --git a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts index 683183e95a3..3f7d2cee441 100644 --- a/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts +++ b/src/vs/workbench/browser/parts/titlebar/titlebarPart.ts @@ -31,7 +31,6 @@ import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/ import { Verbosity } from 'vs/platform/editor/common/editor'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { TITLE_BAR_ACTIVE_BACKGROUND, TITLE_BAR_ACTIVE_FOREGROUND, TITLE_BAR_INACTIVE_FOREGROUND, TITLE_BAR_INACTIVE_BACKGROUND, TITLE_BAR_BORDER } from 'vs/workbench/common/theme'; -import URI from 'vs/base/common/uri'; import { IPartService } from 'vs/workbench/services/part/common/partService'; export class TitlebarPart extends Part implements ITitleService { @@ -192,19 +191,26 @@ export class TitlebarPart extends Part implements ITitleService { const input = this.editorService.getActiveEditorInput(); const workspace = this.contextService.getWorkspace(); + let root; + if (workspace.configuration) { + root = workspace.configuration; + } else if (workspace.folders.length) { + root = workspace.folders[0].uri; + } + // Compute folder resource // Single Root Workspace: always the root single workspace in this case // Otherwise: root folder of the currently active file if any - let folder: URI = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER ? workspace.folders[0] : this.contextService.getWorkspaceFolder(toResource(input, { supportSideBySide: true, filter: 'file' })); + let folder = this.contextService.getWorkbenchState() === WorkbenchState.FOLDER ? workspace.folders[0] : this.contextService.getWorkspaceFolder(toResource(input, { supportSideBySide: true, filter: 'file' })); // Variables const activeEditorShort = input ? input.getTitle(Verbosity.SHORT) : ''; const activeEditorMedium = input ? input.getTitle(Verbosity.MEDIUM) : activeEditorShort; const activeEditorLong = input ? input.getTitle(Verbosity.LONG) : activeEditorMedium; const rootName = workspace.name; - const rootPath = labels.getPathLabel(workspace.configuration || workspace.folders[0], void 0, this.environmentService) || ''; - const folderName = folder ? (paths.basename(folder.fsPath) || folder.fsPath) : ''; - const folderPath = folder ? labels.getPathLabel(folder, void 0, this.environmentService) : ''; + const rootPath = root ? labels.getPathLabel(root, void 0, this.environmentService) : ''; + const folderName = folder ? (paths.basename(folder.uri.fsPath) || folder.uri.fsPath) : ''; + const folderPath = folder ? labels.getPathLabel(folder.uri, void 0, this.environmentService) : ''; const dirty = input && input.isDirty() ? TitlebarPart.TITLE_DIRTY : ''; const appName = this.environmentService.appNameLong; const separator = TitlebarPart.TITLE_SEPARATOR; diff --git a/src/vs/workbench/common/resources.ts b/src/vs/workbench/common/resources.ts index d8ae21d82d3..ee29aa9b7a2 100644 --- a/src/vs/workbench/common/resources.ts +++ b/src/vs/workbench/common/resources.ts @@ -107,12 +107,12 @@ export class ResourceGlobMatcher { // Add excludes per workspaces that got added this.contextService.getWorkspace().folders.forEach(folder => { - const rootExcludes = this.globFn(folder); - if (!this.mapRootToExpressionConfig.has(folder.toString()) || !objects.equals(this.mapRootToExpressionConfig.get(folder.toString()), rootExcludes)) { + const rootExcludes = this.globFn(folder.uri); + if (!this.mapRootToExpressionConfig.has(folder.uri.toString()) || !objects.equals(this.mapRootToExpressionConfig.get(folder.uri.toString()), rootExcludes)) { changed = true; - this.mapRootToParsedExpression.set(folder.toString(), this.parseFn(rootExcludes)); - this.mapRootToExpressionConfig.set(folder.toString(), objects.clone(rootExcludes)); + this.mapRootToParsedExpression.set(folder.uri.toString(), this.parseFn(rootExcludes)); + this.mapRootToExpressionConfig.set(folder.uri.toString(), objects.clone(rootExcludes)); } }); @@ -145,11 +145,11 @@ export class ResourceGlobMatcher { } public matches(resource: URI): boolean { - const root = this.contextService.getWorkspaceFolder(resource); + const folder = this.contextService.getWorkspaceFolder(resource); let expressionForRoot: ParsedExpression; - if (root && this.mapRootToParsedExpression.has(root.toString())) { - expressionForRoot = this.mapRootToParsedExpression.get(root.toString()); + if (folder && this.mapRootToParsedExpression.has(folder.uri.toString())) { + expressionForRoot = this.mapRootToParsedExpression.get(folder.uri.toString()); } else { expressionForRoot = this.mapRootToParsedExpression.get(ResourceGlobMatcher.NO_ROOT); } @@ -159,8 +159,8 @@ export class ResourceGlobMatcher { // a glob pattern of "src/**" will not match on an absolute path "/folder/src/file.txt" // but can match on "src/file.txt" let resourcePathToMatch: string; - if (root) { - resourcePathToMatch = paths.normalize(paths.relative(root.fsPath, resource.fsPath)); + if (folder) { + resourcePathToMatch = paths.normalize(paths.relative(folder.uri.fsPath, resource.fsPath)); } else { resourcePathToMatch = resource.fsPath; } diff --git a/src/vs/workbench/electron-browser/main.ts b/src/vs/workbench/electron-browser/main.ts index 70cbf4e7b09..08bead07081 100644 --- a/src/vs/workbench/electron-browser/main.ts +++ b/src/vs/workbench/electron-browser/main.ts @@ -162,7 +162,7 @@ function createStorageService(workspaceService: IWorkspaceContextService, enviro // the ctime is used as secondary workspace id to clean up stale UI state if necessary case WorkbenchState.FOLDER: const workspace: Workspace = workspaceService.getWorkspace(); - workspaceId = workspace.folders[0].toString(); + workspaceId = workspace.folders[0].uri.toString(); secondaryWorkspaceId = workspace.ctime; break; diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index e3307c35999..c0802c9b261 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -294,7 +294,7 @@ export class ElectronWindow extends Themable { // Single folder or no workspace: create workspace and open else { - const workspaceFolders: URI[] = [...this.contextService.getWorkspace().folders]; + const workspaceFolders: URI[] = [...this.contextService.getWorkspace().folders.map(folder => folder.uri)]; // Fill in remaining ones from request workspaceFolders.push(...request.foldersToAdd.map(folderToAdd => URI.file(folderToAdd.filePath))); diff --git a/src/vs/workbench/node/extensionHostMain.ts b/src/vs/workbench/node/extensionHostMain.ts index 9bd3d58ff3d..ccd25d7eadb 100644 --- a/src/vs/workbench/node/extensionHostMain.ts +++ b/src/vs/workbench/node/extensionHostMain.ts @@ -177,7 +177,7 @@ export class ExtensionHostMain { } const query: ISearchQuery = { - folderQueries: this._workspace.folders.map(root => ({ folder: root })), + folderQueries: this._workspace.folders.map(folder => ({ folder: folder.uri })), type: QueryType.File, maxResults: 1, includePattern: { [p]: true } @@ -187,8 +187,8 @@ export class ExtensionHostMain { } else { // find exact path return (async resolve => { - for (const { fsPath } of this._workspace.folders) { - if (await pfs.exists(join(fsPath, p))) { + for (const { uri } of this._workspace.folders) { + if (await pfs.exists(join(uri.fsPath, p))) { return p; } } diff --git a/src/vs/workbench/parts/debug/browser/debugContentProvider.ts b/src/vs/workbench/parts/debug/browser/debugContentProvider.ts index ccf2795916f..3cd691e11aa 100644 --- a/src/vs/workbench/parts/debug/browser/debugContentProvider.ts +++ b/src/vs/workbench/parts/debug/browser/debugContentProvider.ts @@ -43,7 +43,7 @@ export class DebugContentProvider implements IWorkbenchContribution, ITextModelC case 'session': process = this.debugService.findProcessByUUID(decodeURIComponent(pair[1])); break; - case 'sourceRef': + case 'ref': sourceRef = parseInt(pair[1]); break; } diff --git a/src/vs/workbench/parts/debug/browser/debugViewlet.ts b/src/vs/workbench/parts/debug/browser/debugViewlet.ts index d0ff9fd24e1..224227ba714 100644 --- a/src/vs/workbench/parts/debug/browser/debugViewlet.ts +++ b/src/vs/workbench/parts/debug/browser/debugViewlet.ts @@ -26,7 +26,6 @@ import { IContextMenuService } from 'vs/platform/contextview/browser/contextView export class DebugViewlet extends PersistentViewsViewlet { - private actions: IAction[]; private startDebugActionItem: StartDebugActionItem; private progressRunner: IProgressRunner; @@ -47,6 +46,7 @@ export class DebugViewlet extends PersistentViewsViewlet { this.progressRunner = null; this._register(this.debugService.onDidChangeState(state => this.onDebugServiceStateChange(state))); + this._register(this.contextService.onDidChangeWorkbenchState(() => this.updateTitleArea())); } public create(parent: Builder): TPromise { @@ -62,16 +62,13 @@ export class DebugViewlet extends PersistentViewsViewlet { } public getActions(): IAction[] { - if (!this.actions) { - this.actions = []; - this.actions.push(this.instantiationService.createInstance(StartAction, StartAction.ID, StartAction.LABEL)); - if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY) { - this.actions.push(this.instantiationService.createInstance(ConfigureAction, ConfigureAction.ID, ConfigureAction.LABEL)); - } - this.actions.push(this._register(this.instantiationService.createInstance(ToggleReplAction, ToggleReplAction.ID, ToggleReplAction.LABEL))); + const actions = []; + actions.push(this.instantiationService.createInstance(StartAction, StartAction.ID, StartAction.LABEL)); + if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY) { + actions.push(this.instantiationService.createInstance(ConfigureAction, ConfigureAction.ID, ConfigureAction.LABEL)); } - - return this.actions; + actions.push(this._register(this.instantiationService.createInstance(ToggleReplAction, ToggleReplAction.ID, ToggleReplAction.LABEL))); + return actions; } public getSecondaryActions(): IAction[] { diff --git a/src/vs/workbench/parts/debug/browser/linkDetector.ts b/src/vs/workbench/parts/debug/browser/linkDetector.ts index a419b37aa4f..356578506cc 100644 --- a/src/vs/workbench/parts/debug/browser/linkDetector.ts +++ b/src/vs/workbench/parts/debug/browser/linkDetector.ts @@ -46,10 +46,13 @@ export class LinkDetector { let match = pattern.exec(text); while (match !== null) { let resource: uri = null; - try { - resource = (match && !strings.startsWith(match[0], 'http')) - && (match[2] || strings.startsWith(match[1], '/') ? uri.file(match[1]) : this.contextService.toResource(match[1])); // TODO@Michel TODO@Isidor (https://github.com/Microsoft/vscode/issues/29190) - } catch (e) { } + const workspaceFolder = this.contextService.getWorkspace().folders[0]; + if (workspaceFolder) { + try { + resource = (match && !strings.startsWith(match[0], 'http')) + && (match[2] || strings.startsWith(match[1], '/') ? uri.file(match[1]) : this.contextService.toResource(match[1], workspaceFolder)); // TODO@Michel TODO@Isidor (https://github.com/Microsoft/vscode/issues/29190) + } catch (e) { } + } if (!resource) { match = pattern.exec(text); diff --git a/src/vs/workbench/parts/debug/common/debugModel.ts b/src/vs/workbench/parts/debug/common/debugModel.ts index 6782bbc069c..5471d9b004a 100644 --- a/src/vs/workbench/parts/debug/common/debugModel.ts +++ b/src/vs/workbench/parts/debug/common/debugModel.ts @@ -459,7 +459,7 @@ export class Thread implements IThread { } return response.body.stackFrames.map((rsf, index) => { - let source = new Source(rsf.source); + let source = new Source(rsf.source, this.process.getId()); if (this.process.sources.has(source.uri.toString())) { source = this.process.sources.get(source.uri.toString()); } else { diff --git a/src/vs/workbench/parts/debug/common/debugSource.ts b/src/vs/workbench/parts/debug/common/debugSource.ts index 4ccf9f55e43..4e8c4681544 100644 --- a/src/vs/workbench/parts/debug/common/debugSource.ts +++ b/src/vs/workbench/parts/debug/common/debugSource.ts @@ -11,16 +11,25 @@ const UNKNOWN_SOURCE_LABEL = nls.localize('unknownSource', "Unknown Source"); export class Source { - public uri: uri; + public readonly uri: uri; public available: boolean; - constructor(public raw: DebugProtocol.Source) { + constructor(public readonly raw: DebugProtocol.Source, sessionId?: string) { if (!raw) { this.raw = { name: UNKNOWN_SOURCE_LABEL }; } - const path = this.raw.path || this.raw.name; this.available = this.raw.name !== UNKNOWN_SOURCE_LABEL; - this.uri = this.raw.sourceReference > 0 ? uri.parse(`${DEBUG_SCHEME}:${path}`) : uri.file(path); + const path = this.raw.path || this.raw.name; + if (this.raw.sourceReference > 0) { + let debugUri = `${DEBUG_SCHEME}:${encodeURIComponent(path)}?`; + if (sessionId) { + debugUri += `session=${encodeURIComponent(sessionId)}&`; + } + debugUri += `ref=${this.raw.sourceReference}`; + this.uri = uri.parse(debugUri); + } else { + this.uri = uri.file(path); // path should better be absolute! + } } public get name() { @@ -40,6 +49,6 @@ export class Source { } public get inMemory() { - return this.uri.toString().indexOf(`${DEBUG_SCHEME}:`) === 0; + return this.uri.scheme === DEBUG_SCHEME; } } diff --git a/src/vs/workbench/parts/debug/electron-browser/debugConfigurationManager.ts b/src/vs/workbench/parts/debug/electron-browser/debugConfigurationManager.ts index 5aa8b1e8f0a..cf5485f50eb 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugConfigurationManager.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugConfigurationManager.ts @@ -353,7 +353,7 @@ export class ConfigurationManager implements IConfigurationManager { } private initLaunches(): void { - this.launches = this.contextService.getWorkspace().folders.map(folder => this.instantiationService.createInstance(Launch, this, folder)); + this.launches = this.contextService.getWorkspace().folders.map(folder => this.instantiationService.createInstance(Launch, this, folder.uri)); if (this.launches.indexOf(this._selectedLaunch) === -1) { this._selectedLaunch = undefined; } diff --git a/src/vs/workbench/parts/extensions/browser/extensionsActions.ts b/src/vs/workbench/parts/extensions/browser/extensionsActions.ts index 51d6dc2eb26..d9ae67e4711 100644 --- a/src/vs/workbench/parts/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/parts/extensions/browser/extensionsActions.ts @@ -418,6 +418,7 @@ export class EnableForWorkspaceAction extends Action implements IExtensionAction super(EnableForWorkspaceAction.ID, label); this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update())); + this.disposables.push(this.workspaceContextService.onDidChangeWorkbenchState(() => this.update())); this.update(); } @@ -555,6 +556,7 @@ export class DisableForWorkspaceAction extends Action implements IExtensionActio this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update())); this.update(); + this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); } private update(): void { @@ -1087,13 +1089,21 @@ export class ShowWorkspaceRecommendedExtensionsAction extends Action { static ID = 'workbench.extensions.action.showWorkspaceRecommendedExtensions'; static LABEL = localize('showWorkspaceRecommendedExtensions', "Show Workspace Recommended Extensions"); + private disposables: IDisposable[] = []; + constructor( id: string, label: string, - @IWorkspaceContextService contextService: IWorkspaceContextService, + @IWorkspaceContextService private contextService: IWorkspaceContextService, @IViewletService private viewletService: IViewletService ) { - super(id, label, null, contextService.getWorkbenchState() !== WorkbenchState.EMPTY); + super(id, label, null); + this.contextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); + this.update(); + } + + private update(): void { + this.enabled = this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY; } run(): TPromise { @@ -1108,6 +1118,11 @@ export class ShowWorkspaceRecommendedExtensionsAction extends Action { protected isEnabled(): boolean { return true; } + + dispose(): void { + this.disposables = dispose(this.disposables); + super.dispose(); + } } export class ShowRecommendedKeymapExtensionsAction extends Action { @@ -1242,6 +1257,8 @@ export class ConfigureWorkspaceRecommendedExtensionsAction extends Action { static ID = 'workbench.extensions.action.configureWorkspaceRecommendedExtensions'; static LABEL = localize('configureWorkspaceRecommendedExtensions', "Configure Recommended Extensions (Workspace)"); + private disposables: IDisposable[] = []; + constructor( id: string, label: string, @@ -1251,7 +1268,13 @@ export class ConfigureWorkspaceRecommendedExtensionsAction extends Action { @IWorkbenchEditorService private editorService: IWorkbenchEditorService, @IMessageService private messageService: IMessageService ) { - super(id, label, null, contextService.getWorkbenchState() !== WorkbenchState.EMPTY); + super(id, label, null); + this.contextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); + this.update(); + } + + private update(): void { + this.enabled = this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY; } public run(event: any): TPromise { @@ -1276,7 +1299,7 @@ export class ConfigureWorkspaceRecommendedExtensionsAction extends Action { } private getOrCreateExtensionsFile(): TPromise<{ created: boolean, extensionsFileResource: URI }> { - const extensionsFileResource = URI.file(paths.join(this.contextService.getWorkspace().folders[0].fsPath, '.vscode', 'extensions.json')); // TODO@Sandeep (https://github.com/Microsoft/vscode/issues/29242) + const extensionsFileResource = URI.file(paths.join(this.contextService.getWorkspace().folders[0].uri.fsPath, '.vscode', 'extensions.json')); // TODO@Sandeep (https://github.com/Microsoft/vscode/issues/29242) return this.fileService.resolveContent(extensionsFileResource).then(content => { return { created: false, extensionsFileResource }; @@ -1286,6 +1309,11 @@ export class ConfigureWorkspaceRecommendedExtensionsAction extends Action { }); }); } + + dispose(): void { + this.disposables = dispose(this.disposables); + super.dispose(); + } } export class BuiltinStatusLabelAction extends Action { @@ -1359,7 +1387,8 @@ export class DisableAllWorkpsaceAction extends Action { ) { super(id, label); this.update(); - this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update())); + this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); + this.extensionsWorkbenchService.onChange(() => this.update(), this, this.disposables); } private update(): void { @@ -1422,7 +1451,8 @@ export class EnableAllWorkpsaceAction extends Action { ) { super(id, label); this.update(); - this.disposables.push(this.extensionsWorkbenchService.onChange(() => this.update())); + this.extensionsWorkbenchService.onChange(() => this.update(), this, this.disposables); + this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); } private update(): void { diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts index 6761e846ab6..dbfca756fcc 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts @@ -19,7 +19,7 @@ import { IChoiceService, IMessageService } from 'vs/platform/message/common/mess import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ShowRecommendedExtensionsAction, ShowWorkspaceRecommendedExtensionsAction } from 'vs/workbench/parts/extensions/browser/extensionsActions'; import Severity from 'vs/base/common/severity'; -import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; +import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { Schemas } from 'vs/base/common/network'; import { IFileService } from 'vs/platform/files/common/files'; import { IExtensionsConfiguration, ConfigurationKey } from 'vs/workbench/parts/extensions/common/extensions'; @@ -71,10 +71,11 @@ export class ExtensionTipsService implements IExtensionTipsService { } getWorkspaceRecommendations(): TPromise { - if (this.contextService.getWorkbenchState() === WorkbenchState.EMPTY) { + const workspaceFolder = this.contextService.getWorkspace().folders[0]; + if (!workspaceFolder) { return TPromise.as([]); } - return this.fileService.resolveContent(this.contextService.toResource(paths.join('.vscode', 'extensions.json'))).then(content => { //TODO@Sandeep (https://github.com/Microsoft/vscode/issues/29242) + return this.fileService.resolveContent(this.contextService.toResource(paths.join('.vscode', 'extensions.json'), workspaceFolder)).then(content => { //TODO@Sandeep (https://github.com/Microsoft/vscode/issues/29242) const extensionsContent = json.parse(content.value, []); if (extensionsContent.recommendations) { const regEx = new RegExp(EXTENSION_IDENTIFIER_PATTERN); diff --git a/src/vs/workbench/parts/files/browser/explorerViewlet.ts b/src/vs/workbench/parts/files/browser/explorerViewlet.ts index 4db3893c1b1..0e582a83c5e 100644 --- a/src/vs/workbench/parts/files/browser/explorerViewlet.ts +++ b/src/vs/workbench/parts/files/browser/explorerViewlet.ts @@ -67,6 +67,7 @@ export class ExplorerViewlet extends PersistentViewsViewlet { this.onConfigurationUpdated(); this._register(this.configurationService.onDidUpdateConfiguration(e => this.onConfigurationUpdated())); this._register(this.contextService.onDidChangeWorkspaceName(e => this.updateTitleArea())); + this._register(this.contextService.onDidChangeWorkbenchState(() => this.registerViews())); } public create(parent: Builder): TPromise { @@ -74,17 +75,43 @@ export class ExplorerViewlet extends PersistentViewsViewlet { } private registerViews(): void { - let viewDescriptors = []; + const viewDescriptors = ViewsRegistry.getViews(ViewLocation.Explorer); - viewDescriptors.push(this.createOpenEditorsViewDescriptor()); + let viewDescriptorsToRegister = []; + let viewDescriptorsToDeregister: string[] = []; - if (this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY) { - viewDescriptors.push(this.createExplorerViewDescriptor()); + const openEditorsViewDescriptor = this.createOpenEditorsViewDescriptor(); + const openEditorsViewDescriptorExists = viewDescriptors.some(v => v.id === openEditorsViewDescriptor.id); + const explorerViewDescriptor = this.createExplorerViewDescriptor(); + const explorerViewDescriptorExists = viewDescriptors.some(v => v.id === explorerViewDescriptor.id); + const emptyViewDescriptor = this.createEmptyViewDescriptor(); + const emptyViewDescriptorExists = viewDescriptors.some(v => v.id === emptyViewDescriptor.id); + + if (!openEditorsViewDescriptorExists) { + viewDescriptorsToRegister.push(openEditorsViewDescriptor); + } + if (this.contextService.getWorkbenchState() === WorkbenchState.EMPTY) { + if (explorerViewDescriptorExists) { + viewDescriptorsToDeregister.push(explorerViewDescriptor.id); + } + if (!emptyViewDescriptorExists) { + viewDescriptorsToRegister.push(emptyViewDescriptor); + } } else { - viewDescriptors.push(this.createEmptyViewDescriptor()); + if (emptyViewDescriptorExists) { + viewDescriptorsToDeregister.push(emptyViewDescriptor.id); + } + if (!explorerViewDescriptorExists) { + viewDescriptorsToRegister.push(explorerViewDescriptor); + } } - ViewsRegistry.registerViews(viewDescriptors); + if (viewDescriptorsToRegister.length) { + ViewsRegistry.registerViews(viewDescriptorsToRegister); + } + if (viewDescriptorsToDeregister.length) { + ViewsRegistry.deregisterViews(viewDescriptorsToDeregister, ViewLocation.Explorer); + } } private createOpenEditorsViewDescriptor(): IViewDescriptor { diff --git a/src/vs/workbench/parts/files/browser/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts index b568293a6bc..aae7c5314ed 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerView.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerView.ts @@ -133,7 +133,7 @@ export class ExplorerView extends CollapsibleView { const titleSpan = $('span').appendTo(titleDiv); const setHeader = () => { const workspace = this.contextService.getWorkspace(); - const title = workspace.folders.map(folder => labels.getPathLabel(folder.fsPath, void 0, this.environmentService)).join(); + const title = workspace.folders.map(folder => labels.getPathLabel(folder.uri.fsPath, void 0, this.environmentService)).join(); titleSpan.text(this.name).title(title); }; this.toDispose.push(this.contextService.onDidChangeWorkspaceName(() => setHeader())); @@ -737,7 +737,7 @@ export class ExplorerView extends CollapsibleView { if (activeFile) { const workspaceFolder = this.contextService.getWorkspaceFolder(activeFile); if (workspaceFolder) { - const found = targetsToResolve.filter(t => t.root.resource.toString() === workspaceFolder.toString()).pop(); + const found = targetsToResolve.filter(t => t.root.resource.toString() === workspaceFolder.uri.toString()).pop(); found.options.resolveTo.push(activeFile); } } @@ -745,7 +745,7 @@ export class ExplorerView extends CollapsibleView { targetsToExpand.forEach(toExpand => { const workspaceFolder = this.contextService.getWorkspaceFolder(toExpand); if (workspaceFolder) { - const found = targetsToResolve.filter(ttr => ttr.resource.toString() === workspaceFolder.toString()).pop(); + const found = targetsToResolve.filter(ttr => ttr.resource.toString() === workspaceFolder.uri.toString()).pop(); found.options.resolveTo.push(toExpand); } }); @@ -856,7 +856,8 @@ export class ExplorerView extends CollapsibleView { // Stat needs to be resolved first and then revealed const options: IResolveFileOptions = { resolveTo: [resource] }; - const rootUri = this.contextService.getWorkspaceFolder(resource) || this.model.roots[0].resource; + const workspaceFolder = this.contextService.getWorkspaceFolder(resource); + const rootUri = workspaceFolder ? workspaceFolder.uri : this.model.roots[0].resource; return this.fileService.resolveFile(rootUri, options).then(stat => { // Convert to model diff --git a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts index 045747877f6..b3b41dc8dd3 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts @@ -572,8 +572,7 @@ export class FileSorter implements ISorter { // Do not sort roots if (statA.isRoot) { if (statB.isRoot) { - const ws = this.contextService.getWorkspace(); - return ws.folders.indexOf(statA.resource) - ws.folders.indexOf(statB.resource); + return this.contextService.getWorkspaceFolder(statA.resource).index - this.contextService.getWorkspaceFolder(statB.resource).index; } return -1; } @@ -666,10 +665,10 @@ export class FileFilter implements IFilter { public updateConfiguration(): boolean { let needsRefresh = false; this.contextService.getWorkspace().folders.forEach(folder => { - const configuration = this.configurationService.getConfiguration(undefined, { resource: folder }); + const configuration = this.configurationService.getConfiguration(undefined, { resource: folder.uri }); const excludesConfig = (configuration && configuration.files && configuration.files.exclude) || Object.create(null); - needsRefresh = needsRefresh || !objects.equals(this.hiddenExpressionPerRoot.get(folder.toString()), excludesConfig); - this.hiddenExpressionPerRoot.set(folder.toString(), objects.clone(excludesConfig)); // do not keep the config, as it gets mutated under our hoods + needsRefresh = needsRefresh || !objects.equals(this.hiddenExpressionPerRoot.get(folder.uri.toString()), excludesConfig); + this.hiddenExpressionPerRoot.set(folder.uri.toString(), objects.clone(excludesConfig)); // do not keep the config, as it gets mutated under our hoods }); return needsRefresh; @@ -843,7 +842,7 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop { return fromDesktop || isCopy ? DRAG_OVER_ACCEPT_BUBBLE_DOWN_COPY(true) : DRAG_OVER_ACCEPT_BUBBLE_DOWN(true); } - if (this.contextService.getWorkspace().folders.every(r => r.toString() !== target.resource.toString())) { + if (this.contextService.getWorkspace().folders.every(folder => folder.uri.toString() !== target.resource.toString())) { return fromDesktop || isCopy ? DRAG_OVER_ACCEPT_BUBBLE_UP_COPY : DRAG_OVER_ACCEPT_BUBBLE_UP; } } @@ -899,7 +898,7 @@ export class FileDragAndDrop extends SimpleFileResourceDragAndDrop { }); if (result) { - const currentFolders = this.contextService.getWorkspace().folders; + const currentFolders = this.contextService.getWorkspace().folders.map(folder => folder.uri); const newRoots = [...currentFolders, ...folders]; return this.windowService.createAndOpenWorkspace(distinct(newRoots.map(root => root.fsPath))); diff --git a/src/vs/workbench/parts/files/common/explorerModel.ts b/src/vs/workbench/parts/files/common/explorerModel.ts index c2d760614b2..d298cadddff 100644 --- a/src/vs/workbench/parts/files/common/explorerModel.ts +++ b/src/vs/workbench/parts/files/common/explorerModel.ts @@ -25,9 +25,7 @@ export class Model { private _roots: FileStat[]; constructor( @IWorkspaceContextService private contextService: IWorkspaceContextService) { - const setRoots = () => { - this._roots = this.contextService.getWorkspace().folders.map(uri => new FileStat(uri, undefined)); - }; + const setRoots = () => this._roots = this.contextService.getWorkspace().folders.map(folder => new FileStat(folder.uri, undefined)); this.contextService.onDidChangeWorkspaceFolders(() => setRoots()); setRoots(); } @@ -53,7 +51,7 @@ export class Model { public findClosest(resource: URI): FileStat { const folder = this.contextService.getWorkspaceFolder(resource); if (folder) { - const root = this.roots.filter(r => r.resource.toString() === folder.toString()).pop(); + const root = this.roots.filter(r => r.resource.toString() === folder.uri.toString()).pop(); if (root) { return root.find(resource); } diff --git a/src/vs/workbench/parts/files/common/files.ts b/src/vs/workbench/parts/files/common/files.ts index f25ed1b9106..23ba267143e 100644 --- a/src/vs/workbench/parts/files/common/files.ts +++ b/src/vs/workbench/parts/files/common/files.ts @@ -11,7 +11,7 @@ import { IFilesConfiguration, FileChangeType, IFileService } from 'vs/platform/f import { FileStat, OpenEditor } from 'vs/workbench/parts/files/common/explorerModel'; import { ContextKeyExpr, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { ITextModelContentProvider } from 'vs/editor/common/services/resolverService'; -import { IDisposable } from 'vs/base/common/lifecycle'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { TPromise } from 'vs/base/common/winjs.base'; import { onUnexpectedError } from 'vs/base/common/errors'; import { IModel } from 'vs/editor/common/editorCommon'; @@ -141,8 +141,7 @@ export class FileOnDiskContentProvider implements ITextModelContentProvider { const disposeListener = codeEditorModel.onWillDispose(() => { disposeListener.dispose(); - this.fileWatcher.dispose(); - this.fileWatcher = void 0; + this.fileWatcher = dispose(this.fileWatcher); }); } @@ -175,9 +174,6 @@ export class FileOnDiskContentProvider implements ITextModelContentProvider { } public dispose(): void { - if (this.fileWatcher) { - this.fileWatcher.dispose(); - this.fileWatcher = void 0; - } + this.fileWatcher = dispose(this.fileWatcher); } } \ No newline at end of file diff --git a/src/vs/workbench/parts/output/common/outputLinkProvider.ts b/src/vs/workbench/parts/output/common/outputLinkProvider.ts index e457e1073c4..09c48178696 100644 --- a/src/vs/workbench/parts/output/common/outputLinkProvider.ts +++ b/src/vs/workbench/parts/output/common/outputLinkProvider.ts @@ -80,7 +80,7 @@ export class OutputLinkProvider { if (!this.worker) { const createData: ICreateData = { - workspaceFolders: this.contextService.getWorkspace().folders.map(folder => folder.toString()) + workspaceFolders: this.contextService.getWorkspace().folders.map(folder => folder.uri.toString()) }; this.worker = createWebWorker(this.modelService, { diff --git a/src/vs/workbench/parts/preferences/browser/preferencesActions.ts b/src/vs/workbench/parts/preferences/browser/preferencesActions.ts index aeee25d30bf..ef2a1c99b3d 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesActions.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesActions.ts @@ -8,6 +8,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import * as nls from 'vs/nls'; import URI from 'vs/base/common/uri'; import { Action } from 'vs/base/common/actions'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IModeService } from 'vs/editor/common/services/modeService'; import { IQuickOpenService, IPickOpenEntry, IFilePickOpenEntry } from 'vs/platform/quickOpen/common/quickOpen'; import { IPreferencesService, getSettingsTargetName } from 'vs/workbench/parts/preferences/common/preferences'; @@ -73,6 +74,8 @@ export class OpenWorkspaceSettingsAction extends Action { public static ID = 'workbench.action.openWorkspaceSettings'; public static LABEL = nls.localize('openWorkspaceSettings', "Open Workspace Settings"); + private disposables: IDisposable[] = []; + constructor( id: string, label: string, @@ -80,12 +83,22 @@ export class OpenWorkspaceSettingsAction extends Action { @IWorkspaceContextService private workspaceContextService: IWorkspaceContextService ) { super(id, label); + this.update(); + this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); + } + + private update(): void { this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY; } public run(event?: any): TPromise { return this.preferencesService.openWorkspaceSettings(); } + + public dispose(): void { + this.disposables = dispose(this.disposables); + super.dispose(); + } } export class OpenFolderSettingsAction extends Action { @@ -93,6 +106,9 @@ export class OpenFolderSettingsAction extends Action { public static ID = 'workbench.action.openFolderSettings'; public static LABEL = nls.localize('openFolderSettings', "Open Folder Settings"); + private disposables: IDisposable[] = []; + + constructor( id: string, label: string, @@ -101,13 +117,18 @@ export class OpenFolderSettingsAction extends Action { @IQuickOpenService private quickOpenService: IQuickOpenService ) { super(id, label); + this.update(); + this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this, this.disposables); + } + + private update(): void { this.enabled = this.workspaceContextService.getWorkbenchState() === WorkbenchState.WORKSPACE; } public run(): TPromise { const picks: IPickOpenEntry[] = this.workspaceContextService.getWorkspace().folders.map((folder, index) => { return { - label: getSettingsTargetName(ConfigurationTarget.FOLDER, folder, this.workspaceContextService), + label: getSettingsTargetName(ConfigurationTarget.FOLDER, folder.uri, this.workspaceContextService), id: `${index}` }; }); @@ -115,12 +136,17 @@ export class OpenFolderSettingsAction extends Action { return this.quickOpenService.pick(picks, { placeHolder: nls.localize('pickFolder', "Select Folder") }) .then(pick => { if (pick) { - return this.preferencesService.openFolderSettings(this.workspaceContextService.getWorkspace().folders[parseInt(pick.id)]); + return this.preferencesService.openFolderSettings(this.workspaceContextService.getWorkspace().folders[parseInt(pick.id)].uri); } return undefined; }); } + + public dispose(): void { + this.disposables = dispose(this.disposables); + super.dispose(); + } } export class ConfigureLanguageBasedSettingsAction extends Action { diff --git a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts index 624ab8f0ef9..c80df1ab899 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts @@ -153,6 +153,7 @@ export class PreferencesEditor extends BaseEditor { this.preferencesRenderers = this._register(new PreferencesRenderers()); this._register(this.workspaceContextService.onDidChangeWorkspaceFolders(() => this.onWorkspaceFoldersChanged())); + this._register(this.workspaceContextService.onDidChangeWorkbenchState(() => this.onWorkbenchStateChanged())); } public setInput(newInput: PreferencesEditorInput, options?: EditorOptions): TPromise { @@ -223,12 +224,16 @@ export class PreferencesEditor extends BaseEditor { if (this.preferencesService.userSettingsResource.fsPath === resource.fsPath) { return ConfigurationTarget.USER; } - if (this.preferencesService.workspaceSettingsResource.fsPath === resource.fsPath) { + + const workspaceSettingsResource = this.preferencesService.workspaceSettingsResource; + if (workspaceSettingsResource && workspaceSettingsResource.fsPath === resource.fsPath) { return ConfigurationTarget.WORKSPACE; } + if (this.workspaceContextService.getWorkspaceFolder(resource)) { return ConfigurationTarget.FOLDER; } + return null; } @@ -240,7 +245,8 @@ export class PreferencesEditor extends BaseEditor { return resource; } - return this.workspaceContextService.getWorkspaceFolder(resource); + const workspaceFolder = this.workspaceContextService.getWorkspaceFolder(resource); + return workspaceFolder ? workspaceFolder.uri : null; } private onWorkspaceFoldersChanged(): void { @@ -253,6 +259,16 @@ export class PreferencesEditor extends BaseEditor { } } + private onWorkbenchStateChanged(): void { + if (this.input) { + const settingsResource = toResource((this.input).master); + const target = this.getSettingsConfigurationTarget(settingsResource); + if (target !== ConfigurationTarget.USER) { + this.switchSettings(this.preferencesService.userSettingsResource); + } + } + } + private switchSettings(resource: URI): void { // Focus the editor if this editor is not active editor if (this.editorService.getActiveEditor() !== this) { @@ -887,7 +903,7 @@ class SettingsEditorContribution extends AbstractSettingsEditorContribution impl } for (const folder of this.workspaceContextService.getWorkspace().folders) { - const folderSettingsResource = this.preferencesService.getFolderSettingsResource(folder); + const folderSettingsResource = this.preferencesService.getFolderSettingsResource(folder.uri); if (folderSettingsResource && folderSettingsResource.fsPath === model.uri.fsPath) { return true; } diff --git a/src/vs/workbench/parts/preferences/browser/preferencesService.ts b/src/vs/workbench/parts/preferences/browser/preferencesService.ts index e820df5ea27..2bda7b84eb6 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesService.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesService.ts @@ -320,10 +320,10 @@ export class PreferencesService extends Disposable implements IPreferencesServic return null; } const workspace = this.contextService.getWorkspace(); - return workspace.configuration || this.toResource(paths.join('.vscode', 'settings.json'), workspace.folders[0]); + return workspace.configuration || this.toResource(paths.join('.vscode', 'settings.json'), workspace.folders[0].uri); case ConfigurationTarget.FOLDER: const folder = this.contextService.getWorkspaceFolder(resource); - return folder ? this.toResource(paths.join('.vscode', 'settings.json'), folder) : null; + return folder ? this.toResource(paths.join('.vscode', 'settings.json'), folder.uri) : null; } return null; } diff --git a/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts b/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts index cb4392d3c8c..7226d003436 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesWidgets.ts @@ -353,10 +353,10 @@ export class SettingsTargetsWidget extends Widget { actions.push(...this.workspaceContextService.getWorkspace().folders.map((folder, index) => { return { id: 'folderSettingsTarget' + index, - label: getSettingsTargetName(ConfigurationTarget.FOLDER, folder, this.workspaceContextService), - checked: this.uri.fsPath === folder.fsPath, + label: getSettingsTargetName(ConfigurationTarget.FOLDER, folder.uri, this.workspaceContextService), + checked: this.uri.fsPath === folder.uri.fsPath, enabled: true, - run: () => this.onTargetClicked(folder) + run: () => this.onTargetClicked(folder.uri) }; })); } diff --git a/src/vs/workbench/parts/preferences/common/preferences.ts b/src/vs/workbench/parts/preferences/common/preferences.ts index ec69c7a8cb8..f272aa4b966 100644 --- a/src/vs/workbench/parts/preferences/common/preferences.ts +++ b/src/vs/workbench/parts/preferences/common/preferences.ts @@ -108,7 +108,7 @@ export function getSettingsTargetName(target: ConfigurationTarget, resource: URI return localize('workspaceSettingsTarget', "Workspace Settings"); case ConfigurationTarget.FOLDER: const folder = workspaceContextService.getWorkspaceFolder(resource); - return folder ? paths.basename(folder.fsPath) : ''; + return folder ? paths.basename(folder.uri.fsPath) : ''; } } diff --git a/src/vs/workbench/parts/quickopen/browser/commandsHandler.ts b/src/vs/workbench/parts/quickopen/browser/commandsHandler.ts index 2941517e0e9..fd7a60f1475 100644 --- a/src/vs/workbench/parts/quickopen/browser/commandsHandler.ts +++ b/src/vs/workbench/parts/quickopen/browser/commandsHandler.ts @@ -19,7 +19,7 @@ import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions'; import { Registry } from 'vs/platform/registry/common/platform'; import { QuickOpenHandler, IWorkbenchQuickOpenConfiguration } from 'vs/workbench/browser/quickopen'; -import { IEditorAction, IEditor, isCommonCodeEditor, ICommonCodeEditor } from 'vs/editor/common/editorCommon'; +import { IEditorAction, IEditor, ICommonCodeEditor } from 'vs/editor/common/editorCommon'; import { matchesWords, matchesPrefix, matchesContiguousSubString, or } from 'vs/base/common/filters'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; @@ -34,6 +34,7 @@ import { once } from 'vs/base/common/event'; import { BoundedMap, ISerializedBoundedLinkedMap } from 'vs/base/common/map'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { ResolvedKeybinding } from 'vs/base/common/keyCodes'; +import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; export const ALL_COMMANDS_PREFIX = '>'; @@ -385,6 +386,7 @@ export class CommandsHandler extends QuickOpenHandler { constructor( @IWorkbenchEditorService private editorService: IWorkbenchEditorService, + @IEditorGroupService private editorGroupService: IEditorGroupService, @IInstantiationService private instantiationService: IInstantiationService, @IKeybindingService private keybindingService: IKeybindingService, @IMenuService private menuService: IMenuService, @@ -427,10 +429,7 @@ export class CommandsHandler extends QuickOpenHandler { const editorEntries = this.editorActionsToEntries(editorActions, searchValue); // Other Actions - const menu = isCommonCodeEditor(activeEditorControl) - ? activeEditorControl.invokeWithinContext(accessor => this.menuService.createMenu(MenuId.CommandPalette, accessor.get(IContextKeyService))) - : this.menuService.createMenu(MenuId.CommandPalette, this.contextKeyService); - + const menu = this.editorGroupService.invokeWithinEditorContext(accessor => this.menuService.createMenu(MenuId.CommandPalette, accessor.get(IContextKeyService))); const menuActions = menu.getActions().reduce((r, [, actions]) => [...r, ...actions], []); const commandEntries = this.menuItemActionsToEntries(menuActions, searchValue); diff --git a/src/vs/workbench/parts/relauncher/electron-browser/relauncher.contribution.ts b/src/vs/workbench/parts/relauncher/electron-browser/relauncher.contribution.ts index f5dc4573e53..0a14579bf1a 100644 --- a/src/vs/workbench/parts/relauncher/electron-browser/relauncher.contribution.ts +++ b/src/vs/workbench/parts/relauncher/electron-browser/relauncher.contribution.ts @@ -45,7 +45,7 @@ export class SettingsChangeRelauncher implements IWorkbenchContribution { ) { const workspace = this.contextService.getWorkspace(); this.foldersCount = workspace.folders.length; - this.firstFolderPath = workspace.folders.length > 0 ? workspace.folders[0].fsPath : void 0; + this.firstFolderPath = workspace.folders.length > 0 ? workspace.folders[0].uri.fsPath : void 0; this.onConfigurationChange(configurationService.getConfiguration(), false); @@ -99,7 +99,7 @@ export class SettingsChangeRelauncher implements IWorkbenchContribution { const workspace = this.contextService.getWorkspace(); const newFoldersCount = workspace.folders.length; - const newFirstFolderPath = workspace.folders.length > 0 ? workspace.folders[0].fsPath : void 0; + const newFirstFolderPath = workspace.folders.length > 0 ? workspace.folders[0].uri.fsPath : void 0; let reloadWindow = false; let reloadExtensionHost = false; diff --git a/src/vs/workbench/parts/search/browser/openFileHandler.ts b/src/vs/workbench/parts/search/browser/openFileHandler.ts index 7fbbcfdbe2c..2e8df19f0b7 100644 --- a/src/vs/workbench/parts/search/browser/openFileHandler.ts +++ b/src/vs/workbench/parts/search/browser/openFileHandler.ts @@ -164,7 +164,7 @@ export class OpenFileHandler extends QuickOpenHandler { iconClass = 'file'; // only use a generic file icon if we are forced to use an icon and have no icon theme set otherwise } - const folderResources = this.contextService.getWorkspace().folders; + const folderResources = this.contextService.getWorkspace().folders.map(folder => folder.uri); return this.searchService.search(this.queryBuilder.file(folderResources, query)).then((complete) => { const results: QuickOpenEntry[] = []; for (let i = 0; i < complete.results.length; i++) { @@ -199,7 +199,7 @@ export class OpenFileHandler extends QuickOpenHandler { useRipgrep: this.experimentService.getExperiments().ripgrepQuickSearch }; - const folderResources = this.contextService.getWorkspace().folders; + const folderResources = this.contextService.getWorkspace().folders.map(folder => folder.uri); const query = this.queryBuilder.file(folderResources, options); return query; diff --git a/src/vs/workbench/parts/search/browser/searchViewlet.ts b/src/vs/workbench/parts/search/browser/searchViewlet.ts index e550acb92fb..a0b43cd4867 100644 --- a/src/vs/workbench/parts/search/browser/searchViewlet.ts +++ b/src/vs/workbench/parts/search/browser/searchViewlet.ts @@ -874,19 +874,19 @@ export class SearchViewlet extends Viewlet { if (resource) { if (this.contextService.getWorkbenchState() === WorkbenchState.FOLDER) { // Show relative path from the root for single-root mode - folderPath = paths.relative(workspace.folders[0].fsPath, resource.fsPath); + folderPath = paths.relative(workspace.folders[0].uri.fsPath, resource.fsPath); if (folderPath && folderPath !== '.') { folderPath = './' + folderPath; } } else { const owningFolder = this.contextService.getWorkspaceFolder(resource); if (owningFolder) { - const owningRootBasename = paths.basename(owningFolder.fsPath); + const owningRootBasename = paths.basename(owningFolder.uri.fsPath); // If this root is the only one with its basename, use a relative ./ path. If there is another, use an absolute path - const isUniqueFolder = workspace.folders.filter(root => paths.basename(root.fsPath) === owningRootBasename).length === 1; + const isUniqueFolder = workspace.folders.filter(folder => paths.basename(folder.uri.fsPath) === owningRootBasename).length === 1; if (isUniqueFolder) { - folderPath = `./${owningRootBasename}/${paths.relative(owningFolder.fsPath, resource.fsPath)}`; + folderPath = `./${owningRootBasename}/${paths.relative(owningFolder.uri.fsPath, resource.fsPath)}`; } else { folderPath = resource.fsPath; } @@ -969,7 +969,7 @@ export class SearchViewlet extends Viewlet { let query: ISearchQuery; try { - query = this.queryBuilder.text(content, folderResources, options); + query = this.queryBuilder.text(content, folderResources.map(folder => folder.uri), options); } catch (err) { onQueryValidationError(err); return; diff --git a/src/vs/workbench/parts/search/common/queryBuilder.ts b/src/vs/workbench/parts/search/common/queryBuilder.ts index 49fa52d03d5..c91ced37871 100644 --- a/src/vs/workbench/parts/search/common/queryBuilder.ts +++ b/src/vs/workbench/parts/search/common/queryBuilder.ts @@ -214,19 +214,19 @@ export class QueryBuilder { if (this.workspaceContextService.getWorkbenchState() === WorkbenchState.FOLDER) { // TODO: @Sandy Try checking workspace folders length instead. return [paths.normalize( - paths.join(this.workspaceContextService.getWorkspace().folders[0].fsPath, searchPath))]; + paths.join(this.workspaceContextService.getWorkspace().folders[0].uri.fsPath, searchPath))]; } else if (searchPath === './') { return []; // ./ or ./**/foo makes sense for single-folder but not multi-folder workspaces } else { const relativeSearchPathMatch = searchPath.match(/\.[\/\\]([^\/\\]+)([\/\\].+)?/); if (relativeSearchPathMatch) { const searchPathRoot = relativeSearchPathMatch[1]; - const matchingRoots = this.workspaceContextService.getWorkspace().folders.filter(folder => paths.basename(folder.fsPath) === searchPathRoot); + const matchingRoots = this.workspaceContextService.getWorkspace().folders.filter(folder => paths.basename(folder.uri.fsPath) === searchPathRoot); if (matchingRoots.length) { return matchingRoots.map(root => { return relativeSearchPathMatch[2] ? - paths.normalize(paths.join(root.fsPath, relativeSearchPathMatch[2])) : - root.fsPath; + paths.normalize(paths.join(root.uri.fsPath, relativeSearchPathMatch[2])) : + root.uri.fsPath; }); } else { // No root folder with name diff --git a/src/vs/workbench/parts/search/test/common/queryBuilder.test.ts b/src/vs/workbench/parts/search/test/common/queryBuilder.test.ts index 8c79981d63f..059f34fb3e3 100644 --- a/src/vs/workbench/parts/search/test/common/queryBuilder.test.ts +++ b/src/vs/workbench/parts/search/test/common/queryBuilder.test.ts @@ -11,7 +11,7 @@ import * as arrays from 'vs/base/common/arrays'; import uri from 'vs/base/common/uri'; import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { IWorkspaceContextService, Workspace } from 'vs/platform/workspace/common/workspace'; +import { IWorkspaceContextService, Workspace, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; import { QueryBuilder, ISearchPathsResult } from 'vs/workbench/parts/search/common/queryBuilder'; import { TestContextService } from 'vs/workbench/test/workbenchTestServices'; @@ -37,7 +37,7 @@ suite('QueryBuilder', () => { instantiationService.stub(IConfigurationService, mockConfigService); mockContextService = new TestContextService(); - mockWorkspace = new Workspace('workspace', 'workspace', [ROOT_1_URI]); + mockWorkspace = new Workspace('workspace', 'workspace', toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }])); mockContextService.setWorkspace(mockWorkspace); instantiationService.stub(IWorkspaceContextService, mockContextService); @@ -154,7 +154,7 @@ suite('QueryBuilder', () => { const ROOT_2_URI = getUri(ROOT_2); const ROOT_3 = fixPath('/project/root3'); const ROOT_3_URI = getUri(ROOT_3); - mockWorkspace.folders = [ROOT_1_URI, ROOT_2_URI, ROOT_3_URI]; + mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: ROOT_2_URI.fsPath }, { path: ROOT_3_URI.fsPath }]); mockWorkspace.configuration = uri.file(fixPath('/config')); mockConfigService.setUserConfiguration('search', { @@ -473,7 +473,7 @@ suite('QueryBuilder', () => { test('relative includes w/two root folders', () => { const ROOT_2 = '/project/root2'; - mockWorkspace.folders = [ROOT_1_URI, getUri(ROOT_2)]; + mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: getUri(ROOT_2).fsPath }]); mockWorkspace.configuration = uri.file(fixPath('config')); [ @@ -513,7 +513,7 @@ suite('QueryBuilder', () => { test('relative includes w/multiple ambiguous root folders', () => { const ROOT_2 = '/project/rootB'; const ROOT_3 = '/otherproject/rootB'; - mockWorkspace.folders = [ROOT_1_URI, getUri(ROOT_2), getUri(ROOT_3)]; + mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: getUri(ROOT_2).fsPath }, { path: getUri(ROOT_3).fsPath }]); mockWorkspace.configuration = uri.file(fixPath('/config')); [ diff --git a/src/vs/workbench/parts/tasks/browser/quickOpen.ts b/src/vs/workbench/parts/tasks/browser/quickOpen.ts index 32a4d495b83..c544af15583 100644 --- a/src/vs/workbench/parts/tasks/browser/quickOpen.ts +++ b/src/vs/workbench/parts/tasks/browser/quickOpen.ts @@ -4,15 +4,16 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import nls = require('vs/nls'); -import Filters = require('vs/base/common/filters'); +import * as nls from 'vs/nls'; +import * as Paths from 'vs/base/common/paths'; +import * as Filters from 'vs/base/common/filters'; import { TPromise } from 'vs/base/common/winjs.base'; import { Action, IAction } from 'vs/base/common/actions'; import { IStringDictionary } from 'vs/base/common/collections'; -import Quickopen = require('vs/workbench/browser/quickopen'); -import QuickOpen = require('vs/base/parts/quickopen/common/quickOpen'); -import Model = require('vs/base/parts/quickopen/browser/quickOpenModel'); +import * as Quickopen from 'vs/workbench/browser/quickopen'; +import * as QuickOpen from 'vs/base/parts/quickopen/common/quickOpen'; +import * as Model from 'vs/base/parts/quickopen/browser/quickOpenModel'; import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen'; import { Task, CustomTask, ContributedTask } from 'vs/workbench/parts/tasks/common/tasks'; @@ -37,7 +38,7 @@ export class TaskEntry extends Model.QuickOpenEntry { if (!workspaceFolder) { return null; } - return workspaceFolder.uri.fsPath; + return `(${Paths.basename(workspaceFolder.uri.fsPath)})`; } public getAriaLabel(): string { diff --git a/src/vs/workbench/parts/tasks/common/tasks.ts b/src/vs/workbench/parts/tasks/common/tasks.ts index 9c15a51436b..e84327faae9 100644 --- a/src/vs/workbench/parts/tasks/common/tasks.ts +++ b/src/vs/workbench/parts/tasks/common/tasks.ts @@ -7,6 +7,7 @@ import URI from 'vs/base/common/uri'; import * as Types from 'vs/base/common/types'; import { IJSONSchemaMap } from 'vs/base/common/jsonSchema'; +import * as Objects from 'vs/base/common/objects'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ProblemMatcher } from 'vs/platform/markers/common/problemMatcher'; @@ -435,6 +436,10 @@ export namespace Task { } } + export function clone(task: Task): Task { + return Objects.assign({}, task); + } + export function getTelemetryKind(task: Task): string { if (ContributedTask.is(task)) { return 'extension'; diff --git a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts index c02e59693d7..f7395cdbb27 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts +++ b/src/vs/workbench/parts/tasks/electron-browser/task.contribution.ts @@ -119,7 +119,7 @@ abstract class OpenTaskConfigurationAction extends Action { } let sideBySide = !!(event && (event.ctrlKey || event.metaKey)); let configFileCreated = false; - return this.fileService.resolveFile(this.contextService.toResource('.vscode/tasks.json')).then((success) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + return this.fileService.resolveFile(this.contextService.toResource('.vscode/tasks.json', this.contextService.getWorkspace().folders[0])).then((success) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) return success; }, (err: any) => { @@ -170,7 +170,7 @@ abstract class OpenTaskConfigurationAction extends Action { content = content.replace(/(\n)(\t+)/g, (_, s1, s2) => s1 + strings.repeat(' ', s2.length * editorConfig.editor.tabSize)); } configFileCreated = true; - return this.fileService.createFile(this.contextService.toResource('.vscode/tasks.json'), content).then((result) => { + return this.fileService.createFile(this.contextService.toResource('.vscode/tasks.json', this.contextService.getWorkspace().folders[0]), content).then((result) => { this.telemetryService.publicLog(TaskService.TemplateTelemetryEventName, { templateId: selection.id, autoDetect: selection.autoDetect @@ -1019,7 +1019,7 @@ class TaskService extends EventEmitter implements ITaskService { this.customize(task, { problemMatcher: [] }, true); return task; } else if (selected.matcher) { - let newTask = Objects.deepClone(task); + let newTask = Task.clone(task); let matcherReference = `$${selected.matcher.name}`; newTask.problemMatchers = [matcherReference]; this.customize(task, { problemMatcher: [matcherReference] }, true); @@ -1123,7 +1123,7 @@ class TaskService extends EventEmitter implements ITaskService { if (editorConfig.editor.insertSpaces) { content = content.replace(/(\n)(\t+)/g, (_, s1, s2) => s1 + strings.repeat(' ', s2.length * editorConfig.editor.tabSize)); } - promise = this.fileService.createFile(this.contextService.toResource('.vscode/tasks.json'), content).then(() => { }); // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + promise = this.fileService.createFile(this.contextService.toResource('.vscode/tasks.json', this.contextService.getWorkspace().folders[0]), content).then(() => { }); // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) } else { let value: IConfigurationValue = { key: undefined, value: undefined }; // We have a global task configuration @@ -1162,7 +1162,7 @@ class TaskService extends EventEmitter implements ITaskService { }; this.telemetryService.publicLog(TaskService.CustomizationTelemetryEventName, event); if (openConfig) { - let resource = this.contextService.toResource('.vscode/tasks.json'); // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + let resource = this.contextService.toResource('.vscode/tasks.json', this.contextService.getWorkspace().folders[0]); // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) this.editorService.openEditor({ resource: resource, options: { @@ -1186,7 +1186,7 @@ class TaskService extends EventEmitter implements ITaskService { public openConfig(task: CustomTask): TPromise { // @ToDo need to adopt since this is not working anymore - let resource = this.contextService.toResource(task._source.config.file); + let resource = this.contextService.toResource(task._source.config.file, this.contextService.getWorkspace().folders[0]); return this.editorService.openEditor({ resource: resource, options: { @@ -1619,20 +1619,20 @@ class TaskService extends EventEmitter implements ITaskService { let schemaVersion = JsonSchemaVersion.V2_0_0; if (this.contextService.getWorkbenchState() === WorkbenchState.FOLDER) { - let workspaceFolder: WorkspaceFolder = { uri: this.contextService.getWorkspace().folders[0] }; + let workspaceFolder: WorkspaceFolder = { uri: this.contextService.getWorkspace().folders[0].uri }; workspaceFolders.push(workspaceFolder); executionEngine = this.computeExecutionEngine(workspaceFolder); schemaVersion = this.computeJsonSchemaVersion(workspaceFolder); } else if (this.contextService.getWorkbenchState() === WorkbenchState.WORKSPACE) { for (let folder of this.contextService.getWorkspace().folders) { - let workspaceFolder = { uri: folder }; + let workspaceFolder = { uri: folder.uri }; if (schemaVersion === this.computeJsonSchemaVersion(workspaceFolder)) { workspaceFolders.push(workspaceFolder); } else { this._outputChannel.append(nls.localize( 'taskService.ignoreingFolder', 'Ignoring task configurations for workspace folder {0}. Multi root folder support requires that all folders use task version 2.0.', - folder.fsPath)); + folder.uri.fsPath)); } } } diff --git a/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts b/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts index cf38b3bcb18..8c4174161c5 100644 --- a/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts +++ b/src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts @@ -285,7 +285,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { let promise: TPromise = undefined; if (task.isBackground) { promise = new TPromise((resolve, reject) => { - const problemMatchers = this.resolveMatchers(task.problemMatchers); + const problemMatchers = this.resolveMatchers(task, task.problemMatchers); let watchingProblemMatcher = new WatchingProblemCollector(problemMatchers, this.markerService, this.modelService); let toUnbind: IDisposable[] = []; let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.Watching, group: task.group, __task: task }; @@ -354,7 +354,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { let event: TaskEvent = { taskId: task._id, taskName: task.name, type: TaskType.SingleRun, group: task.group, __task: task }; this.emit(TaskSystemEvents.Active, event); let decoder = new TerminalDecoder(); - let problemMatchers = this.resolveMatchers(task.problemMatchers); + let problemMatchers = this.resolveMatchers(task, task.problemMatchers); let startStopProblemMatcher = new StartStopProblemCollector(problemMatchers, this.markerService, this.modelService); const registeredLinkMatchers = this.registerLinkMatchers(terminal, problemMatchers); const onData = terminal.onData((data: string) => { @@ -428,7 +428,7 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { } private createTerminal(task: CustomTask | ContributedTask): [ITerminalInstance, string] { - let options = this.resolveOptions(task.command.options); + let options = this.resolveOptions(task, task.command.options); let { command, args } = this.resolveCommandAndArgs(task); let terminalName = nls.localize('TerminalTaskSystem.terminalName', 'Task - {0}', task.name); let waitOnExit: boolean | string = false; @@ -566,8 +566,8 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { private resolveCommandAndArgs(task: CustomTask | ContributedTask): { command: string, args: string[] } { // First we need to use the command args: let args: string[] = task.command.args ? task.command.args.slice() : []; - args = this.resolveVariables(args); - let command: string = this.resolveVariable(task.command.name); + args = this.resolveVariables(task, args); + let command: string = this.resolveVariable(task, task.command.name); return { command, args }; } @@ -610,11 +610,11 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { return command; } - private resolveVariables(value: string[]): string[] { - return value.map(s => this.resolveVariable(s)); + private resolveVariables(task: CustomTask | ContributedTask, value: string[]): string[] { + return value.map(s => this.resolveVariable(task, s)); } - private resolveMatchers(values: (string | ProblemMatcher)[]): ProblemMatcher[] { + private resolveMatchers(task: CustomTask | ContributedTask, values: (string | ProblemMatcher)[]): ProblemMatcher[] { if (values === void 0 || values === null || values.length === 0) { return []; } @@ -638,31 +638,30 @@ export class TerminalTaskSystem extends EventEmitter implements ITaskSystem { result.push(matcher); } else { let copy = Objects.clone(matcher); - copy.filePrefix = this.resolveVariable(copy.filePrefix); + copy.filePrefix = this.resolveVariable(task, copy.filePrefix); result.push(copy); } }); return result; } - private resolveVariable(value: string): string { - // TODO@Dirk adopt new configuration resolver service https://github.com/Microsoft/vscode/issues/31365 - return this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0], value); + private resolveVariable(task: CustomTask | ContributedTask, value: string): string { + return this.configurationResolverService.resolve(Task.getWorkspaceFolder(task).uri, value); } - private resolveOptions(options: CommandOptions): CommandOptions { + private resolveOptions(task: CustomTask | ContributedTask, options: CommandOptions): CommandOptions { if (options === void 0 || options === null) { - return { cwd: this.resolveVariable('${cwd}') }; + return { cwd: this.resolveVariable(task, '${workspaceFolder}') }; } let result: CommandOptions = Types.isString(options.cwd) - ? { cwd: this.resolveVariable(options.cwd) } - : { cwd: this.resolveVariable('${cwd}') }; + ? { cwd: this.resolveVariable(task, options.cwd) } + : { cwd: this.resolveVariable(task, '${workspaceFolder}') }; if (options.env) { result.env = Object.create(null); Object.keys(options.env).forEach((key) => { let value: any = options.env[key]; if (Types.isString(value)) { - result.env[key] = this.resolveVariable(value); + result.env[key] = this.resolveVariable(task, value); } else { result.env[key] = value.toString(); } diff --git a/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts b/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts index e0e81b063ff..21d2da53fbc 100644 --- a/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts +++ b/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts @@ -156,7 +156,7 @@ export class ProcessRunnerDetector { this.taskConfiguration = config; this._stderr = []; this._stdout = []; - this._cwd = this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY ? Paths.normalize(this.contextService.getWorkspace().folders[0].fsPath, true) : ''; + this._cwd = this.contextService.getWorkbenchState() !== WorkbenchState.EMPTY ? Paths.normalize(this.contextService.getWorkspace().folders[0].uri.fsPath, true) : ''; } public get stderr(): string[] { @@ -175,7 +175,7 @@ export class ProcessRunnerDetector { let isShellCommand = !!this.taskConfiguration.isShellCommand; // TODO@Dirk adopt new configuration resolver service https://github.com/Microsoft/vscode/issues/31365 return this.runDetection( - new LineProcess(this.taskConfiguration.command, this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0], args), isShellCommand, options), + new LineProcess(this.taskConfiguration.command, this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0].uri, args), isShellCommand, options), this.taskConfiguration.command, isShellCommand, config.matcher, ProcessRunnerDetector.DefaultProblemMatchers, list); } else { if (detectSpecific) { @@ -219,16 +219,16 @@ export class ProcessRunnerDetector { // TODO@Dirk adopt new configuration resolver service https://github.com/Microsoft/vscode/issues/31365 let result = Objects.clone(options); if (result.cwd) { - result.cwd = this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0], result.cwd); + result.cwd = this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0].uri, result.cwd); } if (result.env) { - result.env = this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0], result.env); + result.env = this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0].uri, result.env); } return result; } private tryDetectGulp(list: boolean): TPromise { - return this.fileService.resolveFile(this.contextService.toResource('gulpfile.js')).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + return this.fileService.resolveFile(this.contextService.toResource('gulpfile.js', this.contextService.getWorkspace().folders[0])).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) let config = ProcessRunnerDetector.detectorConfig('gulp'); let process = new LineProcess('gulp', [config.arg, '--no-color'], true, { cwd: this._cwd }); return this.runDetection(process, 'gulp', true, config.matcher, ProcessRunnerDetector.DefaultProblemMatchers, list); @@ -238,7 +238,7 @@ export class ProcessRunnerDetector { } private tryDetectGrunt(list: boolean): TPromise { - return this.fileService.resolveFile(this.contextService.toResource('Gruntfile.js')).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + return this.fileService.resolveFile(this.contextService.toResource('Gruntfile.js', this.contextService.getWorkspace().folders[0])).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) let config = ProcessRunnerDetector.detectorConfig('grunt'); let process = new LineProcess('grunt', [config.arg, '--no-color'], true, { cwd: this._cwd }); return this.runDetection(process, 'grunt', true, config.matcher, ProcessRunnerDetector.DefaultProblemMatchers, list); @@ -253,10 +253,10 @@ export class ProcessRunnerDetector { let process = new LineProcess('jake', [config.arg], true, { cwd: this._cwd }); return this.runDetection(process, 'jake', true, config.matcher, ProcessRunnerDetector.DefaultProblemMatchers, list); }; - return this.fileService.resolveFile(this.contextService.toResource('Jakefile')).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + return this.fileService.resolveFile(this.contextService.toResource('Jakefile', this.contextService.getWorkspace().folders[0])).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) return run(); }, (err: any) => { - return this.fileService.resolveFile(this.contextService.toResource('Jakefile.js')).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) + return this.fileService.resolveFile(this.contextService.toResource('Jakefile.js', this.contextService.getWorkspace().folders[0])).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) return run(); }, (err: any) => { return null; diff --git a/src/vs/workbench/parts/tasks/node/processTaskSystem.ts b/src/vs/workbench/parts/tasks/node/processTaskSystem.ts index e0006516a31..bfb82caf634 100644 --- a/src/vs/workbench/parts/tasks/node/processTaskSystem.ts +++ b/src/vs/workbench/parts/tasks/node/processTaskSystem.ts @@ -382,7 +382,7 @@ export class ProcessTaskSystem extends EventEmitter implements ITaskSystem { private resolveVariable(value: string): string { // TODO@Dirk adopt new configuration resolver service https://github.com/Microsoft/vscode/issues/31365 - return this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0], value); + return this.configurationResolverService.resolve(this.contextService.getWorkspace().folders[0].uri, value); } public log(value: string): void { diff --git a/src/vs/workbench/parts/tasks/node/taskConfiguration.ts b/src/vs/workbench/parts/tasks/node/taskConfiguration.ts index 9bd43c3080f..5cd4a0cd146 100644 --- a/src/vs/workbench/parts/tasks/node/taskConfiguration.ts +++ b/src/vs/workbench/parts/tasks/node/taskConfiguration.ts @@ -617,7 +617,7 @@ namespace ShellConfiguration { namespace CommandOptions { const properties: MetaData[] = [{ property: 'cwd' }, { property: 'env' }, { property: 'shell', type: ShellConfiguration }]; - const defaults: CommandOptions = { cwd: '${workspaceRoot}' }; + const defaults: CommandOptions = { cwd: '${workspaceFolder}' }; export function from(this: void, options: CommandOptions, context: ParseContext): Tasks.CommandOptions { let result: Tasks.CommandOptions = {}; diff --git a/src/vs/workbench/parts/tasks/test/electron-browser/configuration.test.ts b/src/vs/workbench/parts/tasks/test/electron-browser/configuration.test.ts index c9601239fb1..faa2a392a7c 100644 --- a/src/vs/workbench/parts/tasks/test/electron-browser/configuration.test.ts +++ b/src/vs/workbench/parts/tasks/test/electron-browser/configuration.test.ts @@ -122,7 +122,7 @@ class CommandConfigurationBuilder { runtime: Tasks.RuntimeType.Process, args: [], options: { - cwd: '${workspaceRoot}' + cwd: '${workspaceFolder}' }, presentation: this.presentationBuilder.result, suppressTaskName: false @@ -243,7 +243,7 @@ class ProblemMatcherBuilder { applyTo: ApplyToKind.allDocuments, severity: undefined, fileLocation: FileLocationKind.Relative, - filePrefix: '${cwd}', + filePrefix: '${workspaceFolder}', pattern: undefined }; } @@ -726,7 +726,7 @@ suite('Tasks version 0.1.0', () => { task('tsc', 'tsc'). group(Tasks.TaskGroup.Build). command().suppressTaskName(true). - options({ cwd: '${workspaceRoot}', env: { key: 'value' } }); + options({ cwd: '${workspaceFolder}', env: { key: 'value' } }); testConfiguration( { version: '0.1.0', @@ -1589,7 +1589,7 @@ suite('Bugs / regression tests', () => { windows: { command: 'powershell', options: { - cwd: '${workspaceRoot}' + cwd: '${workspaceFolder}' }, tasks: [ { @@ -1612,7 +1612,7 @@ suite('Bugs / regression tests', () => { osx: { command: '/bin/bash', options: { - cwd: '${workspaceRoot}' + cwd: '${workspaceFolder}' }, tasks: [ { @@ -1633,14 +1633,14 @@ suite('Bugs / regression tests', () => { builder.task('composeForDebug', 'powershell'). command().suppressTaskName(true). args(['-ExecutionPolicy', 'RemoteSigned', '.\\dockerTask.ps1', '-ComposeForDebug', '-Environment', 'debug']). - options({ cwd: '${workspaceRoot}' }). + options({ cwd: '${workspaceFolder}' }). presentation().echo(true).reveal(Tasks.RevealKind.Always); testConfiguration(external, builder); } else if (Platform.isMacintosh) { builder.task('composeForDebug', '/bin/bash'). command().suppressTaskName(true). args(['-c', './dockerTask.sh composeForDebug debug']). - options({ cwd: '${workspaceRoot}' }). + options({ cwd: '${workspaceFolder}' }). presentation().reveal(Tasks.RevealKind.Always); testConfiguration(external, builder); } diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts index dd9d79a8c17..0fdc109ec46 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts @@ -1004,7 +1004,7 @@ registerThemingParticipant((theme: ITheme, collector: ICssStyleCollector) => { collector.addRule(` .monaco-workbench .panel.integrated-terminal .xterm.focus .xterm-viewport, .monaco-workbench .panel.integrated-terminal .xterm:focus .xterm-viewport, - .monaco-workbench .panel.integrated-terminal .xterm:hover .xterm-viewport { background-color: ${scrollbarSliderBackgroundColor}; }` + .monaco-workbench .panel.integrated-terminal .xterm:hover .xterm-viewport { background-color: ${scrollbarSliderBackgroundColor} !important; }` ); } diff --git a/src/vs/workbench/services/backup/test/node/backupFileService.test.ts b/src/vs/workbench/services/backup/test/node/backupFileService.test.ts index 4fb7de8ca69..65a97a110a8 100644 --- a/src/vs/workbench/services/backup/test/node/backupFileService.test.ts +++ b/src/vs/workbench/services/backup/test/node/backupFileService.test.ts @@ -20,7 +20,7 @@ import { EnvironmentService } from 'vs/platform/environment/node/environmentServ import { parseArgs } from 'vs/platform/environment/node/argv'; import { RawTextSource } from 'vs/editor/common/model/textSource'; import { TestContextService, TestTextResourceConfigurationService } from 'vs/workbench/test/workbenchTestServices'; -import { Workspace } from 'vs/platform/workspace/common/workspace'; +import { Workspace, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; class TestEnvironmentService extends EnvironmentService { @@ -49,7 +49,7 @@ const untitledBackupPath = path.join(workspaceBackupPath, 'untitled', crypto.cre class TestBackupFileService extends BackupFileService { constructor(workspace: Uri, backupHome: string, workspacesJsonPath: string) { - const fileService = new FileService(new TestContextService(new Workspace(workspace.fsPath, workspace.fsPath, [workspace])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true }); + const fileService = new FileService(new TestContextService(new Workspace(workspace.fsPath, workspace.fsPath, toWorkspaceFolders([{ path: workspace.fsPath }]))), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true }); super(workspaceBackupPath, fileService); } diff --git a/src/vs/workbench/services/configuration/node/configuration.ts b/src/vs/workbench/services/configuration/node/configuration.ts index 00d8636d493..ded7484b703 100644 --- a/src/vs/workbench/services/configuration/node/configuration.ts +++ b/src/vs/workbench/services/configuration/node/configuration.ts @@ -9,7 +9,7 @@ import * as paths from 'vs/base/common/paths'; import { TPromise } from 'vs/base/common/winjs.base'; import Event, { Emitter } from 'vs/base/common/event'; import { StrictResourceMap } from 'vs/base/common/map'; -import { equals, coalesce } from 'vs/base/common/arrays'; +import { equals } from 'vs/base/common/arrays'; import * as objects from 'vs/base/common/objects'; import * as errors from 'vs/base/common/errors'; import * as collections from 'vs/base/common/collections'; @@ -18,7 +18,7 @@ import { RunOnceScheduler } from 'vs/base/common/async'; import { readFile, stat } from 'vs/base/node/pfs'; import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; import * as extfs from 'vs/base/node/extfs'; -import { IWorkspaceContextService, IWorkspace, Workspace, WorkbenchState } from 'vs/platform/workspace/common/workspace'; +import { IWorkspaceContextService, IWorkspace, Workspace, WorkbenchState, WorkspaceFolder, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; import { FileChangeType, FileChangesEvent } from 'vs/platform/files/common/files'; import { isLinux } from 'vs/base/common/platform'; import { ConfigWatcher } from 'vs/base/node/config'; @@ -33,7 +33,7 @@ import { Registry } from 'vs/platform/registry/common/platform'; import { ExtensionsRegistry, ExtensionMessageCollector } from 'vs/platform/extensions/common/extensionsRegistry'; import { IConfigurationNode, IConfigurationRegistry, Extensions, editorConfigurationSchemaId, IDefaultConfigurationExtension, validateProperty, ConfigurationScope, schemaId } from 'vs/platform/configuration/common/configurationRegistry'; import { createHash } from 'crypto'; -import { getWorkspaceLabel, IWorkspacesService, IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, IStoredWorkspaceFolder, isWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; +import { getWorkspaceLabel, IWorkspacesService, IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, isSingleFolderWorkspaceIdentifier, isWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; import { IWindowConfiguration } from 'vs/platform/windows/common/windows'; import { IJSONSchema } from 'vs/base/common/jsonSchema'; @@ -205,6 +205,9 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat protected readonly _onDidChangeWorkspaceName: Emitter = this._register(new Emitter()); public readonly onDidChangeWorkspaceName: Event = this._onDidChangeWorkspaceName.event; + protected readonly _onDidChangeWorkbenchState: Emitter = this._register(new Emitter()); + public readonly onDidChangeWorkbenchState: Event = this._onDidChangeWorkbenchState.event; + constructor() { super(); this._configuration = new Configuration(new BaseConfiguration(new ConfigurationModel(), new ConfigurationModel()), new ConfigurationModel(), new StrictResourceMap>(), this.workspace); @@ -229,7 +232,7 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat return WorkbenchState.EMPTY; } - public getWorkspaceFolder(resource: URI): URI { + public getWorkspaceFolder(resource: URI): WorkspaceFolder { return this.workspace.getFolder(resource); } @@ -240,18 +243,15 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat public isCurrentWorkspace(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): boolean { switch (this.getWorkbenchState()) { case WorkbenchState.FOLDER: - return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && this.pathEquals(this.workspace.folders[0].fsPath, workspaceIdentifier); + return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && this.pathEquals(this.workspace.folders[0].uri.fsPath, workspaceIdentifier); case WorkbenchState.WORKSPACE: return isWorkspaceIdentifier(workspaceIdentifier) && this.workspace.id === workspaceIdentifier.id; } return false; } - public toResource(workspaceRelativePath: string): URI { - if (this.workspace.folders.length) { - return URI.file(paths.join(this.workspace.folders[0].fsPath, workspaceRelativePath)); - } - return null; + public toResource(workspaceRelativePath: string, workspaceFolder: WorkspaceFolder): URI { + return URI.file(paths.join(workspaceFolder.uri.fsPath, workspaceRelativePath)); } public initialize(trigger: boolean = true): TPromise { @@ -388,7 +388,7 @@ export class WorkspaceServiceImpl extends WorkspaceService { } public getUnsupportedWorkspaceKeys(): string[] { - return this.getWorkbenchState() === WorkbenchState.FOLDER ? this._configuration.getFolderConfigurationModel(this.workspace.folders[0]).workspaceSettingsConfig.unsupportedKeys : []; + return this.getWorkbenchState() === WorkbenchState.FOLDER ? this._configuration.getFolderConfigurationModel(this.workspace.folders[0].uri).workspaceSettingsConfig.unsupportedKeys : []; } public initialize(trigger: boolean = true): TPromise { @@ -419,7 +419,7 @@ export class WorkspaceServiceImpl extends WorkspaceService { } public handleWorkspaceFileEvents(event: FileChangesEvent): void { - TPromise.join(this.workspace.folders.map(folder => this.cachedFolderConfigs.get(folder).handleWorkspaceFileEvents(event))) // handle file event for each folder + TPromise.join(this.workspace.folders.map(folder => this.cachedFolderConfigs.get(folder.uri).handleWorkspaceFileEvents(event))) // handle file event for each folder .then(folderConfigurations => folderConfigurations.map((configuration, index) => ({ configuration, folder: this.workspace.folders[index] })) .filter(folderConfiguration => !!folderConfiguration.configuration) // Filter folders which are not impacted by events @@ -470,8 +470,14 @@ export class WorkspaceServiceImpl extends WorkspaceService { return this.workspaceConfiguration.load(this.workspaceConfigPath) .then(() => { const workspaceConfigurationModel = this.workspaceConfiguration.workspaceConfigurationModel; - const workspaceFolders = this.parseWorkspaceFolders(workspaceConfigurationModel.folders); - workspaceFolders.push(URI.parse('ftp://waws-prod-db3-029.ftp.azurewebsites.windows.net/')); + + const workspaceFolders = toWorkspaceFolders(workspaceConfigurationModel.folders, URI.file(paths.dirname(this.workspaceConfigPath.fsPath))); + workspaceFolders.push({ + uri: URI.parse('ftp://waws-prod-db3-029.ftp.azurewebsites.windows.net/'), + name: 'FTP Sample', + index: workspaceFolders.length, + raw: null + }); if (!workspaceFolders.length) { return TPromise.wrapError(new Error('Invalid workspace configuraton file ' + this.workspaceConfigPath)); } @@ -483,21 +489,6 @@ export class WorkspaceServiceImpl extends WorkspaceService { }); } - private parseWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[]): URI[] { - return coalesce(configuredFolders.map(configuredFolder => { - const path = configuredFolder.path; - if (!path) { - return void 0; - } - - if (paths.isAbsolute(path)) { - return URI.file(path); - } - - return URI.file(paths.join(paths.dirname(this.workspaceConfigPath.fsPath), path)); - })); - } - private registerWorkspaceConfigSchema(): void { const contributionRegistry = Registry.as(JSONExtensions.JSONContribution); if (!contributionRegistry.getSchemaContributions().schemas['vscode://schemas/workspaceConfig']) { @@ -545,20 +536,20 @@ export class WorkspaceServiceImpl extends WorkspaceService { const ctime = isLinux ? workspaceStat.ino : workspaceStat.birthtime.getTime(); // On Linux, birthtime is ctime, so we cannot use it! We use the ino instead! const id = createHash('md5').update(this.folderPath.fsPath).update(ctime ? String(ctime) : '').digest('hex'); const folder = URI.file(this.folderPath.fsPath); - this.workspace = new Workspace(id, paths.basename(this.folderPath.fsPath), [folder], null, ctime); + this.workspace = new Workspace(id, paths.basename(this.folderPath.fsPath), toWorkspaceFolders([{ path: folder.fsPath }]), null, ctime); return TPromise.as(null); }); } - private initCachesForFolders(folders: URI[]): void { + private initCachesForFolders(folders: WorkspaceFolder[]): void { for (const folder of folders) { - this.cachedFolderConfigs.set(folder, this._register(new FolderConfiguration(folder, this.workspaceSettingsRootFolder, this.getWorkbenchState() === WorkbenchState.WORKSPACE ? ConfigurationScope.RESOURCE : ConfigurationScope.WINDOW))); + this.cachedFolderConfigs.set(folder.uri, this._register(new FolderConfiguration(folder.uri, this.workspaceSettingsRootFolder, this.getWorkbenchState() === WorkbenchState.WORKSPACE ? ConfigurationScope.RESOURCE : ConfigurationScope.WINDOW))); this.updateFolderConfiguration(folder, new FolderConfigurationModel(new FolderSettingsModel(null), [], ConfigurationScope.RESOURCE), false); } } - protected updateConfiguration(folders: URI[] = this.workspace.folders): TPromise { - return TPromise.join([...folders.map(folder => this.cachedFolderConfigs.get(folder).loadConfiguration() + protected updateConfiguration(folders: WorkspaceFolder[] = this.workspace.folders): TPromise { + return TPromise.join([...folders.map(folder => this.cachedFolderConfigs.get(folder.uri).loadConfiguration() .then(configuration => this.updateFolderConfiguration(folder, configuration, true)))]) .then(changed => changed.reduce((result, value) => result || value, false)) .then(changed => this.updateWorkspaceConfiguration(true) || changed); @@ -566,7 +557,7 @@ export class WorkspaceServiceImpl extends WorkspaceService { private onBaseConfigurationChanged({ source, sourceConfig }: IConfigurationServiceEvent): void { if (source === ConfigurationSource.Default) { - this.workspace.folders.forEach(folder => this._configuration.getFolderConfigurationModel(folder).update()); + this.workspace.folders.forEach(folder => this._configuration.getFolderConfigurationModel(folder.uri).update()); } if (this._configuration.updateBaseConfiguration(this.baseConfigurationService.configuration())) { this._onDidUpdateConfiguration.fire({ source, sourceConfig }); @@ -574,8 +565,8 @@ export class WorkspaceServiceImpl extends WorkspaceService { } private onWorkspaceConfigurationChanged(): void { - let configuredFolders = this.parseWorkspaceFolders(this.workspaceConfiguration.workspaceConfigurationModel.folders); - const foldersChanged = !equals(this.workspace.folders, configuredFolders, (r1, r2) => r1.fsPath === r2.fsPath); + let configuredFolders = toWorkspaceFolders(this.workspaceConfiguration.workspaceConfigurationModel.folders, URI.file(paths.dirname(this.workspaceConfigPath.fsPath))); + const foldersChanged = !equals(this.workspace.folders, configuredFolders, (folder1, folder2) => folder1.uri.fsPath === folder2.uri.fsPath); if (foldersChanged) { // TODO@Sandeep be smarter here about detecting changes this.workspace.folders = configuredFolders; this.onFoldersChanged() @@ -598,7 +589,7 @@ export class WorkspaceServiceImpl extends WorkspaceService { // Remove the configurations of deleted folders for (const key of this.cachedFolderConfigs.keys()) { - if (!this.workspace.folders.filter(folder => folder.toString() === key.toString())[0]) { + if (!this.workspace.folders.filter(folder => folder.uri.toString() === key.toString())[0]) { this.cachedFolderConfigs.delete(key); if (this._configuration.deleteFolderConfiguration(key)) { configurationChangedOnRemoval = true; @@ -607,7 +598,7 @@ export class WorkspaceServiceImpl extends WorkspaceService { } // Initialize the newly added folders - const toInitialize = this.workspace.folders.filter(folder => !this.cachedFolderConfigs.has(folder)); + const toInitialize = this.workspace.folders.filter(folder => !this.cachedFolderConfigs.has(folder.uri)); if (toInitialize.length) { this.initCachesForFolders(toInitialize); return this.updateConfiguration(toInitialize) @@ -619,8 +610,8 @@ export class WorkspaceServiceImpl extends WorkspaceService { return TPromise.as(false); } - private updateFolderConfiguration(folder: URI, folderConfiguration: FolderConfigurationModel, compare: boolean): boolean { - let configurationChanged = this._configuration.updateFolderConfiguration(folder, folderConfiguration, compare); + private updateFolderConfiguration(folder: WorkspaceFolder, folderConfiguration: FolderConfigurationModel, compare: boolean): boolean { + let configurationChanged = this._configuration.updateFolderConfiguration(folder.uri, folderConfiguration, compare); if (this.getWorkbenchState() === WorkbenchState.FOLDER) { // Workspace configuration changed configurationChanged = this.updateWorkspaceConfiguration(compare) || configurationChanged; @@ -629,12 +620,12 @@ export class WorkspaceServiceImpl extends WorkspaceService { } private updateWorkspaceConfiguration(compare: boolean): boolean { - const workspaceConfiguration = this.getWorkbenchState() === WorkbenchState.WORKSPACE ? this.workspaceConfiguration.workspaceConfigurationModel.workspaceConfiguration : this._configuration.getFolderConfigurationModel(this.workspace.folders[0]); + const workspaceConfiguration = this.getWorkbenchState() === WorkbenchState.WORKSPACE ? this.workspaceConfiguration.workspaceConfigurationModel.workspaceConfiguration : this._configuration.getFolderConfigurationModel(this.workspace.folders[0].uri); return this._configuration.updateWorkspaceConfiguration(workspaceConfiguration, compare); } protected triggerConfigurationChange(): void { - this._onDidUpdateConfiguration.fire({ source: ConfigurationSource.Workspace, sourceConfig: this._configuration.getFolderConfigurationModel(this.workspace.folders[0]).contents }); + this._onDidUpdateConfiguration.fire({ source: ConfigurationSource.Workspace, sourceConfig: this._configuration.getFolderConfigurationModel(this.workspace.folders[0].uri).contents }); } } @@ -910,7 +901,7 @@ export class Configuration extends BaseConfiguration { } deleteFolderConfiguration(folder: URI): boolean { - if (this._workspace && this._workspace.folders.length > 0 && this._workspace.folders[0].fsPath === folder.fsPath) { + if (this._workspace && this._workspace.folders.length > 0 && this._workspace.folders[0].uri.fsPath === folder.fsPath) { // Do not remove workspace configuration return false; } diff --git a/src/vs/workbench/services/configuration/node/configurationEditingService.ts b/src/vs/workbench/services/configuration/node/configurationEditingService.ts index 113aeeacda5..e423e2abc49 100644 --- a/src/vs/workbench/services/configuration/node/configurationEditingService.ts +++ b/src/vs/workbench/services/configuration/node/configurationEditingService.ts @@ -333,14 +333,14 @@ export class ConfigurationEditingService implements IConfigurationEditingService const workspace = this.contextService.getWorkspace(); if (target === ConfigurationTarget.WORKSPACE) { - return workspace.configuration || this.toResource(relativePath, workspace.folders[0]); + return workspace.configuration || this.toResource(relativePath, workspace.folders[0].uri); } if (target === ConfigurationTarget.FOLDER && this.contextService.getWorkbenchState() === WorkbenchState.WORKSPACE) { if (resource) { const folder = this.contextService.getWorkspaceFolder(resource); if (folder) { - return this.toResource(relativePath, folder); + return this.toResource(relativePath, folder.uri); } } } diff --git a/src/vs/workbench/services/configuration/test/node/configuration.test.ts b/src/vs/workbench/services/configuration/test/node/configuration.test.ts index 1ee691bae5f..e574573a3a5 100644 --- a/src/vs/workbench/services/configuration/test/node/configuration.test.ts +++ b/src/vs/workbench/services/configuration/test/node/configuration.test.ts @@ -21,6 +21,7 @@ import uuid = require('vs/base/common/uuid'); import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry'; import { WorkspaceServiceImpl, WorkspaceService } from 'vs/workbench/services/configuration/node/configuration'; import { FileChangeType, FileChangesEvent } from 'vs/platform/files/common/files'; +import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; class SettingsTestEnvironmentService extends EnvironmentService { @@ -31,26 +32,103 @@ class SettingsTestEnvironmentService extends EnvironmentService { get appSettingsPath(): string { return this.customAppSettingsHome; } } -suite('WorkspaceConfigurationService - Node', () => { +function createWorkspace(callback: (workspaceDir: string, globalSettingsFile: string, cleanUp: (callback: () => void) => void) => void): void { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const workspaceDir = path.join(parentDir, 'workspaceconfig', id); + const workspaceSettingsDir = path.join(workspaceDir, '.vscode'); + const globalSettingsFile = path.join(workspaceDir, 'config.json'); - function createWorkspace(callback: (workspaceDir: string, globalSettingsFile: string, cleanUp: (callback: () => void) => void) => void): void { - const id = uuid.generateUuid(); - const parentDir = path.join(os.tmpdir(), 'vsctests', id); - const workspaceDir = path.join(parentDir, 'workspaceconfig', id); - const workspaceSettingsDir = path.join(workspaceDir, '.vscode'); - const globalSettingsFile = path.join(workspaceDir, 'config.json'); + extfs.mkdirp(workspaceSettingsDir, 493, (error) => { + callback(workspaceDir, globalSettingsFile, (callback) => extfs.del(parentDir, os.tmpdir(), () => { }, callback)); + }); +} +function setUpFolder(folderName: string): TPromise<{ parentDir: string, workspaceDir: string, workspaceService: WorkspaceService }> { + const id = uuid.generateUuid(); + const parentDir = path.join(os.tmpdir(), 'vsctests', id); + const workspaceDir = path.join(parentDir, folderName); + const workspaceSettingsDir = path.join(workspaceDir, '.vscode'); + const globalSettingsFile = path.join(workspaceDir, 'config.json'); + + return new TPromise((c, e) => { extfs.mkdirp(workspaceSettingsDir, 493, (error) => { - callback(workspaceDir, globalSettingsFile, (callback) => extfs.del(parentDir, os.tmpdir(), () => { }, callback)); + if (error) { + e(error); + return null; + } + const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile); + const workspaceService = new WorkspaceServiceImpl(workspaceDir, environmentService, null); + workspaceService.initialize().then(() => c({ parentDir, workspaceDir, workspaceService })); }); - } + }); +} - function createService(workspaceDir: string, globalSettingsFile: string): TPromise { - const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile); - const service = new WorkspaceServiceImpl(workspaceDir, environmentService, null); +function createService(workspaceDir: string, globalSettingsFile: string): TPromise { + const environmentService = new SettingsTestEnvironmentService(parseArgs(process.argv), process.execPath, globalSettingsFile); + const service = new WorkspaceServiceImpl(workspaceDir, environmentService, null); - return service.initialize().then(() => service); - } + return service.initialize().then(() => service); +} + +suite('WorkspaceContextService - Folder', () => { + + let workspaceName = `testWorkspace${uuid.generateUuid}`, parentResource: string, workspaceResource: string, workspaceContextService: IWorkspaceContextService; + + setup(() => { + return setUpFolder(workspaceName) + .then(({ parentDir, workspaceDir, workspaceService }) => { + parentResource = parentDir; + workspaceResource = workspaceDir; + workspaceContextService = workspaceService; + }); + }); + + teardown(done => { + if (workspaceContextService) { + (workspaceContextService).dispose(); + } + if (parentResource) { + extfs.del(parentResource, os.tmpdir(), () => { }, done); + } + }); + + test('getWorkspace()', () => { + const actual = workspaceContextService.getWorkspace(); + + assert.equal(actual.folders.length, 1); + assert.equal(actual.folders[0].uri.fsPath, workspaceResource); + assert.equal(actual.folders[0].name, workspaceName); + assert.equal(actual.folders[0].index, 0); + assert.equal(actual.folders[0].raw.path, workspaceResource); + assert.ok(!actual.configuration); + }); + + test('getWorkbenchState()', () => { + const actual = workspaceContextService.getWorkbenchState(); + + assert.equal(actual, WorkbenchState.FOLDER); + }); + + test('getWorkspaceFolder()', () => { + const actual = workspaceContextService.getWorkspaceFolder(URI.file(path.join(workspaceResource, 'a'))); + + assert.equal(actual, workspaceContextService.getWorkspace().folders[0]); + }); + + test('isCurrentWorkspace() => true', () => { + assert.ok(workspaceContextService.isCurrentWorkspace(workspaceResource)); + }); + + test('isCurrentWorkspace() => false', () => { + assert.ok(!workspaceContextService.isCurrentWorkspace(workspaceResource + 'abc')); + }); +}); + +suite('WorkspaceContextService - Folder', () => { +}); + +suite('WorkspaceConfigurationService - Node', () => { test('defaults', (done: () => void) => { interface ITestSetting { diff --git a/src/vs/workbench/services/configurationResolver/node/configurationResolverService.ts b/src/vs/workbench/services/configurationResolver/node/configurationResolverService.ts index e65a6cd14a4..912e5ad3619 100644 --- a/src/vs/workbench/services/configurationResolver/node/configurationResolverService.ts +++ b/src/vs/workbench/services/configurationResolver/node/configurationResolverService.ts @@ -21,6 +21,7 @@ export class ConfigurationResolverService implements IConfigurationResolverServi _serviceBrand: any; private _execPath: string; private _workspaceRoot: string; + private _workspaceFolder: string; constructor( envVariables: { [key: string]: string }, @@ -40,13 +41,21 @@ export class ConfigurationResolverService implements IConfigurationResolverServi } private get cwd(): string { - return this.workspaceRoot; + if (this.workspaceRoot) { + return this.workspaceRoot; + } else { + return process.cwd(); + } } private get workspaceRoot(): string { return this._workspaceRoot; } + private get workspaceFolder(): string { + return this._workspaceFolder; + } + private get workspaceRootFolderName(): string { return this.workspaceRoot ? paths.basename(this.workspaceRoot) : ''; } @@ -105,30 +114,40 @@ export class ConfigurationResolverService implements IConfigurationResolverServi public resolve(root: uri, value: string[]): string[]; public resolve(root: uri, value: IStringDictionary): IStringDictionary; public resolve(root: uri, value: any): any { - this._workspaceRoot = root.fsPath.toString(); - if (types.isString(value)) { - return this.resolveString(root, value); - } else if (types.isArray(value)) { - return this.resolveArray(root, value); - } else if (types.isObject(value)) { - return this.resolveLiteral(root, value); + try { + this._workspaceFolder = root.fsPath.toString(); + this._workspaceRoot = this._workspaceFolder; + if (types.isString(value)) { + return this.resolveString(root, value); + } else if (types.isArray(value)) { + return this.resolveArray(root, value); + } else if (types.isObject(value)) { + return this.resolveLiteral(root, value); + } + return value; + } finally { + this._workspaceRoot = undefined; + this._workspaceFolder = undefined; } - - return value; } public resolveAny(root: uri, value: T): T; public resolveAny(root: uri, value: any): any { - this._workspaceRoot = root.fsPath.toString(); - if (types.isString(value)) { - return this.resolveString(root, value); - } else if (types.isArray(value)) { - return this.resolveAnyArray(root, value); - } else if (types.isObject(value)) { - return this.resolveAnyLiteral(root, value); + try { + this._workspaceFolder = root.fsPath.toString(); + this._workspaceRoot = this._workspaceFolder; + if (types.isString(value)) { + return this.resolveString(root, value); + } else if (types.isArray(value)) { + return this.resolveAnyArray(root, value); + } else if (types.isObject(value)) { + return this.resolveAnyLiteral(root, value); + } + return value; + } finally { + this._workspaceFolder = undefined; + this._workspaceRoot = undefined; } - - return value; } private resolveString(root: uri, value: string): string { diff --git a/src/vs/workbench/services/files/electron-browser/fileService.ts b/src/vs/workbench/services/files/electron-browser/fileService.ts index 6e950396b5c..b61c993312b 100644 --- a/src/vs/workbench/services/files/electron-browser/fileService.ts +++ b/src/vs/workbench/services/files/electron-browser/fileService.ts @@ -147,7 +147,7 @@ export class FileService implements IFileService { const encodingOverride: IEncodingOverride[] = []; encodingOverride.push({ resource: uri.file(this.environmentService.appSettingsHome), encoding: encoding.UTF8 }); this.contextService.getWorkspace().folders.forEach(folder => { - encodingOverride.push({ resource: uri.file(paths.join(folder.fsPath, '.vscode')), encoding: encoding.UTF8 }); + encodingOverride.push({ resource: uri.file(paths.join(folder.uri.fsPath, '.vscode')), encoding: encoding.UTF8 }); }); return encodingOverride; diff --git a/src/vs/workbench/services/files/node/watcher/nsfw/watcherService.ts b/src/vs/workbench/services/files/node/watcher/nsfw/watcherService.ts index 6a52fff3712..9e3744b2638 100644 --- a/src/vs/workbench/services/files/node/watcher/nsfw/watcherService.ts +++ b/src/vs/workbench/services/files/node/watcher/nsfw/watcherService.ts @@ -93,18 +93,17 @@ export class FileWatcher { return; } - const folders = this.contextService.getWorkspace().folders; - this.service.setRoots(folders.map(folder => { + this.service.setRoots(this.contextService.getWorkspace().folders.map(folder => { // Fetch the root's watcherExclude setting and return it const configuration = this.configurationService.getConfiguration(undefined, { - resource: folder + resource: folder.uri }); let ignored: string[] = []; if (configuration.files && configuration.files.watcherExclude) { ignored = Object.keys(configuration.files.watcherExclude).filter(k => !!configuration.files.watcherExclude[k]); } return { - basePath: folder.fsPath, + basePath: folder.uri.fsPath, ignored }; })); diff --git a/src/vs/workbench/services/files/node/watcher/unix/watcherService.ts b/src/vs/workbench/services/files/node/watcher/unix/watcherService.ts index a330c432f4f..7c4917dc472 100644 --- a/src/vs/workbench/services/files/node/watcher/unix/watcherService.ts +++ b/src/vs/workbench/services/files/node/watcher/unix/watcherService.ts @@ -52,7 +52,7 @@ export class FileWatcher { const service = new WatcherChannelClient(channel); // Start watching - const basePath: string = normalize(this.contextService.getWorkspace().folders[0].fsPath); + const basePath: string = normalize(this.contextService.getWorkspace().folders[0].uri.fsPath); service.watch({ basePath: basePath, ignored: this.ignored, verboseLogging: this.verboseLogging }).then(null, err => { if (!this.isDisposed && !(err instanceof Error && err.name === 'Canceled' && err.message === 'Canceled')) { return TPromise.wrapError(err); // the service lib uses the promise cancel error to indicate the process died, we do not want to bubble this up diff --git a/src/vs/workbench/services/files/node/watcher/win32/watcherService.ts b/src/vs/workbench/services/files/node/watcher/win32/watcherService.ts index e0b3b87fbee..26295cbc4a9 100644 --- a/src/vs/workbench/services/files/node/watcher/win32/watcherService.ts +++ b/src/vs/workbench/services/files/node/watcher/win32/watcherService.ts @@ -26,7 +26,7 @@ export class FileWatcher { } public startWatching(): () => void { - let basePath: string = normalize(this.contextService.getWorkspace().folders[0].fsPath); + let basePath: string = normalize(this.contextService.getWorkspace().folders[0].uri.fsPath); if (basePath && basePath.indexOf('\\\\') === 0 && endsWith(basePath, sep)) { // for some weird reason, node adds a trailing slash to UNC paths diff --git a/src/vs/workbench/services/files/test/node/fileService.test.ts b/src/vs/workbench/services/files/test/node/fileService.test.ts index c9ebdeabde9..d08e9e93cc4 100644 --- a/src/vs/workbench/services/files/test/node/fileService.test.ts +++ b/src/vs/workbench/services/files/test/node/fileService.test.ts @@ -20,7 +20,7 @@ import encodingLib = require('vs/base/node/encoding'); import utils = require('vs/workbench/services/files/test/node/utils'); import { onError } from 'vs/base/test/common/utils'; import { TestContextService, TestTextResourceConfigurationService } from 'vs/workbench/test/workbenchTestServices'; -import { Workspace } from 'vs/platform/workspace/common/workspace'; +import { Workspace, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; suite('FileService', () => { @@ -38,7 +38,7 @@ suite('FileService', () => { return onError(error, done); } - service = new FileService(new TestContextService(new Workspace(testDir, testDir, [uri.file(testDir)])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true }); + service = new FileService(new TestContextService(new Workspace(testDir, testDir, [{ uri: uri.file(testDir), raw: { path: testDir }, index: 0, name: '' }])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true }); done(); }); }); @@ -784,7 +784,7 @@ suite('FileService', () => { const textResourceConfigurationService = new TestTextResourceConfigurationService(configurationService); - const _service = new FileService(new TestContextService(new Workspace(_testDir, _testDir, [uri.file(_testDir)])), textResourceConfigurationService, configurationService, { + const _service = new FileService(new TestContextService(new Workspace(_testDir, _testDir, [aWorkspaceFolder(_testDir, 0)])), textResourceConfigurationService, configurationService, { encodingOverride, disableWatcher: true }); @@ -811,7 +811,7 @@ suite('FileService', () => { const _sourceDir = require.toUrl('./fixtures/service'); const resource = uri.file(path.join(testDir, 'index.html')); - const _service = new FileService(new TestContextService(new Workspace(_testDir, _testDir, [uri.file(_testDir)])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { + const _service = new FileService(new TestContextService(new Workspace(_testDir, _testDir, [aWorkspaceFolder(_testDir, 0)])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true }); @@ -852,4 +852,13 @@ suite('FileService', () => { }); }); }); + + function aWorkspaceFolder(path: string, index: number, name: string = ''): WorkspaceFolder { + return { + uri: uri.file(path), + index, + raw: { path: path }, + name + }; + } }); diff --git a/src/vs/workbench/services/group/common/groupService.ts b/src/vs/workbench/services/group/common/groupService.ts index e8275307182..12820ea98ea 100644 --- a/src/vs/workbench/services/group/common/groupService.ts +++ b/src/vs/workbench/services/group/common/groupService.ts @@ -5,7 +5,7 @@ 'use strict'; -import { createDecorator, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation'; +import { createDecorator, ServiceIdentifier, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { Position, IEditorInput } from 'vs/platform/editor/common/editor'; import { IEditorStacksModel, IEditorGroup } from 'vs/workbench/common/editor'; import Event from 'vs/base/common/event'; @@ -132,4 +132,9 @@ export interface IEditorGroupService { * Returns tab options. */ getTabOptions(): IEditorTabOptions; + + /** + * Invoke a function in the context of the active editor. + */ + invokeWithinEditorContext(fn: (accessor: ServicesAccessor) => T): T; } \ No newline at end of file diff --git a/src/vs/workbench/services/history/browser/history.ts b/src/vs/workbench/services/history/browser/history.ts index f767cc2f5a7..da81c4635dc 100644 --- a/src/vs/workbench/services/history/browser/history.ts +++ b/src/vs/workbench/services/history/browser/history.ts @@ -20,7 +20,7 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle'; import { Registry } from 'vs/platform/registry/common/platform'; -import { once } from 'vs/base/common/event'; +import { once, debounceEvent } from 'vs/base/common/event'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; import { IWindowsService } from 'vs/platform/windows/common/windows'; @@ -126,9 +126,13 @@ export abstract class BaseHistoryService { // Apply listener for selection changes if this is a text editor const control = getCodeEditor(activeEditor); if (control) { - this.activeEditorListeners.push(control.onDidChangeCursorPosition(event => { + + // Debounce the event with a timeout of 0ms so that multiple calls to + // editor.setSelection() are folded into one. We do not want to record + // subsequent history navigations for such API calls. + this.activeEditorListeners.push(debounceEvent(control.onDidChangeCursorPosition, (last, event) => event, 0)((event => { this.handleEditorSelectionChangeEvent(activeEditor, event); - })); + }))); } } @@ -556,11 +560,6 @@ export class HistoryService extends BaseHistoryService implements IHistoryServic const stackInput = this.preferResourceInput(input); const entry = { input: stackInput, selection, timestamp: Date.now() }; - // If we are not at the end of history, we remove anything after - if (this.stack.length > this.index + 1) { - this.stack = this.stack.slice(0, this.index + 1); - } - // Replace at current position if (replace) { this.stack[this.index] = entry; @@ -568,6 +567,12 @@ export class HistoryService extends BaseHistoryService implements IHistoryServic // Add to stack at current position else { + + // If we are not at the end of history, we remove anything after + if (this.stack.length > this.index + 1) { + this.stack = this.stack.slice(0, this.index + 1); + } + this.setIndex(this.index + 1); this.stack.splice(this.index, 0, entry); @@ -775,11 +780,11 @@ export class HistoryService extends BaseHistoryService implements IHistoryServic const resourceInput = input as IResourceInput; const resourceWorkspace = this.contextService.getWorkspaceFolder(resourceInput.resource); if (resourceWorkspace) { - return resourceWorkspace; + return resourceWorkspace.uri; } } // fallback to first workspace - return this.contextService.getWorkspace().folders[0]; + return this.contextService.getWorkspace().folders[0].uri; } } diff --git a/src/vs/workbench/services/keybinding/test/node/keybindingEditing.test.ts b/src/vs/workbench/services/keybinding/test/node/keybindingEditing.test.ts index 72c0fa0e3b7..de3d3e48d7e 100644 --- a/src/vs/workbench/services/keybinding/test/node/keybindingEditing.test.ts +++ b/src/vs/workbench/services/keybinding/test/node/keybindingEditing.test.ts @@ -74,7 +74,7 @@ suite('Keybindings Editing', () => { instantiationService.stub(ITelemetryService, NullTelemetryService); instantiationService.stub(IModeService, ModeServiceImpl); instantiationService.stub(IModelService, instantiationService.createInstance(ModelServiceImpl)); - instantiationService.stub(IFileService, new FileService(new TestContextService(new Workspace(testDir, testDir, [uri.file(testDir)])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true })); + instantiationService.stub(IFileService, new FileService(new TestContextService(new Workspace(testDir, testDir, [{ uri: uri.file(testDir), raw: { path: testDir }, index: 0, name: '' }])), new TestTextResourceConfigurationService(), new TestConfigurationService(), { disableWatcher: true })); instantiationService.stub(IUntitledEditorService, instantiationService.createInstance(UntitledEditorService)); instantiationService.stub(ITextFileService, instantiationService.createInstance(TestTextFileService)); instantiationService.stub(ITextModelService, instantiationService.createInstance(TextModelResolverService)); diff --git a/src/vs/workbench/services/search/node/fileSearch.ts b/src/vs/workbench/services/search/node/fileSearch.ts index c621b8b2c48..5bf893c78ca 100644 --- a/src/vs/workbench/services/search/node/fileSearch.ts +++ b/src/vs/workbench/services/search/node/fileSearch.ts @@ -230,7 +230,7 @@ export class FileWalker { cmd = this.spawnFindCmd(folderQuery); } - this.collectStdout(cmd, 'utf8', (err: Error, stdout?: string, last?: boolean) => { + this.collectStdout(cmd, 'utf8', useRipgrep, (err: Error, stdout?: string, last?: boolean) => { if (err) { done(err); return; @@ -354,9 +354,9 @@ export class FileWalker { /** * Public for testing. */ - public readStdout(cmd: childProcess.ChildProcess, encoding: string, cb: (err: Error, stdout?: string) => void): void { + public readStdout(cmd: childProcess.ChildProcess, encoding: string, isRipgrep: boolean, cb: (err: Error, stdout?: string) => void): void { let all = ''; - this.collectStdout(cmd, encoding, (err: Error, stdout?: string, last?: boolean) => { + this.collectStdout(cmd, encoding, isRipgrep, (err: Error, stdout?: string, last?: boolean) => { if (err) { cb(err); return; @@ -369,7 +369,7 @@ export class FileWalker { }); } - private collectStdout(cmd: childProcess.ChildProcess, encoding: string, cb: (err: Error, stdout?: string, last?: boolean) => void): void { + private collectStdout(cmd: childProcess.ChildProcess, encoding: string, isRipgrep: boolean, cb: (err: Error, stdout?: string, last?: boolean) => void): void { let done = (err: Error, stdout?: string, last?: boolean) => { if (err || last) { done = () => { }; @@ -386,7 +386,8 @@ export class FileWalker { }); cmd.on('close', (code: number) => { - if (code !== 0) { + // ripgrep returns code=1 when no results are found + if (code !== 0 && ((isRipgrep && stderr.length) || !isRipgrep)) { done(new Error(`command failed with error code ${code}: ${this.decodeData(stderr, encoding)}`)); } else { done(null, '', true); diff --git a/src/vs/workbench/services/search/node/ripgrepTextSearch.ts b/src/vs/workbench/services/search/node/ripgrepTextSearch.ts index 96a4b57887d..6750ffced0c 100644 --- a/src/vs/workbench/services/search/node/ripgrepTextSearch.ts +++ b/src/vs/workbench/services/search/node/ripgrepTextSearch.ts @@ -403,6 +403,10 @@ function globExprsToRgGlobs(patterns: glob.IExpression, folder?: string, exclude return; } + if (!key) { + return; + } + const value = patterns[key]; key = trimTrailingSlash(folder ? getAbsoluteGlob(folder, key) : key); diff --git a/src/vs/workbench/services/search/test/node/search.test.ts b/src/vs/workbench/services/search/test/node/search.test.ts index 75fddf759ba..87f2f847ef6 100644 --- a/src/vs/workbench/services/search/test/node/search.test.ts +++ b/src/vs/workbench/services/search/test/node/search.test.ts @@ -525,14 +525,14 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/something': true } }); const cmd1 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.notStrictEqual(stdout1.split('\n').indexOf(file1), -1, stdout1); const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/subfolder': true } }); const cmd2 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd2, 'utf8', (err2, stdout2) => { + walker.readStdout(cmd2, 'utf8', /*isRipgrep=*/false, (err2, stdout2) => { assert.equal(err2, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.strictEqual(stdout2.split('\n').indexOf(file1), -1, stdout2); @@ -559,7 +559,7 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries }); const cmd1 = walker.spawnFindCmd(folderQueries[0]); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); assert(outputContains(stdout1, file0), stdout1); assert(!outputContains(stdout1, file1), stdout1); @@ -579,7 +579,7 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/something': true } }); const cmd1 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.notStrictEqual(stdout1.split('\n').indexOf(file1), -1, stdout1); @@ -587,7 +587,7 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '{**/examples,**/more}': true } }); const cmd2 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd2, 'utf8', (err2, stdout2) => { + walker.readStdout(cmd2, 'utf8', /*isRipgrep=*/false, (err2, stdout2) => { assert.equal(err2, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.strictEqual(stdout2.split('\n').indexOf(file1), -1, stdout2); @@ -608,14 +608,14 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/examples/something': true } }); const cmd1 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.notStrictEqual(stdout1.split('\n').indexOf(file1), -1, stdout1); const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/examples/subfolder': true } }); const cmd2 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd2, 'utf8', (err2, stdout2) => { + walker.readStdout(cmd2, 'utf8', /*isRipgrep=*/false, (err2, stdout2) => { assert.equal(err2, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.strictEqual(stdout2.split('\n').indexOf(file1), -1, stdout2); @@ -635,14 +635,14 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/subfolder/something': true } }); const cmd1 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.notStrictEqual(stdout1.split('\n').indexOf(file1), -1, stdout1); const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { '**/subfolder/anotherfolder': true } }); const cmd2 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd2, 'utf8', (err2, stdout2) => { + walker.readStdout(cmd2, 'utf8', /*isRipgrep=*/false, (err2, stdout2) => { assert.equal(err2, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.strictEqual(stdout2.split('\n').indexOf(file1), -1, stdout2); @@ -662,14 +662,14 @@ suite('FileWalker', () => { const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { 'examples/something': true } }); const cmd1 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.notStrictEqual(stdout1.split('\n').indexOf(file1), -1, stdout1); const walker = new FileWalker({ folderQueries: ROOT_FOLDER_QUERY, excludePattern: { 'examples/subfolder': true } }); const cmd2 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd2, 'utf8', (err2, stdout2) => { + walker.readStdout(cmd2, 'utf8', /*isRipgrep=*/false, (err2, stdout2) => { assert.equal(err2, null); assert.notStrictEqual(stdout1.split('\n').indexOf(file0), -1, stdout1); assert.strictEqual(stdout2.split('\n').indexOf(file1), -1, stdout2); @@ -704,7 +704,7 @@ suite('FileWalker', () => { } }); const cmd1 = walker.spawnFindCmd(TEST_ROOT_FOLDER); - walker.readStdout(cmd1, 'utf8', (err1, stdout1) => { + walker.readStdout(cmd1, 'utf8', /*isRipgrep=*/false, (err1, stdout1) => { assert.equal(err1, null); for (const fileIn of filesIn) { assert.notStrictEqual(stdout1.split('\n').indexOf(fileIn), -1, stdout1); diff --git a/src/vs/workbench/services/telemetry/common/workspaceStats.ts b/src/vs/workbench/services/telemetry/common/workspaceStats.ts index 9975ddf8c80..55ed3e778ec 100644 --- a/src/vs/workbench/services/telemetry/common/workspaceStats.ts +++ b/src/vs/workbench/services/telemetry/common/workspaceStats.ts @@ -157,7 +157,7 @@ export class WorkspaceStats { tags['workspace.roots'] = isEmpty ? 0 : workspace.folders.length; tags['workspace.empty'] = isEmpty; - const folders = !isEmpty ? workspace.folders : this.environmentService.appQuality !== 'stable' && this.findFolders(configuration); + const folders = !isEmpty ? workspace.folders.map(folder => folder.uri) : this.environmentService.appQuality !== 'stable' && this.findFolders(configuration); if (folders && folders.length && this.fileService) { return this.fileService.resolveFiles(folders.map(resource => ({ resource }))).then(results => { const names = ([]).concat(...results.map(result => result.success ? (result.stat.children || []) : [])).map(c => c.name); @@ -324,8 +324,8 @@ export class WorkspaceStats { } public reportCloudStats(): void { - const uris = this.contextService.getWorkspace().folders; - if (uris && uris.length && this.fileService) { + const uris = this.contextService.getWorkspace().folders.map(folder => folder.uri); + if (uris.length && this.fileService) { this.reportRemoteDomains(uris); this.reportRemotes(uris); this.reportAzure(uris); diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index 4bcc5b1b1aa..67b8ff2d6e3 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -746,7 +746,7 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil // Check for workspace settings file return this.contextService.getWorkspace().folders.some(folder => { - return paths.isEqualOrParent(this.resource.fsPath, path.join(folder.fsPath, '.vscode')); + return paths.isEqualOrParent(this.resource.fsPath, path.join(folder.uri.fsPath, '.vscode')); }); } diff --git a/src/vs/workbench/services/workspace/node/workspaceEditingService.ts b/src/vs/workbench/services/workspace/node/workspaceEditingService.ts index ffd1ff7c3b4..7fa7ee4aa98 100644 --- a/src/vs/workbench/services/workspace/node/workspaceEditingService.ts +++ b/src/vs/workbench/services/workspace/node/workspaceEditingService.ts @@ -7,16 +7,16 @@ import { IWorkspaceEditingService } from 'vs/workbench/services/workspace/common/workspaceEditing'; import URI from 'vs/base/common/uri'; -import { equals, distinct } from 'vs/base/common/arrays'; import { TPromise } from 'vs/base/common/winjs.base'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; +import { IWorkspaceContextService, WorkbenchState } from 'vs/platform/workspace/common/workspace'; import { IWindowsService } from 'vs/platform/windows/common/windows'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { IJSONEditingService } from 'vs/workbench/services/configuration/common/jsonEditing'; import { IWorkspacesService, IStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces'; +import { dirname } from 'path'; +import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; +import { massageFolderPathForWorkspace } from 'vs/platform/workspaces/node/workspaces'; import { isLinux } from 'vs/base/common/platform'; -import { dirname, relative } from 'path'; -import { isEqualOrParent } from 'vs/base/common/paths'; export class WorkspaceEditingService implements IWorkspaceEditingService { @@ -27,7 +27,8 @@ export class WorkspaceEditingService implements IWorkspaceEditingService { @IWorkspaceContextService private contextService: IWorkspaceContextService, @IEnvironmentService private environmentService: IEnvironmentService, @IWindowsService private windowsService: IWindowsService, - @IWorkspacesService private workspacesService: IWorkspacesService + @IWorkspacesService private workspacesService: IWorkspacesService, + @IWorkspaceConfigurationService private workspaceConfigurationService: IWorkspaceConfigurationService ) { } @@ -36,9 +37,29 @@ export class WorkspaceEditingService implements IWorkspaceEditingService { return TPromise.as(void 0); // we need a workspace to begin with } - const folders = this.contextService.getWorkspace().folders; + const currentWorkspaceFolders = this.contextService.getWorkspace().folders; + const currentWorkspaceFolderUris = currentWorkspaceFolders.map(folder => folder.uri); + const currentStoredFolders = currentWorkspaceFolders.map(folder => folder.raw); - return this.doSetFolders([...folders, ...foldersToAdd]); + const storedFoldersToAdd: IStoredWorkspaceFolder[] = []; + + const workspaceConfigFolder = dirname(this.contextService.getWorkspace().configuration.fsPath); + + foldersToAdd.forEach(foldersToAdd => { + if (this.contains(currentWorkspaceFolderUris, foldersToAdd)) { + return; // already existing + } + + storedFoldersToAdd.push({ + path: massageFolderPathForWorkspace(foldersToAdd.fsPath, workspaceConfigFolder, currentStoredFolders) + }); + }); + + if (storedFoldersToAdd.length > 0) { + return this.doSetFolders([...currentStoredFolders, ...storedFoldersToAdd]); + } + + return TPromise.as(void 0); } public removeFolders(foldersToRemove: URI[]): TPromise { @@ -46,54 +67,51 @@ export class WorkspaceEditingService implements IWorkspaceEditingService { return TPromise.as(void 0); // we need a workspace to begin with } - const folders = this.contextService.getWorkspace().folders; - const foldersToRemoveRaw = foldersToRemove.map(folder => folder.toString()); + const currentWorkspaceFolders = this.contextService.getWorkspace().folders; + const currentStoredFolders = currentWorkspaceFolders.map(folder => folder.raw); - return this.doSetFolders(folders.filter(folder => foldersToRemoveRaw.indexOf(folder.toString()) === -1)); - } + const newStoredFolders: IStoredWorkspaceFolder[] = currentStoredFolders.filter((folder, index) => { + if (!folder.path) { + return true; // keep entries which are unrelated + } - private isSupported(): boolean { - return ( - this.environmentService.appQuality !== 'stable' // not yet enabled in stable - && !!this.contextService.getWorkspace().configuration // we need a workspace configuration file to begin with - ); - } + return !this.contains(foldersToRemove, currentWorkspaceFolders[index].uri); // keep entries which are unrelated + }); - private doSetFolders(newFolders: URI[]): TPromise { - const workspace = this.contextService.getWorkspace(); - const currentWorkspaceFolders = this.contextService.getWorkspace().folders.map(folder => folder.fsPath); - const newWorkspaceFolders = this.validateFolders(newFolders); - - // See if there are any changes - if (equals(currentWorkspaceFolders, newWorkspaceFolders)) { - return TPromise.as(void 0); + if (newStoredFolders.length !== currentStoredFolders.length) { + return this.doSetFolders(newStoredFolders); } - // Apply to config - if (newWorkspaceFolders.length) { - const workspaceConfigFolder = dirname(workspace.configuration.fsPath); - const value: IStoredWorkspaceFolder[] = newWorkspaceFolders.map(newWorkspaceFolder => { - if (isEqualOrParent(newWorkspaceFolder, workspaceConfigFolder, !isLinux)) { - newWorkspaceFolder = relative(workspaceConfigFolder, newWorkspaceFolder) || '.'; // absolute paths get converted to relative ones to workspace location if possible - } + return TPromise.as(void 0); + } - return { path: newWorkspaceFolder }; - }); + private doSetFolders(folders: IStoredWorkspaceFolder[]): TPromise { + if (folders.length) { + const workspace = this.contextService.getWorkspace(); - return this.jsonEditingService.write(workspace.configuration, { key: 'folders', value }, true); + return this.jsonEditingService.write(workspace.configuration, { key: 'folders', value: folders }, true); } else { // TODO: Sandeep - Removing all folders? } - return TPromise.as(null); + return TPromise.as(void 0); } - private validateFolders(folders: URI[]): string[] { - if (!folders) { - return []; - } - - // Prevent duplicates - return distinct(folders.map(folder => folder.fsPath), folder => isLinux ? folder : folder.toLowerCase()); + private isSupported(): boolean { + // TODO@Ben multi root + return ( + this.environmentService.appQuality !== 'stable' // not yet enabled in stable + && this.contextService.getWorkbenchState() === WorkbenchState.WORKSPACE // we need a multi folder workspace to begin with + ); } -} + + private contains(resources: URI[], toCheck: URI): boolean { + return resources.some(resource => { + if (isLinux) { + return resource.toString() === toCheck.toString(); + } + + return resource.toString().toLowerCase() === toCheck.toString().toLowerCase(); + }); + } +} \ No newline at end of file diff --git a/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts b/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts index d854c4ec6f1..20792c4a191 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts @@ -15,6 +15,8 @@ import { ConfigurationTarget, ConfigurationEditingErrorCode, ConfigurationEditin import { ConfigurationModel } from 'vs/platform/configuration/common/configuration'; import { TestThreadService } from './testThreadService'; import { mock } from 'vs/workbench/test/electron-browser/api/mock'; +import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; +import { IStoredWorkspaceFolder } from 'vs/platform/workspaces/common/workspaces'; suite('ExtHostConfiguration', function () { @@ -131,7 +133,7 @@ suite('ExtHostConfiguration', function () { new class extends mock() { }, new ExtHostWorkspace(new TestThreadService(), { 'id': 'foo', - 'folders': [URI.file('foo')], + 'folders': [aWorkspaceFolder({ path: 'foo' }, 0)], 'name': 'foo' }), { @@ -203,7 +205,7 @@ suite('ExtHostConfiguration', function () { new class extends mock() { }, new ExtHostWorkspace(new TestThreadService(), { 'id': 'foo', - 'folders': [firstRoot, secondRoot], + 'folders': [aWorkspaceFolder({ path: firstRoot.path }, 0), aWorkspaceFolder({ path: secondRoot.path }, 1)], 'name': 'foo' }), { @@ -402,4 +404,13 @@ suite('ExtHostConfiguration', function () { .update('', true, false) .then(() => assert.ok(false), err => { /* expecting rejection */ }); }); + + function aWorkspaceFolder(raw: IStoredWorkspaceFolder, index: number, name: string = ''): WorkspaceFolder { + return { + uri: URI.file(raw.path), + index, + raw, + name + }; + } }); diff --git a/src/vs/workbench/test/electron-browser/api/extHostWorkspace.test.ts b/src/vs/workbench/test/electron-browser/api/extHostWorkspace.test.ts index dcde31bf2a6..fcf619a2309 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostWorkspace.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostWorkspace.test.ts @@ -7,9 +7,11 @@ import * as assert from 'assert'; import URI from 'vs/base/common/uri'; +import { basename } from 'path'; import { ExtHostWorkspace } from 'vs/workbench/api/node/extHostWorkspace'; import { TestThreadService } from './testThreadService'; import { normalize } from 'vs/base/common/paths'; +import { WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; suite('ExtHostWorkspace', function () { @@ -24,7 +26,7 @@ suite('ExtHostWorkspace', function () { test('asRelativePath', function () { - const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [URI.file('/Coding/Applications/NewsWoWBot')], name: 'Test' }); + const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [aWorkspaceFolder(URI.file('/Coding/Applications/NewsWoWBot'), 0)], name: 'Test' }); assertAsRelativePath(ws, '/Coding/Applications/NewsWoWBot/bernd/das/brot', 'bernd/das/brot'); assertAsRelativePath(ws, '/Apps/DartPubCache/hosted/pub.dartlang.org/convert-2.0.1/lib/src/hex.dart', @@ -38,7 +40,7 @@ suite('ExtHostWorkspace', function () { test('asRelativePath, same paths, #11402', function () { const root = '/home/aeschli/workspaces/samples/docker'; const input = '/home/aeschli/workspaces/samples/docker'; - const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [URI.file(root)], name: 'Test' }); + const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [aWorkspaceFolder(URI.file(root), 0)], name: 'Test' }); assertAsRelativePath(ws, (input), input); @@ -53,14 +55,14 @@ suite('ExtHostWorkspace', function () { }); test('asRelativePath, multiple folders', function () { - const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [URI.file('/Coding/One'), URI.file('/Coding/Two')], name: 'Test' }); + const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [aWorkspaceFolder(URI.file('/Coding/One'), 0), aWorkspaceFolder(URI.file('/Coding/Two'), 1)], name: 'Test' }); assertAsRelativePath(ws, '/Coding/One/file.txt', 'One/file.txt'); assertAsRelativePath(ws, '/Coding/Two/files/out.txt', 'Two/files/out.txt'); assertAsRelativePath(ws, '/Coding/Two2/files/out.txt', '/Coding/Two2/files/out.txt'); }); test('slightly inconsistent behaviour of asRelativePath and getWorkspaceFolder, #31553', function () { - const mrws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [URI.file('/Coding/One'), URI.file('/Coding/Two')], name: 'Test' }); + const mrws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [aWorkspaceFolder(URI.file('/Coding/One'), 0), aWorkspaceFolder(URI.file('/Coding/Two'), 1)], name: 'Test' }); assertAsRelativePath(mrws, '/Coding/One/file.txt', 'One/file.txt'); assertAsRelativePath(mrws, '/Coding/One/file.txt', 'One/file.txt', true); @@ -72,7 +74,7 @@ suite('ExtHostWorkspace', function () { assertAsRelativePath(mrws, '/Coding/Two2/files/out.txt', '/Coding/Two2/files/out.txt', true); assertAsRelativePath(mrws, '/Coding/Two2/files/out.txt', '/Coding/Two2/files/out.txt', false); - const srws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [URI.file('/Coding/One')], name: 'Test' }); + const srws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [aWorkspaceFolder(URI.file('/Coding/One'), 0)], name: 'Test' }); assertAsRelativePath(srws, '/Coding/One/file.txt', 'file.txt'); assertAsRelativePath(srws, '/Coding/One/file.txt', 'file.txt', false); assertAsRelativePath(srws, '/Coding/One/file.txt', 'One/file.txt', true); @@ -91,15 +93,15 @@ suite('ExtHostWorkspace', function () { ws = new ExtHostWorkspace(new TestThreadService(), undefined); assert.equal(ws.getPath(), undefined); - ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', name: 'Test', folders: [URI.file('Folder'), URI.file('Another/Folder')] }); + ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', name: 'Test', folders: [aWorkspaceFolder(URI.file('Folder'), 0), aWorkspaceFolder(URI.file('Another/Folder'), 1)] }); assert.equal(ws.getPath().replace(/\\/g, '/'), '/Folder'); - ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', name: 'Test', folders: [URI.file('/Folder')] }); + ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', name: 'Test', folders: [aWorkspaceFolder(URI.file('/Folder'), 0)] }); assert.equal(ws.getPath().replace(/\\/g, '/'), '/Folder'); }); test('WorkspaceFolder has name and index', function () { - const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [URI.file('/Coding/One'), URI.file('/Coding/Two')], name: 'Test' }); + const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', folders: [aWorkspaceFolder(URI.file('/Coding/One'), 0), aWorkspaceFolder(URI.file('/Coding/Two'), 1)], name: 'Test' }); const [one, two] = ws.getWorkspaceFolders(); @@ -110,7 +112,7 @@ suite('ExtHostWorkspace', function () { }); test('getContainingWorkspaceFolder', function () { - const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', name: 'Test', folders: [URI.file('/Coding/One'), URI.file('/Coding/Two'), URI.file('/Coding/Two/Nested')] }); + const ws = new ExtHostWorkspace(new TestThreadService(), { id: 'foo', name: 'Test', folders: [aWorkspaceFolder(URI.file('/Coding/One'), 0), aWorkspaceFolder(URI.file('/Coding/Two'), 1), aWorkspaceFolder(URI.file('/Coding/Two/Nested'), 2)] }); let folder = ws.getWorkspaceFolder(URI.file('/foo/bar')); assert.equal(folder, undefined); @@ -155,7 +157,7 @@ suite('ExtHostWorkspace', function () { assert.equal(e.added.length, 1); assert.equal(e.added[0].uri.toString(), 'foo:bar'); }); - ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [URI.parse('foo:bar')] }); + ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [aWorkspaceFolder(URI.parse('foo:bar'), 0)] }); sub.dispose(); sub = ws.onDidChangeWorkspace(e => { @@ -163,7 +165,7 @@ suite('ExtHostWorkspace', function () { assert.equal(e.added.length, 1); assert.equal(e.added[0].uri.toString(), 'foo:bar2'); }); - ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [URI.parse('foo:bar'), URI.parse('foo:bar2')] }); + ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [aWorkspaceFolder(URI.parse('foo:bar'), 0), aWorkspaceFolder(URI.parse('foo:bar2'), 1)] }); sub.dispose(); sub = ws.onDidChangeWorkspace(e => { @@ -174,7 +176,7 @@ suite('ExtHostWorkspace', function () { assert.equal(e.added.length, 1); assert.equal(e.added[0].uri.toString(), 'foo:bar3'); }); - ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [URI.parse('foo:bar3')] }); + ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [aWorkspaceFolder(URI.parse('foo:bar3'), 0)] }); sub.dispose(); }); @@ -192,4 +194,15 @@ suite('ExtHostWorkspace', function () { ws.$acceptWorkspaceData({ id: 'foo', name: 'Test', folders: [] }); sub.dispose(); }); + + function aWorkspaceFolder(uri: URI, index: number, name: string = ''): WorkspaceFolder { + return { + uri, + index, + raw: { + path: uri.toString() + }, + name: name || basename(uri.path) + }; + } }); diff --git a/src/vs/workbench/test/workbenchTestServices.ts b/src/vs/workbench/test/workbenchTestServices.ts index 80a54b01068..920a420cbbf 100644 --- a/src/vs/workbench/test/workbenchTestServices.ts +++ b/src/vs/workbench/test/workbenchTestServices.ts @@ -27,7 +27,7 @@ import { ITextModelService } from 'vs/editor/common/services/resolverService'; import { IEditorInput, IEditorOptions, Position, Direction, IEditor, IResourceInput, ITextEditorSelection } from 'vs/platform/editor/common/editor'; import { IUntitledEditorService, UntitledEditorService } from 'vs/workbench/services/untitled/common/untitledEditorService'; import { IMessageService, IConfirmation } from 'vs/platform/message/common/message'; -import { IWorkspaceContextService, IWorkspace as IWorkbenchWorkspace, WorkbenchState } from 'vs/platform/workspace/common/workspace'; +import { IWorkspaceContextService, IWorkspace as IWorkbenchWorkspace, WorkbenchState, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { ILifecycleService, ShutdownEvent, ShutdownReason, StartupKind, LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle'; import { EditorStacksModel } from 'vs/workbench/common/editor/editorStacksModel'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; @@ -44,7 +44,7 @@ import { EnvironmentService } from 'vs/platform/environment/node/environmentServ import { IModeService } from 'vs/editor/common/services/modeService'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; -import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; +import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; import { IWindowsService, IWindowService, INativeOpenDialogOptions } from 'vs/platform/windows/common/windows'; import { TestWorkspace } from 'vs/platform/workspace/test/common/testWorkspace'; @@ -74,12 +74,14 @@ export class TestContextService implements IWorkspaceContextService { private _onDidChangeWorkspaceName: Emitter; private _onDidChangeWorkspaceFolders: Emitter; + private _onDidChangeWorkbenchState: Emitter; constructor(workspace: any = TestWorkspace, options: any = null) { this.workspace = workspace; this.id = generateUuid(); this.options = options || Object.create(null); this._onDidChangeWorkspaceFolders = new Emitter(); + this._onDidChangeWorkbenchState = new Emitter(); } public get onDidChangeWorkspaceName(): Event { @@ -90,7 +92,11 @@ export class TestContextService implements IWorkspaceContextService { return this._onDidChangeWorkspaceFolders.event; } - public getFolders(): URI[] { + public get onDidChangeWorkbenchState(): Event { + return this._onDidChangeWorkbenchState.event; + } + + public getFolders(): WorkspaceFolder[] { return this.workspace ? this.workspace.folders : []; } @@ -108,7 +114,7 @@ export class TestContextService implements IWorkspaceContextService { return this.workspace; } - public getWorkspaceFolder(resource: URI): URI { + public getWorkspaceFolder(resource: URI): WorkspaceFolder { return this.isInsideWorkspace(resource) ? this.workspace.folders[0] : null; } @@ -126,7 +132,7 @@ export class TestContextService implements IWorkspaceContextService { public isInsideWorkspace(resource: URI): boolean { if (resource && this.workspace) { - return paths.isEqualOrParent(resource.fsPath, this.workspace.folders[0].fsPath, !isLinux /* ignorecase */); + return paths.isEqualOrParent(resource.fsPath, this.workspace.folders[0].uri.fsPath, !isLinux /* ignorecase */); } return false; @@ -137,7 +143,7 @@ export class TestContextService implements IWorkspaceContextService { } public isCurrentWorkspace(workspaceIdentifier: ISingleFolderWorkspaceIdentifier | IWorkspaceIdentifier): boolean { - return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && this.pathEquals(this.workspace.folders[0].fsPath, workspaceIdentifier); + return isSingleFolderWorkspaceIdentifier(workspaceIdentifier) && this.pathEquals(this.workspace.folders[0].uri.fsPath, workspaceIdentifier); } private pathEquals(path1: string, path2: string): boolean { @@ -550,6 +556,10 @@ export class TestEditorGroupService implements IEditorGroupService { public getTabOptions(): IEditorTabOptions { return {}; } + + public invokeWithinEditorContext(fn: (accessor: ServicesAccessor) => T): T { + return fn(null); + } } export class TestEditorService implements IWorkbenchEditorService { diff --git a/test/smoke/src/areas/debug/debug.test.ts b/test/smoke/src/areas/debug/debug.test.ts index 1d5e0c080cf..a6e35ef4ea7 100644 --- a/test/smoke/src/areas/debug/debug.test.ts +++ b/test/smoke/src/areas/debug/debug.test.ts @@ -9,7 +9,7 @@ import * as os from 'os'; import * as path from 'path'; import * as fs from 'fs'; import * as stripJsonComments from 'strip-json-comments'; -import { SpectronApplication, VSCODE_BUILD, EXTENSIONS_DIR } from '../../spectron/application'; +import { SpectronApplication, VSCODE_BUILD, EXTENSIONS_DIR, findFreePort } from '../../spectron/application'; describe('Debug', () => { let app: SpectronApplication = new SpectronApplication(); @@ -38,7 +38,9 @@ describe('Debug', () => { fs.symlinkSync(debug2Path, path.join(EXTENSIONS_DIR, 'vscode-node-debug2')); } - before(() => app.start('Debug')); + // We must get a different port for our smoketest express app + // otherwise concurrent test runs will clash on those ports + before(async () => await app.start('Debug', [], { PORT: String(await findFreePort()), ...process.env })); after(() => app.stop()); beforeEach(function () { app.screenCapturer.testName = this.currentTest.title; }); @@ -69,10 +71,12 @@ describe('Debug', () => { port = await app.workbench.debug.startDebugging(); await app.screenCapturer.capture('debugging has started'); - await new Promise((c, e) => http.get(`http://localhost:${port}`).on('response', c).on('error', e)); - await app.screenCapturer.capture('server was pinged'); + await new Promise((c, e) => { + const request = http.get(`http://localhost:${port}`); + request.on('error', e); + app.workbench.debug.waitForStackFrame(sf => sf.name === 'index.js' && sf.lineNumber === 6).then(c, e); + }); - await app.workbench.debug.waitForStackFrame(sf => sf.name === 'index.js' && sf.lineNumber === 6); await app.screenCapturer.capture('debugging is paused'); }); @@ -108,15 +112,17 @@ describe('Debug', () => { await app.workbench.debug.continue(); await app.screenCapturer.capture('debugging has continued'); - await new Promise((c, e) => http.get(`http://localhost:${port}`).on('response', c).on('error', e)); - await app.screenCapturer.capture('server was pinged'); + await new Promise((c, e) => { + const request = http.get(`http://localhost:${port}`); + request.on('error', e); + app.workbench.debug.waitForStackFrame(sf => sf.name === 'index.js' && sf.lineNumber === 6).then(c, e); + }); - await app.workbench.debug.waitForStackFrame(sf => sf.name === 'index.js' && sf.lineNumber === 6); await app.screenCapturer.capture('debugging is paused'); }); it('debug console', async function () { - await app.client.waitFor(() => app.workbench.debug.console('2 + 2 \n'), r => r === '4', 'debug console should return 2 + 2 = 4'); + await app.workbench.debug.waitForReplCommand('2 + 2 \n', r => r === '4'); }); it('stop debugging', async function () { diff --git a/test/smoke/src/areas/debug/debug.ts b/test/smoke/src/areas/debug/debug.ts index ddca2631983..e16e3a51bc5 100644 --- a/test/smoke/src/areas/debug/debug.ts +++ b/test/smoke/src/areas/debug/debug.ts @@ -25,7 +25,6 @@ const STACK_FRAME = `${VIEWLET} .monaco-tree-row .stack-frame`; const VARIABLE = `${VIEWLET} .debug-variables .monaco-tree-row .expression`; const CONSOLE_OUTPUT = `.repl .output.expression`; const CONSOLE_INPUT_OUTPUT = `.repl .input-output-pair .output.expression .value`; -const SCOPE = `${VIEWLET} .debug-variables .scope`; const REPL_FOCUSED = '.repl-input-wrapper .monaco-editor.focused'; @@ -112,18 +111,18 @@ export class Debug extends Viewlet { await this.spectron.workbench.waitForTab(name); } - async console(text: string): Promise { + async waitForReplCommand(text: string, accept: (result: string) => boolean): Promise { await this.spectron.workbench.quickopen.runCommand('Debug: Focus Debug Console'); await this.spectron.client.waitForElement(REPL_FOCUSED); await this.spectron.client.type(text); await this.spectron.client.waitForElement(CONSOLE_INPUT_OUTPUT); - - const result = await this.getConsoleOutput(); - return result[result.length - 1] || ''; + await this.spectron.client.waitFor(async () => { + const result = await this.getConsoleOutput(); + return result[result.length - 1] || ''; + }, accept); } async getLocalVariableCount(): Promise { - await this.spectron.client.waitForElement(SCOPE); return await this.spectron.webclient.selectorExecute(VARIABLE, div => (Array.isArray(div) ? div : [div]).length); } diff --git a/test/smoke/src/areas/statusbar/statusbar.test.ts b/test/smoke/src/areas/statusbar/statusbar.test.ts index 42a71882469..b5f38b67194 100644 --- a/test/smoke/src/areas/statusbar/statusbar.test.ts +++ b/test/smoke/src/areas/statusbar/statusbar.test.ts @@ -79,7 +79,7 @@ describe('Statusbar', () => { await app.workbench.quickopen.waitForQuickOpenOpened(); - app.workbench.quickopen.selectQuickOpenElement(1); + await app.workbench.quickopen.selectQuickOpenElement(1); await app.workbench.statusbar.waitForEOL('CRLF'); }); }); \ No newline at end of file diff --git a/test/smoke/src/spectron/application.ts b/test/smoke/src/spectron/application.ts index e4dfb9932fc..abdeb24ff01 100644 --- a/test/smoke/src/spectron/application.ts +++ b/test/smoke/src/spectron/application.ts @@ -27,9 +27,10 @@ export enum VSCODE_BUILD { STABLE } -async function findFreePort(): Promise { +// Just hope random helps us here, cross your fingers! +export async function findFreePort(): Promise { for (let i = 0; i < 10; i++) { - const port = 10000 + Math.round(Math.random() * 5000); + const port = 10000 + Math.round(Math.random() * 10000); if (await testPort(port)) { return port; @@ -83,10 +84,10 @@ export class SpectronApplication { return this._workbench; } - public async start(testSuiteName: string, codeArgs: string[] = []): Promise { + public async start(testSuiteName: string, codeArgs: string[] = [], env = process.env): Promise { await this.retrieveKeybindings(); cp.execSync('git checkout .', { cwd: WORKSPACE_PATH }); - await this.startApplication(testSuiteName, codeArgs); + await this.startApplication(testSuiteName, codeArgs, env); await this.checkWindowReady(); await this.waitForWelcome(); await this.screenCapturer.capture('Application started'); @@ -110,7 +111,7 @@ export class SpectronApplication { return new Promise(resolve => setTimeout(resolve, seconds * 1000)); } - private async startApplication(testSuiteName: string, codeArgs: string[] = []): Promise { + private async startApplication(testSuiteName: string, codeArgs: string[] = [], env = process.env): Promise { let args: string[] = []; let chromeDriverArgs: string[] = []; @@ -120,8 +121,13 @@ export class SpectronApplication { } args.push(this._workspace); + // Prevent 'Getting Started' web page from opening on clean user-data-dir args.push('--skip-getting-started'); + + // Prevent Quick Open from closing when focus is stolen, this allows concurrent smoketest suite running + args.push('--sticky-quickopen'); + // Ensure that running over custom extensions directory, rather than picking up the one that was used by a tester previously args.push(`--extensions-dir=${EXTENSIONS_DIR}`); @@ -139,6 +145,7 @@ export class SpectronApplication { path: this._electronPath, port, args, + env, chromeDriverArgs, startTimeout: 10000, requireName: 'nodeRequire' diff --git a/test/smoke/src/spectron/client.ts b/test/smoke/src/spectron/client.ts index 2d48c427cd4..72697d5d903 100644 --- a/test/smoke/src/spectron/client.ts +++ b/test/smoke/src/spectron/client.ts @@ -145,30 +145,41 @@ export class SpectronClient { return this.spectron.client.getTitle(); } + private running = false; public async waitFor(func: () => T | Promise, accept?: (result: T) => boolean | Promise, timeoutMessage?: string, retryCount?: number): Promise; public async waitFor(func: () => T | Promise, accept: (result: T) => boolean | Promise = result => !!result, timeoutMessage?: string, retryCount?: number): Promise { - let trial = 1; - retryCount = typeof retryCount === 'number' ? retryCount : this.retryCount; + if (this.running) { + throw new Error('Not allowed to run nested waitFor calls!'); + } - while (true) { - if (trial > retryCount) { - await this.application.screenCapturer.capture('timeout'); - throw new Error(`${timeoutMessage}: Timed out after ${(retryCount * this.retryDuration) / 1000} seconds.`); + this.running = true; + + try { + let trial = 1; + retryCount = typeof retryCount === 'number' ? retryCount : this.retryCount; + + while (true) { + if (trial > retryCount) { + await this.application.screenCapturer.capture('timeout'); + throw new Error(`${timeoutMessage}: Timed out after ${(retryCount * this.retryDuration) / 1000} seconds.`); + } + + let result; + try { + result = await func(); + } catch (e) { + // console.log(e); + } + + if (accept(result)) { + return result; + } + + await new Promise(resolve => setTimeout(resolve, this.retryDuration)); + trial++; } - - let result; - try { - result = await func(); - } catch (e) { - // console.log(e); - } - - if (accept(result)) { - return result; - } - - await new Promise(resolve => setTimeout(resolve, this.retryDuration)); - trial++; + } finally { + this.running = false; } } diff --git a/test/smoke/test/mocha.opts b/test/smoke/test/mocha.opts index f7385dc1642..102d5b65ade 100644 --- a/test/smoke/test/mocha.opts +++ b/test/smoke/test/mocha.opts @@ -1,3 +1,3 @@ --timeout 60000 ---slow 10000 +--slow 20000 out/main.js \ No newline at end of file