mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 11:01:37 -05:00
Compare commits
49 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
637dc9b9b2 | ||
|
|
1de16d4715 | ||
|
|
49090d774d | ||
|
|
9a695b5cdd | ||
|
|
e0339b50c0 | ||
|
|
d0c584672f | ||
|
|
27816acaeb | ||
|
|
4de3cc8a09 | ||
|
|
5c16ceb2fa | ||
|
|
9db3f73413 | ||
|
|
e0ceddce09 | ||
|
|
6dc4096299 | ||
|
|
1fa03b5c74 | ||
|
|
f8f57a93c3 | ||
|
|
960fe63312 | ||
|
|
7545b94128 | ||
|
|
1263a27c1c | ||
|
|
e1c084d365 | ||
|
|
7465ec0bbd | ||
|
|
17ed57836f | ||
|
|
d0acb51fd7 | ||
|
|
71c1ed6c49 | ||
|
|
bfb68254a4 | ||
|
|
18f7662209 | ||
|
|
a0d84f383c | ||
|
|
1f447ae681 | ||
|
|
8bd6691331 | ||
|
|
42afcf9322 | ||
|
|
3d3694bb8d | ||
|
|
589b913960 | ||
|
|
7ba4f42494 | ||
|
|
c96118d2b5 | ||
|
|
0285d8cd38 | ||
|
|
ee87604a4d | ||
|
|
2235ebaf20 | ||
|
|
954d0d954f | ||
|
|
e31747d087 | ||
|
|
fc581253a4 | ||
|
|
47c4609f23 | ||
|
|
2d52bc2a49 | ||
|
|
5367101330 | ||
|
|
db145b4999 | ||
|
|
7f950ddb80 | ||
|
|
50e2251e74 | ||
|
|
33d5455b6f | ||
|
|
ac018500cd | ||
|
|
3e661db283 | ||
|
|
18fb78b3ec | ||
|
|
58ff13d399 |
24
.vscode/launch.json
vendored
24
.vscode/launch.json
vendored
@@ -92,6 +92,30 @@
|
||||
"webRoot": "${workspaceFolder}",
|
||||
"timeout": 45000
|
||||
},
|
||||
{
|
||||
"type": "chrome",
|
||||
"request": "launch",
|
||||
"name": "Launch azuredatastudio with new notebook command",
|
||||
"windows": {
|
||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat"
|
||||
},
|
||||
"osx": {
|
||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh"
|
||||
},
|
||||
"linux": {
|
||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh"
|
||||
},
|
||||
"urlFilter": "*index.html*",
|
||||
"runtimeArgs": [
|
||||
"--inspect=5875",
|
||||
"--command=notebook.command.new"
|
||||
],
|
||||
"skipFiles": [
|
||||
"**/winjs*.js"
|
||||
],
|
||||
"webRoot": "${workspaceFolder}",
|
||||
"timeout": 45000
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
|
||||
22
CHANGELOG.md
22
CHANGELOG.md
@@ -1,5 +1,27 @@
|
||||
# Change Log
|
||||
|
||||
## Version 1.3.8
|
||||
* Release date: January 9, 2019
|
||||
* Release status: General Availability
|
||||
|
||||
## What's new in this version
|
||||
* #13 Feature Request: Azure Active Directory Authentication
|
||||
* #1040 Stream initial query results as they become available
|
||||
* #3298 Сan't add an azure account.
|
||||
* #2387 Support Per-User Installer
|
||||
* SQL Server Import updates for DACPAC\BACPAC
|
||||
* SQL Server Profiler UI and UX improvements
|
||||
* Updates to [SQL Server 2019 extension](https://docs.microsoft.com/sql/azure-data-studio/sql-server-2019-extension?view=sql-server-ver15)
|
||||
* **sp_executesql to SQL** and **New Database** extensions
|
||||
|
||||
## Contributions and "thank you"
|
||||
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
||||
|
||||
* Tarig0 for `Add Routine_Type to CreateStoredProc fixes #3257 (#3286)`
|
||||
* oltruong for `typo fix #3025'`
|
||||
* Thomas-S-B for `Removed unnecessary IErrorDetectionStrategy #749`
|
||||
* Thomas-S-B for `Simplified code #750`
|
||||
|
||||
## Version 1.2.4
|
||||
* Release date: November 6, 2018
|
||||
* Release status: General Availability
|
||||
|
||||
17
README.md
17
README.md
@@ -9,12 +9,13 @@ Azure Data Studio is a data management tool that enables you to work with SQL Se
|
||||
|
||||
Platform | Link
|
||||
-- | --
|
||||
Windows Setup Installer | https://go.microsoft.com/fwlink/?linkid=2038320
|
||||
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2038323
|
||||
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2038327
|
||||
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2038332
|
||||
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2038401
|
||||
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2038405
|
||||
Windows User Installer | https://go.microsoft.com/fwlink/?linkid=2049972
|
||||
Windows System Installer | https://go.microsoft.com/fwlink/?linkid=2049975
|
||||
Windows ZIP | https://go.microsoft.com/fwlink/?linkid=2050146
|
||||
macOS ZIP | https://go.microsoft.com/fwlink/?linkid=2049981
|
||||
Linux TAR.GZ | https://go.microsoft.com/fwlink/?linkid=2049986
|
||||
Linux RPM | https://go.microsoft.com/fwlink/?linkid=2049989
|
||||
Linux DEB | https://go.microsoft.com/fwlink/?linkid=2050157
|
||||
|
||||
Go to our [download page](https://aka.ms/azuredatastudio) for more specific instructions.
|
||||
|
||||
@@ -62,6 +63,10 @@ The [Microsoft Enterprise and Developer Privacy Statement](https://privacy.micro
|
||||
## Contributions and "Thank You"
|
||||
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
||||
|
||||
* Tarig0 for `Add Routine_Type to CreateStoredProc fixes #3257 (#3286)`
|
||||
* oltruong for `typo fix #3025'`
|
||||
* Thomas-S-B for `Removed unnecessary IErrorDetectionStrategy #749`
|
||||
* Thomas-S-B for `Simplified code #750`
|
||||
* rdaniels6813 for `Add query plan theme support #3031`
|
||||
* Ruturaj123 for `Fixed some typos and grammatical errors #3027`
|
||||
* PromoFaux for `Use emoji shortcodes in CONTRIBUTING.md instead of <20> #3009`
|
||||
|
||||
@@ -34,5 +34,9 @@ steps:
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: '**/test-results.xml'
|
||||
condition: succeededOrFailed()
|
||||
testResultsFiles: '**/test-results.xml'
|
||||
condition: succeededOrFailed()
|
||||
|
||||
- script: |
|
||||
yarn run tslint
|
||||
displayName: 'Run TSLint'
|
||||
@@ -23,4 +23,8 @@ steps:
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: 'test-results.xml'
|
||||
condition: succeededOrFailed()
|
||||
condition: succeededOrFailed()
|
||||
|
||||
- script: |
|
||||
yarn run tslint
|
||||
displayName: 'Run TSLint'
|
||||
@@ -17,12 +17,12 @@
|
||||
"configuration": [
|
||||
{
|
||||
"type": "object",
|
||||
"title": "%azure.config.title%",
|
||||
"title": "%azure.resource.config.title%",
|
||||
"properties": {
|
||||
"azureResource.resourceFilter": {
|
||||
"azure.resource.config.filter": {
|
||||
"type": "array",
|
||||
"default": null,
|
||||
"description": "%azure.resourceFilter.description%"
|
||||
"description": "%azure.resource.config.filter.description%"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -61,39 +61,47 @@
|
||||
"category": "Azure Accounts"
|
||||
},
|
||||
{
|
||||
"command": "azureresource.refreshall",
|
||||
"title": "%azureresource.refreshall%",
|
||||
"command": "azure.resource.refreshall",
|
||||
"title": "%azure.resource.refreshall.title%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/refresh_inverse.svg",
|
||||
"light": "resources/light/refresh.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azureresource.refresh",
|
||||
"title": "%azureresource.refresh%",
|
||||
"command": "azure.resource.refresh",
|
||||
"title": "%azure.resource.refresh.title%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/refresh_inverse.svg",
|
||||
"light": "resources/light/refresh.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azureresource.signin",
|
||||
"title": "%azureresource.signin%"
|
||||
"command": "azure.resource.signin",
|
||||
"title": "%azure.resource.signin.title%"
|
||||
},
|
||||
{
|
||||
"command": "azureresource.connectsqldb",
|
||||
"title": "%azureresource.connectsqldb%",
|
||||
"command": "azure.resource.selectsubscriptions",
|
||||
"title": "%azure.resource.selectsubscriptions.title%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/filter_inverse.svg",
|
||||
"light": "resources/light/filter.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.connectsqlserver",
|
||||
"title": "%azure.resource.connectsqlserver.title%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/connect_to_inverse.svg",
|
||||
"light": "resources/light/connect_to.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azureresource.selectsubscriptions",
|
||||
"title": "%azureresource.selectsubscriptions%",
|
||||
"command": "azure.resource.connectsqldb",
|
||||
"title": "%azure.resource.connectsqldb.title%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/filter_inverse.svg",
|
||||
"light": "resources/light/filter.svg"
|
||||
"dark": "resources/dark/connect_to_inverse.svg",
|
||||
"light": "resources/light/connect_to.svg"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -110,46 +118,47 @@
|
||||
"azureResource": [
|
||||
{
|
||||
"id": "azureResourceExplorer",
|
||||
"name": "%azure.resourceExplorer.title%"
|
||||
"name": "%azure.resource.explorer.title%"
|
||||
}
|
||||
]
|
||||
},
|
||||
"menus": {
|
||||
"view/title": [
|
||||
{
|
||||
"command": "azureresource.refreshall",
|
||||
"command": "azure.resource.refreshall",
|
||||
"when": "view == azureResourceExplorer",
|
||||
"group": "navigation@1"
|
||||
}
|
||||
],
|
||||
"view/item/context": [
|
||||
{
|
||||
"command": "azureresource.connectsqldb",
|
||||
"when": "viewItem =~ /^azureResource\\.itemType\\.database(?:Server){0,1}$/",
|
||||
"group": "1azureresource@1"
|
||||
},
|
||||
{
|
||||
"command": "azureresource.connectsqldb",
|
||||
"when": "viewItem =~ /^azureResource\\.itemType\\.database(?:Server){0,1}$/",
|
||||
"command": "azure.resource.selectsubscriptions",
|
||||
"when": "viewItem == azure.resource.itemType.account",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "azureresource.selectsubscriptions",
|
||||
"when": "viewItem == azureResource.itemType.account",
|
||||
"command": "azure.resource.refresh",
|
||||
"when": "viewItem =~ /^azure\\.resource\\.itemType\\.(?:account|subscription|databaseContainer|databaseServerContainer)$/",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "azureresource.refresh",
|
||||
"when": "viewItem =~ /^azureResource\\.itemType\\.(?:account|subscription|databaseContainer|databaseServerContainer)$/",
|
||||
"command": "azure.resource.connectsqlserver",
|
||||
"when": "viewItem == azure.resource.itemType.databaseServer",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.connectsqldb",
|
||||
"when": "viewItem == azure.resource.itemType.database",
|
||||
"group": "inline"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"hasAzureResourceProviders": true
|
||||
},
|
||||
"dependencies": {
|
||||
"request": "2.88.0",
|
||||
"azure-arm-resource": "^7.0.0",
|
||||
"azure-arm-sql": "^5.0.1",
|
||||
"request": "2.88.0",
|
||||
"vscode-nls": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -157,6 +166,7 @@
|
||||
"@types/node": "^8.0.24",
|
||||
"mocha": "^5.2.0",
|
||||
"should": "^13.2.1",
|
||||
"vscode": "^1.1.26",
|
||||
"typemoq": "^2.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
{
|
||||
"azure.displayName": "Azure (Core)",
|
||||
"azure.description": "Browse and work with Azure resources",
|
||||
"azure.config.title": "Azure Resource Configuration",
|
||||
"azure.resourceFilter.description": "The resource filter, each element is an account id, a subscription id and name separated by a slash",
|
||||
"azureresource.refreshall": "Refresh All",
|
||||
"azureresource.refresh": "Refresh",
|
||||
"azureresource.signin": "Sign In",
|
||||
"azureresource.connectsqldb": "Connect",
|
||||
"azureresource.selectsubscriptions": "Select Subscriptions",
|
||||
"azure.title": "Azure",
|
||||
"azure.resourceExplorer.title": "Resource Explorer",
|
||||
|
||||
"azure.resource.config.title": "Azure Resource Configuration",
|
||||
"azure.resource.config.filter.description": "The resource filter, each element is an account id, a subscription id and name separated by a slash",
|
||||
"azure.resource.explorer.title": "Resource Explorer",
|
||||
"azure.resource.refreshall.title": "Refresh All",
|
||||
"azure.resource.refresh.title": "Refresh",
|
||||
"azure.resource.signin.title": "Sign In",
|
||||
"azure.resource.selectsubscriptions.title": "Select Subscriptions",
|
||||
"azure.resource.connectsqlserver.title": "Connect",
|
||||
"azure.resource.connectsqldb.title": "Connect",
|
||||
|
||||
"accounts.clearTokenCache": "Clear Azure Account Token Cache",
|
||||
|
||||
"config.enablePublicCloudDescription": "Should Azure public cloud integration be enabled",
|
||||
"config.enableUsGovCloudDescription": "Should US Government Azure cloud (Fairfax) integration be enabled",
|
||||
"config.enableChinaCloudDescription": "Should Azure China integration be enabled",
|
||||
|
||||
28
extensions/azurecore/src/azureResource/azure-resource.d.ts
vendored
Normal file
28
extensions/azurecore/src/azureResource/azure-resource.d.ts
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { TreeDataProvider, TreeItem } from 'vscode';
|
||||
import { DataProvider, Account } from 'sqlops';
|
||||
|
||||
export namespace azureResource {
|
||||
export interface IAzureResourceProvider extends DataProvider {
|
||||
getTreeDataProvider(): IAzureResourceTreeDataProvider;
|
||||
}
|
||||
|
||||
export interface IAzureResourceTreeDataProvider extends TreeDataProvider<IAzureResourceNode> {
|
||||
}
|
||||
|
||||
export interface IAzureResourceNode {
|
||||
readonly account: Account;
|
||||
readonly subscription: AzureResourceSubscription;
|
||||
readonly tenantId: string;
|
||||
readonly treeItem: TreeItem;
|
||||
}
|
||||
|
||||
export interface AzureResourceSubscription {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
}
|
||||
@@ -6,35 +6,48 @@
|
||||
'use strict';
|
||||
|
||||
import { window, QuickPickItem } from 'vscode';
|
||||
import * as sqlops from 'sqlops';
|
||||
import { generateGuid } from './utils';
|
||||
import { ApiWrapper } from '../apiWrapper';
|
||||
import { TreeNode } from '../treeNodes';
|
||||
import { AzureResource } from 'sqlops';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import { AppContext } from '../appContext';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { azureResource } from './azure-resource';
|
||||
import { TreeNode } from './treeNode';
|
||||
import { AzureResourceCredentialError } from './errors';
|
||||
import { AzureResourceTreeProvider } from './tree/treeProvider';
|
||||
import { AzureResourceDatabaseServerTreeNode } from './tree/databaseServerTreeNode';
|
||||
import { AzureResourceDatabaseTreeNode } from './tree/databaseTreeNode';
|
||||
import { AzureResourceAccountTreeNode } from './tree/accountTreeNode';
|
||||
import { AzureResourceServicePool } from './servicePool';
|
||||
import { AzureResourceSubscription } from './models';
|
||||
import { IAzureResourceSubscriptionService, IAzureResourceSubscriptionFilterService } from '../azureResource/interfaces';
|
||||
import { AzureResourceServiceNames } from './constants';
|
||||
|
||||
export function registerAzureResourceCommands(apiWrapper: ApiWrapper, tree: AzureResourceTreeProvider): void {
|
||||
apiWrapper.registerCommand('azureresource.selectsubscriptions', async (node?: TreeNode) => {
|
||||
export function registerAzureResourceCommands(appContext: AppContext, tree: AzureResourceTreeProvider): void {
|
||||
appContext.apiWrapper.registerCommand('azure.resource.selectsubscriptions', async (node?: TreeNode) => {
|
||||
if (!(node instanceof AzureResourceAccountTreeNode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const subscriptionService = appContext.getService<IAzureResourceSubscriptionService>(AzureResourceServiceNames.subscriptionService);
|
||||
const subscriptionFilterService = appContext.getService<IAzureResourceSubscriptionFilterService>(AzureResourceServiceNames.subscriptionFilterService);
|
||||
|
||||
const accountNode = node as AzureResourceAccountTreeNode;
|
||||
|
||||
const servicePool = AzureResourceServicePool.getInstance();
|
||||
const subscriptions = (await accountNode.getCachedSubscriptions()) || <azureResource.AzureResourceSubscription[]>[];
|
||||
if (subscriptions.length === 0) {
|
||||
try {
|
||||
const tokens = await this.servicePool.apiWrapper.getSecurityToken(this.account, AzureResource.ResourceManagement);
|
||||
|
||||
let subscriptions = await accountNode.getCachedSubscriptions();
|
||||
if (!subscriptions || subscriptions.length === 0) {
|
||||
const credentials = await servicePool.credentialService.getCredentials(accountNode.account, sqlops.AzureResource.ResourceManagement);
|
||||
subscriptions = await servicePool.subscriptionService.getSubscriptions(accountNode.account, credentials);
|
||||
for (const tenant of this.account.properties.tenants) {
|
||||
const token = tokens[tenant.id].token;
|
||||
const tokenType = tokens[tenant.id].tokenType;
|
||||
|
||||
subscriptions.push(...await subscriptionService.getSubscriptions(accountNode.account, new TokenCredentials(token, tokenType)));
|
||||
}
|
||||
} catch (error) {
|
||||
throw new AzureResourceCredentialError(localize('azure.resource.selectsubscriptions.credentialError', 'Failed to get credential for account {0}. Please refresh the account.', this.account.key.accountId), error);
|
||||
}
|
||||
}
|
||||
|
||||
const selectedSubscriptions = (await servicePool.subscriptionFilterService.getSelectedSubscriptions(accountNode.account)) || <AzureResourceSubscription[]>[];
|
||||
let selectedSubscriptions = (await subscriptionFilterService.getSelectedSubscriptions(accountNode.account)) || <azureResource.AzureResourceSubscription[]>[];
|
||||
const selectedSubscriptionIds: string[] = [];
|
||||
if (selectedSubscriptions.length > 0) {
|
||||
selectedSubscriptionIds.push(...selectedSubscriptions.map((subscription) => subscription.id));
|
||||
@@ -43,11 +56,11 @@ export function registerAzureResourceCommands(apiWrapper: ApiWrapper, tree: Azur
|
||||
selectedSubscriptionIds.push(...subscriptions.map((subscription) => subscription.id));
|
||||
}
|
||||
|
||||
interface SubscriptionQuickPickItem extends QuickPickItem {
|
||||
subscription: AzureResourceSubscription;
|
||||
interface AzureResourceSubscriptionQuickPickItem extends QuickPickItem {
|
||||
subscription: azureResource.AzureResourceSubscription;
|
||||
}
|
||||
|
||||
const subscriptionItems: SubscriptionQuickPickItem[] = subscriptions.map((subscription) => {
|
||||
const subscriptionQuickPickItems: AzureResourceSubscriptionQuickPickItem[] = subscriptions.map((subscription) => {
|
||||
return {
|
||||
label: subscription.name,
|
||||
picked: selectedSubscriptionIds.indexOf(subscription.id) !== -1,
|
||||
@@ -55,66 +68,22 @@ export function registerAzureResourceCommands(apiWrapper: ApiWrapper, tree: Azur
|
||||
};
|
||||
});
|
||||
|
||||
const pickedSubscriptionItems = (await window.showQuickPick(subscriptionItems, { canPickMany: true }));
|
||||
if (pickedSubscriptionItems && pickedSubscriptionItems.length > 0) {
|
||||
const selectedSubscriptionQuickPickItems = (await window.showQuickPick(subscriptionQuickPickItems, { canPickMany: true }));
|
||||
if (selectedSubscriptionQuickPickItems && selectedSubscriptionQuickPickItems.length > 0) {
|
||||
tree.refresh(node, false);
|
||||
|
||||
const pickedSubscriptions = pickedSubscriptionItems.map((subscriptionItem) => subscriptionItem.subscription);
|
||||
await servicePool.subscriptionFilterService.saveSelectedSubscriptions(accountNode.account, pickedSubscriptions);
|
||||
selectedSubscriptions = selectedSubscriptionQuickPickItems.map((subscriptionItem) => subscriptionItem.subscription);
|
||||
await subscriptionFilterService.saveSelectedSubscriptions(accountNode.account, selectedSubscriptions);
|
||||
}
|
||||
});
|
||||
|
||||
apiWrapper.registerCommand('azureresource.refreshall', () => tree.notifyNodeChanged(undefined));
|
||||
appContext.apiWrapper.registerCommand('azure.resource.refreshall', () => tree.notifyNodeChanged(undefined));
|
||||
|
||||
apiWrapper.registerCommand('azureresource.refresh', async (node?: TreeNode) => {
|
||||
appContext.apiWrapper.registerCommand('azure.resource.refresh', async (node?: TreeNode) => {
|
||||
tree.refresh(node, true);
|
||||
});
|
||||
|
||||
apiWrapper.registerCommand('azureresource.connectsqldb', async (node?: TreeNode) => {
|
||||
let connectionProfile: sqlops.IConnectionProfile = {
|
||||
id: generateGuid(),
|
||||
connectionName: undefined,
|
||||
serverName: undefined,
|
||||
databaseName: undefined,
|
||||
userName: undefined,
|
||||
password: '',
|
||||
authenticationType: undefined,
|
||||
savePassword: true,
|
||||
groupFullName: '',
|
||||
groupId: '',
|
||||
providerName: undefined,
|
||||
saveProfile: true,
|
||||
options: {
|
||||
}
|
||||
};
|
||||
|
||||
if (node instanceof AzureResourceDatabaseServerTreeNode) {
|
||||
let databaseServer = node.databaseServer;
|
||||
connectionProfile.connectionName = `connection to '${databaseServer.defaultDatabaseName}' on '${databaseServer.fullName}'`;
|
||||
connectionProfile.serverName = databaseServer.fullName;
|
||||
connectionProfile.databaseName = databaseServer.defaultDatabaseName;
|
||||
connectionProfile.userName = databaseServer.loginName;
|
||||
connectionProfile.authenticationType = 'SqlLogin';
|
||||
connectionProfile.providerName = 'MSSQL';
|
||||
}
|
||||
|
||||
if (node instanceof AzureResourceDatabaseTreeNode) {
|
||||
let database = node.database;
|
||||
connectionProfile.connectionName = `connection to '${database.name}' on '${database.serverFullName}'`;
|
||||
connectionProfile.serverName = database.serverFullName;
|
||||
connectionProfile.databaseName = database.name;
|
||||
connectionProfile.userName = database.loginName;
|
||||
connectionProfile.authenticationType = 'SqlLogin';
|
||||
connectionProfile.providerName = 'MSSQL';
|
||||
}
|
||||
|
||||
const conn = await apiWrapper.openConnectionDialog(undefined, connectionProfile, { saveConnection: true, showDashboard: true });
|
||||
if (conn) {
|
||||
apiWrapper.executeCommand('workbench.view.connections');
|
||||
}
|
||||
});
|
||||
|
||||
apiWrapper.registerCommand('azureresource.signin', async (node?: TreeNode) => {
|
||||
apiWrapper.executeCommand('sql.action.accounts.manageLinkedAccount');
|
||||
appContext.apiWrapper.registerCommand('azure.resource.signin', async (node?: TreeNode) => {
|
||||
appContext.apiWrapper.executeCommand('sql.action.accounts.manageLinkedAccount');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -6,11 +6,19 @@
|
||||
'use strict';
|
||||
|
||||
export enum AzureResourceItemType {
|
||||
account = 'azureResource.itemType.account',
|
||||
subscription = 'azureResource.itemType.subscription',
|
||||
databaseContainer = 'azureResource.itemType.databaseContainer',
|
||||
database = 'azureResource.itemType.database',
|
||||
databaseServerContainer = 'azureResource.itemType.databaseServerContainer',
|
||||
databaseServer = 'azureResource.itemType.databaseServer',
|
||||
message = 'azureResource.itemType.message'
|
||||
account = 'azure.resource.itemType.account',
|
||||
subscription = 'azure.resource.itemType.subscription',
|
||||
databaseContainer = 'azure.resource.itemType.databaseContainer',
|
||||
database = 'azure.resource.itemType.database',
|
||||
databaseServerContainer = 'azure.resource.itemType.databaseServerContainer',
|
||||
databaseServer = 'azure.resource.itemType.databaseServer',
|
||||
message = 'azure.resource.itemType.message'
|
||||
}
|
||||
|
||||
export enum AzureResourceServiceNames {
|
||||
cacheService = 'AzureResourceCacheService',
|
||||
accountService = 'AzureResourceAccountService',
|
||||
subscriptionService = 'AzureResourceSubscriptionService',
|
||||
subscriptionFilterService = 'AzureResourceSubscriptionFilterService',
|
||||
tenantService = 'AzureResourceTenantService'
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
export class AzureResourceCredentialError extends Error {
|
||||
constructor(
|
||||
message: string,
|
||||
public innerError: Error
|
||||
public readonly innerError: Error
|
||||
) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
@@ -6,49 +6,40 @@
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import * as sqlops from 'sqlops';
|
||||
import { Account, DidChangeAccountsParams } from 'sqlops';
|
||||
import { Event } from 'vscode';
|
||||
|
||||
import { AzureResourceSubscription, AzureResourceDatabaseServer, AzureResourceDatabase } from './models';
|
||||
import { azureResource } from './azure-resource';
|
||||
|
||||
export interface IAzureResourceAccountService {
|
||||
getAccounts(): Promise<sqlops.Account[]>;
|
||||
getAccounts(): Promise<Account[]>;
|
||||
|
||||
readonly onDidChangeAccounts: Event<sqlops.DidChangeAccountsParams>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceCredentialService {
|
||||
getCredentials(account: sqlops.Account, resource: sqlops.AzureResource): Promise<ServiceClientCredentials[]>;
|
||||
readonly onDidChangeAccounts: Event<DidChangeAccountsParams>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceSubscriptionService {
|
||||
getSubscriptions(account: sqlops.Account, credentials: ServiceClientCredentials[]): Promise<AzureResourceSubscription[]>;
|
||||
getSubscriptions(account: Account, credential: ServiceClientCredentials): Promise<azureResource.AzureResourceSubscription[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceSubscriptionFilterService {
|
||||
getSelectedSubscriptions(account: sqlops.Account): Promise<AzureResourceSubscription[]>;
|
||||
getSelectedSubscriptions(account: Account): Promise<azureResource.AzureResourceSubscription[]>;
|
||||
|
||||
saveSelectedSubscriptions(account: sqlops.Account, selectedSubscriptions: AzureResourceSubscription[]): Promise<void>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceDatabaseServerService {
|
||||
getDatabaseServers(subscription: AzureResourceSubscription, credentials: ServiceClientCredentials[]): Promise<AzureResourceDatabaseServer[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceDatabaseService {
|
||||
getDatabases(subscription: AzureResourceSubscription, credentials: ServiceClientCredentials[]): Promise<AzureResourceDatabase[]>;
|
||||
saveSelectedSubscriptions(account: Account, selectedSubscriptions: azureResource.AzureResourceSubscription[]): Promise<void>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceCacheService {
|
||||
generateKey(id: string): string;
|
||||
|
||||
get<T>(key: string): T | undefined;
|
||||
|
||||
update<T>(key: string, value: T): void;
|
||||
}
|
||||
|
||||
export interface IAzureResourceContextService {
|
||||
getAbsolutePath(relativePath: string): string;
|
||||
|
||||
executeCommand(commandId: string, ...args: any[]): void;
|
||||
|
||||
showErrorMessage(errorMessage: string): void;
|
||||
export interface IAzureResourceTenantService {
|
||||
getTenantId(subscription: azureResource.AzureResourceSubscription): Promise<string>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceNodeWithProviderId {
|
||||
resourceProviderId: string;
|
||||
resourceNode: azureResource.IAzureResourceNode;
|
||||
}
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { TreeNode } from './treeNode';
|
||||
import { AzureResourceItemType } from './constants';
|
||||
|
||||
export class AzureResourceMessageTreeNode extends TreeNode {
|
||||
public constructor(
|
||||
@@ -0,0 +1,53 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { IConnectionProfile } from 'sqlops';
|
||||
import { AppContext } from '../../../appContext';
|
||||
|
||||
import { TreeNode } from '../../treeNode';
|
||||
import { generateGuid } from '../../utils';
|
||||
import { AzureResourceItemType } from '../../constants';
|
||||
import { IAzureResourceDatabaseNode } from './interfaces';
|
||||
import { AzureResourceResourceTreeNode } from '../../resourceTreeNode';
|
||||
|
||||
export function registerAzureResourceDatabaseCommands(appContext: AppContext): void {
|
||||
appContext.apiWrapper.registerCommand('azure.resource.connectsqldb', async (node?: TreeNode) => {
|
||||
if (!node)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const treeItem = await node.getTreeItem();
|
||||
if (treeItem.contextValue !== AzureResourceItemType.database) {
|
||||
return;
|
||||
}
|
||||
|
||||
const resourceNode = (node as AzureResourceResourceTreeNode).resourceNodeWithProviderId.resourceNode;
|
||||
const database = (resourceNode as IAzureResourceDatabaseNode).database;
|
||||
|
||||
let connectionProfile: IConnectionProfile = {
|
||||
id: generateGuid(),
|
||||
connectionName: undefined,
|
||||
serverName: database.serverFullName,
|
||||
databaseName: database.name,
|
||||
userName: database.loginName,
|
||||
password: '',
|
||||
authenticationType: 'SqlLogin',
|
||||
savePassword: true,
|
||||
groupFullName: '',
|
||||
groupId: '',
|
||||
providerName: 'MSSQL',
|
||||
saveProfile: true,
|
||||
options: {}
|
||||
};
|
||||
|
||||
const conn = await appContext.apiWrapper.openConnectionDialog(undefined, connectionProfile, { saveConnection: true, showDashboard: true });
|
||||
if (conn) {
|
||||
appContext.apiWrapper.executeCommand('workbench.view.connections');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ExtensionContext } from 'vscode';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { IAzureResourceDatabaseService } from './interfaces';
|
||||
import { AzureResourceDatabaseTreeDataProvider } from './databaseTreeDataProvider';
|
||||
|
||||
export class AzureResourceDatabaseProvider implements azureResource.IAzureResourceProvider {
|
||||
public constructor(
|
||||
databaseService: IAzureResourceDatabaseService,
|
||||
apiWrapper: ApiWrapper,
|
||||
extensionContext: ExtensionContext
|
||||
) {
|
||||
this._databaseService = databaseService;
|
||||
this._apiWrapper = apiWrapper;
|
||||
this._extensionContext = extensionContext;
|
||||
}
|
||||
|
||||
public getTreeDataProvider(): azureResource.IAzureResourceTreeDataProvider {
|
||||
return new AzureResourceDatabaseTreeDataProvider(this._databaseService, this._apiWrapper, this._extensionContext);
|
||||
}
|
||||
|
||||
public get providerId(): string {
|
||||
return 'azure.resource.providers.database';
|
||||
}
|
||||
|
||||
private _databaseService: IAzureResourceDatabaseService = undefined;
|
||||
private _apiWrapper: ApiWrapper = undefined;
|
||||
private _extensionContext: ExtensionContext = undefined;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { SqlManagementClient } from 'azure-arm-sql';
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { IAzureResourceDatabaseService } from './interfaces';
|
||||
import { AzureResourceDatabase } from './models';
|
||||
|
||||
export class AzureResourceDatabaseService implements IAzureResourceDatabaseService {
|
||||
public async getDatabases(subscription: azureResource.AzureResourceSubscription, credential: ServiceClientCredentials): Promise<AzureResourceDatabase[]> {
|
||||
const databases: AzureResourceDatabase[] = [];
|
||||
const sqlManagementClient = new SqlManagementClient(credential, subscription.id);
|
||||
const svrs = await sqlManagementClient.servers.list();
|
||||
for (const svr of svrs) {
|
||||
// Extract resource group name from svr.id
|
||||
const svrIdRegExp = new RegExp(`\/subscriptions\/${subscription.id}\/resourceGroups\/(.+)\/providers\/Microsoft\.Sql\/servers\/${svr.name}`);
|
||||
if (!svrIdRegExp.test(svr.id)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const founds = svrIdRegExp.exec(svr.id);
|
||||
const resouceGroup = founds[1];
|
||||
|
||||
const dbs = await sqlManagementClient.databases.listByServer(resouceGroup, svr.name);
|
||||
dbs.forEach((db) => databases.push({
|
||||
name: db.name,
|
||||
serverName: svr.name,
|
||||
serverFullName: svr.fullyQualifiedDomainName,
|
||||
loginName: svr.administratorLogin
|
||||
}));
|
||||
}
|
||||
|
||||
return databases;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { AzureResource } from 'sqlops';
|
||||
import { TreeItem, TreeItemCollapsibleState, ExtensionContext } from 'vscode';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { IAzureResourceDatabaseService, IAzureResourceDatabaseNode } from './interfaces';
|
||||
import { AzureResourceDatabase } from './models';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
|
||||
export class AzureResourceDatabaseTreeDataProvider implements azureResource.IAzureResourceTreeDataProvider {
|
||||
public constructor(
|
||||
databaseService: IAzureResourceDatabaseService,
|
||||
apiWrapper: ApiWrapper,
|
||||
extensionContext: ExtensionContext
|
||||
) {
|
||||
this._databaseService = databaseService;
|
||||
this._apiWrapper = apiWrapper;
|
||||
this._extensionContext = extensionContext;
|
||||
}
|
||||
|
||||
public getTreeItem(element: azureResource.IAzureResourceNode): TreeItem | Thenable<TreeItem> {
|
||||
return element.treeItem;
|
||||
}
|
||||
|
||||
public async getChildren(element?: azureResource.IAzureResourceNode): Promise<azureResource.IAzureResourceNode[]> {
|
||||
if (!element) {
|
||||
return [this.createContainerNode()];
|
||||
}
|
||||
|
||||
const tokens = await this._apiWrapper.getSecurityToken(element.account, AzureResource.ResourceManagement);
|
||||
const credential = new TokenCredentials(tokens[element.tenantId].token, tokens[element.tenantId].tokenType);
|
||||
|
||||
const databases: AzureResourceDatabase[] = (await this._databaseService.getDatabases(element.subscription, credential)) || <AzureResourceDatabase[]>[];
|
||||
|
||||
return databases.map((database) => <IAzureResourceDatabaseNode>{
|
||||
account: element.account,
|
||||
subscription: element.subscription,
|
||||
tenantId: element.tenantId,
|
||||
database: database,
|
||||
treeItem: {
|
||||
id: `databaseServer_${database.serverFullName}.database_${database.name}`,
|
||||
label: `${database.name} (${database.serverName})`,
|
||||
iconPath: {
|
||||
dark: this._extensionContext.asAbsolutePath('resources/dark/sql_database_inverse.svg'),
|
||||
light: this._extensionContext.asAbsolutePath('resources/light/sql_database.svg')
|
||||
},
|
||||
collapsibleState: TreeItemCollapsibleState.None,
|
||||
contextValue: AzureResourceItemType.database
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private createContainerNode(): azureResource.IAzureResourceNode {
|
||||
return {
|
||||
account: undefined,
|
||||
subscription: undefined,
|
||||
tenantId: undefined,
|
||||
treeItem: {
|
||||
id: AzureResourceDatabaseTreeDataProvider.containerId,
|
||||
label: AzureResourceDatabaseTreeDataProvider.containerLabel,
|
||||
iconPath: {
|
||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||
},
|
||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||
contextValue: AzureResourceItemType.databaseContainer
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private _databaseService: IAzureResourceDatabaseService = undefined;
|
||||
private _apiWrapper: ApiWrapper = undefined;
|
||||
private _extensionContext: ExtensionContext = undefined;
|
||||
|
||||
private static readonly containerId = 'azure.resource.providers.database.treeDataProvider.databaseContainer';
|
||||
private static readonly containerLabel = localize('azure.resource.providers.database.treeDataProvider.databaseContainerLabel', 'SQL Databases');
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { AzureResourceDatabase } from './models';
|
||||
|
||||
export interface IAzureResourceDatabaseService {
|
||||
getDatabases(subscription: azureResource.AzureResourceSubscription, credential: ServiceClientCredentials): Promise<AzureResourceDatabase[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceDatabaseNode extends azureResource.IAzureResourceNode {
|
||||
readonly database: AzureResourceDatabase;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
export interface AzureResourceDatabase {
|
||||
name: string;
|
||||
serverName: string;
|
||||
serverFullName: string;
|
||||
loginName: string;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { IConnectionProfile } from 'sqlops';
|
||||
import { AppContext } from '../../../appContext';
|
||||
|
||||
import { TreeNode } from '../../treeNode';
|
||||
import { generateGuid } from '../../utils';
|
||||
import { AzureResourceItemType } from '../../constants';
|
||||
import { IAzureResourceDatabaseServerNode } from './interfaces';
|
||||
import { AzureResourceResourceTreeNode } from '../../resourceTreeNode';
|
||||
|
||||
export function registerAzureResourceDatabaseServerCommands(appContext: AppContext): void {
|
||||
appContext.apiWrapper.registerCommand('azure.resource.connectsqlserver', async (node?: TreeNode) => {
|
||||
if (!node)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const treeItem = await node.getTreeItem();
|
||||
if (treeItem.contextValue !== AzureResourceItemType.databaseServer) {
|
||||
return;
|
||||
}
|
||||
|
||||
const resourceNode = (node as AzureResourceResourceTreeNode).resourceNodeWithProviderId.resourceNode;
|
||||
const databaseServer = (resourceNode as IAzureResourceDatabaseServerNode).databaseServer;
|
||||
|
||||
let connectionProfile: IConnectionProfile = {
|
||||
id: generateGuid(),
|
||||
connectionName: undefined,
|
||||
serverName: databaseServer.fullName,
|
||||
databaseName: databaseServer.defaultDatabaseName,
|
||||
userName: databaseServer.loginName,
|
||||
password: '',
|
||||
authenticationType: 'SqlLogin',
|
||||
savePassword: true,
|
||||
groupFullName: '',
|
||||
groupId: '',
|
||||
providerName: 'MSSQL',
|
||||
saveProfile: true,
|
||||
options: {}
|
||||
};
|
||||
|
||||
const conn = await appContext.apiWrapper.openConnectionDialog(undefined, connectionProfile, { saveConnection: true, showDashboard: true });
|
||||
if (conn) {
|
||||
appContext.apiWrapper.executeCommand('workbench.view.connections');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ExtensionContext } from 'vscode';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { IAzureResourceDatabaseServerService } from './interfaces';
|
||||
import { AzureResourceDatabaseServerTreeDataProvider } from './databaseServerTreeDataProvider';
|
||||
|
||||
export class AzureResourceDatabaseServerProvider implements azureResource.IAzureResourceProvider {
|
||||
public constructor(
|
||||
databaseServerService: IAzureResourceDatabaseServerService,
|
||||
apiWrapper: ApiWrapper,
|
||||
extensionContext: ExtensionContext
|
||||
) {
|
||||
this._databaseServerService = databaseServerService;
|
||||
this._apiWrapper = apiWrapper;
|
||||
this._extensionContext = extensionContext;
|
||||
}
|
||||
|
||||
public getTreeDataProvider(): azureResource.IAzureResourceTreeDataProvider {
|
||||
return new AzureResourceDatabaseServerTreeDataProvider(this._databaseServerService, this._apiWrapper, this._extensionContext);
|
||||
}
|
||||
|
||||
public get providerId(): string {
|
||||
return 'azure.resource.providers.databaseServer';
|
||||
}
|
||||
|
||||
private _databaseServerService: IAzureResourceDatabaseServerService = undefined;
|
||||
private _apiWrapper: ApiWrapper = undefined;
|
||||
private _extensionContext: ExtensionContext = undefined;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { SqlManagementClient } from 'azure-arm-sql';
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { IAzureResourceDatabaseServerService } from './interfaces';
|
||||
import { AzureResourceDatabaseServer } from './models';
|
||||
|
||||
export class AzureResourceDatabaseServerService implements IAzureResourceDatabaseServerService {
|
||||
public async getDatabaseServers(subscription: azureResource.AzureResourceSubscription, credential: ServiceClientCredentials): Promise<AzureResourceDatabaseServer[]> {
|
||||
const databaseServers: AzureResourceDatabaseServer[] = [];
|
||||
|
||||
const sqlManagementClient = new SqlManagementClient(credential, subscription.id);
|
||||
const svrs = await sqlManagementClient.servers.list();
|
||||
|
||||
svrs.forEach((svr) => databaseServers.push({
|
||||
name: svr.name,
|
||||
fullName: svr.fullyQualifiedDomainName,
|
||||
loginName: svr.administratorLogin,
|
||||
defaultDatabaseName: 'master'
|
||||
}));
|
||||
|
||||
return databaseServers;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { AzureResource } from 'sqlops';
|
||||
import { TreeItem, TreeItemCollapsibleState, ExtensionContext } from 'vscode';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { IAzureResourceDatabaseServerService, IAzureResourceDatabaseServerNode } from './interfaces';
|
||||
import { AzureResourceDatabaseServer } from './models';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
|
||||
export class AzureResourceDatabaseServerTreeDataProvider implements azureResource.IAzureResourceTreeDataProvider {
|
||||
public constructor(
|
||||
databaseServerService: IAzureResourceDatabaseServerService,
|
||||
apiWrapper: ApiWrapper,
|
||||
extensionContext: ExtensionContext
|
||||
) {
|
||||
this._databaseServerService = databaseServerService;
|
||||
this._apiWrapper = apiWrapper;
|
||||
this._extensionContext = extensionContext;
|
||||
}
|
||||
|
||||
public getTreeItem(element: azureResource.IAzureResourceNode): TreeItem | Thenable<TreeItem> {
|
||||
return element.treeItem;
|
||||
}
|
||||
|
||||
public async getChildren(element?: azureResource.IAzureResourceNode): Promise<azureResource.IAzureResourceNode[]> {
|
||||
if (!element) {
|
||||
return [this.createContainerNode()];
|
||||
}
|
||||
|
||||
const tokens = await this._apiWrapper.getSecurityToken(element.account, AzureResource.ResourceManagement);
|
||||
const credential = new TokenCredentials(tokens[element.tenantId].token, tokens[element.tenantId].tokenType);
|
||||
|
||||
const databaseServers: AzureResourceDatabaseServer[] = (await this._databaseServerService.getDatabaseServers(element.subscription, credential)) || <AzureResourceDatabaseServer[]>[];
|
||||
|
||||
return databaseServers.map((databaseServer) => <IAzureResourceDatabaseServerNode>{
|
||||
account: element.account,
|
||||
subscription: element.subscription,
|
||||
tenantId: element.tenantId,
|
||||
databaseServer: databaseServer,
|
||||
treeItem: {
|
||||
id: `databaseServer_${databaseServer.name}`,
|
||||
label: databaseServer.name,
|
||||
iconPath: {
|
||||
dark: this._extensionContext.asAbsolutePath('resources/dark/sql_server_inverse.svg'),
|
||||
light: this._extensionContext.asAbsolutePath('resources/light/sql_server.svg')
|
||||
},
|
||||
collapsibleState: TreeItemCollapsibleState.None,
|
||||
contextValue: AzureResourceItemType.databaseServer
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private createContainerNode(): azureResource.IAzureResourceNode {
|
||||
return {
|
||||
account: undefined,
|
||||
subscription: undefined,
|
||||
tenantId: undefined,
|
||||
treeItem: {
|
||||
id: AzureResourceDatabaseServerTreeDataProvider.containerId,
|
||||
label: AzureResourceDatabaseServerTreeDataProvider.containerLabel,
|
||||
iconPath: {
|
||||
dark: this._extensionContext.asAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||
light: this._extensionContext.asAbsolutePath('resources/light/folder.svg')
|
||||
},
|
||||
collapsibleState: TreeItemCollapsibleState.Collapsed,
|
||||
contextValue: AzureResourceItemType.databaseServerContainer
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private _databaseServerService: IAzureResourceDatabaseServerService = undefined;
|
||||
private _apiWrapper: ApiWrapper = undefined;
|
||||
private _extensionContext: ExtensionContext = undefined;
|
||||
|
||||
private static readonly containerId = 'azure.resource.providers.databaseServer.treeDataProvider.databaseServerContainer';
|
||||
private static readonly containerLabel = localize('azure.resource.providers.databaseServer.treeDataProvider.databaseServerContainerLabel', 'SQL Servers');
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
|
||||
import { azureResource } from '../../azure-resource';
|
||||
import { AzureResourceDatabaseServer } from './models';
|
||||
|
||||
export interface IAzureResourceDatabaseServerService {
|
||||
getDatabaseServers(subscription: azureResource.AzureResourceSubscription, credentials: ServiceClientCredentials): Promise<AzureResourceDatabaseServer[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceDatabaseServerNode extends azureResource.IAzureResourceNode {
|
||||
readonly databaseServer: AzureResourceDatabaseServer;
|
||||
}
|
||||
@@ -5,21 +5,9 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
export interface AzureResourceSubscription {
|
||||
id: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface AzureResourceDatabaseServer {
|
||||
name: string;
|
||||
fullName: string;
|
||||
loginName: string;
|
||||
defaultDatabaseName: string;
|
||||
}
|
||||
|
||||
export interface AzureResourceDatabase {
|
||||
name: string;
|
||||
serverName: string;
|
||||
serverFullName: string;
|
||||
loginName: string;
|
||||
}
|
||||
}
|
||||
129
extensions/azurecore/src/azureResource/resourceService.ts
Normal file
129
extensions/azurecore/src/azureResource/resourceService.ts
Normal file
@@ -0,0 +1,129 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { extensions, TreeItem } from 'vscode';
|
||||
import { Account } from 'sqlops';
|
||||
|
||||
import { azureResource } from './azure-resource';
|
||||
import { IAzureResourceNodeWithProviderId } from './interfaces';
|
||||
|
||||
export class AzureResourceService {
|
||||
private constructor() {
|
||||
}
|
||||
|
||||
public static getInstance(): AzureResourceService {
|
||||
return AzureResourceService._instance;
|
||||
}
|
||||
|
||||
public async listResourceProviderIds(): Promise<string[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
|
||||
return Object.keys(this._resourceProviders);
|
||||
}
|
||||
|
||||
public registerResourceProvider(resourceProvider: azureResource.IAzureResourceProvider): void {
|
||||
this.doRegisterResourceProvider(resourceProvider);
|
||||
}
|
||||
|
||||
public clearResourceProviders(): void {
|
||||
this._resourceProviders = {};
|
||||
this._treeDataProviders = {};
|
||||
this._areResourceProvidersLoaded = false;
|
||||
}
|
||||
|
||||
public async getRootChildren(resourceProviderId: string, account: Account, subscription: azureResource.AzureResourceSubscription, tenatId: string): Promise<IAzureResourceNodeWithProviderId[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
|
||||
if (!(resourceProviderId in this._resourceProviders)) {
|
||||
throw new Error(`Azure resource provider doesn't exist. Id: ${resourceProviderId}`);
|
||||
}
|
||||
|
||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||
const children = await treeDataProvider.getChildren();
|
||||
|
||||
return children.map((child) => <IAzureResourceNodeWithProviderId>{
|
||||
resourceProviderId: resourceProviderId,
|
||||
resourceNode: <azureResource.IAzureResourceNode>{
|
||||
account: account,
|
||||
subscription: subscription,
|
||||
tenantId: tenatId,
|
||||
treeItem: child.treeItem
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public async getChildren(resourceProviderId: string, element: azureResource.IAzureResourceNode): Promise<IAzureResourceNodeWithProviderId[]> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
|
||||
if (!(resourceProviderId in this._resourceProviders)) {
|
||||
throw new Error(`Azure resource provider doesn't exist. Id: ${resourceProviderId}`);
|
||||
}
|
||||
|
||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||
const children = await treeDataProvider.getChildren(element);
|
||||
|
||||
return children.map((child) => <IAzureResourceNodeWithProviderId>{
|
||||
resourceProviderId: resourceProviderId,
|
||||
resourceNode: child
|
||||
});
|
||||
}
|
||||
|
||||
public async getTreeItem(resourceProviderId: string, element?: azureResource.IAzureResourceNode): Promise<TreeItem> {
|
||||
await this.ensureResourceProvidersRegistered();
|
||||
|
||||
if (!(resourceProviderId in this._resourceProviders)) {
|
||||
throw new Error(`Azure resource provider doesn't exist. Id: ${resourceProviderId}`);
|
||||
}
|
||||
|
||||
const treeDataProvider = this._treeDataProviders[resourceProviderId];
|
||||
return treeDataProvider.getTreeItem(element);
|
||||
}
|
||||
|
||||
public get areResourceProvidersLoaded(): boolean {
|
||||
return this._areResourceProvidersLoaded;
|
||||
}
|
||||
|
||||
public set areResourceProvidersLoaded(value: boolean) {
|
||||
this._areResourceProvidersLoaded = value;
|
||||
}
|
||||
|
||||
private async ensureResourceProvidersRegistered(): Promise<void> {
|
||||
if (this._areResourceProvidersLoaded) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const extension of extensions.all) {
|
||||
const contributes = extension.packageJSON && extension.packageJSON.contributes;
|
||||
if (!contributes) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (contributes['hasAzureResourceProviders']) {
|
||||
await extension.activate();
|
||||
|
||||
if (extension.exports && extension.exports.provideResources) {
|
||||
for (const resourceProvider of <azureResource.IAzureResourceProvider[]>extension.exports.provideResources()) {
|
||||
this.doRegisterResourceProvider(resourceProvider);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this._areResourceProvidersLoaded = true;
|
||||
}
|
||||
|
||||
private doRegisterResourceProvider(resourceProvider: azureResource.IAzureResourceProvider): void {
|
||||
this._resourceProviders[resourceProvider.providerId] = resourceProvider;
|
||||
this._treeDataProviders[resourceProvider.providerId] = resourceProvider.getTreeDataProvider();
|
||||
}
|
||||
|
||||
private _areResourceProvidersLoaded: boolean = false;
|
||||
private _resourceProviders: { [resourceProviderId: string]: azureResource.IAzureResourceProvider } = {};
|
||||
private _treeDataProviders: { [resourceProviderId: string]: azureResource.IAzureResourceTreeDataProvider } = {};
|
||||
|
||||
private static readonly _instance = new AzureResourceService();
|
||||
}
|
||||
79
extensions/azurecore/src/azureResource/resourceTreeNode.ts
Normal file
79
extensions/azurecore/src/azureResource/resourceTreeNode.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { NodeInfo } from 'sqlops';
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { TreeNode } from './treeNode';
|
||||
import { AzureResourceService } from './resourceService';
|
||||
import { IAzureResourceNodeWithProviderId } from './interfaces';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceErrorMessageUtil } from './utils';
|
||||
|
||||
export class AzureResourceResourceTreeNode extends TreeNode {
|
||||
public constructor(
|
||||
public readonly resourceNodeWithProviderId: IAzureResourceNodeWithProviderId,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super();
|
||||
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
// It is a leaf node.
|
||||
if (this.resourceNodeWithProviderId.resourceNode.treeItem.collapsibleState === TreeItemCollapsibleState.None) {
|
||||
return <TreeNode[]>[];
|
||||
}
|
||||
|
||||
try {
|
||||
const children = await this._resourceService.getChildren(this.resourceNodeWithProviderId.resourceProviderId, this.resourceNodeWithProviderId.resourceNode);
|
||||
|
||||
if (children.length === 0) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceResourceTreeNode.noResourcesLabel, this)];
|
||||
} else {
|
||||
return children.map((child) => {
|
||||
// To make tree node's id unique, otherwise, treeModel.js would complain 'item already registered'
|
||||
child.resourceNode.treeItem.id = `${this.resourceNodeWithProviderId.resourceNode.treeItem.id}.${child.resourceNode.treeItem.id}`;
|
||||
return new AzureResourceResourceTreeNode(child, this);
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
}
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
return this._resourceService.getTreeItem(this.resourceNodeWithProviderId.resourceProviderId, this.resourceNodeWithProviderId.resourceNode);
|
||||
}
|
||||
|
||||
public getNodeInfo(): NodeInfo {
|
||||
const treeItem = this.resourceNodeWithProviderId.resourceNode.treeItem;
|
||||
|
||||
return {
|
||||
label: treeItem.label,
|
||||
isLeaf: treeItem.collapsibleState === TreeItemCollapsibleState.None ? true : false,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
nodePath: this.generateNodePath(),
|
||||
nodeStatus: undefined,
|
||||
nodeType: treeItem.contextValue,
|
||||
nodeSubType: undefined,
|
||||
iconType: treeItem.contextValue
|
||||
};
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return this.resourceNodeWithProviderId.resourceNode.treeItem.id;
|
||||
}
|
||||
|
||||
private _resourceService = AzureResourceService.getInstance();
|
||||
|
||||
private static readonly noResourcesLabel = localize('azure.resource.resourceTreeNode.noResourcesLabel', 'No Resources found.');
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import {
|
||||
IAzureResourceAccountService,
|
||||
IAzureResourceCredentialService,
|
||||
IAzureResourceSubscriptionService,
|
||||
IAzureResourceSubscriptionFilterService,
|
||||
IAzureResourceDatabaseService,
|
||||
IAzureResourceDatabaseServerService,
|
||||
IAzureResourceCacheService,
|
||||
IAzureResourceContextService } from './interfaces';
|
||||
|
||||
export class AzureResourceServicePool {
|
||||
private constructor() { }
|
||||
|
||||
public static getInstance(): AzureResourceServicePool {
|
||||
return AzureResourceServicePool._instance;
|
||||
}
|
||||
|
||||
public contextService: IAzureResourceContextService;
|
||||
public cacheService: IAzureResourceCacheService;
|
||||
public accountService: IAzureResourceAccountService;
|
||||
public credentialService: IAzureResourceCredentialService;
|
||||
public subscriptionService: IAzureResourceSubscriptionService;
|
||||
public subscriptionFilterService: IAzureResourceSubscriptionFilterService;
|
||||
public databaseService: IAzureResourceDatabaseService;
|
||||
public databaseServerService: IAzureResourceDatabaseServerService;
|
||||
|
||||
private static readonly _instance = new AzureResourceServicePool();
|
||||
}
|
||||
@@ -5,21 +5,30 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ExtensionContext } from "vscode";
|
||||
import { ExtensionContext } from 'vscode';
|
||||
|
||||
import { IAzureResourceCacheService } from "../interfaces";
|
||||
import { IAzureResourceCacheService } from '../interfaces';
|
||||
|
||||
export class AzureResourceCacheService implements IAzureResourceCacheService {
|
||||
public constructor(
|
||||
public readonly context: ExtensionContext
|
||||
context: ExtensionContext
|
||||
) {
|
||||
this._context = context;
|
||||
}
|
||||
|
||||
public get<T>(key: string): T | undefined {
|
||||
return this.context.workspaceState.get(key);
|
||||
public generateKey(id: string): string {
|
||||
return `${AzureResourceCacheService.cacheKeyPrefix}.${id}`;
|
||||
}
|
||||
|
||||
public get<T>(key: string): T | undefined {
|
||||
return this._context.workspaceState.get(key);
|
||||
}
|
||||
|
||||
public update<T>(key: string, value: T): void {
|
||||
this.context.workspaceState.update(key, value);
|
||||
this._context.workspaceState.update(key, value);
|
||||
}
|
||||
|
||||
private _context: ExtensionContext = undefined;
|
||||
|
||||
private static readonly cacheKeyPrefix = 'azure.resource.cache';
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ExtensionContext } from "vscode";
|
||||
import { ApiWrapper } from "../../apiWrapper";
|
||||
|
||||
import { IAzureResourceContextService } from "../interfaces";
|
||||
|
||||
export class AzureResourceContextService implements IAzureResourceContextService {
|
||||
public constructor(
|
||||
context: ExtensionContext,
|
||||
apiWrapper: ApiWrapper
|
||||
) {
|
||||
this._context = context;
|
||||
this._apiWrapper = apiWrapper;
|
||||
}
|
||||
|
||||
public getAbsolutePath(relativePath: string): string {
|
||||
return this._context.asAbsolutePath(relativePath);
|
||||
}
|
||||
|
||||
public executeCommand(commandId: string, ...args: any[]): void {
|
||||
this._apiWrapper.executeCommand(commandId, args);
|
||||
}
|
||||
|
||||
public showErrorMessage(errorMessage: string): void {
|
||||
this._apiWrapper.showErrorMessage(errorMessage);
|
||||
}
|
||||
|
||||
private _context: ExtensionContext = undefined;
|
||||
private _apiWrapper: ApiWrapper = undefined;
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as sqlops from 'sqlops';
|
||||
import { TokenCredentials, ServiceClientCredentials } from 'ms-rest';
|
||||
import { ApiWrapper } from '../../apiWrapper';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { IAzureResourceCredentialService } from '../interfaces';
|
||||
import { AzureResourceCredentialError } from '../errors';
|
||||
|
||||
export class AzureResourceCredentialService implements IAzureResourceCredentialService {
|
||||
public constructor(
|
||||
apiWrapper: ApiWrapper
|
||||
) {
|
||||
this._apiWrapper = apiWrapper;
|
||||
}
|
||||
|
||||
public async getCredentials(account: sqlops.Account, resource: sqlops.AzureResource): Promise<ServiceClientCredentials[]> {
|
||||
try {
|
||||
let credentials: TokenCredentials[] = [];
|
||||
let tokens = await this._apiWrapper.getSecurityToken(account, resource);
|
||||
|
||||
for (let tenant of account.properties.tenants) {
|
||||
let token = tokens[tenant.id].token;
|
||||
let tokenType = tokens[tenant.id].tokenType;
|
||||
|
||||
credentials.push(new TokenCredentials(token, tokenType));
|
||||
}
|
||||
|
||||
return credentials;
|
||||
} catch (error) {
|
||||
throw new AzureResourceCredentialError(localize('azureResource.services.credentialService.credentialError', 'Failed to get credential for account {0}. Please refresh the account.', account.key.accountId), error);
|
||||
}
|
||||
}
|
||||
|
||||
private _apiWrapper: ApiWrapper = undefined;
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { SqlManagementClient } from 'azure-arm-sql';
|
||||
|
||||
import { IAzureResourceDatabaseServerService } from '../interfaces';
|
||||
import { AzureResourceSubscription, AzureResourceDatabaseServer } from '../models';
|
||||
|
||||
export class AzureResourceDatabaseServerService implements IAzureResourceDatabaseServerService {
|
||||
public async getDatabaseServers(subscription: AzureResourceSubscription, credentials: ServiceClientCredentials[]): Promise<AzureResourceDatabaseServer[]> {
|
||||
let databaseServers: AzureResourceDatabaseServer[] = [];
|
||||
for (let cred of credentials) {
|
||||
let sqlManagementClient = new SqlManagementClient(cred, subscription.id);
|
||||
try {
|
||||
let svrs = await sqlManagementClient.servers.list();
|
||||
svrs.forEach((svr) => databaseServers.push({
|
||||
name: svr.name,
|
||||
fullName: svr.fullyQualifiedDomainName,
|
||||
loginName: svr.administratorLogin,
|
||||
defaultDatabaseName: 'master'
|
||||
}));
|
||||
} catch (error) {
|
||||
if (error.code === 'InvalidAuthenticationTokenTenant' && error.statusCode === 401) {
|
||||
/**
|
||||
* There may be multiple tenants for an account and it may throw exceptions like following. Just swallow the exception here.
|
||||
* The access token is from the wrong issuer. It must match one of the tenants associated with this subscription.
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return databaseServers;
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { SqlManagementClient } from 'azure-arm-sql';
|
||||
|
||||
import { IAzureResourceDatabaseService } from '../interfaces';
|
||||
import { AzureResourceSubscription, AzureResourceDatabase } from '../models';
|
||||
|
||||
export class AzureResourceDatabaseService implements IAzureResourceDatabaseService {
|
||||
public async getDatabases(subscription: AzureResourceSubscription, credentials: ServiceClientCredentials[]): Promise<AzureResourceDatabase[]> {
|
||||
let databases: AzureResourceDatabase[] = [];
|
||||
for (let cred of credentials) {
|
||||
let sqlManagementClient = new SqlManagementClient(cred, subscription.id);
|
||||
try {
|
||||
let svrs = await sqlManagementClient.servers.list();
|
||||
for (let svr of svrs) {
|
||||
// Extract resource group name from svr.id
|
||||
let svrIdRegExp = new RegExp(`\/subscriptions\/${subscription.id}\/resourceGroups\/(.+)\/providers\/Microsoft\.Sql\/servers\/${svr.name}`);
|
||||
if (!svrIdRegExp.test(svr.id)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let founds = svrIdRegExp.exec(svr.id);
|
||||
let resouceGroup = founds[1];
|
||||
|
||||
let dbs = await sqlManagementClient.databases.listByServer(resouceGroup, svr.name);
|
||||
dbs.forEach((db) => databases.push({
|
||||
name: db.name,
|
||||
serverName: svr.name,
|
||||
serverFullName: svr.fullyQualifiedDomainName,
|
||||
loginName: svr.administratorLogin
|
||||
}));
|
||||
}
|
||||
} catch (error) {
|
||||
if (error.code === 'InvalidAuthenticationTokenTenant' && error.statusCode === 401) {
|
||||
/**
|
||||
* There may be multiple tenants for an account and it may throw exceptions like following. Just swallow the exception here.
|
||||
* The access token is from the wrong issuer. It must match one of the tenants associated with this subscription.
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return databases;
|
||||
}
|
||||
}
|
||||
@@ -8,11 +8,11 @@
|
||||
import { WorkspaceConfiguration, ConfigurationTarget } from 'vscode';
|
||||
import { Account } from 'sqlops';
|
||||
|
||||
import { azureResource } from '../azure-resource';
|
||||
import { IAzureResourceSubscriptionFilterService, IAzureResourceCacheService } from '../interfaces';
|
||||
import { AzureResourceSubscription } from '../models';
|
||||
|
||||
interface AzureResourceSelectedSubscriptionsCache {
|
||||
selectedSubscriptions: { [accountId: string]: AzureResourceSubscription[]};
|
||||
selectedSubscriptions: { [accountId: string]: azureResource.AzureResourceSubscription[]};
|
||||
}
|
||||
|
||||
export class AzureResourceSubscriptionFilterService implements IAzureResourceSubscriptionFilterService {
|
||||
@@ -20,12 +20,14 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
cacheService: IAzureResourceCacheService
|
||||
) {
|
||||
this._cacheService = cacheService;
|
||||
|
||||
this._cacheKey = this._cacheService.generateKey('selectedSubscriptions');
|
||||
}
|
||||
|
||||
public async getSelectedSubscriptions(account: Account): Promise<AzureResourceSubscription[]> {
|
||||
let selectedSubscriptions: AzureResourceSubscription[] = [];
|
||||
public async getSelectedSubscriptions(account: Account): Promise<azureResource.AzureResourceSubscription[]> {
|
||||
let selectedSubscriptions: azureResource.AzureResourceSubscription[] = [];
|
||||
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(AzureResourceSubscriptionFilterService.CacheKey);
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(this._cacheKey);
|
||||
if (cache) {
|
||||
selectedSubscriptions = cache.selectedSubscriptions[account.key.accountId];
|
||||
}
|
||||
@@ -33,10 +35,10 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
return selectedSubscriptions;
|
||||
}
|
||||
|
||||
public async saveSelectedSubscriptions(account: Account, selectedSubscriptions: AzureResourceSubscription[]): Promise<void> {
|
||||
let selectedSubscriptionsCache: { [accountId: string]: AzureResourceSubscription[]} = {};
|
||||
public async saveSelectedSubscriptions(account: Account, selectedSubscriptions: azureResource.AzureResourceSubscription[]): Promise<void> {
|
||||
let selectedSubscriptionsCache: { [accountId: string]: azureResource.AzureResourceSubscription[]} = {};
|
||||
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(AzureResourceSubscriptionFilterService.CacheKey);
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(this._cacheKey);
|
||||
if (cache) {
|
||||
selectedSubscriptionsCache = cache.selectedSubscriptions;
|
||||
}
|
||||
@@ -47,14 +49,14 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
|
||||
selectedSubscriptionsCache[account.key.accountId] = selectedSubscriptions;
|
||||
|
||||
this._cacheService.update<AzureResourceSelectedSubscriptionsCache>(AzureResourceSubscriptionFilterService.CacheKey, { selectedSubscriptions: selectedSubscriptionsCache });
|
||||
this._cacheService.update<AzureResourceSelectedSubscriptionsCache>(this._cacheKey, { selectedSubscriptions: selectedSubscriptionsCache });
|
||||
|
||||
const filters: string[] = [];
|
||||
for (const accountId in selectedSubscriptionsCache) {
|
||||
filters.push(...selectedSubscriptionsCache[accountId].map((subcription) => `${accountId}/${subcription.id}/${subcription.name}`));
|
||||
}
|
||||
|
||||
const resourceFilterConfig = this._config.inspect<string[]>(AzureResourceSubscriptionFilterService.FilterConfigName);
|
||||
const resourceFilterConfig = this._config.inspect<string[]>(AzureResourceSubscriptionFilterService.filterConfigName);
|
||||
let configTarget = ConfigurationTarget.Global;
|
||||
if (resourceFilterConfig) {
|
||||
if (resourceFilterConfig.workspaceFolderValue) {
|
||||
@@ -66,12 +68,12 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
}
|
||||
}
|
||||
|
||||
await this._config.update(AzureResourceSubscriptionFilterService.FilterConfigName, filters, configTarget);
|
||||
await this._config.update(AzureResourceSubscriptionFilterService.filterConfigName, filters, configTarget);
|
||||
}
|
||||
|
||||
private _config: WorkspaceConfiguration = undefined;
|
||||
private _cacheService: IAzureResourceCacheService = undefined;
|
||||
private _cacheKey: string = undefined;
|
||||
|
||||
private static readonly FilterConfigName = 'resourceFilter';
|
||||
private static readonly CacheKey = 'azureResource.cache.selectedSubscriptions';
|
||||
private static readonly filterConfigName = 'azure.resource.config.filter';
|
||||
}
|
||||
|
||||
@@ -9,24 +9,19 @@ import { Account } from 'sqlops';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { SubscriptionClient } from 'azure-arm-resource';
|
||||
|
||||
import { azureResource } from '../azure-resource';
|
||||
import { IAzureResourceSubscriptionService } from '../interfaces';
|
||||
import { AzureResourceSubscription } from '../models';
|
||||
|
||||
export class AzureResourceSubscriptionService implements IAzureResourceSubscriptionService {
|
||||
public async getSubscriptions(account: Account, credentials: ServiceClientCredentials[]): Promise<AzureResourceSubscription[]> {
|
||||
let subscriptions: AzureResourceSubscription[] = [];
|
||||
for (let cred of credentials) {
|
||||
let subClient = new SubscriptionClient.SubscriptionClient(cred);
|
||||
try {
|
||||
let subs = await subClient.subscriptions.list();
|
||||
subs.forEach((sub) => subscriptions.push({
|
||||
id: sub.subscriptionId,
|
||||
name: sub.displayName
|
||||
}));
|
||||
} catch (error) {
|
||||
// Swallow the exception here.
|
||||
}
|
||||
}
|
||||
public async getSubscriptions(account: Account, credential: ServiceClientCredentials): Promise<azureResource.AzureResourceSubscription[]> {
|
||||
const subscriptions: azureResource.AzureResourceSubscription[] = [];
|
||||
|
||||
const subClient = new SubscriptionClient.SubscriptionClient(credential);
|
||||
const subs = await subClient.subscriptions.list();
|
||||
subs.forEach((sub) => subscriptions.push({
|
||||
id: sub.subscriptionId,
|
||||
name: sub.displayName
|
||||
}));
|
||||
|
||||
return subscriptions;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as request from 'request';
|
||||
|
||||
import { azureResource } from '../azure-resource';
|
||||
import { IAzureResourceTenantService } from '../interfaces';
|
||||
|
||||
export class AzureResourceTenantService implements IAzureResourceTenantService {
|
||||
public async getTenantId(subscription: azureResource.AzureResourceSubscription): Promise<string> {
|
||||
const requestPromisified = new Promise<string>((resolve, reject) => {
|
||||
const url = `https://management.azure.com/subscriptions/${subscription.id}?api-version=2014-04-01`;
|
||||
request(url, function (error, response, body) {
|
||||
if (response.statusCode === 401) {
|
||||
const tenantIdRegEx = /authorization_uri="https:\/\/login\.windows\.net\/([0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12})"/;
|
||||
const teantIdString = response.headers['www-authenticate'];
|
||||
if (tenantIdRegEx.test(teantIdString)) {
|
||||
resolve(tenantIdRegEx.exec(teantIdString)[1]);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return await requestPromisified;
|
||||
}
|
||||
}
|
||||
@@ -7,10 +7,10 @@
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
|
||||
export class AzureResourceAccountNotSignedInTreeNode extends TreeNode {
|
||||
@@ -19,11 +19,11 @@ export class AzureResourceAccountNotSignedInTreeNode extends TreeNode {
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(AzureResourceAccountNotSignedInTreeNode.SignInLabel, TreeItemCollapsibleState.None);
|
||||
let item = new TreeItem(AzureResourceAccountNotSignedInTreeNode.signInLabel, TreeItemCollapsibleState.None);
|
||||
item.contextValue = AzureResourceItemType.message;
|
||||
item.command = {
|
||||
title: AzureResourceAccountNotSignedInTreeNode.SignInLabel,
|
||||
command: 'azureresource.signin',
|
||||
title: AzureResourceAccountNotSignedInTreeNode.signInLabel,
|
||||
command: 'azure.resource.signin',
|
||||
arguments: [this]
|
||||
};
|
||||
return item;
|
||||
@@ -31,7 +31,7 @@ export class AzureResourceAccountNotSignedInTreeNode extends TreeNode {
|
||||
|
||||
public getNodeInfo(): NodeInfo {
|
||||
return {
|
||||
label: AzureResourceAccountNotSignedInTreeNode.SignInLabel,
|
||||
label: AzureResourceAccountNotSignedInTreeNode.signInLabel,
|
||||
isLeaf: true,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
@@ -47,5 +47,5 @@ export class AzureResourceAccountNotSignedInTreeNode extends TreeNode {
|
||||
return 'message_accountNotSignedIn';
|
||||
}
|
||||
|
||||
private static readonly SignInLabel = localize('azureResource.tree.accountNotSignedInTreeNode.signIn', 'Sign in to Azure ...');
|
||||
private static readonly signInLabel = localize('azure.resource.tree.accountNotSignedInTreeNode.signInLabel', 'Sign in to Azure ...');
|
||||
}
|
||||
|
||||
@@ -6,44 +6,59 @@
|
||||
'use strict';
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { Account, NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import { Account, NodeInfo, AzureResource } from 'sqlops';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import { AppContext } from '../../appContext';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { azureResource } from '../azure-resource';
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { AzureResourceCredentialError } from '../errors';
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceItemType, AzureResourceServiceNames } from '../constants';
|
||||
import { AzureResourceSubscriptionTreeNode } from './subscriptionTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from '../messageTreeNode';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
import { AzureResourceSubscription } from '../models';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeProvider';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeChangeHandler';
|
||||
import { IAzureResourceSubscriptionService, IAzureResourceSubscriptionFilterService, IAzureResourceTenantService } from '../../azureResource/interfaces';
|
||||
|
||||
export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNodeBase {
|
||||
public constructor(
|
||||
account: Account,
|
||||
public readonly account: Account,
|
||||
appContext: AppContext,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler
|
||||
) {
|
||||
super(account, treeChangeHandler, undefined);
|
||||
super(appContext, treeChangeHandler, undefined);
|
||||
|
||||
this._subscriptionService = this.appContext.getService<IAzureResourceSubscriptionService>(AzureResourceServiceNames.subscriptionService);
|
||||
this._subscriptionFilterService = this.appContext.getService<IAzureResourceSubscriptionFilterService>(AzureResourceServiceNames.subscriptionFilterService);
|
||||
this._tenantService = this.appContext.getService<IAzureResourceTenantService>(AzureResourceServiceNames.tenantService);
|
||||
|
||||
this._id = `account_${this.account.key.accountId}`;
|
||||
this.setCacheKey(`${this._id}.subscriptions`);
|
||||
this._label = this.generateLabel();
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
try {
|
||||
let subscriptions: AzureResourceSubscription[] = [];
|
||||
let subscriptions: azureResource.AzureResourceSubscription[] = [];
|
||||
|
||||
if (this._isClearingCache) {
|
||||
const credentials = await this.getCredentials();
|
||||
subscriptions = (await this.servicePool.subscriptionService.getSubscriptions(this.account, credentials)) || <AzureResourceSubscription[]>[];
|
||||
try {
|
||||
const tokens = await this.appContext.apiWrapper.getSecurityToken(this.account, AzureResource.ResourceManagement);
|
||||
|
||||
let cache = this.getCache<AzureResourceSubscriptionsCache>();
|
||||
if (!cache) {
|
||||
cache = { subscriptions: { } };
|
||||
for (const tenant of this.account.properties.tenants) {
|
||||
const token = tokens[tenant.id].token;
|
||||
const tokenType = tokens[tenant.id].tokenType;
|
||||
|
||||
subscriptions.push(...(await this._subscriptionService.getSubscriptions(this.account, new TokenCredentials(token, tokenType)) || <azureResource.AzureResourceSubscription[]>[]));
|
||||
}
|
||||
} catch (error) {
|
||||
throw new AzureResourceCredentialError(localize('azure.resource.tree.accountTreeNode.credentialError', 'Failed to get credential for account {0}. Please refresh the account.', this.account.key.accountId), error);
|
||||
}
|
||||
cache.subscriptions[this.account.key.accountId] = subscriptions;
|
||||
this.updateCache<AzureResourceSubscriptionsCache>(cache);
|
||||
|
||||
this.updateCache<azureResource.AzureResourceSubscription[]>(subscriptions);
|
||||
|
||||
this._isClearingCache = false;
|
||||
} else {
|
||||
@@ -52,8 +67,8 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
||||
|
||||
this._totalSubscriptionCount = subscriptions.length;
|
||||
|
||||
let selectedSubscriptions = await this.servicePool.subscriptionFilterService.getSelectedSubscriptions(this.account);
|
||||
let selectedSubscriptionIds = (selectedSubscriptions || <AzureResourceSubscription[]>[]).map((subscription) => subscription.id);
|
||||
const selectedSubscriptions = await this._subscriptionFilterService.getSelectedSubscriptions(this.account);
|
||||
const selectedSubscriptionIds = (selectedSubscriptions || <azureResource.AzureResourceSubscription[]>[]).map((subscription) => subscription.id);
|
||||
if (selectedSubscriptionIds.length > 0) {
|
||||
subscriptions = subscriptions.filter((subscription) => selectedSubscriptionIds.indexOf(subscription.id) !== -1);
|
||||
this._selectedSubscriptionCount = selectedSubscriptionIds.length;
|
||||
@@ -65,31 +80,36 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
||||
this.refreshLabel();
|
||||
|
||||
if (subscriptions.length === 0) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceAccountTreeNode.NoSubscriptions, this)];
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceAccountTreeNode.noSubscriptionsLabel, this)];
|
||||
} else {
|
||||
return subscriptions.map((subscription) => new AzureResourceSubscriptionTreeNode(subscription, this.account, this.treeChangeHandler, this));
|
||||
return await Promise.all(subscriptions.map(async (subscription) => {
|
||||
const tenantId = await this._tenantService.getTenantId(subscription);
|
||||
|
||||
return new AzureResourceSubscriptionTreeNode(this.account, subscription, tenantId, this.appContext, this.treeChangeHandler, this);
|
||||
}));
|
||||
}
|
||||
} catch (error) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
if (error instanceof AzureResourceCredentialError) {
|
||||
this.appContext.apiWrapper.showErrorMessage(error.message);
|
||||
|
||||
this.appContext.apiWrapper.executeCommand('azure.resource.signin');
|
||||
} else {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async getCachedSubscriptions(): Promise<AzureResourceSubscription[]> {
|
||||
const subscriptions: AzureResourceSubscription[] = [];
|
||||
const cache = this.getCache<AzureResourceSubscriptionsCache>();
|
||||
if (cache) {
|
||||
subscriptions.push(...cache.subscriptions[this.account.key.accountId]);
|
||||
}
|
||||
return subscriptions;
|
||||
public async getCachedSubscriptions(): Promise<azureResource.AzureResourceSubscription[]> {
|
||||
return this.getCache<azureResource.AzureResourceSubscription[]>();
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(this._label, TreeItemCollapsibleState.Collapsed);
|
||||
const item = new TreeItem(this._label, TreeItemCollapsibleState.Collapsed);
|
||||
item.id = this._id;
|
||||
item.contextValue = AzureResourceItemType.account;
|
||||
item.iconPath = {
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/account_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/account.svg')
|
||||
dark: this.appContext.extensionContext.asAbsolutePath('resources/dark/account_inverse.svg'),
|
||||
light: this.appContext.extensionContext.asAbsolutePath('resources/light/account.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
@@ -128,10 +148,6 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
||||
}
|
||||
}
|
||||
|
||||
protected get cacheKey(): string {
|
||||
return 'azureResource.cache.subscriptions';
|
||||
}
|
||||
|
||||
private generateLabel(): string {
|
||||
let label = `${this.account.displayInfo.displayName} (${this.account.key.accountId})`;
|
||||
|
||||
@@ -142,14 +158,14 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
||||
return label;
|
||||
}
|
||||
|
||||
private _subscriptionService: IAzureResourceSubscriptionService = undefined;
|
||||
private _subscriptionFilterService: IAzureResourceSubscriptionFilterService = undefined;
|
||||
private _tenantService: IAzureResourceTenantService = undefined;
|
||||
|
||||
private _id: string = undefined;
|
||||
private _label: string = undefined;
|
||||
private _totalSubscriptionCount = 0;
|
||||
private _selectedSubscriptionCount = 0;
|
||||
|
||||
private static readonly NoSubscriptions = localize('azureResource.tree.accountTreeNode.noSubscriptions', 'No Subscriptions found.');
|
||||
}
|
||||
|
||||
interface AzureResourceSubscriptionsCache {
|
||||
subscriptions: { [accountId: string]: AzureResourceSubscription[] };
|
||||
}
|
||||
private static readonly noSubscriptionsLabel = localize('azure.resource.tree.accountTreeNode.noSubscriptionsLabel', 'No Subscriptions found.');
|
||||
}
|
||||
@@ -5,16 +5,16 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as sqlops from 'sqlops';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import { AppContext } from '../../appContext';
|
||||
|
||||
import { AzureResourceServicePool } from '../servicePool';
|
||||
import { AzureResourceCredentialError } from '../errors';
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeChangeHandler';
|
||||
import { IAzureResourceCacheService } from '../../azureResource/interfaces';
|
||||
import { AzureResourceServiceNames } from '../constants';
|
||||
|
||||
export abstract class AzureResourceTreeNodeBase extends TreeNode {
|
||||
public constructor(
|
||||
public readonly appContext: AppContext,
|
||||
public readonly treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
@@ -22,17 +22,17 @@ export abstract class AzureResourceTreeNodeBase extends TreeNode {
|
||||
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
public readonly servicePool = AzureResourceServicePool.getInstance();
|
||||
}
|
||||
|
||||
export abstract class AzureResourceContainerTreeNodeBase extends AzureResourceTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly account: sqlops.Account,
|
||||
appContext: AppContext,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(treeChangeHandler, parent);
|
||||
super(appContext, treeChangeHandler, parent);
|
||||
|
||||
this._cacheService = this.appContext.getService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService);
|
||||
}
|
||||
|
||||
public clearCache(): void {
|
||||
@@ -43,29 +43,19 @@ export abstract class AzureResourceContainerTreeNodeBase extends AzureResourceTr
|
||||
return this._isClearingCache;
|
||||
}
|
||||
|
||||
protected async getCredentials(): Promise<ServiceClientCredentials[]> {
|
||||
try {
|
||||
return await this.servicePool.credentialService.getCredentials(this.account, sqlops.AzureResource.ResourceManagement);
|
||||
} catch (error) {
|
||||
if (error instanceof AzureResourceCredentialError) {
|
||||
this.servicePool.contextService.showErrorMessage(error.message);
|
||||
|
||||
this.servicePool.contextService.executeCommand('azureresource.signin');
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
protected setCacheKey(id: string): void {
|
||||
this._cacheKey = this._cacheService.generateKey(id);
|
||||
}
|
||||
|
||||
protected updateCache<T>(cache: T): void {
|
||||
this.servicePool.cacheService.update<T>(this.cacheKey, cache);
|
||||
this._cacheService.update<T>(this._cacheKey, cache);
|
||||
}
|
||||
|
||||
protected getCache<T>(): T {
|
||||
return this.servicePool.cacheService.get<T>(this.cacheKey);
|
||||
return this._cacheService.get<T>(this._cacheKey);
|
||||
}
|
||||
|
||||
protected abstract get cacheKey(): string;
|
||||
|
||||
protected _isClearingCache = true;
|
||||
private _cacheService: IAzureResourceCacheService = undefined;
|
||||
private _cacheKey: string = undefined;
|
||||
}
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { Account, NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
import { AzureResourceDatabaseTreeNode } from './databaseTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceSubscription, AzureResourceDatabase } from '../models';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeProvider';
|
||||
|
||||
export class AzureResourceDatabaseContainerTreeNode extends AzureResourceContainerTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly subscription: AzureResourceSubscription,
|
||||
account: Account,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(account, treeChangeHandler, parent);
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
try {
|
||||
let databases: AzureResourceDatabase[] = [];
|
||||
|
||||
if (this._isClearingCache) {
|
||||
let credentials = await this.getCredentials();
|
||||
databases = (await this.servicePool.databaseService.getDatabases(this.subscription, credentials)) || <AzureResourceDatabase[]>[];
|
||||
|
||||
let cache = this.getCache<AzureResourceDatabasesCache>();
|
||||
if (!cache) {
|
||||
cache = { databases: { } };
|
||||
}
|
||||
cache.databases[this.subscription.id] = databases;
|
||||
this.updateCache(cache);
|
||||
|
||||
this._isClearingCache = false;
|
||||
} else {
|
||||
const cache = this.getCache<AzureResourceDatabasesCache>();
|
||||
if (cache) {
|
||||
databases = cache.databases[this.subscription.id] || <AzureResourceDatabase[]>[];
|
||||
}
|
||||
}
|
||||
|
||||
if (databases.length === 0) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceDatabaseContainerTreeNode.NoDatabases, this)];
|
||||
} else {
|
||||
return databases.map((database) => new AzureResourceDatabaseTreeNode(database, this.treeChangeHandler, this));
|
||||
}
|
||||
} catch (error) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
}
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(AzureResourceDatabaseContainerTreeNode.Label, TreeItemCollapsibleState.Collapsed);
|
||||
item.contextValue = AzureResourceItemType.databaseContainer;
|
||||
item.iconPath = {
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/folder.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
|
||||
public getNodeInfo(): NodeInfo {
|
||||
return {
|
||||
label: AzureResourceDatabaseContainerTreeNode.Label,
|
||||
isLeaf: false,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
nodePath: this.generateNodePath(),
|
||||
nodeStatus: undefined,
|
||||
nodeType: AzureResourceItemType.databaseContainer,
|
||||
nodeSubType: undefined,
|
||||
iconType: AzureResourceItemType.databaseContainer
|
||||
};
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return 'databaseContainer';
|
||||
}
|
||||
|
||||
protected get cacheKey(): string {
|
||||
return 'azureResource.cache.databases';
|
||||
}
|
||||
|
||||
private static readonly Label = localize('azureResource.tree.databaseContainerTreeNode.label', 'SQL Databases');
|
||||
private static readonly NoDatabases = localize('azureResource.tree.databaseContainerTreeNode.noDatabases', 'No SQL Databases found.');
|
||||
}
|
||||
|
||||
interface AzureResourceDatabasesCache {
|
||||
databases: { [subscriptionId: string]: AzureResourceDatabase[] };
|
||||
}
|
||||
@@ -1,103 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { Account, NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
import { AzureResourceSubscription, AzureResourceDatabaseServer } from '../models';
|
||||
import { AzureResourceDatabaseServerTreeNode } from './databaseServerTreeNode';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeProvider';
|
||||
|
||||
export class AzureResourceDatabaseServerContainerTreeNode extends AzureResourceContainerTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly subscription: AzureResourceSubscription,
|
||||
account: Account,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(account, treeChangeHandler, parent);
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
try {
|
||||
let databaseServers: AzureResourceDatabaseServer[] = [];
|
||||
|
||||
if (this._isClearingCache) {
|
||||
let credentials = await this.getCredentials();
|
||||
databaseServers = (await this.servicePool.databaseServerService.getDatabaseServers(this.subscription, credentials)) || <AzureResourceDatabaseServer[]>[];
|
||||
|
||||
let cache = this.getCache<AzureResourceDatabaseServersCache>();
|
||||
if (!cache) {
|
||||
cache = { databaseServers: { } };
|
||||
}
|
||||
cache.databaseServers[this.subscription.id] = databaseServers;
|
||||
this.updateCache<AzureResourceDatabaseServersCache>(cache);
|
||||
|
||||
this._isClearingCache = false;
|
||||
} else {
|
||||
const cache = this.getCache<AzureResourceDatabaseServersCache>();
|
||||
if (cache) {
|
||||
databaseServers = cache.databaseServers[this.subscription.id] || <AzureResourceDatabaseServer[]>[];
|
||||
}
|
||||
}
|
||||
|
||||
if (databaseServers.length === 0) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceDatabaseServerContainerTreeNode.NoDatabaseServers, this)];
|
||||
} else {
|
||||
return databaseServers.map((server) => new AzureResourceDatabaseServerTreeNode(server, this.treeChangeHandler, this));
|
||||
}
|
||||
} catch (error) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
}
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(AzureResourceDatabaseServerContainerTreeNode.Label, TreeItemCollapsibleState.Collapsed);
|
||||
item.contextValue = AzureResourceItemType.databaseServerContainer;
|
||||
item.iconPath = {
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/folder_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/folder.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
|
||||
public getNodeInfo(): NodeInfo {
|
||||
return {
|
||||
label: AzureResourceDatabaseServerContainerTreeNode.Label,
|
||||
isLeaf: false,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
nodePath: this.generateNodePath(),
|
||||
nodeStatus: undefined,
|
||||
nodeType: AzureResourceItemType.databaseServerContainer,
|
||||
nodeSubType: undefined,
|
||||
iconType: AzureResourceItemType.databaseServerContainer
|
||||
};
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return 'databaseServerContainer';
|
||||
}
|
||||
|
||||
protected get cacheKey(): string {
|
||||
return 'azureResource.cache.databaseServers';
|
||||
}
|
||||
|
||||
private static readonly Label = localize('azureResource.tree.databaseServerContainerTreeNode.label', 'SQL Servers');
|
||||
private static readonly NoDatabaseServers = localize('azureResource.tree.databaseContainerTreeNode.noDatabaseServers', 'No SQL Servers found.');
|
||||
}
|
||||
|
||||
interface AzureResourceDatabaseServersCache {
|
||||
databaseServers: { [subscriptionId: string]: AzureResourceDatabaseServer[] };
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
import { AzureResourceTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceDatabaseServer } from '../models';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeProvider';
|
||||
|
||||
export class AzureResourceDatabaseServerTreeNode extends AzureResourceTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly databaseServer: AzureResourceDatabaseServer,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(treeChangeHandler, parent);
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
return [];
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(this.databaseServer.name, TreeItemCollapsibleState.None);
|
||||
item.contextValue = AzureResourceItemType.databaseServer;
|
||||
item.iconPath = {
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/sql_server_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/sql_server.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
|
||||
public getNodeInfo(): NodeInfo {
|
||||
return {
|
||||
label: this.databaseServer.name,
|
||||
isLeaf: true,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
nodePath: this.generateNodePath(),
|
||||
nodeStatus: undefined,
|
||||
nodeType: AzureResourceItemType.databaseServer,
|
||||
nodeSubType: undefined,
|
||||
iconType: AzureResourceItemType.databaseServer
|
||||
};
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return `databaseServer_${this.databaseServer.name}`;
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
import { AzureResourceTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceDatabase } from '../models';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeProvider';
|
||||
|
||||
export class AzureResourceDatabaseTreeNode extends AzureResourceTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly database: AzureResourceDatabase,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(treeChangeHandler, parent);
|
||||
|
||||
this._label = `${this.database.name} (${this.database.serverName})`;
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
return [];
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(this._label, TreeItemCollapsibleState.None);
|
||||
item.contextValue = AzureResourceItemType.database;
|
||||
item.iconPath = {
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/sql_database_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/sql_database.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
|
||||
public getNodeInfo(): NodeInfo {
|
||||
return {
|
||||
label: this._label,
|
||||
isLeaf: true,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
nodePath: this.generateNodePath(),
|
||||
nodeStatus: undefined,
|
||||
nodeType: AzureResourceItemType.database,
|
||||
nodeSubType: undefined,
|
||||
iconType: AzureResourceItemType.database
|
||||
};
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return `database_${this.database.name}`;
|
||||
}
|
||||
|
||||
private _label: string = undefined;
|
||||
}
|
||||
@@ -7,38 +7,66 @@
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { Account, NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import { AppContext } from '../../appContext';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { AzureResourceTreeNodeBase, AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { azureResource } from '../azure-resource';
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { IAzureResourceNodeWithProviderId } from '../interfaces';
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceDatabaseContainerTreeNode } from './databaseContainerTreeNode';
|
||||
import { AzureResourceDatabaseServerContainerTreeNode } from './databaseServerContainerTreeNode';
|
||||
import { AzureResourceSubscription } from '../models';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeChangeHandler';
|
||||
import { AzureResourceMessageTreeNode } from '../messageTreeNode';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
import { AzureResourceService } from '../resourceService';
|
||||
import { AzureResourceResourceTreeNode } from '../resourceTreeNode';
|
||||
|
||||
export class AzureResourceSubscriptionTreeNode extends AzureResourceTreeNodeBase {
|
||||
export class AzureResourceSubscriptionTreeNode extends AzureResourceContainerTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly subscription: AzureResourceSubscription,
|
||||
account: Account,
|
||||
public readonly account: Account,
|
||||
public readonly subscription: azureResource.AzureResourceSubscription,
|
||||
public readonly tenatId: string,
|
||||
appContext: AppContext,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(treeChangeHandler, parent);
|
||||
super(appContext, treeChangeHandler, parent);
|
||||
|
||||
this._children.push(new AzureResourceDatabaseContainerTreeNode(subscription, account, treeChangeHandler, this));
|
||||
this._children.push(new AzureResourceDatabaseServerContainerTreeNode(subscription, account, treeChangeHandler, this));
|
||||
this._id = `account_${this.account.key.accountId}.subscription_${this.subscription.id}.tenant_${this.tenatId}`;
|
||||
this.setCacheKey(`${this._id}.resources`);
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
return this._children;
|
||||
try {
|
||||
const resourceService = AzureResourceService.getInstance();
|
||||
|
||||
const children: IAzureResourceNodeWithProviderId[] = [];
|
||||
|
||||
for (const resourceProviderId of await resourceService.listResourceProviderIds()) {
|
||||
children.push(...await resourceService.getRootChildren(resourceProviderId, this.account, this.subscription, this.tenatId));
|
||||
}
|
||||
|
||||
if (children.length === 0) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceSubscriptionTreeNode.noResourcesLabel, this)];
|
||||
} else {
|
||||
return children.map((child) => {
|
||||
// To make tree node's id unique, otherwise, treeModel.js would complain 'item already registered'
|
||||
child.resourceNode.treeItem.id = `${this._id}.${child.resourceNode.treeItem.id}`;
|
||||
return new AzureResourceResourceTreeNode(child, this);
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
}
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
let item = new TreeItem(this.subscription.name, TreeItemCollapsibleState.Collapsed);
|
||||
const item = new TreeItem(this.subscription.name, TreeItemCollapsibleState.Collapsed);
|
||||
item.contextValue = AzureResourceItemType.subscription;
|
||||
item.iconPath = {
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/subscription_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/subscription.svg')
|
||||
dark: this.appContext.extensionContext.asAbsolutePath('resources/dark/subscription_inverse.svg'),
|
||||
light: this.appContext.extensionContext.asAbsolutePath('resources/light/subscription.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
@@ -58,8 +86,10 @@ export class AzureResourceSubscriptionTreeNode extends AzureResourceTreeNodeBase
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return `subscription_${this.subscription.id}`;
|
||||
return this._id;
|
||||
}
|
||||
|
||||
private _children: AzureResourceContainerTreeNodeBase[] = [];
|
||||
private _id: string = undefined;
|
||||
|
||||
private static readonly noResourcesLabel = localize('azure.resource.tree.subscriptionTreeNode.noResourcesLabel', 'No Resources found.');
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import { TreeNode } from '../treeNode';
|
||||
|
||||
export interface IAzureResourceTreeChangeHandler {
|
||||
notifyNodeChanged(node: TreeNode): void;
|
||||
|
||||
@@ -6,26 +6,25 @@
|
||||
'use strict';
|
||||
|
||||
import { TreeDataProvider, EventEmitter, Event, TreeItem } from 'vscode';
|
||||
import { DidChangeAccountsParams } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
import { setInterval, clearInterval } from 'timers';
|
||||
import { AppContext } from '../../appContext';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
import { AzureResourceServicePool } from '../servicePool';
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { AzureResourceAccountTreeNode } from './accountTreeNode';
|
||||
import { AzureResourceAccountNotSignedInTreeNode } from './accountNotSignedInTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceContainerTreeNodeBase, AzureResourceTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceMessageTreeNode } from '../messageTreeNode';
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
|
||||
export interface IAzureResourceTreeChangeHandler {
|
||||
notifyNodeChanged(node: TreeNode): void;
|
||||
}
|
||||
import { IAzureResourceTreeChangeHandler } from './treeChangeHandler';
|
||||
import { IAzureResourceAccountService } from '../../azureResource/interfaces';
|
||||
import { AzureResourceServiceNames } from '../constants';
|
||||
|
||||
export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IAzureResourceTreeChangeHandler {
|
||||
public constructor() {
|
||||
AzureResourceServicePool.getInstance().accountService.onDidChangeAccounts((e: DidChangeAccountsParams) => { this._onDidChangeTreeData.fire(undefined); });
|
||||
public constructor(
|
||||
public readonly appContext: AppContext
|
||||
) {
|
||||
}
|
||||
|
||||
public async getChildren(element?: TreeNode): Promise<TreeNode[]> {
|
||||
@@ -37,7 +36,7 @@ export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IA
|
||||
this._loadingTimer = setInterval(async () => {
|
||||
try {
|
||||
// Call sqlops.accounts.getAllAccounts() to determine whether the system has been initialized.
|
||||
await AzureResourceServicePool.getInstance().accountService.getAccounts();
|
||||
await this.appContext.getService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService).getAccounts();
|
||||
|
||||
// System has been initialized
|
||||
this.isSystemInitialized = true;
|
||||
@@ -51,16 +50,16 @@ export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IA
|
||||
// System not initialized yet
|
||||
this.isSystemInitialized = false;
|
||||
}
|
||||
}, AzureResourceTreeProvider.LoadingTimerInterval);
|
||||
}, AzureResourceTreeProvider.loadingTimerInterval);
|
||||
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceTreeProvider.Loading, undefined)];
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceTreeProvider.loadingLabel, undefined)];
|
||||
}
|
||||
|
||||
try {
|
||||
const accounts = await AzureResourceServicePool.getInstance().accountService.getAccounts();
|
||||
const accounts = await this.appContext.getService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService).getAccounts();
|
||||
|
||||
if (accounts && accounts.length > 0) {
|
||||
return accounts.map((account) => new AzureResourceAccountTreeNode(account, this));
|
||||
return accounts.map((account) => new AzureResourceAccountTreeNode(account, this.appContext, this));
|
||||
} else {
|
||||
return [new AzureResourceAccountNotSignedInTreeNode()];
|
||||
}
|
||||
@@ -96,6 +95,6 @@ export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IA
|
||||
private _loadingTimer: NodeJS.Timer = undefined;
|
||||
private _onDidChangeTreeData = new EventEmitter<TreeNode>();
|
||||
|
||||
private static readonly Loading = localize('azureResource.tree.treeProvider.loading', 'Loading ...');
|
||||
private static readonly LoadingTimerInterval = 5000;
|
||||
private static readonly loadingLabel = localize('azure.resource.tree.treeProvider.loadingLabel', 'Loading ...');
|
||||
private static readonly loadingTimerInterval = 5000;
|
||||
}
|
||||
|
||||
@@ -11,16 +11,6 @@ import * as vscode from 'vscode';
|
||||
type TreeNodePredicate = (node: TreeNode) => boolean;
|
||||
|
||||
export abstract class TreeNode {
|
||||
private _parent: TreeNode = undefined;
|
||||
|
||||
public get parent(): TreeNode {
|
||||
return this._parent;
|
||||
}
|
||||
|
||||
public set parent(node: TreeNode) {
|
||||
this._parent = node;
|
||||
}
|
||||
|
||||
public generateNodePath(): string {
|
||||
let path = undefined;
|
||||
if (this.parent) {
|
||||
@@ -65,13 +55,23 @@ export abstract class TreeNode {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
public get parent(): TreeNode {
|
||||
return this._parent;
|
||||
}
|
||||
|
||||
public set parent(node: TreeNode) {
|
||||
this._parent = node;
|
||||
}
|
||||
|
||||
public abstract getChildren(refreshChildren: boolean): TreeNode[] | Promise<TreeNode[]>;
|
||||
public abstract getTreeItem(): vscode.TreeItem | Promise<vscode.TreeItem>;
|
||||
|
||||
public abstract getNodeInfo(): sqlops.NodeInfo;
|
||||
|
||||
/**
|
||||
* The value to use for this node in the node path
|
||||
*/
|
||||
public abstract get nodePathValue(): string;
|
||||
|
||||
abstract getChildren(refreshChildren: boolean): TreeNode[] | Promise<TreeNode[]>;
|
||||
abstract getTreeItem(): vscode.TreeItem | Promise<vscode.TreeItem>;
|
||||
|
||||
abstract getNodeInfo(): sqlops.NodeInfo;
|
||||
private _parent: TreeNode = undefined;
|
||||
}
|
||||
@@ -12,10 +12,9 @@ export function getErrorMessage(error: Error | string): string {
|
||||
return (error instanceof Error) ? error.message : error;
|
||||
}
|
||||
|
||||
|
||||
export class AzureResourceErrorMessageUtil {
|
||||
public static getErrorMessage(error: Error | string): string {
|
||||
return localize('azureResource.error', 'Error: {0}', getErrorMessage(error));
|
||||
return localize('azure.resource.error', 'Error: {0}', getErrorMessage(error));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import ControllerBase from './controllerBase';
|
||||
import { DidChangeAccountsParams } from 'sqlops';
|
||||
|
||||
import {
|
||||
IAzureResourceCacheService,
|
||||
IAzureResourceAccountService,
|
||||
IAzureResourceSubscriptionService,
|
||||
IAzureResourceSubscriptionFilterService,
|
||||
IAzureResourceTenantService } from '../azureResource/interfaces';
|
||||
import { AzureResourceServiceNames } from '../azureResource/constants';
|
||||
import { AzureResourceTreeProvider } from '../azureResource/tree/treeProvider';
|
||||
import { registerAzureResourceCommands } from '../azureResource/commands';
|
||||
import { AzureResourceAccountService } from '../azureResource/services/accountService';
|
||||
import { AzureResourceSubscriptionService } from '../azureResource/services/subscriptionService';
|
||||
import { AzureResourceSubscriptionFilterService } from '../azureResource/services/subscriptionFilterService';
|
||||
import { AzureResourceCacheService } from '../azureResource/services/cacheService';
|
||||
import { AzureResourceTenantService } from '../azureResource/services/tenantService';
|
||||
|
||||
import { registerAzureResourceDatabaseServerCommands } from '../azureResource/providers/databaseServer/commands';
|
||||
import { registerAzureResourceDatabaseCommands } from '../azureResource/providers/database/commands';
|
||||
|
||||
export default class AzureResourceController extends ControllerBase {
|
||||
public activate(): Promise<boolean> {
|
||||
this.appContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, new AzureResourceCacheService(this.extensionContext));
|
||||
this.appContext.registerService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService, new AzureResourceAccountService(this.apiWrapper));
|
||||
this.appContext.registerService<IAzureResourceSubscriptionService>(AzureResourceServiceNames.subscriptionService, new AzureResourceSubscriptionService());
|
||||
this.appContext.registerService<IAzureResourceSubscriptionFilterService>(AzureResourceServiceNames.subscriptionFilterService, new AzureResourceSubscriptionFilterService(new AzureResourceCacheService(this.extensionContext)));
|
||||
this.appContext.registerService<IAzureResourceTenantService>(AzureResourceServiceNames.tenantService, new AzureResourceTenantService());
|
||||
|
||||
const azureResourceTree = new AzureResourceTreeProvider(this.appContext);
|
||||
this.extensionContext.subscriptions.push(this.apiWrapper.registerTreeDataProvider('azureResourceExplorer', azureResourceTree));
|
||||
|
||||
this.appContext.getService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService).onDidChangeAccounts((e: DidChangeAccountsParams) => { azureResourceTree.notifyNodeChanged(undefined); });
|
||||
|
||||
registerAzureResourceCommands(this.appContext, azureResourceTree);
|
||||
|
||||
registerAzureResourceDatabaseServerCommands(this.appContext);
|
||||
|
||||
registerAzureResourceDatabaseCommands(this.appContext);
|
||||
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
|
||||
public deactivate(): void {
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import ControllerBase from './controllerBase';
|
||||
|
||||
import { AzureResourceTreeProvider } from '../azureResource/tree/treeProvider';
|
||||
import { registerAzureResourceCommands } from '../azureResource/commands';
|
||||
import { AzureResourceServicePool } from '../azureResource/servicePool';
|
||||
import { AzureResourceCredentialService } from '../azureResource/services/credentialService';
|
||||
import { AzureResourceAccountService } from '../azureResource/services/accountService';
|
||||
import { AzureResourceSubscriptionService } from '../azureResource/services/subscriptionService';
|
||||
import { AzureResourceSubscriptionFilterService } from '../azureResource/services/subscriptionFilterService';
|
||||
import { AzureResourceDatabaseServerService } from '../azureResource/services/databaseServerService';
|
||||
import { AzureResourceDatabaseService } from '../azureResource/services/databaseService';
|
||||
import { AzureResourceCacheService } from '../azureResource/services/cacheService';
|
||||
import { AzureResourceContextService } from '../azureResource/services/contextService';
|
||||
|
||||
/**
|
||||
* The main controller class that initializes the extension
|
||||
*/
|
||||
export default class MainController extends ControllerBase {
|
||||
// PUBLIC METHODS //////////////////////////////////////////////////////
|
||||
/**
|
||||
* Deactivates the extension
|
||||
*/
|
||||
public deactivate(): void {
|
||||
}
|
||||
|
||||
public activate(): Promise<boolean> {
|
||||
this.configureAzureResource();
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
|
||||
private configureAzureResource(): void {
|
||||
let servicePool = AzureResourceServicePool.getInstance();
|
||||
servicePool.cacheService = new AzureResourceCacheService(this.extensionContext);
|
||||
servicePool.contextService = new AzureResourceContextService(this.extensionContext, this.apiWrapper);
|
||||
servicePool.accountService = new AzureResourceAccountService(this.apiWrapper);
|
||||
servicePool.credentialService = new AzureResourceCredentialService(this.apiWrapper);
|
||||
servicePool.subscriptionService = new AzureResourceSubscriptionService();
|
||||
servicePool.subscriptionFilterService = new AzureResourceSubscriptionFilterService(new AzureResourceCacheService(this.extensionContext));
|
||||
servicePool.databaseService = new AzureResourceDatabaseService();
|
||||
servicePool.databaseServerService = new AzureResourceDatabaseServerService();
|
||||
|
||||
let azureResourceTree = new AzureResourceTreeProvider();
|
||||
this.extensionContext.subscriptions.push(this.apiWrapper.registerTreeDataProvider('azureResourceExplorer', azureResourceTree));
|
||||
|
||||
registerAzureResourceCommands(this.apiWrapper, azureResourceTree);
|
||||
}
|
||||
}
|
||||
@@ -6,12 +6,17 @@ import * as path from 'path';
|
||||
import * as os from 'os';
|
||||
import * as constants from './constants';
|
||||
|
||||
import MainController from './controllers/mainController';
|
||||
import AzureResourceController from './controllers/azureResourceController';
|
||||
import { AppContext } from './appContext';
|
||||
import ControllerBase from './controllers/controllerBase';
|
||||
import { ApiWrapper } from './apiWrapper';
|
||||
import { AzureAccountProviderService } from './account-provider/azureAccountProviderService';
|
||||
|
||||
import { AzureResourceDatabaseServerProvider } from './azureResource/providers/databaseServer/databaseServerProvider';
|
||||
import { AzureResourceDatabaseServerService } from './azureResource/providers/databaseServer/databaseServerService';
|
||||
import { AzureResourceDatabaseProvider } from './azureResource/providers/database/databaseProvider';
|
||||
import { AzureResourceDatabaseService } from './azureResource/providers/database/databaseService';
|
||||
|
||||
let controllers: ControllerBase[] = [];
|
||||
|
||||
|
||||
@@ -35,7 +40,8 @@ export function getDefaultLogLocation() {
|
||||
// this method is called when your extension is activated
|
||||
// your extension is activated the very first time the command is executed
|
||||
export function activate(extensionContext: vscode.ExtensionContext) {
|
||||
let appContext = new AppContext(extensionContext, new ApiWrapper());
|
||||
const apiWrapper = new ApiWrapper();
|
||||
let appContext = new AppContext(extensionContext, apiWrapper);
|
||||
let activations: Thenable<boolean>[] = [];
|
||||
|
||||
// Create the folder for storing the token caches
|
||||
@@ -56,21 +62,19 @@ export function activate(extensionContext: vscode.ExtensionContext) {
|
||||
extensionContext.subscriptions.push(accountProviderService);
|
||||
accountProviderService.activate();
|
||||
|
||||
// Start the main controller
|
||||
let mainController = new MainController(appContext);
|
||||
controllers.push(mainController);
|
||||
extensionContext.subscriptions.push(mainController);
|
||||
activations.push(mainController.activate());
|
||||
const azureResourceController = new AzureResourceController(appContext);
|
||||
controllers.push(azureResourceController);
|
||||
extensionContext.subscriptions.push(azureResourceController);
|
||||
activations.push(azureResourceController.activate());
|
||||
|
||||
return Promise.all(activations)
|
||||
.then((results: boolean[]) => {
|
||||
for (let result of results) {
|
||||
if (!result) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return {
|
||||
provideResources() {
|
||||
return [
|
||||
new AzureResourceDatabaseServerProvider(new AzureResourceDatabaseServerService(), apiWrapper, extensionContext),
|
||||
new AzureResourceDatabaseProvider(new AzureResourceDatabaseService(), apiWrapper, extensionContext)
|
||||
];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// this method is called when your extension is deactivated
|
||||
|
||||
@@ -9,8 +9,8 @@ import * as should from 'should';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
import { AzureResourceItemType } from '../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../azureResource/messageTreeNode';
|
||||
|
||||
describe('AzureResourceMessageTreeNode.info', function(): void {
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
@@ -0,0 +1,150 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
|
||||
import { azureResource } from '../../../../azureResource/azure-resource';
|
||||
import { ApiWrapper } from '../../../../apiWrapper';
|
||||
import { IAzureResourceDatabaseService } from '../../../../azureResource/providers/database/interfaces';
|
||||
import { AzureResourceDatabaseTreeDataProvider } from '../../../../azureResource/providers/database/databaseTreeDataProvider';
|
||||
import { AzureResourceDatabase } from '../../../../azureResource/providers/database/models';
|
||||
import { AzureResourceItemType } from '../../../../azureResource/constants';
|
||||
|
||||
// Mock services
|
||||
let mockDatabaseService: TypeMoq.IMock<IAzureResourceDatabaseService>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
|
||||
// Mock test data
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
providerId: 'mock_provider'
|
||||
},
|
||||
displayInfo: {
|
||||
displayName: 'mock_account@test.com',
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockTenantId: string = 'mock_tenant';
|
||||
|
||||
const mockResourceRootNode: azureResource.IAzureResourceNode = {
|
||||
account: mockAccount,
|
||||
subscription: mockSubscription,
|
||||
tenantId: mockTenantId,
|
||||
treeItem: {
|
||||
id: 'mock_resource_root_node',
|
||||
label: 'mock resource root node',
|
||||
iconPath: undefined,
|
||||
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
||||
contextValue: 'mock_resource_root_node'
|
||||
}
|
||||
};
|
||||
|
||||
const mockTokens = {};
|
||||
mockTokens[mockTenantId] = {
|
||||
token: 'mock_token',
|
||||
tokenType: 'Bearer'
|
||||
};
|
||||
|
||||
const mockDatabases: AzureResourceDatabase[] = [
|
||||
{
|
||||
name: 'mock database 1',
|
||||
serverName: 'mock database server 1',
|
||||
serverFullName: 'mock database server full name 1',
|
||||
loginName: 'mock login'
|
||||
},
|
||||
{
|
||||
name: 'mock database 2',
|
||||
serverName: 'mock database server 2',
|
||||
serverFullName: 'mock database server full name 2',
|
||||
loginName: 'mock login'
|
||||
}
|
||||
];
|
||||
|
||||
describe('AzureResourceDatabaseTreeDataProvider.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockDatabaseService = TypeMoq.Mock.ofType<IAzureResourceDatabaseService>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockApiWrapper.object, mockExtensionContext.object);
|
||||
|
||||
const treeItem = await treeDataProvider.getTreeItem(mockResourceRootNode);
|
||||
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
||||
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
||||
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
||||
should(treeItem.contextValue).equal(mockResourceRootNode.treeItem.contextValue);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceDatabaseTreeDataProvider.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockDatabaseService = TypeMoq.Mock.ofType<IAzureResourceDatabaseService>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockDatabaseService.setup((o) => o.getDatabases(mockSubscription, TypeMoq.It.isAny())).returns(() => Promise.resolve(mockDatabases));
|
||||
mockExtensionContext.setup((o) => o.asAbsolutePath(TypeMoq.It.isAnyString())).returns(() => TypeMoq.It.isAnyString());
|
||||
});
|
||||
|
||||
it('Should return container node when element is undefined.', async function(): Promise<void> {
|
||||
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockApiWrapper.object, mockExtensionContext.object);
|
||||
|
||||
const children = await treeDataProvider.getChildren();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
|
||||
const child = children[0];
|
||||
should(child.account).undefined();
|
||||
should(child.subscription).undefined();
|
||||
should(child.tenantId).undefined();
|
||||
should(child.treeItem.id).equal('azure.resource.providers.database.treeDataProvider.databaseContainer');
|
||||
should(child.treeItem.label).equal('SQL Databases');
|
||||
should(child.treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
||||
should(child.treeItem.contextValue).equal('azure.resource.itemType.databaseContainer');
|
||||
});
|
||||
|
||||
it('Should return resource nodes when it is container node.', async function(): Promise<void> {
|
||||
const treeDataProvider = new AzureResourceDatabaseTreeDataProvider(mockDatabaseService.object, mockApiWrapper.object, mockExtensionContext.object);
|
||||
|
||||
const children = await treeDataProvider.getChildren(mockResourceRootNode);
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockDatabases.length);
|
||||
|
||||
for (let ix = 0; ix < children.length; ix++) {
|
||||
const child = children[ix];
|
||||
const database = mockDatabases[ix];
|
||||
|
||||
should(child.account).equal(mockAccount);
|
||||
should(child.subscription).equal(mockSubscription);
|
||||
should(child.tenantId).equal(mockTenantId);
|
||||
should(child.treeItem.id).equal(`databaseServer_${database.serverFullName}.database_${database.name}`);
|
||||
should(child.treeItem.label).equal(`${database.name} (${database.serverName})`);
|
||||
should(child.treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.None);
|
||||
should(child.treeItem.contextValue).equal(AzureResourceItemType.database);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,150 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
|
||||
import { azureResource } from '../../../../azureResource/azure-resource';
|
||||
import { ApiWrapper } from '../../../../apiWrapper';
|
||||
import { IAzureResourceDatabaseServerService } from '../../../../azureResource/providers/databaseServer/interfaces';
|
||||
import { AzureResourceDatabaseServerTreeDataProvider } from '../../../../azureResource/providers/databaseServer/databaseServerTreeDataProvider';
|
||||
import { AzureResourceDatabaseServer } from '../../../../azureResource/providers/databaseServer/models';
|
||||
import { AzureResourceItemType } from '../../../../azureResource/constants';
|
||||
|
||||
// Mock services
|
||||
let mockDatabaseServerService: TypeMoq.IMock<IAzureResourceDatabaseServerService>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
|
||||
// Mock test data
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
providerId: 'mock_provider'
|
||||
},
|
||||
displayInfo: {
|
||||
displayName: 'mock_account@test.com',
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockTenantId: string = 'mock_tenant';
|
||||
|
||||
const mockResourceRootNode: azureResource.IAzureResourceNode = {
|
||||
account: mockAccount,
|
||||
subscription: mockSubscription,
|
||||
tenantId: mockTenantId,
|
||||
treeItem: {
|
||||
id: 'mock_resource_root_node',
|
||||
label: 'mock resource root node',
|
||||
iconPath: undefined,
|
||||
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
||||
contextValue: 'mock_resource_root_node'
|
||||
}
|
||||
};
|
||||
|
||||
const mockTokens = {};
|
||||
mockTokens[mockTenantId] = {
|
||||
token: 'mock_token',
|
||||
tokenType: 'Bearer'
|
||||
};
|
||||
|
||||
const mockDatabaseServers: AzureResourceDatabaseServer[] = [
|
||||
{
|
||||
name: 'mock database server 1',
|
||||
fullName: 'mock database server full name 1',
|
||||
loginName: 'mock login',
|
||||
defaultDatabaseName: 'master'
|
||||
},
|
||||
{
|
||||
name: 'mock database server 2',
|
||||
fullName: 'mock database server full name 2',
|
||||
loginName: 'mock login',
|
||||
defaultDatabaseName: 'master'
|
||||
}
|
||||
];
|
||||
|
||||
describe('AzureResourceDatabaseServerTreeDataProvider.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockDatabaseServerService = TypeMoq.Mock.ofType<IAzureResourceDatabaseServerService>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockApiWrapper.object, mockExtensionContext.object);
|
||||
|
||||
const treeItem = await treeDataProvider.getTreeItem(mockResourceRootNode);
|
||||
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
||||
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
||||
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
||||
should(treeItem.contextValue).equal(mockResourceRootNode.treeItem.contextValue);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceDatabaseServerTreeDataProvider.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockDatabaseServerService = TypeMoq.Mock.ofType<IAzureResourceDatabaseServerService>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockDatabaseServerService.setup((o) => o.getDatabaseServers(mockSubscription, TypeMoq.It.isAny())).returns(() => Promise.resolve(mockDatabaseServers));
|
||||
mockExtensionContext.setup((o) => o.asAbsolutePath(TypeMoq.It.isAnyString())).returns(() => TypeMoq.It.isAnyString());
|
||||
});
|
||||
|
||||
it('Should return container node when element is undefined.', async function(): Promise<void> {
|
||||
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockApiWrapper.object, mockExtensionContext.object);
|
||||
|
||||
const children = await treeDataProvider.getChildren();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
|
||||
const child = children[0];
|
||||
should(child.account).undefined();
|
||||
should(child.subscription).undefined();
|
||||
should(child.tenantId).undefined();
|
||||
should(child.treeItem.id).equal('azure.resource.providers.databaseServer.treeDataProvider.databaseServerContainer');
|
||||
should(child.treeItem.label).equal('SQL Servers');
|
||||
should(child.treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
||||
should(child.treeItem.contextValue).equal('azure.resource.itemType.databaseServerContainer');
|
||||
});
|
||||
|
||||
it('Should return resource nodes when it is container node.', async function(): Promise<void> {
|
||||
const treeDataProvider = new AzureResourceDatabaseServerTreeDataProvider(mockDatabaseServerService.object, mockApiWrapper.object, mockExtensionContext.object);
|
||||
|
||||
const children = await treeDataProvider.getChildren(mockResourceRootNode);
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockDatabaseServers.length);
|
||||
|
||||
for (let ix = 0; ix < children.length; ix++) {
|
||||
const child = children[ix];
|
||||
const databaseServer = mockDatabaseServers[ix];
|
||||
|
||||
should(child.account).equal(mockAccount);
|
||||
should(child.subscription).equal(mockSubscription);
|
||||
should(child.tenantId).equal(mockTenantId);
|
||||
should(child.treeItem.id).equal(`databaseServer_${databaseServer.name}`);
|
||||
should(child.treeItem.label).equal(databaseServer.name);
|
||||
should(child.treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.None);
|
||||
should(child.treeItem.contextValue).equal(AzureResourceItemType.databaseServer);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,180 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import 'mocha';
|
||||
import { fail } from 'assert';
|
||||
|
||||
import { azureResource } from '../../azureResource/azure-resource';
|
||||
import { AzureResourceService } from '../../azureResource/resourceService';
|
||||
|
||||
// Mock test data
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
providerId: 'mock_provider'
|
||||
},
|
||||
displayInfo: {
|
||||
displayName: 'mock_account@test.com',
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockTenantId: string = 'mock_tenant';
|
||||
|
||||
let mockResourceTreeDataProvider1: TypeMoq.IMock<azureResource.IAzureResourceTreeDataProvider>;
|
||||
let mockResourceProvider1: TypeMoq.IMock<azureResource.IAzureResourceProvider>;
|
||||
|
||||
let mockResourceTreeDataProvider2: TypeMoq.IMock<azureResource.IAzureResourceTreeDataProvider>;
|
||||
let mockResourceProvider2: TypeMoq.IMock<azureResource.IAzureResourceProvider>;
|
||||
|
||||
const resourceService: AzureResourceService = AzureResourceService.getInstance();
|
||||
|
||||
describe('AzureResourceService.listResourceProviderIds', function(): void {
|
||||
beforeEach(() => {
|
||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||
|
||||
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider2.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider2.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
||||
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should be correct when registering providers.', async function(): Promise<void> {
|
||||
resourceService.registerResourceProvider(mockResourceProvider1.object);
|
||||
let providerIds = await resourceService.listResourceProviderIds();
|
||||
should(providerIds).Array();
|
||||
should(providerIds.length).equal(1);
|
||||
should(providerIds[0]).equal(mockResourceProvider1.object.providerId);
|
||||
|
||||
resourceService.registerResourceProvider(mockResourceProvider2.object);
|
||||
providerIds = await resourceService.listResourceProviderIds();
|
||||
should(providerIds).Array();
|
||||
should(providerIds.length).equal(2);
|
||||
should(providerIds[0]).equal(mockResourceProvider1.object.providerId);
|
||||
should(providerIds[1]).equal(mockResourceProvider2.object.providerId);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceService.getRootChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider1.object);
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should be correct when provider id is correct.', async function(): Promise<void> {
|
||||
const children = await resourceService.getRootChildren(mockResourceProvider1.object.providerId, mockAccount, mockSubscription, mockTenantId);
|
||||
|
||||
should(children).Array();
|
||||
});
|
||||
|
||||
it('Should throw exceptions when provider id is incorrect.', async function(): Promise<void> {
|
||||
const providerId = 'non_existent_provider_id';
|
||||
try {
|
||||
await resourceService.getRootChildren(providerId, mockAccount, mockSubscription, mockTenantId);
|
||||
} catch (error) {
|
||||
should(error.message).equal(`Azure resource provider doesn't exist. Id: ${providerId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
fail();
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceService.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren(TypeMoq.It.isAny())).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider1.object);
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should be correct when provider id is correct.', async function(): Promise<void> {
|
||||
const children = await resourceService.getChildren(mockResourceProvider1.object.providerId, TypeMoq.It.isAny());
|
||||
should(children).Array();
|
||||
});
|
||||
|
||||
it('Should throw exceptions when provider id is incorrect.', async function(): Promise<void> {
|
||||
const providerId = 'non_existent_provider_id';
|
||||
try {
|
||||
await resourceService.getRootChildren(providerId, mockAccount, mockSubscription, mockTenantId);
|
||||
} catch (error) {
|
||||
should(error.message).equal(`Azure resource provider doesn't exist. Id: ${providerId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
fail();
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceService.getTreeItem', function(): void {
|
||||
beforeEach(() => {
|
||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren(TypeMoq.It.isAny())).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider1.object);
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should be correct when provider id is correct.', async function(): Promise<void> {
|
||||
const treeItem = await resourceService.getTreeItem(mockResourceProvider1.object.providerId, TypeMoq.It.isAny());
|
||||
should(treeItem).Object();
|
||||
});
|
||||
|
||||
it('Should throw exceptions when provider id is incorrect.', async function(): Promise<void> {
|
||||
const providerId = 'non_existent_provider_id';
|
||||
try {
|
||||
await resourceService.getRootChildren(providerId, mockAccount, mockSubscription, mockTenantId);
|
||||
} catch (error) {
|
||||
should(error.message).equal(`Azure resource provider doesn't exist. Id: ${providerId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
fail();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,184 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
|
||||
import { azureResource } from '../../azureResource/azure-resource';
|
||||
import { AzureResourceService } from '../../azureResource/resourceService';
|
||||
import { AzureResourceResourceTreeNode } from '../../azureResource/resourceTreeNode';
|
||||
|
||||
const resourceService = AzureResourceService.getInstance();
|
||||
|
||||
// Mock test data
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
providerId: 'mock_provider'
|
||||
},
|
||||
displayInfo: {
|
||||
displayName: 'mock_account@test.com',
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockTenantId: string = 'mock_tenant';
|
||||
|
||||
const mockResourceProviderId: string = 'mock_resource_provider';
|
||||
|
||||
const mockResourceRootNode: azureResource.IAzureResourceNode = {
|
||||
account: mockAccount,
|
||||
subscription: mockSubscription,
|
||||
tenantId: mockTenantId,
|
||||
treeItem: {
|
||||
id: 'mock_resource_root_node',
|
||||
label: 'mock resource root node',
|
||||
iconPath: undefined,
|
||||
collapsibleState: vscode.TreeItemCollapsibleState.Collapsed,
|
||||
contextValue: 'mock_resource_root_node'
|
||||
}
|
||||
};
|
||||
|
||||
const mockResourceNode1: azureResource.IAzureResourceNode = {
|
||||
account: mockAccount,
|
||||
subscription: mockSubscription,
|
||||
tenantId: mockTenantId,
|
||||
treeItem: {
|
||||
id: 'mock_resource_node_1',
|
||||
label: 'mock resource node 1',
|
||||
iconPath: undefined,
|
||||
collapsibleState: vscode.TreeItemCollapsibleState.None,
|
||||
contextValue: 'mock_resource_node'
|
||||
}
|
||||
};
|
||||
|
||||
const mockResourceNode2: azureResource.IAzureResourceNode = {
|
||||
account: mockAccount,
|
||||
subscription: mockSubscription,
|
||||
tenantId: mockTenantId,
|
||||
treeItem: {
|
||||
id: 'mock_resource_node_2',
|
||||
label: 'mock resource node 2',
|
||||
iconPath: undefined,
|
||||
collapsibleState: vscode.TreeItemCollapsibleState.None,
|
||||
contextValue: 'mock_resource_node'
|
||||
}
|
||||
};
|
||||
|
||||
const mockResourceNodes: azureResource.IAzureResourceNode[] = [mockResourceNode1, mockResourceNode2];
|
||||
|
||||
let mockResourceTreeDataProvider: TypeMoq.IMock<azureResource.IAzureResourceTreeDataProvider>;
|
||||
let mockResourceProvider: TypeMoq.IMock<azureResource.IAzureResourceProvider>;
|
||||
|
||||
describe('AzureResourceResourceTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockResourceTreeDataProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider.setup((o) => o.getTreeItem(mockResourceRootNode)).returns(() => mockResourceRootNode.treeItem);
|
||||
mockResourceTreeDataProvider.setup((o) => o.getChildren(mockResourceRootNode)).returns(() => Promise.resolve(mockResourceNodes));
|
||||
|
||||
mockResourceProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider.setup((o) => o.providerId).returns(() => mockResourceProviderId);
|
||||
mockResourceProvider.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider.object);
|
||||
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const resourceTreeNode = new AzureResourceResourceTreeNode({
|
||||
resourceProviderId: mockResourceProviderId,
|
||||
resourceNode: mockResourceRootNode
|
||||
}, undefined);
|
||||
|
||||
should(resourceTreeNode.nodePathValue).equal(mockResourceRootNode.treeItem.id);
|
||||
|
||||
const treeItem = await resourceTreeNode.getTreeItem();
|
||||
should(treeItem.id).equal(mockResourceRootNode.treeItem.id);
|
||||
should(treeItem.label).equal(mockResourceRootNode.treeItem.label);
|
||||
should(treeItem.collapsibleState).equal(mockResourceRootNode.treeItem.collapsibleState);
|
||||
should(treeItem.contextValue).equal(mockResourceRootNode.treeItem.contextValue);
|
||||
|
||||
const nodeInfo = resourceTreeNode.getNodeInfo();
|
||||
should(nodeInfo.label).equal(mockResourceRootNode.treeItem.label);
|
||||
should(nodeInfo.isLeaf).equal(mockResourceRootNode.treeItem.collapsibleState === vscode.TreeItemCollapsibleState.None);
|
||||
should(nodeInfo.nodeType).equal(mockResourceRootNode.treeItem.contextValue);
|
||||
should(nodeInfo.iconType).equal(mockResourceRootNode.treeItem.contextValue);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceResourceTreeNode.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockResourceTreeDataProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider.setup((o) => o.getChildren(mockResourceRootNode)).returns(() => Promise.resolve(mockResourceNodes));
|
||||
|
||||
mockResourceProvider = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider.setup((o) => o.providerId).returns(() => mockResourceProviderId);
|
||||
mockResourceProvider.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider.object);
|
||||
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should return resource nodes when it is container node.', async function(): Promise<void> {
|
||||
const resourceTreeNode = new AzureResourceResourceTreeNode({
|
||||
resourceProviderId: mockResourceProviderId,
|
||||
resourceNode: mockResourceRootNode
|
||||
}, undefined);
|
||||
|
||||
const children = await resourceTreeNode.getChildren();
|
||||
|
||||
mockResourceTreeDataProvider.verify((o) => o.getChildren(mockResourceRootNode), TypeMoq.Times.once());
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockResourceNodes.length);
|
||||
|
||||
for (let ix = 0; ix < children.length; ix++) {
|
||||
const child = children[ix];
|
||||
|
||||
should(child).instanceOf(AzureResourceResourceTreeNode);
|
||||
|
||||
const childNode = (child as AzureResourceResourceTreeNode).resourceNodeWithProviderId;
|
||||
should(childNode.resourceProviderId).equal(mockResourceProviderId);
|
||||
should(childNode.resourceNode.account).equal(mockAccount);
|
||||
should(childNode.resourceNode.subscription).equal(mockSubscription);
|
||||
should(childNode.resourceNode.tenantId).equal(mockTenantId);
|
||||
should(childNode.resourceNode.treeItem.id).equal(mockResourceNodes[ix].treeItem.id);
|
||||
should(childNode.resourceNode.treeItem.label).equal(mockResourceNodes[ix].treeItem.label);
|
||||
should(childNode.resourceNode.treeItem.collapsibleState).equal(mockResourceNodes[ix].treeItem.collapsibleState);
|
||||
should(childNode.resourceNode.treeItem.contextValue).equal(mockResourceNodes[ix].treeItem.contextValue);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should return empty when it is leaf node.', async function(): Promise<void> {
|
||||
const resourceTreeNode = new AzureResourceResourceTreeNode({
|
||||
resourceProviderId: mockResourceProviderId,
|
||||
resourceNode: mockResourceNode1
|
||||
}, undefined);
|
||||
|
||||
const children = await resourceTreeNode.getChildren();
|
||||
|
||||
mockResourceTreeDataProvider.verify((o) => o.getChildren(), TypeMoq.Times.exactly(0));
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(0);
|
||||
});
|
||||
});
|
||||
@@ -26,7 +26,7 @@ describe('AzureResourceAccountNotSignedInTreeNode.info', function(): void {
|
||||
should(treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.None);
|
||||
should(treeItem.command).not.undefined();
|
||||
should(treeItem.command.title).equal(label);
|
||||
should(treeItem.command.command).equal('azureresource.signin');
|
||||
should(treeItem.command.command).equal('azure.resource.signin');
|
||||
|
||||
const nodeInfo = treeNode.getNodeInfo();
|
||||
should(nodeInfo.isLeaf).true();
|
||||
|
||||
@@ -10,35 +10,38 @@ import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import { AppContext } from '../../../appContext';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { azureResource } from '../../../azureResource/azure-resource';
|
||||
import {
|
||||
IAzureResourceCacheService,
|
||||
IAzureResourceContextService,
|
||||
IAzureResourceCredentialService,
|
||||
IAzureResourceSubscriptionService,
|
||||
IAzureResourceSubscriptionFilterService
|
||||
IAzureResourceSubscriptionFilterService,
|
||||
IAzureResourceTenantService
|
||||
} from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceAccountTreeNode } from '../../../azureResource/tree/accountTreeNode';
|
||||
import { AzureResourceSubscription } from '../../../azureResource/models';
|
||||
import { AzureResourceSubscriptionTreeNode } from '../../../azureResource/tree/subscriptionTreeNode';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
import { AzureResourceItemType, AzureResourceServiceNames } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/messageTreeNode';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
import { generateGuid } from '../../../azureResource/utils';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
let mockCacheService: TypeMoq.IMock<IAzureResourceCacheService>;
|
||||
let mockContextService: TypeMoq.IMock<IAzureResourceContextService>;
|
||||
let mockCredentialService: TypeMoq.IMock<IAzureResourceCredentialService>;
|
||||
let mockSubscriptionService: TypeMoq.IMock<IAzureResourceSubscriptionService>;
|
||||
let mockSubscriptionFilterService: TypeMoq.IMock<IAzureResourceSubscriptionFilterService>;
|
||||
let mockTenantService: TypeMoq.IMock<IAzureResourceTenantService>;
|
||||
let mockAppContext: AppContext;
|
||||
|
||||
let mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
// Mock test data
|
||||
const mockTenantId = 'mock_tenant_id';
|
||||
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
@@ -49,51 +52,68 @@ const mockAccount: sqlops.Account = {
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
properties: {
|
||||
tenants: [
|
||||
{
|
||||
id: mockTenantId
|
||||
}
|
||||
]
|
||||
},
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockCredential = TypeMoq.Mock.ofType<ServiceClientCredentials>().object;
|
||||
const mockCredentials = [mockCredential];
|
||||
|
||||
const mockSubscription1: AzureResourceSubscription = {
|
||||
const mockSubscription1: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription_1',
|
||||
name: 'mock subscription 1'
|
||||
};
|
||||
const mockSubscription2: AzureResourceSubscription = {
|
||||
|
||||
const mockSubscription2: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription_2',
|
||||
name: 'mock subscription 2'
|
||||
};
|
||||
|
||||
const mockSubscriptions = [mockSubscription1, mockSubscription2];
|
||||
|
||||
const mockFilteredSubscriptions = [mockSubscription1];
|
||||
|
||||
let mockSubscriptionCache: { subscriptions: { [accountId: string]: AzureResourceSubscription[]} };
|
||||
const mockTokens = {};
|
||||
mockTokens[mockTenantId] = {
|
||||
token: 'mock_token',
|
||||
tokenType: 'Bearer'
|
||||
};
|
||||
|
||||
const mockCredential = new TokenCredentials(mockTokens[mockTenantId].token, mockTokens[mockTenantId].tokenType);
|
||||
|
||||
let mockSubscriptionCache: azureResource.AzureResourceSubscription[] = [];
|
||||
|
||||
describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
mockCredentialService = TypeMoq.Mock.ofType<IAzureResourceCredentialService>();
|
||||
mockSubscriptionService = TypeMoq.Mock.ofType<IAzureResourceSubscriptionService>();
|
||||
mockSubscriptionFilterService = TypeMoq.Mock.ofType<IAzureResourceSubscriptionFilterService>();
|
||||
mockTenantService = TypeMoq.Mock.ofType<IAzureResourceTenantService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockSubscriptionCache = { subscriptions: {} };
|
||||
mockSubscriptionCache = [];
|
||||
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
mockServicePool.cacheService = mockCacheService.object;
|
||||
mockServicePool.credentialService = mockCredentialService.object;
|
||||
mockServicePool.subscriptionService = mockSubscriptionService.object;
|
||||
mockServicePool.subscriptionFilterService = mockSubscriptionFilterService.object;
|
||||
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object);
|
||||
mockAppContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, mockCacheService.object);
|
||||
mockAppContext.registerService<IAzureResourceSubscriptionService>(AzureResourceServiceNames.subscriptionService, mockSubscriptionService.object);
|
||||
mockAppContext.registerService<IAzureResourceSubscriptionFilterService>(AzureResourceServiceNames.subscriptionFilterService, mockSubscriptionFilterService.object);
|
||||
mockAppContext.registerService<IAzureResourceTenantService>(AzureResourceServiceNames.tenantService, mockTenantService.object);
|
||||
|
||||
mockCredentialService.setup((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockCredentials));
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache.subscriptions[mockAccount.key.accountId] = mockSubscriptions);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache = mockSubscriptions);
|
||||
mockTenantService.setup((o) => o.getTenantId(TypeMoq.It.isAny())).returns(() => Promise.resolve(mockTenantId));
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
const accountTreeNodeId = `account_${mockAccount.key.accountId}`;
|
||||
const accountTreeNodeLabel = `${mockAccount.displayInfo.displayName} (${mockAccount.key.accountId})`;
|
||||
@@ -114,14 +134,17 @@ describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
});
|
||||
|
||||
it('Should be correct when there are subscriptions listed.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const accountTreeNodeLabel = `${mockAccount.displayInfo.displayName} (${mockAccount.key.accountId}) (${mockSubscriptions.length} / ${mockSubscriptions.length} subscriptions)`;
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
await accountTreeNode.getChildren();
|
||||
const subscriptionNodes = await accountTreeNode.getChildren();
|
||||
|
||||
should(subscriptionNodes).Array();
|
||||
should(subscriptionNodes.length).equal(mockSubscriptions.length);
|
||||
|
||||
const treeItem = await accountTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(accountTreeNodeLabel);
|
||||
@@ -131,14 +154,17 @@ describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
});
|
||||
|
||||
it('Should be correct when there are subscriptions filtered.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(mockFilteredSubscriptions));
|
||||
|
||||
const accountTreeNodeLabel = `${mockAccount.displayInfo.displayName} (${mockAccount.key.accountId}) (${mockFilteredSubscriptions.length} / ${mockSubscriptions.length} subscriptions)`;
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
await accountTreeNode.getChildren();
|
||||
const subscriptionNodes = await accountTreeNode.getChildren();
|
||||
|
||||
should(subscriptionNodes).Array();
|
||||
should(subscriptionNodes.length).equal(mockFilteredSubscriptions.length);
|
||||
|
||||
const treeItem = await accountTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(accountTreeNodeLabel);
|
||||
@@ -150,36 +176,41 @@ describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
|
||||
describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
mockCredentialService = TypeMoq.Mock.ofType<IAzureResourceCredentialService>();
|
||||
mockSubscriptionService = TypeMoq.Mock.ofType<IAzureResourceSubscriptionService>();
|
||||
mockSubscriptionFilterService = TypeMoq.Mock.ofType<IAzureResourceSubscriptionFilterService>();
|
||||
mockTenantService = TypeMoq.Mock.ofType<IAzureResourceTenantService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockSubscriptionCache = { subscriptions: {} };
|
||||
mockSubscriptionCache = [];
|
||||
|
||||
mockServicePool.cacheService = mockCacheService.object;
|
||||
mockServicePool.credentialService = mockCredentialService.object;
|
||||
mockServicePool.subscriptionService = mockSubscriptionService.object;
|
||||
mockServicePool.subscriptionFilterService = mockSubscriptionFilterService.object;
|
||||
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object);
|
||||
mockAppContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, mockCacheService.object);
|
||||
mockAppContext.registerService<IAzureResourceSubscriptionService>(AzureResourceServiceNames.subscriptionService, mockSubscriptionService.object);
|
||||
mockAppContext.registerService<IAzureResourceSubscriptionFilterService>(AzureResourceServiceNames.subscriptionFilterService, mockSubscriptionFilterService.object);
|
||||
mockAppContext.registerService<IAzureResourceTenantService>(AzureResourceServiceNames.tenantService, mockTenantService.object);
|
||||
|
||||
mockCredentialService.setup((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockCredentials));
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache.subscriptions[mockAccount.key.accountId] = mockSubscriptions);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache = mockSubscriptions);
|
||||
mockTenantService.setup((o) => o.getTenantId(TypeMoq.It.isAny())).returns(() => Promise.resolve(mockTenantId));
|
||||
});
|
||||
|
||||
it('Should load subscriptions from scratch and update cache when it is clearing cache.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(undefined));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve([]));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockSubscriptionService.verify((o) => o.getSubscriptions(mockAccount, mockCredentials), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
|
||||
mockApiWrapper.verify((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockSubscriptionService.verify((o) => o.getSubscriptions(mockAccount, mockCredential), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.exactly(0));
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
mockSubscriptionFilterService.verify((o) => o.getSelectedSubscriptions(mockAccount), TypeMoq.Times.once());
|
||||
|
||||
@@ -192,43 +223,42 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockSubscriptions.length);
|
||||
|
||||
should(Object.keys(mockSubscriptionCache.subscriptions)).deepEqual([mockAccount.key.accountId]);
|
||||
should(mockSubscriptionCache.subscriptions[mockAccount.key.accountId]).deepEqual(mockSubscriptions);
|
||||
should(mockSubscriptionCache).deepEqual(mockSubscriptions);
|
||||
|
||||
for (let ix = 0; ix < mockSubscriptions.length; ix++) {
|
||||
const child = children[ix];
|
||||
const subscription = mockSubscriptions[ix];
|
||||
|
||||
should(child).instanceof(AzureResourceSubscriptionTreeNode);
|
||||
should(child.nodePathValue).equal(`subscription_${subscription.id}`);
|
||||
should(child.nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${subscription.id}.tenant_${mockTenantId}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should load subscriptions from cache when it is not clearing cache.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
await accountTreeNode.getChildren();
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.exactly(1));
|
||||
mockSubscriptionService.verify((o) => o.getSubscriptions(mockAccount, mockCredentials), TypeMoq.Times.exactly(1));
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.exactly(2));
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.exactly(1));
|
||||
mockApiWrapper.verify((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockSubscriptionService.verify((o) => o.getSubscriptions(mockAccount, mockCredential), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
|
||||
should(children.length).equal(mockSubscriptionCache.subscriptions[mockAccount.key.accountId].length);
|
||||
should(children.length).equal(mockSubscriptionCache.length);
|
||||
|
||||
for (let ix = 0; ix < mockSubscriptionCache.subscriptions[mockAccount.key.accountId].length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`subscription_${mockSubscriptionCache.subscriptions[mockAccount.key.accountId][ix].id}`);
|
||||
for (let ix = 0; ix < mockSubscriptionCache.length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${mockSubscriptionCache[ix].id}.tenant_${mockTenantId}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should handle when there is no subscriptions.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(undefined));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
@@ -242,10 +272,10 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
});
|
||||
|
||||
it('Should honor subscription filtering.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(mockFilteredSubscriptions));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
@@ -255,23 +285,25 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
should(children.length).equal(mockFilteredSubscriptions.length);
|
||||
|
||||
for (let ix = 0; ix < mockFilteredSubscriptions.length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`subscription_${mockFilteredSubscriptions[ix].id}`);
|
||||
should(children[ix].nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${mockFilteredSubscriptions[ix].id}.tenant_${mockTenantId}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should handle errors.', async function(): Promise<void> {
|
||||
const mockError = 'Test error';
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => { throw new Error(mockError); });
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const mockError = 'Test error';
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => { throw new Error(mockError); });
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockSubscriptionService.verify((o) => o.getSubscriptions(mockAccount, mockCredentials), TypeMoq.Times.once());
|
||||
mockApiWrapper.verify((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockSubscriptionService.verify((o) => o.getSubscriptions(mockAccount, mockCredential), TypeMoq.Times.once());
|
||||
mockSubscriptionFilterService.verify((o) => o.getSelectedSubscriptions(mockAccount), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.never());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.never());
|
||||
mockSubscriptionFilterService.verify((o) => o.getSelectedSubscriptions(mockAccount), TypeMoq.Times.never());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
@@ -283,12 +315,33 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
|
||||
describe('AzureResourceAccountTreeNode.clearCache', function() : void {
|
||||
beforeEach(() => {
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
mockSubscriptionService = TypeMoq.Mock.ofType<IAzureResourceSubscriptionService>();
|
||||
mockSubscriptionFilterService = TypeMoq.Mock.ofType<IAzureResourceSubscriptionFilterService>();
|
||||
mockTenantService = TypeMoq.Mock.ofType<IAzureResourceTenantService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockSubscriptionCache = [];
|
||||
|
||||
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object);
|
||||
mockAppContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, mockCacheService.object);
|
||||
mockAppContext.registerService<IAzureResourceSubscriptionService>(AzureResourceServiceNames.subscriptionService, mockSubscriptionService.object);
|
||||
mockAppContext.registerService<IAzureResourceSubscriptionFilterService>(AzureResourceServiceNames.subscriptionFilterService, mockSubscriptionFilterService.object);
|
||||
mockAppContext.registerService<IAzureResourceTenantService>(AzureResourceServiceNames.tenantService, mockTenantService.object);
|
||||
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache = mockSubscriptions);
|
||||
mockTenantService.setup((o) => o.getTenantId(TypeMoq.It.isAny())).returns(() => Promise.resolve(mockTenantId));
|
||||
});
|
||||
|
||||
it('Should clear cache.', async function(): Promise<void> {
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
accountTreeNode.clearCache();
|
||||
should(accountTreeNode.isClearingCache).true();
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,219 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import {
|
||||
IAzureResourceCacheService,
|
||||
IAzureResourceContextService,
|
||||
IAzureResourceCredentialService,
|
||||
IAzureResourceDatabaseService
|
||||
} from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceSubscription, AzureResourceDatabase } from '../../../azureResource/models';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
import { AzureResourceDatabaseContainerTreeNode } from '../../../azureResource/tree/databaseContainerTreeNode';
|
||||
import { AzureResourceDatabaseTreeNode } from '../../../azureResource/tree/databaseTreeNode';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
let mockCacheService: TypeMoq.IMock<IAzureResourceCacheService>;
|
||||
let mockContextService: TypeMoq.IMock<IAzureResourceContextService>;
|
||||
let mockCredentialService: TypeMoq.IMock<IAzureResourceCredentialService>;
|
||||
let mockDatabaseService: TypeMoq.IMock<IAzureResourceDatabaseService>;
|
||||
|
||||
let mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
// Mock test data
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
providerId: 'mock_provider'
|
||||
},
|
||||
displayInfo: {
|
||||
displayName: 'mock_account@test.com',
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockCredential = TypeMoq.Mock.ofType<ServiceClientCredentials>().object;
|
||||
const mockCredentials = [mockCredential];
|
||||
|
||||
const mockSubscription: AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockDatabase1: AzureResourceDatabase = {
|
||||
name: 'mock database 1',
|
||||
serverName: 'mock server 1',
|
||||
serverFullName: 'mock server 1',
|
||||
loginName: 'mock user 1'
|
||||
};
|
||||
const mockDatabase2: AzureResourceDatabase = {
|
||||
name: 'mock database 2',
|
||||
serverName: 'mock server 2',
|
||||
serverFullName: 'mock server 2',
|
||||
loginName: 'mock user 2'
|
||||
};
|
||||
const mockDatabases = [mockDatabase1, mockDatabase2];
|
||||
|
||||
let mockDatabaseContainerCache: { databases: { [subscriptionId: string]: AzureResourceDatabase[] } };
|
||||
|
||||
describe('AzureResourceDatabaseContainerTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const databaseContainerTreeNodeLabel = 'SQL Databases';
|
||||
|
||||
should(databaseContainerTreeNode.nodePathValue).equal('databaseContainer');
|
||||
|
||||
const treeItem = await databaseContainerTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(databaseContainerTreeNodeLabel);
|
||||
should(treeItem.contextValue).equal(AzureResourceItemType.databaseContainer);
|
||||
should(treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
||||
|
||||
const nodeInfo = databaseContainerTreeNode.getNodeInfo();
|
||||
should(nodeInfo.isLeaf).false();
|
||||
should(nodeInfo.label).equal(databaseContainerTreeNodeLabel);
|
||||
should(nodeInfo.nodeType).equal(AzureResourceItemType.databaseContainer);
|
||||
should(nodeInfo.iconType).equal(AzureResourceItemType.databaseContainer);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceDatabaseContainerTreeNode.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
mockCredentialService = TypeMoq.Mock.ofType<IAzureResourceCredentialService>();
|
||||
mockDatabaseService = TypeMoq.Mock.ofType<IAzureResourceDatabaseService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockDatabaseContainerCache = { databases: {} };
|
||||
|
||||
mockServicePool.cacheService = mockCacheService.object;
|
||||
mockServicePool.credentialService = mockCredentialService.object;
|
||||
mockServicePool.databaseService = mockDatabaseService.object;
|
||||
|
||||
mockCredentialService.setup((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockCredentials));
|
||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockDatabaseContainerCache);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockDatabaseContainerCache.databases[mockSubscription.id] = mockDatabases);
|
||||
});
|
||||
|
||||
it('Should load databases from scratch and update cache when it is clearing cache.', async function(): Promise<void> {
|
||||
mockDatabaseService.setup((o) => o.getDatabases(mockSubscription, mockCredentials)).returns(() => Promise.resolve(mockDatabases));
|
||||
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const children = await databaseContainerTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockDatabaseService.verify((o) => o.getDatabases(mockSubscription, mockCredentials), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
|
||||
should(databaseContainerTreeNode.isClearingCache).false();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockDatabases.length);
|
||||
|
||||
should(Object.keys(mockDatabaseContainerCache.databases)).deepEqual([mockSubscription.id]);
|
||||
should(mockDatabaseContainerCache.databases[mockSubscription.id]).deepEqual(mockDatabases);
|
||||
|
||||
for (let ix = 0; ix < mockDatabases.length; ix++) {
|
||||
const child = children[ix];
|
||||
const database = mockDatabases[ix];
|
||||
|
||||
should(child).instanceof(AzureResourceDatabaseTreeNode);
|
||||
should(child.nodePathValue).equal(`database_${database.name}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should load databases from cache when it is not clearing cache.', async function(): Promise<void> {
|
||||
mockDatabaseService.setup((o) => o.getDatabases(mockSubscription, mockCredentials)).returns(() => Promise.resolve(mockDatabases));
|
||||
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
await databaseContainerTreeNode.getChildren();
|
||||
const children = await databaseContainerTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.exactly(1));
|
||||
mockDatabaseService.verify((o) => o.getDatabases(mockSubscription, mockCredentials), TypeMoq.Times.exactly(1));
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.exactly(2));
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.exactly(1));
|
||||
|
||||
should(children.length).equal(mockDatabaseContainerCache.databases[mockSubscription.id].length);
|
||||
|
||||
for (let ix = 0; ix < mockDatabaseContainerCache.databases[mockSubscription.id].length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`database_${mockDatabaseContainerCache.databases[mockSubscription.id][ix].name}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should handle when there is no databases.', async function(): Promise<void> {
|
||||
mockDatabaseService.setup((o) => o.getDatabases(mockSubscription, mockCredentials)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const children = await databaseContainerTreeNode.getChildren();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
should(children[0]).instanceof(AzureResourceMessageTreeNode);
|
||||
should(children[0].nodePathValue).startWith('message_');
|
||||
should(children[0].getNodeInfo().label).equal('No SQL Databases found.');
|
||||
});
|
||||
|
||||
it('Should handle errors.', async function(): Promise<void> {
|
||||
const mockError = 'Test error';
|
||||
mockDatabaseService.setup((o) => o.getDatabases(mockSubscription, mockCredentials)).returns(() => { throw new Error(mockError); });
|
||||
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
const children = await databaseContainerTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockDatabaseService.verify((o) => o.getDatabases(mockSubscription, mockCredentials), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.never());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.never());
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
should(children[0]).instanceof(AzureResourceMessageTreeNode);
|
||||
should(children[0].nodePathValue).startWith('message_');
|
||||
should(children[0].getNodeInfo().label).equal(`Error: ${mockError}`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceDatabaseContainerTreeNode.clearCache', function() : void {
|
||||
beforeEach(() => {
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
});
|
||||
|
||||
it('Should clear cache.', async function(): Promise<void> {
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
databaseContainerTreeNode.clearCache();
|
||||
should(databaseContainerTreeNode.isClearingCache).true();
|
||||
});
|
||||
});
|
||||
@@ -1,219 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import {
|
||||
IAzureResourceCacheService,
|
||||
IAzureResourceContextService,
|
||||
IAzureResourceCredentialService,
|
||||
IAzureResourceDatabaseServerService
|
||||
} from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceSubscription, AzureResourceDatabaseServer } from '../../../azureResource/models';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
import { AzureResourceDatabaseServerContainerTreeNode } from '../../../azureResource/tree/databaseServerContainerTreeNode';
|
||||
import { AzureResourceDatabaseServerTreeNode } from '../../../azureResource/tree/databaseServerTreeNode';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
let mockCacheService: TypeMoq.IMock<IAzureResourceCacheService>;
|
||||
let mockContextService: TypeMoq.IMock<IAzureResourceContextService>;
|
||||
let mockCredentialService: TypeMoq.IMock<IAzureResourceCredentialService>;
|
||||
let mockDatabaseServerService: TypeMoq.IMock<IAzureResourceDatabaseServerService>;
|
||||
|
||||
let mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
// Mock test data
|
||||
const mockAccount: sqlops.Account = {
|
||||
key: {
|
||||
accountId: 'mock_account',
|
||||
providerId: 'mock_provider'
|
||||
},
|
||||
displayInfo: {
|
||||
displayName: 'mock_account@test.com',
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockCredential = TypeMoq.Mock.ofType<ServiceClientCredentials>().object;
|
||||
const mockCredentials = [mockCredential];
|
||||
|
||||
const mockSubscription: AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockDatabaseServer1: AzureResourceDatabaseServer = {
|
||||
name: 'mock server 1',
|
||||
fullName: 'mock server 1',
|
||||
loginName: 'mock user 1',
|
||||
defaultDatabaseName: 'master'
|
||||
};
|
||||
const mockDatabaseServer2: AzureResourceDatabaseServer = {
|
||||
name: 'mock server 2',
|
||||
fullName: 'mock server 2',
|
||||
loginName: 'mock user 2',
|
||||
defaultDatabaseName: 'master'
|
||||
};
|
||||
const mockDatabaseServers = [mockDatabaseServer1, mockDatabaseServer2];
|
||||
|
||||
let mockDatabaseServerContainerCache: { databaseServers: { [subscriptionId: string]: AzureResourceDatabaseServer[] } };
|
||||
|
||||
describe('AzureResourceDatabaseServerContainerTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const databaseServerContainerTreeNode = new AzureResourceDatabaseServerContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const databaseServerContainerTreeNodeLabel = 'SQL Servers';
|
||||
|
||||
should(databaseServerContainerTreeNode.nodePathValue).equal('databaseServerContainer');
|
||||
|
||||
const treeItem = await databaseServerContainerTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(databaseServerContainerTreeNodeLabel);
|
||||
should(treeItem.contextValue).equal(AzureResourceItemType.databaseServerContainer);
|
||||
should(treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.Collapsed);
|
||||
|
||||
const nodeInfo = databaseServerContainerTreeNode.getNodeInfo();
|
||||
should(nodeInfo.isLeaf).false();
|
||||
should(nodeInfo.label).equal(databaseServerContainerTreeNodeLabel);
|
||||
should(nodeInfo.nodeType).equal(AzureResourceItemType.databaseServerContainer);
|
||||
should(nodeInfo.iconType).equal(AzureResourceItemType.databaseServerContainer);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceDatabaseServerContainerTreeNode.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
mockCredentialService = TypeMoq.Mock.ofType<IAzureResourceCredentialService>();
|
||||
mockDatabaseServerService = TypeMoq.Mock.ofType<IAzureResourceDatabaseServerService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockDatabaseServerContainerCache = { databaseServers: {} };
|
||||
|
||||
mockServicePool.cacheService = mockCacheService.object;
|
||||
mockServicePool.credentialService = mockCredentialService.object;
|
||||
mockServicePool.databaseServerService = mockDatabaseServerService.object;
|
||||
|
||||
mockCredentialService.setup((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockCredentials));
|
||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockDatabaseServerContainerCache);
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockDatabaseServerContainerCache.databaseServers[mockSubscription.id] = mockDatabaseServers);
|
||||
});
|
||||
|
||||
it('Should load database servers from scratch and update cache when it is clearing cache.', async function(): Promise<void> {
|
||||
mockDatabaseServerService.setup((o) => o.getDatabaseServers(mockSubscription, mockCredentials)).returns(() => Promise.resolve(mockDatabaseServers));
|
||||
|
||||
const databaseServerContainerTreeNode = new AzureResourceDatabaseServerContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const children = await databaseServerContainerTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockDatabaseServerService.verify((o) => o.getDatabaseServers(mockSubscription, mockCredentials), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
|
||||
should(databaseServerContainerTreeNode.isClearingCache).false();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockDatabaseServers.length);
|
||||
|
||||
should(Object.keys(mockDatabaseServerContainerCache.databaseServers)).deepEqual([mockSubscription.id]);
|
||||
should(mockDatabaseServerContainerCache.databaseServers[mockSubscription.id]).deepEqual(mockDatabaseServers);
|
||||
|
||||
for (let ix = 0; ix < mockDatabaseServers.length; ix++) {
|
||||
const child = children[ix];
|
||||
const databaseServer = mockDatabaseServers[ix];
|
||||
|
||||
should(child).instanceof(AzureResourceDatabaseServerTreeNode);
|
||||
should(child.nodePathValue).equal(`databaseServer_${databaseServer.name}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should load database servers from cache when it is not clearing cache.', async function(): Promise<void> {
|
||||
mockDatabaseServerService.setup((o) => o.getDatabaseServers(mockSubscription, mockCredentials)).returns(() => Promise.resolve(mockDatabaseServers));
|
||||
|
||||
const databaseServerContainerTreeNode = new AzureResourceDatabaseServerContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
await databaseServerContainerTreeNode.getChildren();
|
||||
const children = await databaseServerContainerTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.exactly(1));
|
||||
mockDatabaseServerService.verify((o) => o.getDatabaseServers(mockSubscription, mockCredentials), TypeMoq.Times.exactly(1));
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.exactly(2));
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.exactly(1));
|
||||
|
||||
should(children.length).equal(mockDatabaseServerContainerCache.databaseServers[mockSubscription.id].length);
|
||||
|
||||
for (let ix = 0; ix < mockDatabaseServerContainerCache.databaseServers[mockSubscription.id].length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`databaseServer_${mockDatabaseServerContainerCache.databaseServers[mockSubscription.id][ix].name}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should handle when there is no database servers.', async function(): Promise<void> {
|
||||
mockDatabaseServerService.setup((o) => o.getDatabaseServers(mockSubscription, mockCredentials)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const databaseContainerTreeNode = new AzureResourceDatabaseServerContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const children = await databaseContainerTreeNode.getChildren();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
should(children[0]).instanceof(AzureResourceMessageTreeNode);
|
||||
should(children[0].nodePathValue).startWith('message_');
|
||||
should(children[0].getNodeInfo().label).equal('No SQL Servers found.');
|
||||
});
|
||||
|
||||
it('Should handle errors.', async function(): Promise<void> {
|
||||
const mockError = 'Test error';
|
||||
mockDatabaseServerService.setup((o) => o.getDatabaseServers(mockSubscription, mockCredentials)).returns(() => { throw new Error(mockError); });
|
||||
|
||||
const databaseServerContainerTreeNode = new AzureResourceDatabaseServerContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
const children = await databaseServerContainerTreeNode.getChildren();
|
||||
|
||||
mockCredentialService.verify((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement), TypeMoq.Times.once());
|
||||
mockDatabaseServerService.verify((o) => o.getDatabaseServers(mockSubscription, mockCredentials), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.get(TypeMoq.It.isAnyString()), TypeMoq.Times.never());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.never());
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
should(children[0]).instanceof(AzureResourceMessageTreeNode);
|
||||
should(children[0].nodePathValue).startWith('message_');
|
||||
should(children[0].getNodeInfo().label).equal(`Error: ${mockError}`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('AzureResourceDatabaseServerContainerTreeNode.clearCache', function() : void {
|
||||
beforeEach(() => {
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
});
|
||||
|
||||
it('Should clear cache.', async function(): Promise<void> {
|
||||
const databaseServerContainerTreeNode = new AzureResourceDatabaseServerContainerTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
databaseServerContainerTreeNode.clearCache();
|
||||
should(databaseServerContainerTreeNode.isClearingCache).true();
|
||||
});
|
||||
});
|
||||
@@ -1,62 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { IAzureResourceContextService } from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceDatabaseServer } from '../../../azureResource/models';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceDatabaseServerTreeNode } from '../../../azureResource/tree/databaseServerTreeNode';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
let mockContextService: TypeMoq.IMock<IAzureResourceContextService>;
|
||||
|
||||
let mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
// Mock test data
|
||||
const mockDatabaseServer: AzureResourceDatabaseServer = {
|
||||
name: 'mock database 1',
|
||||
fullName: 'mock server 1',
|
||||
loginName: 'mock user 1',
|
||||
defaultDatabaseName: 'master'
|
||||
};
|
||||
|
||||
describe('AzureResourceDatabaseServerTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const databaseServerTreeNode = new AzureResourceDatabaseServerTreeNode(mockDatabaseServer, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const databaseServerTreeNodeLabel = mockDatabaseServer.name;
|
||||
|
||||
should(databaseServerTreeNode.nodePathValue).equal(`databaseServer_${mockDatabaseServer.name}`);
|
||||
|
||||
const treeItem = await databaseServerTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(databaseServerTreeNodeLabel);
|
||||
should(treeItem.contextValue).equal(AzureResourceItemType.databaseServer);
|
||||
should(treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.None);
|
||||
|
||||
const nodeInfo = databaseServerTreeNode.getNodeInfo();
|
||||
should(nodeInfo.isLeaf).true();
|
||||
should(nodeInfo.label).equal(databaseServerTreeNodeLabel);
|
||||
should(nodeInfo.nodeType).equal(AzureResourceItemType.databaseServer);
|
||||
should(nodeInfo.iconType).equal(AzureResourceItemType.databaseServer);
|
||||
});
|
||||
});
|
||||
@@ -1,62 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { IAzureResourceContextService } from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceDatabase } from '../../../azureResource/models';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceDatabaseTreeNode } from '../../../azureResource/tree/databaseTreeNode';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
let mockContextService: TypeMoq.IMock<IAzureResourceContextService>;
|
||||
|
||||
let mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
// Mock test data
|
||||
const mockDatabase: AzureResourceDatabase = {
|
||||
name: 'mock database 1',
|
||||
serverName: 'mock server 1',
|
||||
serverFullName: 'mock server 1',
|
||||
loginName: 'mock user 1'
|
||||
};
|
||||
|
||||
describe('AzureResourceDatabaseTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
});
|
||||
|
||||
it('Should be correct.', async function(): Promise<void> {
|
||||
const databaseTreeNode = new AzureResourceDatabaseTreeNode(mockDatabase, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
const databaseTreeNodeLabel = `${mockDatabase.name} (${mockDatabase.serverName})`;
|
||||
|
||||
should(databaseTreeNode.nodePathValue).equal(`database_${mockDatabase.name}`);
|
||||
|
||||
const treeItem = await databaseTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(databaseTreeNodeLabel);
|
||||
should(treeItem.contextValue).equal(AzureResourceItemType.database);
|
||||
should(treeItem.collapsibleState).equal(vscode.TreeItemCollapsibleState.None);
|
||||
|
||||
const nodeInfo = databaseTreeNode.getNodeInfo();
|
||||
should(nodeInfo.isLeaf).true();
|
||||
should(nodeInfo.label).equal(databaseTreeNodeLabel);
|
||||
should(nodeInfo.nodeType).equal(AzureResourceItemType.database);
|
||||
should(nodeInfo.iconType).equal(AzureResourceItemType.database);
|
||||
});
|
||||
});
|
||||
@@ -10,20 +10,24 @@ import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
import { AppContext } from '../../../appContext';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { IAzureResourceContextService } from '../../../azureResource/interfaces';
|
||||
import { azureResource } from '../../../azureResource/azure-resource';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceSubscription } from '../../../azureResource/models';
|
||||
import { AzureResourceSubscriptionTreeNode } from '../../../azureResource/tree/subscriptionTreeNode';
|
||||
import { AzureResourceDatabaseContainerTreeNode } from '../../../azureResource/tree/databaseContainerTreeNode';
|
||||
import { AzureResourceDatabaseServerContainerTreeNode } from '../../../azureResource/tree/databaseServerContainerTreeNode';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceItemType, AzureResourceServiceNames } from '../../../azureResource/constants';
|
||||
import { AzureResourceService } from '../../../azureResource/resourceService';
|
||||
import { AzureResourceResourceTreeNode } from '../../../azureResource/resourceTreeNode';
|
||||
import { IAzureResourceCacheService } from '../../../azureResource/interfaces';
|
||||
import { generateGuid } from '../../../azureResource/utils';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
let mockAppContext: AppContext;
|
||||
|
||||
let mockContextService: TypeMoq.IMock<IAzureResourceContextService>;
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
let mockCacheService: TypeMoq.IMock<IAzureResourceCacheService>;
|
||||
|
||||
let mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
@@ -42,24 +46,60 @@ const mockAccount: sqlops.Account = {
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription: AzureResourceSubscription = {
|
||||
const mockSubscription: azureResource.AzureResourceSubscription = {
|
||||
id: 'mock_subscription',
|
||||
name: 'mock subscription'
|
||||
};
|
||||
|
||||
const mockTenantId: string = 'mock_tenant';
|
||||
|
||||
let mockResourceTreeDataProvider1: TypeMoq.IMock<azureResource.IAzureResourceTreeDataProvider>;
|
||||
let mockResourceProvider1: TypeMoq.IMock<azureResource.IAzureResourceProvider>;
|
||||
|
||||
let mockResourceTreeDataProvider2: TypeMoq.IMock<azureResource.IAzureResourceTreeDataProvider>;
|
||||
let mockResourceProvider2: TypeMoq.IMock<azureResource.IAzureResourceProvider>;
|
||||
|
||||
const resourceService: AzureResourceService = AzureResourceService.getInstance();
|
||||
|
||||
describe('AzureResourceSubscriptionTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
|
||||
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object);
|
||||
|
||||
mockAppContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, mockCacheService.object);
|
||||
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||
|
||||
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider2.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider2.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
||||
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider1.object);
|
||||
resourceService.registerResourceProvider(mockResourceProvider2.object);
|
||||
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockAccount, mockSubscription, mockTenantId, mockAppContext, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
should(subscriptionTreeNode.nodePathValue).equal(`subscription_${mockSubscription.id}`);
|
||||
should(subscriptionTreeNode.nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${mockSubscription.id}.tenant_${mockTenantId}`);
|
||||
|
||||
const treeItem = await subscriptionTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(mockSubscription.name);
|
||||
@@ -76,16 +116,52 @@ describe('AzureResourceSubscriptionTreeNode.info', function(): void {
|
||||
|
||||
describe('AzureResourceSubscriptionTreeNode.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
|
||||
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object);
|
||||
mockAppContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, mockCacheService.object);
|
||||
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
|
||||
mockTreeChangeHandler = TypeMoq.Mock.ofType<IAzureResourceTreeChangeHandler>();
|
||||
|
||||
mockResourceTreeDataProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider1.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider1 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider1.setup((o) => o.providerId).returns(() => 'mockResourceProvider1');
|
||||
mockResourceProvider1.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider1.object);
|
||||
|
||||
mockResourceTreeDataProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceTreeDataProvider>();
|
||||
mockResourceTreeDataProvider2.setup((o) => o.getChildren()).returns(() => Promise.resolve([TypeMoq.Mock.ofType<azureResource.IAzureResourceNode>().object]));
|
||||
mockResourceTreeDataProvider2.setup((o) => o.getTreeItem(TypeMoq.It.isAny())).returns(() => Promise.resolve(TypeMoq.It.isAny()));
|
||||
mockResourceProvider2 = TypeMoq.Mock.ofType<azureResource.IAzureResourceProvider>();
|
||||
mockResourceProvider2.setup((o) => o.providerId).returns(() => 'mockResourceProvider2');
|
||||
mockResourceProvider2.setup((o) => o.getTreeDataProvider()).returns(() => mockResourceTreeDataProvider2.object);
|
||||
|
||||
resourceService.clearResourceProviders();
|
||||
resourceService.registerResourceProvider(mockResourceProvider1.object);
|
||||
resourceService.registerResourceProvider(mockResourceProvider2.object);
|
||||
|
||||
resourceService.areResourceProvidersLoaded = true;
|
||||
});
|
||||
|
||||
it('Should load database containers.', async function(): Promise<void> {
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
it('Should return resource containers.', async function(): Promise<void> {
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockAccount, mockSubscription, mockTenantId, mockAppContext, mockTreeChangeHandler.object, undefined);
|
||||
const children = await subscriptionTreeNode.getChildren();
|
||||
|
||||
mockResourceTreeDataProvider1.verify((o) => o.getChildren(), TypeMoq.Times.once());
|
||||
|
||||
mockResourceTreeDataProvider2.verify((o) => o.getChildren(), TypeMoq.Times.once());
|
||||
|
||||
const expectedChildren = await resourceService.listResourceProviderIds();
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(2);
|
||||
should(children[0]).instanceof(AzureResourceDatabaseContainerTreeNode);
|
||||
should(children[1]).instanceof(AzureResourceDatabaseServerContainerTreeNode);
|
||||
should(children.length).equal(expectedChildren.length);
|
||||
for (const child of children) {
|
||||
should(child).instanceOf(AzureResourceResourceTreeNode);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5,21 +5,28 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import * as should from 'should';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import 'mocha';
|
||||
import { AppContext } from '../../../appContext';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { IAzureResourceAccountService } from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceCacheService, IAzureResourceAccountService } from '../../../azureResource/interfaces';
|
||||
import { AzureResourceTreeProvider } from '../../../azureResource/tree/treeProvider';
|
||||
import { AzureResourceAccountTreeNode } from '../../../azureResource/tree/accountTreeNode';
|
||||
import { AzureResourceAccountNotSignedInTreeNode } from '../../../azureResource/tree/accountNotSignedInTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/messageTreeNode';
|
||||
import { AzureResourceServiceNames } from '../../../azureResource/constants';
|
||||
import { generateGuid } from '../../../azureResource/utils';
|
||||
|
||||
// Mock services
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
let mockAppContext: AppContext;
|
||||
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
let mockCacheService: TypeMoq.IMock<IAzureResourceCacheService>;
|
||||
let mockAccountService: TypeMoq.IMock<IAzureResourceAccountService>;
|
||||
|
||||
// Mock test data
|
||||
@@ -53,15 +60,23 @@ const mockAccounts = [mockAccount1, mockAccount2];
|
||||
|
||||
describe('AzureResourceTreeProvider.getChildren', function(): void {
|
||||
beforeEach(() => {
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockCacheService = TypeMoq.Mock.ofType<IAzureResourceCacheService>();
|
||||
mockAccountService = TypeMoq.Mock.ofType<IAzureResourceAccountService>();
|
||||
|
||||
mockServicePool.accountService = mockAccountService.object;
|
||||
mockAppContext = new AppContext(mockExtensionContext.object, mockApiWrapper.object);
|
||||
|
||||
mockAppContext.registerService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService, mockCacheService.object);
|
||||
mockAppContext.registerService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService, mockAccountService.object);
|
||||
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
});
|
||||
|
||||
it('Should load accounts.', async function(): Promise<void> {
|
||||
mockAccountService.setup((o) => o.getAccounts()).returns(() => Promise.resolve(mockAccounts));
|
||||
|
||||
const treeProvider = new AzureResourceTreeProvider();
|
||||
const treeProvider = new AzureResourceTreeProvider(mockAppContext);
|
||||
treeProvider.isSystemInitialized = true;
|
||||
|
||||
const children = await treeProvider.getChildren(undefined);
|
||||
@@ -83,7 +98,7 @@ describe('AzureResourceTreeProvider.getChildren', function(): void {
|
||||
it('Should handle when there is no accounts.', async function(): Promise<void> {
|
||||
mockAccountService.setup((o) => o.getAccounts()).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const treeProvider = new AzureResourceTreeProvider();
|
||||
const treeProvider = new AzureResourceTreeProvider(mockAppContext);
|
||||
treeProvider.isSystemInitialized = true;
|
||||
|
||||
const children = await treeProvider.getChildren(undefined);
|
||||
@@ -97,7 +112,7 @@ describe('AzureResourceTreeProvider.getChildren', function(): void {
|
||||
const mockAccountError = 'Test account error';
|
||||
mockAccountService.setup((o) => o.getAccounts()).returns(() => { throw new Error(mockAccountError); });
|
||||
|
||||
const treeProvider = new AzureResourceTreeProvider();
|
||||
const treeProvider = new AzureResourceTreeProvider(mockAppContext);
|
||||
treeProvider.isSystemInitialized = true;
|
||||
|
||||
const children = await treeProvider.getChildren(undefined);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -67,7 +67,7 @@
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.10",
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.11",
|
||||
"opener": "^1.4.3",
|
||||
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
||||
"vscode-extension-telemetry": "0.0.18",
|
||||
|
||||
@@ -32,7 +32,7 @@ export class DeployConfigPage extends DacFxConfigPage {
|
||||
}
|
||||
|
||||
async start(): Promise<boolean> {
|
||||
let serverComponent = await this.createServerDropdown(true);
|
||||
let serverComponent = await this.createServerDropdown(true);
|
||||
let fileBrowserComponent = await this.createFileBrowser();
|
||||
this.databaseComponent = await this.createDatabaseTextBox();
|
||||
this.databaseComponent.title = localize('dacFx.databaseNameTextBox', 'Database Name');
|
||||
@@ -131,7 +131,7 @@ export class DeployConfigPage extends DacFxConfigPage {
|
||||
this.model.database = this.databaseTextBox.value;
|
||||
});
|
||||
|
||||
// Initialize with upgrade existing true
|
||||
//Initialize with upgrade existing true
|
||||
upgradeRadioButton.checked = true;
|
||||
this.model.upgradeExisting = true;
|
||||
|
||||
@@ -149,10 +149,10 @@ export class DeployConfigPage extends DacFxConfigPage {
|
||||
}
|
||||
|
||||
protected async createDeployDatabaseDropdown(): Promise<sqlops.FormComponent> {
|
||||
this.databaseDropdown = this.view.modelBuilder.dropDown().withProperties({
|
||||
this.databaseDropdown = this.view.modelBuilder.dropDown().withProperties({
|
||||
required: true
|
||||
}).component();
|
||||
// Handle database changes
|
||||
//Handle database changes
|
||||
this.databaseDropdown.onValueChanged(async () => {
|
||||
this.model.database = (<sqlops.CategoryValue>this.databaseDropdown.value).name;
|
||||
});
|
||||
@@ -172,7 +172,8 @@ export class DeployConfigPage extends DacFxConfigPage {
|
||||
}
|
||||
let values = await this.getDatabaseValues();
|
||||
|
||||
if (this.model.database === undefined) {
|
||||
//set the database to the first dropdown value if upgrading, otherwise it should get set to the textbox value
|
||||
if (this.model.upgradeExisting) {
|
||||
this.model.database = values[0].name;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,14 +5,12 @@
|
||||
agent-base@4, agent-base@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
|
||||
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
|
||||
dependencies:
|
||||
es6-promisify "^5.0.0"
|
||||
|
||||
applicationinsights@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.1.tgz#53446b830fe8d5d619eee2a278b31d3d25030927"
|
||||
integrity sha1-U0Rrgw/o1dYZ7uKieLMdPSUDCSc=
|
||||
dependencies:
|
||||
diagnostic-channel "0.2.0"
|
||||
diagnostic-channel-publishers "0.2.1"
|
||||
@@ -21,12 +19,10 @@ applicationinsights@1.0.1:
|
||||
base64-js@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978"
|
||||
integrity sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=
|
||||
|
||||
bl@^1.0.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
|
||||
integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
|
||||
dependencies:
|
||||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
@@ -34,12 +30,10 @@ bl@^1.0.0:
|
||||
buffer-alloc-unsafe@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
||||
|
||||
buffer-alloc@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
||||
dependencies:
|
||||
buffer-alloc-unsafe "^1.1.0"
|
||||
buffer-fill "^1.0.0"
|
||||
@@ -47,17 +41,14 @@ buffer-alloc@^1.2.0:
|
||||
buffer-crc32@~0.2.3:
|
||||
version "0.2.13"
|
||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||
|
||||
buffer-fill@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
|
||||
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
|
||||
|
||||
buffer@^3.0.1:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb"
|
||||
integrity sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=
|
||||
dependencies:
|
||||
base64-js "0.0.8"
|
||||
ieee754 "^1.1.4"
|
||||
@@ -66,39 +57,34 @@ buffer@^3.0.1:
|
||||
commander@~2.8.1:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
|
||||
integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
|
||||
dependencies:
|
||||
graceful-readlink ">= 1.0.0"
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
|
||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.10":
|
||||
version "0.2.10"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/4de3f7caf0eba54159911b977ddb4f5d7c0a9ca8"
|
||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.11":
|
||||
version "0.2.11"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/bc80d2226699d23f45a2ec26129cbcdee4781ca9"
|
||||
dependencies:
|
||||
vscode-languageclient "3.5.1"
|
||||
|
||||
debug@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.0:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
||||
integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
|
||||
dependencies:
|
||||
file-type "^5.2.0"
|
||||
is-stream "^1.1.0"
|
||||
@@ -107,7 +93,6 @@ decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
||||
decompress-tarbz2@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
|
||||
integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
|
||||
dependencies:
|
||||
decompress-tar "^4.1.0"
|
||||
file-type "^6.1.0"
|
||||
@@ -118,7 +103,6 @@ decompress-tarbz2@^4.0.0:
|
||||
decompress-targz@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
|
||||
integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
|
||||
dependencies:
|
||||
decompress-tar "^4.1.1"
|
||||
file-type "^5.2.0"
|
||||
@@ -127,7 +111,6 @@ decompress-targz@^4.0.0:
|
||||
decompress-unzip@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
|
||||
integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k=
|
||||
dependencies:
|
||||
file-type "^3.8.0"
|
||||
get-stream "^2.2.0"
|
||||
@@ -137,7 +120,6 @@ decompress-unzip@^4.0.1:
|
||||
decompress@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d"
|
||||
integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=
|
||||
dependencies:
|
||||
decompress-tar "^4.0.0"
|
||||
decompress-tarbz2 "^4.0.0"
|
||||
@@ -151,70 +133,58 @@ decompress@^4.2.0:
|
||||
diagnostic-channel-publishers@0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
|
||||
integrity sha1-ji1geottef6IC1SLxYzGvrKIxPM=
|
||||
|
||||
diagnostic-channel@0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz#cc99af9612c23fb1fff13612c72f2cbfaa8d5a17"
|
||||
integrity sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=
|
||||
dependencies:
|
||||
semver "^5.3.0"
|
||||
|
||||
end-of-stream@^1.0.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||
integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
es6-promise@^4.0.3:
|
||||
version "4.2.5"
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
|
||||
integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
|
||||
|
||||
es6-promisify@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
|
||||
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
|
||||
dependencies:
|
||||
es6-promise "^4.0.3"
|
||||
|
||||
eventemitter2@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
|
||||
integrity sha1-YZegldX7a1folC9v1+qtY6CclFI=
|
||||
|
||||
fd-slicer@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
|
||||
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
|
||||
dependencies:
|
||||
pend "~1.2.0"
|
||||
|
||||
file-type@^3.8.0:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
|
||||
integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
|
||||
|
||||
file-type@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
|
||||
integrity sha1-LdvqfHP/42No365J3DOMBYwritY=
|
||||
|
||||
file-type@^6.1.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
|
||||
integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
|
||||
|
||||
fs-constants@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||
|
||||
get-stream@^2.2.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
|
||||
integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
|
||||
dependencies:
|
||||
object-assign "^4.0.1"
|
||||
pinkie-promise "^2.0.0"
|
||||
@@ -222,17 +192,14 @@ get-stream@^2.2.0:
|
||||
graceful-fs@^4.1.10:
|
||||
version "4.1.15"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||
|
||||
"graceful-readlink@>= 1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
||||
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
|
||||
|
||||
http-proxy-agent@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
|
||||
integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
|
||||
dependencies:
|
||||
agent-base "4"
|
||||
debug "3.1.0"
|
||||
@@ -240,7 +207,6 @@ http-proxy-agent@^2.1.0:
|
||||
https-proxy-agent@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
||||
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
|
||||
dependencies:
|
||||
agent-base "^4.1.0"
|
||||
debug "^3.1.0"
|
||||
@@ -248,115 +214,94 @@ https-proxy-agent@^2.2.1:
|
||||
ieee754@^1.1.4:
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
|
||||
integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
|
||||
|
||||
inherits@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||
|
||||
is-natural-number@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
|
||||
integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
|
||||
|
||||
is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||
|
||||
isarray@^1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||
|
||||
make-dir@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
|
||||
integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
|
||||
dependencies:
|
||||
pify "^3.0.0"
|
||||
|
||||
minimist@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||
|
||||
ms@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
||||
|
||||
object-assign@^4.0.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
||||
once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
opener@^1.4.3:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
|
||||
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
|
||||
|
||||
os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||
|
||||
pend@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
||||
|
||||
pify@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
||||
|
||||
pify@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
|
||||
|
||||
pinkie-promise@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
||||
integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
|
||||
dependencies:
|
||||
pinkie "^2.0.0"
|
||||
|
||||
pinkie@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
|
||||
|
||||
readable-stream@^2.3.0, readable-stream@^2.3.5:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
@@ -369,19 +314,16 @@ readable-stream@^2.3.0, readable-stream@^2.3.5:
|
||||
safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
seek-bzip@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
|
||||
integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
|
||||
dependencies:
|
||||
commander "~2.8.1"
|
||||
|
||||
semver@^5.3.0:
|
||||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||
|
||||
"service-downloader@github:anthonydresser/service-downloader#0.1.5":
|
||||
version "0.1.5"
|
||||
@@ -397,21 +339,18 @@ semver@^5.3.0:
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
strip-dirs@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
|
||||
integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
|
||||
dependencies:
|
||||
is-natural-number "^4.0.1"
|
||||
|
||||
tar-stream@^1.5.2:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
|
||||
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
|
||||
dependencies:
|
||||
bl "^1.0.0"
|
||||
buffer-alloc "^1.2.0"
|
||||
@@ -424,24 +363,20 @@ tar-stream@^1.5.2:
|
||||
through@^2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
|
||||
dependencies:
|
||||
os-tmpdir "~1.0.2"
|
||||
|
||||
to-buffer@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
||||
|
||||
unbzip2-stream@^1.0.9:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz#7854da51622a7e63624221196357803b552966a1"
|
||||
integrity sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==
|
||||
dependencies:
|
||||
buffer "^3.0.1"
|
||||
through "^2.3.6"
|
||||
@@ -449,31 +384,26 @@ unbzip2-stream@^1.0.9:
|
||||
util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
vscode-extension-telemetry@0.0.18:
|
||||
version "0.0.18"
|
||||
resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.18.tgz#602ba20d8c71453aa34533a291e7638f6e5c0327"
|
||||
integrity sha512-Vw3Sr+dZwl+c6PlsUwrTtCOJkgrmvS3OUVDQGcmpXWAgq9xGq6as0K4pUx+aGqTjzLAESmWSrs6HlJm6J6Khcg==
|
||||
dependencies:
|
||||
applicationinsights "1.0.1"
|
||||
|
||||
vscode-jsonrpc@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.5.0.tgz#87239d9e166b2d7352245b8a813597804c1d63aa"
|
||||
integrity sha1-hyOdnhZrLXNSJFuKgTWXgEwdY6o=
|
||||
|
||||
vscode-languageclient@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-3.5.1.tgz#c78e582459c24e58f88020dfa34065e976186a98"
|
||||
integrity sha512-GTQ+hSq/o4c/y6GYmyP9XNrVoIu0NFZ67KltSkqN+tO0eUNDIlrVNX+3DJzzyLhSsrctuGzuYWm3t87mNAcBmQ==
|
||||
dependencies:
|
||||
vscode-languageserver-protocol "3.5.1"
|
||||
|
||||
vscode-languageserver-protocol@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.1.tgz#5144a3a9eeccbd83fe2745bd4ed75fad6cc45f0d"
|
||||
integrity sha512-1fPDIwsAv1difCV+8daOrJEGunClNJWqnUHq/ncWrjhitKWXgGmRCjlwZ3gDUTt54yRcvXz1PXJDaRNvNH6pYA==
|
||||
dependencies:
|
||||
vscode-jsonrpc "3.5.0"
|
||||
vscode-languageserver-types "3.5.0"
|
||||
@@ -481,27 +411,22 @@ vscode-languageserver-protocol@3.5.1:
|
||||
vscode-languageserver-types@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374"
|
||||
integrity sha1-5I15li8LjgLelV4/UkkI4rGcA3Q=
|
||||
|
||||
vscode-nls@^3.2.1:
|
||||
version "3.2.5"
|
||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.5.tgz#25520c1955108036dec607c85e00a522f247f1a4"
|
||||
integrity sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
xtend@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||
|
||||
yauzl@^2.4.2:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
||||
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
|
||||
dependencies:
|
||||
buffer-crc32 "~0.2.3"
|
||||
fd-slicer "~1.1.0"
|
||||
@@ -509,4 +434,3 @@ yauzl@^2.4.2:
|
||||
zone.js@0.7.6:
|
||||
version "0.7.6"
|
||||
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.6.tgz#fbbc39d3e0261d0986f1ba06306eb3aeb0d22009"
|
||||
integrity sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
"update-grammar": "node ../../build/npm/update-grammar.js Microsoft/vscode-mssql syntaxes/SQL.plist ./syntaxes/sql.tmLanguage.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.10",
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.11",
|
||||
"opener": "^1.4.3",
|
||||
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
||||
"vscode-extension-telemetry": "^0.0.15"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
||||
"version": "1.5.0-alpha.63",
|
||||
"version": "1.5.0-alpha.65",
|
||||
"downloadFileNames": {
|
||||
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
||||
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
||||
|
||||
@@ -5,14 +5,12 @@
|
||||
agent-base@4, agent-base@^4.1.0:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
|
||||
integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
|
||||
dependencies:
|
||||
es6-promisify "^5.0.0"
|
||||
|
||||
applicationinsights@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.1.tgz#53446b830fe8d5d619eee2a278b31d3d25030927"
|
||||
integrity sha1-U0Rrgw/o1dYZ7uKieLMdPSUDCSc=
|
||||
dependencies:
|
||||
diagnostic-channel "0.2.0"
|
||||
diagnostic-channel-publishers "0.2.1"
|
||||
@@ -21,12 +19,10 @@ applicationinsights@1.0.1:
|
||||
base64-js@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978"
|
||||
integrity sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=
|
||||
|
||||
bl@^1.0.0:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
|
||||
integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
|
||||
dependencies:
|
||||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
@@ -34,12 +30,10 @@ bl@^1.0.0:
|
||||
buffer-alloc-unsafe@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
||||
|
||||
buffer-alloc@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
||||
dependencies:
|
||||
buffer-alloc-unsafe "^1.1.0"
|
||||
buffer-fill "^1.0.0"
|
||||
@@ -47,17 +41,14 @@ buffer-alloc@^1.2.0:
|
||||
buffer-crc32@~0.2.3:
|
||||
version "0.2.13"
|
||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||
|
||||
buffer-fill@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
|
||||
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
|
||||
|
||||
buffer@^3.0.1:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-3.6.0.tgz#a72c936f77b96bf52f5f7e7b467180628551defb"
|
||||
integrity sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=
|
||||
dependencies:
|
||||
base64-js "0.0.8"
|
||||
ieee754 "^1.1.4"
|
||||
@@ -66,39 +57,34 @@ buffer@^3.0.1:
|
||||
commander@~2.8.1:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
|
||||
integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
|
||||
dependencies:
|
||||
graceful-readlink ">= 1.0.0"
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
|
||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.10":
|
||||
version "0.2.10"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/4de3f7caf0eba54159911b977ddb4f5d7c0a9ca8"
|
||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.11":
|
||||
version "0.2.11"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/bc80d2226699d23f45a2ec26129cbcdee4781ca9"
|
||||
dependencies:
|
||||
vscode-languageclient "3.5.1"
|
||||
|
||||
debug@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.0:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
||||
integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
|
||||
dependencies:
|
||||
file-type "^5.2.0"
|
||||
is-stream "^1.1.0"
|
||||
@@ -107,7 +93,6 @@ decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
||||
decompress-tarbz2@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
|
||||
integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
|
||||
dependencies:
|
||||
decompress-tar "^4.1.0"
|
||||
file-type "^6.1.0"
|
||||
@@ -118,7 +103,6 @@ decompress-tarbz2@^4.0.0:
|
||||
decompress-targz@^4.0.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
|
||||
integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
|
||||
dependencies:
|
||||
decompress-tar "^4.1.1"
|
||||
file-type "^5.2.0"
|
||||
@@ -127,7 +111,6 @@ decompress-targz@^4.0.0:
|
||||
decompress-unzip@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
|
||||
integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k=
|
||||
dependencies:
|
||||
file-type "^3.8.0"
|
||||
get-stream "^2.2.0"
|
||||
@@ -137,7 +120,6 @@ decompress-unzip@^4.0.1:
|
||||
decompress@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d"
|
||||
integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=
|
||||
dependencies:
|
||||
decompress-tar "^4.0.0"
|
||||
decompress-tarbz2 "^4.0.0"
|
||||
@@ -151,70 +133,58 @@ decompress@^4.2.0:
|
||||
diagnostic-channel-publishers@0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
|
||||
integrity sha1-ji1geottef6IC1SLxYzGvrKIxPM=
|
||||
|
||||
diagnostic-channel@0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz#cc99af9612c23fb1fff13612c72f2cbfaa8d5a17"
|
||||
integrity sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=
|
||||
dependencies:
|
||||
semver "^5.3.0"
|
||||
|
||||
end-of-stream@^1.0.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||
integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
es6-promise@^4.0.3:
|
||||
version "4.2.5"
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
|
||||
integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
|
||||
|
||||
es6-promisify@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
|
||||
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
|
||||
dependencies:
|
||||
es6-promise "^4.0.3"
|
||||
|
||||
eventemitter2@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
|
||||
integrity sha1-YZegldX7a1folC9v1+qtY6CclFI=
|
||||
|
||||
fd-slicer@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
|
||||
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
|
||||
dependencies:
|
||||
pend "~1.2.0"
|
||||
|
||||
file-type@^3.8.0:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
|
||||
integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
|
||||
|
||||
file-type@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
|
||||
integrity sha1-LdvqfHP/42No365J3DOMBYwritY=
|
||||
|
||||
file-type@^6.1.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
|
||||
integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
|
||||
|
||||
fs-constants@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
||||
|
||||
get-stream@^2.2.0:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
|
||||
integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
|
||||
dependencies:
|
||||
object-assign "^4.0.1"
|
||||
pinkie-promise "^2.0.0"
|
||||
@@ -222,17 +192,14 @@ get-stream@^2.2.0:
|
||||
graceful-fs@^4.1.10:
|
||||
version "4.1.15"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||
|
||||
"graceful-readlink@>= 1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
||||
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
|
||||
|
||||
http-proxy-agent@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
|
||||
integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
|
||||
dependencies:
|
||||
agent-base "4"
|
||||
debug "3.1.0"
|
||||
@@ -240,7 +207,6 @@ http-proxy-agent@^2.1.0:
|
||||
https-proxy-agent@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
|
||||
integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
|
||||
dependencies:
|
||||
agent-base "^4.1.0"
|
||||
debug "^3.1.0"
|
||||
@@ -248,115 +214,94 @@ https-proxy-agent@^2.2.1:
|
||||
ieee754@^1.1.4:
|
||||
version "1.1.12"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
|
||||
integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
|
||||
|
||||
inherits@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||
|
||||
is-natural-number@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
|
||||
integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
|
||||
|
||||
is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
|
||||
|
||||
isarray@^1.0.0, isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||
|
||||
make-dir@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
|
||||
integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
|
||||
dependencies:
|
||||
pify "^3.0.0"
|
||||
|
||||
minimist@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||
|
||||
ms@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
||||
|
||||
object-assign@^4.0.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||
|
||||
once@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||
dependencies:
|
||||
wrappy "1"
|
||||
|
||||
opener@^1.4.3:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed"
|
||||
integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==
|
||||
|
||||
os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||
|
||||
pend@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
||||
|
||||
pify@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
||||
|
||||
pify@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
|
||||
|
||||
pinkie-promise@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
|
||||
integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
|
||||
dependencies:
|
||||
pinkie "^2.0.0"
|
||||
|
||||
pinkie@^2.0.0:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
|
||||
integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
|
||||
|
||||
readable-stream@^2.3.0, readable-stream@^2.3.5:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
@@ -369,19 +314,16 @@ readable-stream@^2.3.0, readable-stream@^2.3.5:
|
||||
safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
seek-bzip@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
|
||||
integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
|
||||
dependencies:
|
||||
commander "~2.8.1"
|
||||
|
||||
semver@^5.3.0:
|
||||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||
|
||||
"service-downloader@github:anthonydresser/service-downloader#0.1.5":
|
||||
version "0.1.5"
|
||||
@@ -397,21 +339,18 @@ semver@^5.3.0:
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
strip-dirs@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
|
||||
integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
|
||||
dependencies:
|
||||
is-natural-number "^4.0.1"
|
||||
|
||||
tar-stream@^1.5.2:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
|
||||
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
|
||||
dependencies:
|
||||
bl "^1.0.0"
|
||||
buffer-alloc "^1.2.0"
|
||||
@@ -424,24 +363,20 @@ tar-stream@^1.5.2:
|
||||
through@^2.3.6:
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
|
||||
dependencies:
|
||||
os-tmpdir "~1.0.2"
|
||||
|
||||
to-buffer@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
||||
|
||||
unbzip2-stream@^1.0.9:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.1.tgz#7854da51622a7e63624221196357803b552966a1"
|
||||
integrity sha512-fIZnvdjblYs7Cru/xC6tCPVhz7JkYcVQQkePwMLyQELzYTds2Xn8QefPVnvdVhhZqubxNA1cASXEH5wcK0Bucw==
|
||||
dependencies:
|
||||
buffer "^3.0.1"
|
||||
through "^2.3.6"
|
||||
@@ -449,31 +384,26 @@ unbzip2-stream@^1.0.9:
|
||||
util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
vscode-extension-telemetry@^0.0.15:
|
||||
version "0.0.15"
|
||||
resolved "https://registry.yarnpkg.com/vscode-extension-telemetry/-/vscode-extension-telemetry-0.0.15.tgz#685c32f3b67e8fb85ba689c1d7f88ff90ff87856"
|
||||
integrity sha512-Yf6dL9r2x2GISI1xh22XsAaydSTQG/4aBitu8sGBwGr42n2TyOsIXGtXSDgqQBNZgYD6+P1EHqrrzetn9ekWTQ==
|
||||
dependencies:
|
||||
applicationinsights "1.0.1"
|
||||
|
||||
vscode-jsonrpc@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-3.5.0.tgz#87239d9e166b2d7352245b8a813597804c1d63aa"
|
||||
integrity sha1-hyOdnhZrLXNSJFuKgTWXgEwdY6o=
|
||||
|
||||
vscode-languageclient@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-3.5.1.tgz#c78e582459c24e58f88020dfa34065e976186a98"
|
||||
integrity sha512-GTQ+hSq/o4c/y6GYmyP9XNrVoIu0NFZ67KltSkqN+tO0eUNDIlrVNX+3DJzzyLhSsrctuGzuYWm3t87mNAcBmQ==
|
||||
dependencies:
|
||||
vscode-languageserver-protocol "3.5.1"
|
||||
|
||||
vscode-languageserver-protocol@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.5.1.tgz#5144a3a9eeccbd83fe2745bd4ed75fad6cc45f0d"
|
||||
integrity sha512-1fPDIwsAv1difCV+8daOrJEGunClNJWqnUHq/ncWrjhitKWXgGmRCjlwZ3gDUTt54yRcvXz1PXJDaRNvNH6pYA==
|
||||
dependencies:
|
||||
vscode-jsonrpc "3.5.0"
|
||||
vscode-languageserver-types "3.5.0"
|
||||
@@ -481,22 +411,18 @@ vscode-languageserver-protocol@3.5.1:
|
||||
vscode-languageserver-types@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.5.0.tgz#e48d79962f0b8e02de955e3f524908e2b19c0374"
|
||||
integrity sha1-5I15li8LjgLelV4/UkkI4rGcA3Q=
|
||||
|
||||
wrappy@1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||
|
||||
xtend@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||
|
||||
yauzl@^2.4.2:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
||||
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
|
||||
dependencies:
|
||||
buffer-crc32 "~0.2.3"
|
||||
fd-slicer "~1.1.0"
|
||||
@@ -504,4 +430,3 @@ yauzl@^2.4.2:
|
||||
zone.js@0.7.6:
|
||||
version "0.7.6"
|
||||
resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.6.tgz#fbbc39d3e0261d0986f1ba06306eb3aeb0d22009"
|
||||
integrity sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "%notebook.enabled.description%"
|
||||
},
|
||||
"notebook.pythonPath": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"description": "%notebook.pythonPath.description%"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"description": "Defines the Data-procotol based Notebook contribution and many Notebook commands and contributions.",
|
||||
"notebook.configuration.title": "Notebook configuration",
|
||||
"notebook.enabled.description": "Enable viewing notebook files using built-in notebook editor.",
|
||||
"notebook.pythonPath.description": "Local path to python installation used by Notebooks.",
|
||||
"notebook.command.new": "New Notebook",
|
||||
"notebook.command.open": "Open Notebook"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "azuredatastudio",
|
||||
"version": "1.3.8",
|
||||
"version": "1.4.2",
|
||||
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
|
||||
"author": {
|
||||
"name": "Microsoft Corporation"
|
||||
@@ -23,7 +23,8 @@
|
||||
"smoketest": "cd test/smoke && node test/index.js",
|
||||
"monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit",
|
||||
"download-builtin-extensions": "node build/lib/builtInExtensions.js",
|
||||
"check-monaco-editor-compilation": "tsc -p src/tsconfig.monaco.json --noEmit"
|
||||
"check-monaco-editor-compilation": "tsc -p src/tsconfig.monaco.json --noEmit",
|
||||
"tslint": "node node_modules/tslint/bin/tslint -c tslint-gci.json -p src/tsconfig.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/animations": "~4.1.3",
|
||||
@@ -154,6 +155,7 @@
|
||||
"source-map": "^0.4.4",
|
||||
"temp-write": "^3.4.0",
|
||||
"tslint": "^5.9.1",
|
||||
"tslint-microsoft-contrib": "^6.0.0",
|
||||
"typemoq": "^0.3.2",
|
||||
"typescript": "2.9.2",
|
||||
"typescript-formatter": "7.1.0",
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
"Microsoft.server-report",
|
||||
"Microsoft.sql-vnext",
|
||||
"Microsoft.whoisactive",
|
||||
"Redgate.sql-search"
|
||||
"Redgate.sql-search",
|
||||
"IDERA.sqldm-performance-insights"
|
||||
],
|
||||
"extensionsGallery": {
|
||||
"serviceUrl": "https://sqlopsextensions.blob.core.windows.net/marketplace/v1/extensionsGallery.json"
|
||||
|
||||
3137
resources/xlf/sqlops-core/sql.de.xlf
Normal file
3137
resources/xlf/sqlops-core/sql.de.xlf
Normal file
File diff suppressed because it is too large
Load Diff
3141
resources/xlf/sqlops-core/sql.es.xlf
Normal file
3141
resources/xlf/sqlops-core/sql.es.xlf
Normal file
File diff suppressed because it is too large
Load Diff
3201
resources/xlf/sqlops-core/sql.fr.xlf
Normal file
3201
resources/xlf/sqlops-core/sql.fr.xlf
Normal file
File diff suppressed because it is too large
Load Diff
3184
resources/xlf/sqlops-core/sql.it.xlf
Normal file
3184
resources/xlf/sqlops-core/sql.it.xlf
Normal file
File diff suppressed because it is too large
Load Diff
2984
resources/xlf/sqlops-core/sql.ja.xlf
Normal file
2984
resources/xlf/sqlops-core/sql.ja.xlf
Normal file
File diff suppressed because it is too large
Load Diff
3049
resources/xlf/sqlops-core/sql.ko.xlf
Normal file
3049
resources/xlf/sqlops-core/sql.ko.xlf
Normal file
File diff suppressed because it is too large
Load Diff
3313
resources/xlf/sqlops-core/sql.pt-BR.xlf
Normal file
3313
resources/xlf/sqlops-core/sql.pt-BR.xlf
Normal file
File diff suppressed because it is too large
Load Diff
2973
resources/xlf/sqlops-core/sql.ru.xlf
Normal file
2973
resources/xlf/sqlops-core/sql.ru.xlf
Normal file
File diff suppressed because it is too large
Load Diff
@@ -62,6 +62,12 @@
|
||||
<trans-unit id="sql.saveAsCsv.encoding">
|
||||
<source xml:lang="en">[Optional] File encoding used when saving results as CSV</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sql.saveAsXml.formatted">
|
||||
<source xml:lang="en">[Optional] When true, XML output will be formatted when saving results as XML</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sql.saveAsXml.encoding">
|
||||
<source xml:lang="en">[Optional] File encoding used when saving results as XML</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="sql.copyIncludeHeaders">
|
||||
<source xml:lang="en">[Optional] Configuration options for copying results from the Results View</source>
|
||||
</trans-unit>
|
||||
@@ -596,6 +602,9 @@
|
||||
<trans-unit id="saveAsExcel">
|
||||
<source xml:lang="en">Save As Excel</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saveAsXml">
|
||||
<source xml:lang="en">Save As XML</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="copySelection">
|
||||
<source xml:lang="en">Copy</source>
|
||||
</trans-unit>
|
||||
@@ -1142,6 +1151,9 @@
|
||||
<trans-unit id="saveExcelLabel">
|
||||
<source xml:lang="en">Save as Excel</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="saveXMLLabel">
|
||||
<source xml:lang="en">Save as XML</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="viewChartLabel">
|
||||
<source xml:lang="en">View as Chart</source>
|
||||
</trans-unit>
|
||||
|
||||
3314
resources/xlf/sqlops-core/sql.zh-Hans.xlf
Normal file
3314
resources/xlf/sqlops-core/sql.zh-Hans.xlf
Normal file
File diff suppressed because it is too large
Load Diff
3142
resources/xlf/sqlops-core/sql.zh-Hant.xlf
Normal file
3142
resources/xlf/sqlops-core/sql.zh-Hant.xlf
Normal file
File diff suppressed because it is too large
Load Diff
734
resources/xlf/vscode-extensions/agent.de.xlf
Normal file
734
resources/xlf/vscode-extensions/agent.de.xlf
Normal file
@@ -0,0 +1,734 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">Neuer Zeitplan</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Abbrechen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Zeitplanname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Zeitpläne</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Allgemein</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">Name der Anmeldeinformationen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Beschreibung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
<target state="translated">Subsystem</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">Betriebssystem (CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">Replikationsmomentaufnahme</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
<target state="translated">Replikationstransaktionsprotokoll-Leser</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
<target state="translated">Replikationsverteiler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
<target state="translated">Replikationsmerge</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
<target state="translated">Replikation-Warteschlangenleser</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
<target state="translated">SQL Server Analysis Services-Abfrage</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
<target state="translated">SQL Server Analysis Services-Befehl</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
<target state="translated">SQL Server Integration Services-Paket</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
<target state="translated">PowerShell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">Auftragszeitpläne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Abbrechen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Zeitplanname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Zeitpläne</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Allgemein</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Benachrichtigungen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Name</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Aktiviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">Montag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">Dienstag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">Mittwoch</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">Donnerstag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">Samstag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">Sonntag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
<target state="translated">Arbeitstag - Beginn</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">Arbeitstag - Ende</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">Warnungsname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">E-Mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Pager</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">Neuer Auftragsschritt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
<target state="translated">Datenbankdateien finden -</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Abbrechen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Allgemein</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">Erweitert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
<target state="translated">Öffnen...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">Analysieren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Weiter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">Zurück</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
<target state="translated">Der Befehl wurde erfolgreich analysiert.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
<target state="translated">Schrittname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Typ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">Datenbank</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">Befehl</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
<target state="translated">Ausführen als Benutzer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
<target state="translated">In Tabelle protokollieren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
<target state="translated">Schrittausgabe in Verlauf einschließen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">Ausgabedatei</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
<target state="translated">Ausgabe an vorhandene Datei anfügen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">Ausgewählter Pfad</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">Dateien des Typs</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">Dateiname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
<target state="translated">Alle Dateien (*)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
<target state="translated">Transact-SQL-Skript (T-SQL)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">Konto des SQL Server-Agent-Diensts</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
<target state="translated">Zum nächsten Schritt wechseln</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">Beenden des Auftrags mit Erfolgsmeldung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
<target state="translated">Beenden des Auftrags mit Fehlermeldung</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Allgemein</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
<target state="translated">Steps</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Zeitpläne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">Warnungen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Benachrichtigungen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
<target state="translated">Der Auftragsname darf nicht leer sein.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Name</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">Besitzer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">Kategorie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Beschreibung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Aktiviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">Schritt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Typ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">Bei Erfolg</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">Bei Fehler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">Neu...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">Bearbeiten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">löschen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Seite</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
<target state="translated">Zeitplan auswählen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Zeitplanname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">Neue Warnung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">Warnungsname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Neuer Auftrag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
<target state="translated">Auftrag bearbeiten</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Allgemein</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
<target state="translated">Antwort</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">Optionen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">Ereigniswarnungsdefinition</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Name</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Typ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Aktiviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Datenbankname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
<target state="translated">Fehlernummer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">Schweregrad</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - Verschiedene Systemangaben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - Reserviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - Reserviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - Reserviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - Reserviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006 - Reserviert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - Benachrichtigung: Statusangaben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008 - Benachrichtigung: Benutzereingriff erforderlich</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009 - Benutzerdefiniert</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - Angaben</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011 - Angegebenes Datenbankobjekt nicht gefunden</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012 - Nicht verwendet</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - Syntaxfehler in Benutzertransaktion</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - Unzureichende Berechtigung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - Syntaxfehler in SQL-Anweisungen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - Sonstiger Benutzerfehler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - Unzureichende Ressourcen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - Mittelschwerer interner Fehler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - Schwerwiegender Fehler bei Ressource</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020 - Schwerwiegender Fehler im aktuellen Prozess</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021 - Schwerwiegender Fehler in Datenbankprozessen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022 - Schwerwiegender Fehler: Tabellenintegrität zweifelhaft</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - Schwerwiegender Fehler: Datenbankintegrität zweifelhaft</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - Schwerwiegender Fehler: Hardwarefehler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025 - Schwerwiegender Fehler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">Auftragsname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Neuer Auftrag</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">Operator</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">E-Mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Pager</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">Neuer Operator</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
<target state="translated">Benachrichtigungsfehlertext in Email aufnehmen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
<target state="translated">Verzögerung zwischen Antworten</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Abbrechen</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
<target state="translated">Beim Abschluss des Auftrags</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
<target state="translated">Bei Auftragsfehler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">Bei erfolgreicher Auftragsausführung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
<target state="translated">Job-Update fehlgeschlagen '{0}'</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
<target state="translated">SQL Server-Ereigniswarnung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
<target state="translated">SQL Server-Leistungsstatuswarnung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">WMI-Ereigniswarnung</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
668
resources/xlf/vscode-extensions/agent.es.xlf
Normal file
668
resources/xlf/vscode-extensions/agent.es.xlf
Normal file
@@ -0,0 +1,668 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">Aceptar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">General</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Descripción</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">Instantánea de replicación</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">Programas de trabajos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">Aceptar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">General</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nombre</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Habilitado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">Sábado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">Domingo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">Nombre de alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">Correo electrónico</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Pager</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">Aceptar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">General</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">Opciones avanzadas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">Analizar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Siguiente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">Anterior</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
<target state="translated">Ejecutar como</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">Base de datos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">Comando</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
<target state="translated">Ejecutar como usuario</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
<target state="translated">Intentos de reintento</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">Archivo de salida</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">Ruta seleccionada</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">Archivos de tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">Nombre de archivo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">Cuenta de servicio de Agente SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">General</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nombre</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">Propietario</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">Categoría</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Descripción</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Habilitado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">Paso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">En caso de éxito</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">Nuevo...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">Editar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">Eliminar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Página</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
<target state="translated">Lista de alertas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">Nombre de alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">General</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">Opciones</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nombre</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Habilitado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nombre de la base de datos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">Gravedad</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - Información diversa del sistema</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - Reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - Reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - notificación: Información del estado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - información</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - Error de sintaxis en una transacción de usuario</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - Permiso insuficiente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - Error de sintaxis en las sentencias SQL</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - Recursos insuficientes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - error fatal en el recurso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020-error fatal en el proceso actual</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - Error fatal: Es posible que se presente un problema de integridad de base de datos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - Error fatal: Error de Hardware</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">Nombre de tarea</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">Operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">Correo electrónico</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Pager</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">Nuevo operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">Aceptar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">Cuando el trabajo tiene éxito</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
<target state="translated">Esta característica está en desarrollo. ¡Obtenga la última versión para Insiders si desea probar los cambios más recientes!</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
747
resources/xlf/vscode-extensions/agent.fr.xlf
Normal file
747
resources/xlf/vscode-extensions/agent.fr.xlf
Normal file
@@ -0,0 +1,747 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">Nouvelle planification</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annuler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nom de la planification</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Planifications</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
<target state="translated">Créer un Proxy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Général</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">Nom d'identification</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Description</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
<target state="translated">Sous-système</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">Système d'exploitation (CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">Instantané de réplication</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
<target state="translated">Lecteur du journal des transactions de réplication</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
<target state="translated">Serveur de distribution de réplication</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
<target state="translated">Fusion de réplication</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
<target state="translated">Agent de lecture de file d'attente de réplication</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
<target state="translated">Requête SQL Server Analysis Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
<target state="translated">Commande SQL Server Analysis Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
<target state="translated">Package SQL Server Integration Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
<target state="translated">PowerShell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">Planifications de travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annuler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nom de la planification</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Planifications</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
<target state="translated">Créer un opérateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Général</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Notifications</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nom </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Activé</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
<target state="translated">Nom d'e-mail du récepteur de radiomessagerie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">Lundi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">Mardi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">Mercredi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">Jeudi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">Samedi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">Dimanche</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
<target state="translated">Début de journée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">Fin de journée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">Nom de l'alerte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">Messagerie électronique</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Radiomessagerie</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">Nouvelle étape du travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
<target state="translated">Localiser les fichiers de base de données -</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annuler</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Général</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">Avancé</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
<target state="translated">Ouvrir...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">Analyser</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Suivant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">Précédent</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
<target state="translated">La commande a été analysée correctement.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
<target state="translated">La commande a échoué.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
<target state="translated">Le nom de l’étape ne peut être vide</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
<target state="translated">Nom de l'étape</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
<target state="translated">Exécuter en tant que</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">Base de données </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">Commande</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
<target state="translated">Action en cas d’échec</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
<target state="translated">Exécuter en tant qu’utilisateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
<target state="translated">Nouvelles tentatives</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
<target state="translated">Intervalle avant nouvelle tentative (minutes)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
<target state="translated">Ajouter la sortie à l’entrée existante dans la table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">Fichier de sortie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">Chemin sélectionné</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">Fichiers de type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">Nom de fichier</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
<target state="translated">Tous les fichiers (*)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
<target state="translated">Script Transact-SQL (T-SQL)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">Compte de service SQL Server Agent</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
<target state="translated">Passer à l'étape suivante</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">Quitter le travail signalant la réussite</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
<target state="translated">Quitter le travail signalant l'échec</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Général</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
<target state="translated">Étapes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Planifications</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">Alertes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Notifications</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
<target state="translated">Le nom du travail ne peut pas être vide.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nom </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">Propriétaire</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">Catégorie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Description</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Activé</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
<target state="translated">Liste des étapes du travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">Étape</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">En cas de succès</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">En cas d'échec</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">Nouveau...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">Modifier</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">supprimer</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
<target state="translated">E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Page </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
<target state="translated">Choisir une planification</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nom de la planification</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
<target state="translated">Liste des alertes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">Nouvelle alerte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">Nom de l'alerte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Nouveau travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
<target state="translated">Créer une alerte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Général</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
<target state="translated">Réponse</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">Options</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">Définition d'une alerte d'événement</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nom </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Activé</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nom de la base de données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
<target state="translated">Numéro d'erreur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">Gravité</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - Informations système diverses</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - Réservée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - Réservée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - Réservée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - Réservée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006 - Réservée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - Notification : information d'état</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008 - Notification : intervention util. requise</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009 - Définie par l'utilisateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - Informations</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011 - Objet de BdD spécifié introuvable</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012 - Inutilisée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - Err. de syntaxe de la transaction util.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - Autorisation insuffisante</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - Erreur de syntaxe dans des instructions SQL</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - Erreur de l'utilisateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - Ressources insuffisantes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - Erreur interne récupérable</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - Erreur irrécupérable de ressource</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020 - Erreur irrécupérable du traitement en cours</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021 - Erreur irrécupérable dans les traitements de base de données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022 - Err. fatale : intégrité douteuse de la table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - Err. fatale : intégrité douteuse de la BdD</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - Erreur fatale : erreur matérielle</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025 - Erreur fatale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
<target state="translated">Exécuter le travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">Nom du travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Nouveau travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
<target state="translated">Liste des opérateurs</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">Opérateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">Messagerie électronique</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Radiomessagerie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">Nouvel opérateur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
<target state="translated">Minutes de retard</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
<target state="translated">Secondes de retard</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annuler</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
<target state="translated">Lorsque le travail est terminé</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
<target state="translated">Lors de l'échec du travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">Lors de la réussite du travail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
<target state="translated">Le nom du travail doit être fourni</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
<target state="translated">Alerte d'événement SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
<target state="translated">Alerte de condition de performances SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">Alerte d'événement WMI</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
<target state="translated">Cette fonctionnalité est en cours de développement. Testez les dernières builds Insiders si vous souhaitez essayer les changements les plus récents !</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
705
resources/xlf/vscode-extensions/agent.it.xlf
Normal file
705
resources/xlf/vscode-extensions/agent.it.xlf
Normal file
@@ -0,0 +1,705 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">Nuova pianificazione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annulla</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nome della pianificazione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
<target state="translated">Modifica Proxy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Generale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">Nome della credenziale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Descrizione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">Sistema operativo (CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">Pianificazioni processi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annulla</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nome della pianificazione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
<target state="translated">Modifica operatore</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Generale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Notifiche</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Abilitato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">Lunedì</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">Martedì</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">Mercoledì</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">Giovedì</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">Sabato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">Domenica</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">Fine giornata lavorativa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
<target state="translated">Elenco avvisi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">Nome avviso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">Nuovo passaggio di processo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annulla</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Generale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">Avanzate</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
<target state="translated">Apri...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">Analizza</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Avanti</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">Indietro</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
<target state="translated">Il nome di passaggio non può essere lasciato vuoto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">Database</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">Comando</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
<target state="translated">Numero di tentativi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
<target state="translated">Scrivere il log su tabella</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
<target state="translated">Includere l'output dello step nella cronologia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">File di output</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">Percorso selezionato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">File di tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">Nome file</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">Account del servizio SQL Server Agent</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">Termina il processo segnalando esito positivo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Generale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">Avvisi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Notifiche</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">Proprietario</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">Categoria</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Descrizione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Abilitato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">Passaggio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">In caso di successo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">In caso di errore</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">Nuovo...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">Modifica</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">Elimina</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
<target state="translated">Azioni da eseguire quando il processo viene completato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
<target state="translated">Email</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Pagina</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
<target state="translated">Cancella automaticamente il processo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nome della pianificazione</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">Nuovo avviso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">Nome avviso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Nuovo processo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Generale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">Opzioni</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">Definizione di avviso di evento</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Abilitato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nome del database</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">Gravità</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - Informazioni di sistema varie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - Riservato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - Riservato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - Riservato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - Riservato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006 - Riservato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - Notifica: Informazioni di Stato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008 - Notifica: Richiesto intervento dell'utente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009 - Definito dall'utente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - Informazioni</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011 - Oggetto di database specificato non trovato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012 - Inutilizzato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - Errore di sintassi nella transazione utente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - Autorizzazioni Insufficienti</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - Errore di sintassi nelle istruzioni SQL</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - Vari Errori Utente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - Risorse insufficienti</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - Errore interno non fatale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - Errore fatale nella risorsa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020 - Errore Fatale nel processo corrente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021 - Errore fatale nei Processi di Database</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022 - Errore Fatale: sospetto su integrità della tabella</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - Error Fatale: integrità database sospetta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - Errore Fatale: Errore Hardware</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025 - Errore Fatale</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">Nome Job</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Nuovo processo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">operatore</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">Nuovo Operatore</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
<target state="translated">Ritardo tra le risposte</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
<target state="translated">Minuti di ritardo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Annulla</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">Avviso per evento WMI</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
637
resources/xlf/vscode-extensions/agent.ja.xlf
Normal file
637
resources/xlf/vscode-extensions/agent.ja.xlf
Normal file
@@ -0,0 +1,637 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">キャンセル</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">全般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">説明</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">ジョブ スケジュール</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">キャンセル</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">全般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名前</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">有効</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">キャンセル</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">全般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">詳細</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">解析</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">次へ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">前へ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">種類</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">データベース</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">コマンド</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">出力ファイル</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">選択されたパス</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">ファイルの種類</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">ファイル名</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">全般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名前</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">所有者</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">カテゴリ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">説明</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">有効</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">ステップ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">種類</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">新規作成...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">編集</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">削除</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">ページ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">新規ジョブ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">全般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">オプション</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名前</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">種類</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">有効</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">データベース名</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">重大度</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">新規ジョブ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">演算子</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">キャンセル</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
742
resources/xlf/vscode-extensions/agent.ko.xlf
Normal file
742
resources/xlf/vscode-extensions/agent.ko.xlf
Normal file
@@ -0,0 +1,742 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">새 일정</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">확인</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">취소</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">일정 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">일정</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
<target state="translated">프록시 편집</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">일반</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">자격 증명 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">설명</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
<target state="translated">하위 시스템</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">운영 체제(CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">복제 스냅숏</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
<target state="translated">복제 트랜잭션 로그 판독기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
<target state="translated">복제 배포자</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
<target state="translated">복제 병합</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
<target state="translated">복제 큐 판독기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
<target state="translated">SQL Server Analysis Services 쿼리</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
<target state="translated">SQL Server Analysis Services 명령</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
<target state="translated">SQL Server Integration Services 패키지</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
<target state="translated">PowerShell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">작업 일정</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">확인</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">취소</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">일정 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">일정</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">일반</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">알림</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">사용</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
<target state="translated">전자 메일 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">월요일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">화요일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">수요일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">목요일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
<target state="translated">금요일 </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">토요일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">일요일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
<target state="translated">업무 시작일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">업무 종료일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
<target state="translated">경고 목록</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">경고 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">전자 메일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">호출기</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">새 작업 단계</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">확인</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">취소</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">일반</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">고급</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">구문 분석</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">다음</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">이전</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
<target state="translated">명령을 구문 분석했습니다.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
<target state="translated">단계 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">데이터베이스</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">명령</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
<target state="translated">실패한 경우 동작</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
<target state="translated">사용자로 실행</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">출력 파일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">선택한 경로</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">파일 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
<target state="translated">Transact-SQL 스크립트(T-SQL)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">SQL Server 에이전트 서비스 계정</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
<target state="translated">다음 단계로 이동</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">성공 보고와 함께 작업 종료</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
<target state="translated">실패 보고와 함께 작업 종료</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">일반</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
<target state="translated">단계</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">일정</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">경고</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">알림</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
<target state="translated">작업 이름을 비워 둘 수 없습니다.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">소유자</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">범주</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">설명</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">사용</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
<target state="translated">작업 단계 목록</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">단계</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">성공한 경우</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">실패한 경우</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">새로 만들기...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">편집</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">삭제</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
<target state="translated">단계 이동</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
<target state="translated">단계 이동</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Page</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
<target state="translated">Windows 응용 프로그램 이벤트 로그에 쓰기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
<target state="translated">일정 목록</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
<target state="translated">일정 선택</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">일정 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">새 경고</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">경고 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">새 작업</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
<target state="translated">작업 편집</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
<target state="translated">경고 만들기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
<target state="translated">경고 편집</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">일반</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
<target state="translated">응답</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">옵션</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">이벤트 경고 정의</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Type</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">사용</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">데이터베이스 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
<target state="translated">오류 번호</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">심각도</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - 기타 시스템 정보</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - 예약됨</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - 예약됨</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - 예약됨</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - 예약됨</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006 - 예약됨</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - 알림: 상태 정보</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008 - 알림: 사용자 개입 필요</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009 - 사용자 정의됨</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - 정보</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011 - 지정된 데이터베이스 개체를 찾을 수 없음</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012 - 사용 안 함</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - 사용자 트랜잭션 구문 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - 불충분한 권한</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - SQL 문의 구문 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - 기타 사용자 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - 불충분한 리소스</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - 치명적이지 않은 내부 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - 치명적인 리소스 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020 - 현재 프로세스 내의 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021 - 데이터베이스 프로세스 내의 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022 - 오류: 테이블 무결성 의심</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - 오류: 데이터베이스 무결성 의심</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - 오류: 하드웨어 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025 - 오류</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
<target state="translated">작업 실행</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">작업 이름</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">새 작업</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">운영자</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">전자 메일</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">호출기</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">새 운영자</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
<target state="translated">전송할 추가 알림 메시지</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
<target state="translated">응답 사이의 지연</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">확인</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">취소</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
<target state="translated">작업 완료 시</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
<target state="translated">작업 실패 시</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">작업 성공 시</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
<target state="translated">반드시 작업 이름을 지정해야 합니다.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
<target state="translated">작업 업데이트 실패 ' {0} '</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
<target state="translated">SQL Server 이벤트 경고</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
<target state="translated">SQL Server 성능 조건 경고</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">WMI 이벤트 경고</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="ko" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
<target state="translated">이 기능은 아직 개발 중입니다. 가장 최근의 변경 사항을 이용하고 싶으시다면 최신 인사이더 빌드를 확인하세요!</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
776
resources/xlf/vscode-extensions/agent.pt-BR.xlf
Normal file
776
resources/xlf/vscode-extensions/agent.pt-BR.xlf
Normal file
@@ -0,0 +1,776 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">Novo horário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nome de agenda</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Horários</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
<target state="translated">Criar proxy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
<target state="translated">Editar proxy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Geral</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
<target state="translated">Nome de proxy</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">Nome da credencial</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Descrição</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
<target state="translated">Subsistema</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">Sistema operacional (CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">Snapshot de replicação</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
<target state="translated">Leitor de Log de transações de replicação</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
<target state="translated">Distribuidor de replicação</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
<target state="translated">Replicação de mesclagem</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
<target state="translated">Leitor de fila de replicação</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
<target state="translated">Consulta do SQL Server Analysis Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
<target state="translated">Comando do SQL Server Analysis Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
<target state="translated">Pacote do SQL Server Integration Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
<target state="translated">PowerShell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
<target state="translated">Ativo para os seguintes subsistemas</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">Planos de trabalho</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nome de agenda</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Horários</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
<target state="translated">Criar operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
<target state="translated">Editar o operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Geral</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Notificações</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Habilitado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
<target state="translated">Nome do e-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
<target state="translated">Nome de email do pager</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">Segunda-feira</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">Terça-feira</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">Quarta-feira</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">Quinta-feira</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
<target state="translated">Sexta-feira </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">Sábado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">Domingo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
<target state="translated">Começar a jornada de trabalho</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">Final do dia útil</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
<target state="translated">Pager no horário de trabalho</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
<target state="translated">Lista de alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">Nome do alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Pager</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">Nova etapa de trabalho</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
<target state="translated">Localizar arquivos de banco de dados -</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Geral</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">Avançado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
<target state="translated">Abrir...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">Analisar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Próximo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">Anterior</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
<target state="translated">Comando analisado com sucesso.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
<target state="translated">Comando falhou.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
<target state="translated">O nome do passo não pode ser deixado em branco</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
<target state="translated">Nome da etapa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
<target state="translated">Executar como</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">Banco de dados</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">Comando</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
<target state="translated">Ação em caso de sucesso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
<target state="translated">Falha na ação</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
<target state="translated">Executar como usuário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
<target state="translated">Tentativas de repetição</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
<target state="translated">Intervalo (em minutos) de repetição</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
<target state="translated">A tabela de log</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
<target state="translated">Acrescentar a saída para entrada existente na tabela</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
<target state="translated">Incluir a saída da etapa no histórico</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">Arquivo de Saída</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
<target state="translated">Acrescentar a saída em um arquivo existente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">Caminho selecionado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">Tipo de Arquivos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">Nome do Arquivo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
<target state="translated">Todos os arquivos (*)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
<target state="translated">Script Transact-SQL (T-SQL)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">Conta de Serviço SQL Server Agent</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
<target state="translated">Avançar para o próximo passo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">Encerrar o trabalho reportando sucesso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
<target state="translated">Deixar o trabalho relatando a falha</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Geral</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
<target state="translated">Passos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Horários</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">Alertas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Notificações</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
<target state="translated">O nome do trabalho não pode ser em branco.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">Proprietário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">Categoria</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Descrição</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Habilitado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
<target state="translated">Lista de passos do job</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">Etapa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">No sucesso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">Em caso de falha</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">Novo...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">Editar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">Excluir</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
<target state="translated">Mover o passo acima</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
<target state="translated">Mover o passo acima</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
<target state="translated">Ações a executar quando o trabalho for concluído</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
<target state="translated">Email</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Página</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
<target state="translated">Escrever no log de eventos de aplicações do Windows</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
<target state="translated">Excluir automaticamente o job.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
<target state="translated">Lista de Schedules</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
<target state="translated">Escolha o horário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Nome de agenda</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
<target state="translated">Lista de alertas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">Novo alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">Nome do alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Novo job</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
<target state="translated">Editar job</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
<target state="translated">Criar alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
<target state="translated">Editar alerta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Geral</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
<target state="translated">Resposta</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">Opções</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">Definição de alerta de eventos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Nome</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Tipo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Habilitado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nome do banco de dados</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
<target state="translated">Número do erro</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">Gravidade</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
<target state="translated">Gerar alerta quando a mensagem contém</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
<target state="translated">Mensagem de texto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - Informações Diversas do Sistema</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - Reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - Reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - Reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - Reservados</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006 – Reservado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - Notificação: Informações de Status</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008 - notificação: Necessidade de intervenção de usuário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009 - Definidos pelo Usuário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - informações</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011 - objeto de banco de dados especificado não encontrado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012 – Não usado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - Erro de sintaxe de transação do usuário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - Permissão insuficiente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - Erro de sintaxe em instruções SQL</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - Diversos erros de usuário</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - Recursos insuficientes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - Erro Interno Não fatal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - Erro Fatal no Recurso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020 - Erro fatal no processo atual</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021 - Erro Fatal no banco de dados de processos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022 - Erro Fatal: Integridade da Tabela Suspeita</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - Erro Fatal: Integridade do Banco de Dados Suspeita</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - Erro Fatal: Erro de Hardware</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025 - Erro Fatal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
<target state="translated">Executar o Job</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">Nome da Tarefa</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
<target state="translated">Notificar operadores</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Novo job</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
<target state="translated">Lista de operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">Operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">E-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Pager</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">Novo operador</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
<target state="translated">Incluir texto de erro do alerta no e-mail</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
<target state="translated">Incluir o texto de alerta de erro no pager</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
<target state="translated">Mensagem de notificação adicional para enviar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
<target state="translated">Atraso entre respostas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
<target state="translated">Minutos de atraso</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
<target state="translated">Segundos de atraso</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">OK</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Cancelar</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
<target state="translated">Quando o job estiver concluído</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
<target state="translated">Quando o job falhar.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">Quando o job for bem sucedido</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
<target state="translated">O nome do job deve ser fornecido</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
<target state="translated">Falha de atualização do job '{0}'</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
<target state="translated">Falha na atualização alerta '{0}'</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
<target state="translated">Alerta de evento do SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
<target state="translated">Alerta de condição de desempenho do SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">Alerta de evento WMI</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="pt-BR" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
<target state="translated">Este recurso está em desenvolvimento. Verifique se você gostaria de experimentar as últimas alterações liberadas!</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
722
resources/xlf/vscode-extensions/agent.ru.xlf
Normal file
722
resources/xlf/vscode-extensions/agent.ru.xlf
Normal file
@@ -0,0 +1,722 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">Создание расписания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">ОК</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Отмена</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Имя расписания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Расписания</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Общее</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">Имя учетных данных</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Описание</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
<target state="translated">Подсистема</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">Операционная система (CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">Репликация: моментальный снимок</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
<target state="translated">Репликация: средство чтения журнала транзакций</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
<target state="translated">Репликация: распространитель</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
<target state="translated">Репликация: слияние</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
<target state="translated">Репликация: средство просмотра очередей</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
<target state="translated">Запрос служб SQL Server Analysis Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
<target state="translated">Команда служб SQL Server Analysis Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
<target state="translated">Пакет служб SQL Server Integration Services</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
<target state="translated">PowerShell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">Расписания заданий</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">ОК</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Отмена</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Имя расписания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Расписания</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Общее</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Уведомления</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Имя</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Включено</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">понедельник</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">вторник</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">среда</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">четверг</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">суббота</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">воскресенье</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
<target state="translated">Начало рабочего дня</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">Конец рабочего дня</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">Имя предупреждения</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">Электронная почта</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Пейджер</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">Создание шага задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">ОК</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Отмена</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Общее</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">Дополнительный</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">Синтаксический анализ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Далее</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">Назад</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
<target state="translated">Синтаксический анализ команды успешно завершен.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
<target state="translated">Имя шага</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Тип</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">База данных</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">Команда</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">Выходной файл</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">Файлы данного типа</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">Имя файла</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
<target state="translated">Скрипт Transact-SQL (T-SQL)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">Учетная запись службы агент SQL Server""""</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
<target state="translated">Перейти к следующему шагу</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">Завершить задание с успехом</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
<target state="translated">Завершить задание с ошибкой</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Общее</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
<target state="translated">Шаги</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">Расписания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">Предупреждения</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">Уведомления</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
<target state="translated">Имя задания не может быть пустым.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Имя</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">Владелец</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">Категория</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">Описание</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Включено</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">Шаг</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Тип</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">При успешном завершении</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">При сбое</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">Новые функции...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">Изменить</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">Удалить</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">Page</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
<target state="translated">Выбор расписания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">Имя расписания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">Создание предупреждения</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">Имя предупреждения</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Создание задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">Общее</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
<target state="translated">Ответ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">Параметры</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">Определение предупреждения о событии</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">Имя</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">Тип</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">Включено</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Имя базы данных</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
<target state="translated">Номер ошибки</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">Серьезность</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - Различные системные сведения</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - Зарезервировано</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003 - Зарезервировано</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004 - Зарезервировано</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005 - Зарезервировано</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006 - Зарезервировано</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007 - Уведомление: сведения о состоянии</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008 - Уведомление: требуется вмешательство пользователя</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009 - Определяемый пользователем</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - Сведения</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011 - Указанный объект базы данных не найден</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012 - Не используется</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013 - Синтаксическая ошибка пользовательской транзакции</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014 - Недостаточно разрешений</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015 - Синтаксическая ошибка в инструкциях SQL</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - Другая пользовательская ошибка</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017 - Недостаточно ресурсов</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - Некритичная внутренняя ошибка</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 - Неустранимая ошибка в ресурсе</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020 - Неустранимая ошибка в текущем процессе</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021 - Неустранимая ошибка в процессах базы данных</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022 - Неустранимая ошибка: возможно повреждение целостности таблицы</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - Неустранимая ошибка: возможно повреждение целостности базы данных</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024 - Неустранимая ошибка: аппаратная ошибка</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025 - Неустранимая ошибка</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">Имя задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">Создание задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">Оператор</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">Электронная почта</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">Пейджер</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">Создание оператора</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">ОК</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">Отмена</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
<target state="translated">При завершении задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
<target state="translated">При ошибке задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">При успешном завершении задания</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
<target state="translated">Предупреждение о событии SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
<target state="translated">Предупреждение о производительности SQL Server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">Предупреждение о событии WMI</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="ru" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
777
resources/xlf/vscode-extensions/agent.zh-Hans.xlf
Normal file
777
resources/xlf/vscode-extensions/agent.zh-Hans.xlf
Normal file
@@ -0,0 +1,777 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
<target state="translated">新计划</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">确定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">计划名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">计划</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
<target state="translated">创建代理服务器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
<target state="translated">编辑代理服务器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">常规</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
<target state="translated">代理服务器名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">凭据名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">说明</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
<target state="translated">子系统</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
<target state="translated">操作系统 (CmdExec)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
<target state="translated">复制快照</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
<target state="translated">复制事务日志读取器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
<target state="translated">复制分发服务器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
<target state="translated">复制合并</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
<target state="translated">复制队列读取器</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
<target state="translated">SQL server 分析服务查询</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
<target state="translated">SQL server 分析服务命令</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
<target state="translated">SQL Server 集成服务包</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
<target state="translated">PowerShell</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
<target state="translated">对以下子系统有效</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">作业计划</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">确定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">计划名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">计划</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
<target state="translated">创建操作符</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
<target state="translated">编辑操作员</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">常规</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">通知</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">已启用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
<target state="translated">电子邮件名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
<target state="translated">寻呼机电子邮件名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
<target state="translated">星期一</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
<target state="translated">星期二</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
<target state="translated">星期三</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
<target state="translated">星期四</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
<target state="translated">星期五</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
<target state="translated">星期六</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
<target state="translated">星期天</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
<target state="translated">工作日开始</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
<target state="translated">工作日结束</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
<target state="translated">值班 schdule 的寻呼机</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
<target state="translated">警报列表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
<target state="translated">警报名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">电子邮件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">分页</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
<target state="translated">新建作业步骤</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
<target state="translated">定位数据库文件-</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">确定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">常规</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">高级</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
<target state="translated">打开...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">分析</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">下一个</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">上一个</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
<target state="translated">该命令已成功解析。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
<target state="translated">命令失败。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
<target state="translated">步骤名称不能留空</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
<target state="translated">步骤名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
<target state="translated">运行为</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">数据库</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">命令</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
<target state="translated">关于成功行动</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
<target state="translated">失败操作时</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
<target state="translated">使用用户身份执行</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
<target state="translated">重试尝试</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
<target state="translated">重试间隔 (分钟)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
<target state="translated">记录到表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
<target state="translated">将输出附加到表中的现有条目</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
<target state="translated">在历史记录中包括步骤输出</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">输出文件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
<target state="translated">将输出追加到现有文件中</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">选定的路径</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">文件类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">文件名</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
<target state="translated">所有文件 (*)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
<target state="translated">Transact-SQL 脚本 (T-SQL)</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
<target state="translated">SQL server 代理服务帐户</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
<target state="translated">转到下一步骤</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
<target state="translated">退出工作报告成功</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
<target state="translated">离开作业调度报告时发生错误。</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">常规</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
<target state="translated">步骤</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
<target state="translated">计划</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
<target state="translated">警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
<target state="translated">通知</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
<target state="translated">作业名称不能为空。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">所有者</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">类别</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">说明</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">已启用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
<target state="translated">作业步骤列表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">步骤</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
<target state="translated">在成功时</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
<target state="translated">失败时</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">新建...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">编辑</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">删除</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
<target state="translated">向上移动</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
<target state="translated">向上移动</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
<target state="translated">作业完成时要执行的操作</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
<target state="translated">电子邮件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">页</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
<target state="translated">写入 Windows 应用程序事件日志</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
<target state="translated">自动删除作业</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
<target state="translated">计划列表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
<target state="translated">挑选时间表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
<target state="translated">计划名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
<target state="translated">通知列表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
<target state="translated">新警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
<target state="translated">警报名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">新作业</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
<target state="translated">编辑作业</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
<target state="translated">创建警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
<target state="translated">编辑警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">常规</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
<target state="translated">响应</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">选项</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
<target state="translated">事件警报定义</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">类型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">已启用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">数据库名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
<target state="translated">错误号</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">严重性</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
<target state="translated">消息包含时引发警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
<target state="translated">消息文本</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
<target state="translated">001 - 其他系统信息</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002-预留</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
<target state="translated">003-预留</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
<target state="translated">004-预留</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
<target state="translated">005-预留</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
<target state="translated">006-预留</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
<target state="translated">007-通知: 状态信息</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
<target state="translated">008-通知: 需要用户干预</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
<target state="translated">009-用户定义的</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010-信息</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
<target state="translated">011-未找到指定的数据库对象</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
<target state="translated">012-未使用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
<target state="translated">013-用户事务语法错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
<target state="translated">014-权限不足</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
<target state="translated">015-SQL 语句中的语法错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016-杂项用户错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
<target state="translated">017-资源不足</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
<target state="translated">018 - 非致命内部错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
<target state="translated">019 -资源致命错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
<target state="translated">020-当前过程中的致命错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
<target state="translated">021-数据库进程中的致命错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
<target state="translated">022-致命错误: 表完整性可疑</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023-致命错误: 数据库完整性不可靠</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
<target state="translated">024-致命错误: 硬件错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
<target state="translated">025-致命错误</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
<target state="translated">&lt;所有数据库&gt;</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
<target state="translated">执行作业</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">作业名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
<target state="translated">通知操作员</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">新作业</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
<target state="translated">操作员列表</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">运算符</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">电子邮件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">分页</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
<target state="translated">新建操作符</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
<target state="translated">在电子邮件中包含警告错误文本</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
<target state="translated">在寻呼机中包含警报错误文本</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
<target state="translated">要发送的其他通知消息</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
<target state="translated">响应之间的延迟</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
<target state="translated">延迟分钟数</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
<target state="translated">延迟秒数</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">确定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
<target state="translated">当作业完成时</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
<target state="translated">当作业失败时</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
<target state="translated">当作业成功时</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
<target state="translated">必须提供作业名称</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
<target state="translated">作业更新失败 "{0}"</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
<target state="translated">警报更新失败 "{0}"</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
<target state="translated">SQL server 事件警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
<target state="translated">SQL Server 性能状况警报</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
<target state="translated">WMI 事件警报</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="zh-Hans" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
<target state="translated">此功能正在开发中。 如果你想尝试最新的改进请签出最新的内部构建体验。</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
650
resources/xlf/vscode-extensions/agent.zh-Hant.xlf
Normal file
650
resources/xlf/vscode-extensions/agent.zh-Hant.xlf
Normal file
@@ -0,0 +1,650 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/agent/out/dialogs/scheduleDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="scheduleDialog.newSchedule">
|
||||
<source xml:lang="en">New Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">確定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="scheduleDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/proxyDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="createProxy.createProxy">
|
||||
<source xml:lang="en">Create Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.editProxy">
|
||||
<source xml:lang="en">Edit Proxy</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">一般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ProxyName">
|
||||
<source xml:lang="en">Proxy name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.CredentialName">
|
||||
<source xml:lang="en">Credential name</source>
|
||||
<target state="translated">認證名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.Description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">描述</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SubsystemName">
|
||||
<source xml:lang="en">Subsystem</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.OperatingSystem">
|
||||
<source xml:lang="en">Operating system (CmdExec)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationSnapshot">
|
||||
<source xml:lang="en">Replication Snapshot</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationTransactionLog">
|
||||
<source xml:lang="en">Replication Transaction-Log Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationDistributor">
|
||||
<source xml:lang="en">Replication Distributor</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationMerge">
|
||||
<source xml:lang="en">Replication Merge</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.ReplicationQueueReader">
|
||||
<source xml:lang="en">Replication Queue Reader</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASQueryLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Query</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSASCommandLabel">
|
||||
<source xml:lang="en">SQL Server Analysis Services Command</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.SSISPackage">
|
||||
<source xml:lang="en">SQL Server Integration Services Package</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.PowerShell">
|
||||
<source xml:lang="en">PowerShell</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createProxy.subSystemHeading">
|
||||
<source xml:lang="en">Active to the following subsytems</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/pickScheduleDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="pickSchedule.jobSchedules">
|
||||
<source xml:lang="en">Job Schedules</source>
|
||||
<target state="translated">作業排程</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">確定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.scheduleName">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pickSchedule.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/operatorDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="createOperator.createOperator">
|
||||
<source xml:lang="en">Create Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.editOperator">
|
||||
<source xml:lang="en">Edit Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">一般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">啟用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.EmailName">
|
||||
<source xml:lang="en">E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerEmailName">
|
||||
<source xml:lang="en">Pager E-mail Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerMondayCheckBox">
|
||||
<source xml:lang="en">Monday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerTuesdayCheckBox">
|
||||
<source xml:lang="en">Tuesday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerWednesdayCheckBox">
|
||||
<source xml:lang="en">Wednesday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerThursdayCheckBox">
|
||||
<source xml:lang="en">Thursday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerFridayCheckBox">
|
||||
<source xml:lang="en">Friday </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSaturdayCheckBox">
|
||||
<source xml:lang="en">Saturday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerSundayCheckBox">
|
||||
<source xml:lang="en">Sunday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayBegin">
|
||||
<source xml:lang="en">Workday begin</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.workdayEnd">
|
||||
<source xml:lang="en">Workday end</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.PagerDutySchedule">
|
||||
<source xml:lang="en">Pager on duty schdule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertListHeading">
|
||||
<source xml:lang="en">Alert list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertNameColumnLabel">
|
||||
<source xml:lang="en">Alert name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertEmailColumnLabel">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">電子郵件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="createOperator.AlertPagerColumnLabel">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">頁面巡覽區</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobStepDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="jobStepDialog.newJobStep">
|
||||
<source xml:lang="en">New Job Step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileBrowserTitle">
|
||||
<source xml:lang="en">Locate Database Files - </source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.ok">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">確定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">一般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.advanced">
|
||||
<source xml:lang="en">Advanced</source>
|
||||
<target state="translated">進階</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.open">
|
||||
<source xml:lang="en">Open...</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.parse">
|
||||
<source xml:lang="en">Parse</source>
|
||||
<target state="translated">剖析</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">下一個</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.previous">
|
||||
<source xml:lang="en">Previous</source>
|
||||
<target state="translated">上一個</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successParse">
|
||||
<source xml:lang="en">The command was successfully parsed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failParse">
|
||||
<source xml:lang="en">The command failed.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.blankStepName">
|
||||
<source xml:lang="en">The step name cannot be left blank</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.stepNameLabel">
|
||||
<source xml:lang="en">Step Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.typeLabel">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">型別</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsLabel">
|
||||
<source xml:lang="en">Run as</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.databaseLabel">
|
||||
<source xml:lang="en">Database</source>
|
||||
<target state="translated">資料庫</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.commandLabel">
|
||||
<source xml:lang="en">Command</source>
|
||||
<target state="translated">命令</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.successAction">
|
||||
<source xml:lang="en">On success action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.failureAction">
|
||||
<source xml:lang="en">On failure action</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.runAsUser">
|
||||
<source xml:lang="en">Run as user</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryAttempts">
|
||||
<source xml:lang="en">Retry Attempts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.retryInterval">
|
||||
<source xml:lang="en">Retry Interval (minutes)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.logToTable">
|
||||
<source xml:lang="en">Log to table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendExistingTableEntry">
|
||||
<source xml:lang="en">Append output to exisiting entry in table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.includeStepOutputHistory">
|
||||
<source xml:lang="en">Include step output in history</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.outputFile">
|
||||
<source xml:lang="en">Output File</source>
|
||||
<target state="translated">輸出檔案</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.appendOutputToFile">
|
||||
<source xml:lang="en">Append output to existing file</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.selectedPath">
|
||||
<source xml:lang="en">Selected path</source>
|
||||
<target state="translated">選擇的路徑</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.filesOfType">
|
||||
<source xml:lang="en">Files of type</source>
|
||||
<target state="translated">檔案類型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.fileName">
|
||||
<source xml:lang="en">File name</source>
|
||||
<target state="translated">檔案名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.allFiles">
|
||||
<source xml:lang="en">All Files (*)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.TSQL">
|
||||
<source xml:lang="en">Transact-SQL script (T-SQL)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.agentServiceAccount">
|
||||
<source xml:lang="en">SQL Server Agent Service Account</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.nextStep">
|
||||
<source xml:lang="en">Go to the next step</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobSuccess">
|
||||
<source xml:lang="en">Quit the job reporting success</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobStepDialog.quitJobFailure">
|
||||
<source xml:lang="en">Quit the job reporting failure</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/jobDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="jobDialog.general">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">一般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.steps">
|
||||
<source xml:lang="en">Steps</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedules">
|
||||
<source xml:lang="en">Schedules</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alerts">
|
||||
<source xml:lang="en">Alerts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notifications">
|
||||
<source xml:lang="en">Notifications</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.blankJobNameError">
|
||||
<source xml:lang="en">The name of the job cannot be blank.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.owner">
|
||||
<source xml:lang="en">Owner</source>
|
||||
<target state="translated">擁有者</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.category">
|
||||
<source xml:lang="en">Category</source>
|
||||
<target state="translated">分類</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.description">
|
||||
<source xml:lang="en">Description</source>
|
||||
<target state="translated">描述</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">啟用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.jobStepList">
|
||||
<source xml:lang="en">Job step list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.step">
|
||||
<source xml:lang="en">Step</source>
|
||||
<target state="translated">步驟</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">型別</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onSuccess">
|
||||
<source xml:lang="en">On Success</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.onFailure">
|
||||
<source xml:lang="en">On Failure</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.new">
|
||||
<source xml:lang="en">New...</source>
|
||||
<target state="translated">新增...</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.edit">
|
||||
<source xml:lang="en">Edit</source>
|
||||
<target state="translated">編輯</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.delete">
|
||||
<source xml:lang="en">Delete</source>
|
||||
<target state="translated">刪除</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveUp">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.moveDown">
|
||||
<source xml:lang="en">Move Step Up</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.notificationsTabTop">
|
||||
<source xml:lang="en">Actions to perform when the job completes</source>
|
||||
<target state="translated">作業完成時要執行的操作</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.email">
|
||||
<source xml:lang="en">Email</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.page">
|
||||
<source xml:lang="en">Page</source>
|
||||
<target state="translated">頁面</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.eventLogCheckBoxLabel">
|
||||
<source xml:lang="en">Write to the Windows Application event log</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.deleteJobLabel">
|
||||
<source xml:lang="en">Automatically delete job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.schedulesaLabel">
|
||||
<source xml:lang="en">Schedules list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.pickSchedule">
|
||||
<source xml:lang="en">Pick Schedule</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.scheduleNameLabel">
|
||||
<source xml:lang="en">Schedule Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertsList">
|
||||
<source xml:lang="en">Alerts list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newAlert">
|
||||
<source xml:lang="en">New Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.alertNameLabel">
|
||||
<source xml:lang="en">Alert Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.newJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">新工作</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobDialog.editJob">
|
||||
<source xml:lang="en">Edit Job</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/alertDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="alertDialog.createAlert">
|
||||
<source xml:lang="en">Create Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.editAlert">
|
||||
<source xml:lang="en">Edit Alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.General">
|
||||
<source xml:lang="en">General</source>
|
||||
<target state="translated">一般</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Response">
|
||||
<source xml:lang="en">Response</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Options">
|
||||
<source xml:lang="en">Options</source>
|
||||
<target state="translated">選項</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.eventAlert">
|
||||
<source xml:lang="en">Event alert definition</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Name">
|
||||
<source xml:lang="en">Name</source>
|
||||
<target state="translated">名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Type">
|
||||
<source xml:lang="en">Type</source>
|
||||
<target state="translated">型別</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Enabled">
|
||||
<source xml:lang="en">Enabled</source>
|
||||
<target state="translated">啟用</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DatabaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">資料庫名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ErrorNumber">
|
||||
<source xml:lang="en">Error number</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity">
|
||||
<source xml:lang="en">Severity</source>
|
||||
<target state="translated">嚴重性</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.RaiseAlertContains">
|
||||
<source xml:lang="en">Raise alert when message contains</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.MessageText">
|
||||
<source xml:lang="en">Message text</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity001">
|
||||
<source xml:lang="en">001 - Miscellaneous System Information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity002">
|
||||
<source xml:lang="en">002 - Reserved</source>
|
||||
<target state="translated">002 - 預留</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity003">
|
||||
<source xml:lang="en">003 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity004">
|
||||
<source xml:lang="en">004 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity005">
|
||||
<source xml:lang="en">005 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity006">
|
||||
<source xml:lang="en">006 - Reserved</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity007">
|
||||
<source xml:lang="en">007 - Notification: Status Information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity008">
|
||||
<source xml:lang="en">008 - Notification: User Intervention Required</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity009">
|
||||
<source xml:lang="en">009 - User Defined</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity010">
|
||||
<source xml:lang="en">010 - Information</source>
|
||||
<target state="translated">010 - 資訊</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity011">
|
||||
<source xml:lang="en">011 - Specified Database Object Not Found</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity012">
|
||||
<source xml:lang="en">012 - Unused</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity013">
|
||||
<source xml:lang="en">013 - User Transaction Syntax Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity014">
|
||||
<source xml:lang="en">014 - Insufficient Permission</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity015">
|
||||
<source xml:lang="en">015 - Syntax Error in SQL Statements</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity016">
|
||||
<source xml:lang="en">016 - Miscellaneous User Error</source>
|
||||
<target state="translated">016 - 其他使用者錯誤</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity017">
|
||||
<source xml:lang="en">017 - Insufficient Resources</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity018">
|
||||
<source xml:lang="en">018 - Nonfatal Internal Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity019">
|
||||
<source xml:lang="en">019 - Fatal Error in Resource</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity020">
|
||||
<source xml:lang="en">020 - Fatal Error in Current Process</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity021">
|
||||
<source xml:lang="en">021 - Fatal Error in Database Processes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity022">
|
||||
<source xml:lang="en">022 - Fatal Error: Table Integrity Suspect</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity023">
|
||||
<source xml:lang="en">023 - Fatal Error: Database Integrity Suspect</source>
|
||||
<target state="translated">023 - 嚴重錯誤: 資料庫完整性有疑慮</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity024">
|
||||
<source xml:lang="en">024 - Fatal Error: Hardware Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.Severity025">
|
||||
<source xml:lang="en">025 - Fatal Error</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AllDatabases">
|
||||
<source xml:lang="en"><all databases></source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJob">
|
||||
<source xml:lang="en">Execute Job</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.ExecuteJobName">
|
||||
<source xml:lang="en">Job Name</source>
|
||||
<target state="translated">作業名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NotifyOperators">
|
||||
<source xml:lang="en">Notify Operators</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewJob">
|
||||
<source xml:lang="en">New Job</source>
|
||||
<target state="translated">新工作</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorList">
|
||||
<source xml:lang="en">Operator List</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorName">
|
||||
<source xml:lang="en">Operator</source>
|
||||
<target state="translated">運算子</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorEmail">
|
||||
<source xml:lang="en">E-mail</source>
|
||||
<target state="translated">電子郵件</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.OperatorPager">
|
||||
<source xml:lang="en">Pager</source>
|
||||
<target state="translated">頁面巡覽區</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.NewOperator">
|
||||
<source xml:lang="en">New Operator</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInEmail">
|
||||
<source xml:lang="en">Include alert error text in e-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.IncludeErrorInPager">
|
||||
<source xml:lang="en">Include alert error text in pager</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.AdditionalNotification">
|
||||
<source xml:lang="en">Additional notification message to send</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayBetweenResponse">
|
||||
<source xml:lang="en">Delay between responses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelayMinutes">
|
||||
<source xml:lang="en">Delay Minutes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.DelaySeconds">
|
||||
<source xml:lang="en">Delay Seconds</source>
|
||||
<target state="translated">延遲秒數</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/dialogs/agentDialog" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="agentDialog.OK">
|
||||
<source xml:lang="en">OK</source>
|
||||
<target state="translated">確定</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="agentDialog.Cancel">
|
||||
<source xml:lang="en">Cancel</source>
|
||||
<target state="translated">取消</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/jobData" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="jobData.whenJobCompletes">
|
||||
<source xml:lang="en">When the job completes</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobFails">
|
||||
<source xml:lang="en">When the job fails</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.whenJobSucceeds">
|
||||
<source xml:lang="en">When the job succeeds</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.jobNameRequired">
|
||||
<source xml:lang="en">Job name must be provided</source>
|
||||
<target state="translated">必須提供作業名稱</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="jobData.saveErrorMessage">
|
||||
<source xml:lang="en">Job update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/data/alertData" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="alertData.saveErrorMessage">
|
||||
<source xml:lang="en">Alert update failed '{0}'</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertData.DefaultAlertTypString">
|
||||
<source xml:lang="en">SQL Server event alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.PerformanceCondition">
|
||||
<source xml:lang="en">SQL Server performance condition alert</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="alertDialog.WmiEvent">
|
||||
<source xml:lang="en">WMI event alert</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/agent/out/mainController" source-language="en" target-language="zh-Hant" datatype="plaintext"><body>
|
||||
<trans-unit id="mainController.notImplemented">
|
||||
<source xml:lang="en">This feature is under development. Check-out the latest insiders build if you'd like to try out the most recent changes!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
157
resources/xlf/vscode-extensions/import.de.xlf
Normal file
157
resources/xlf/vscode-extensions/import.de.xlf
Normal file
@@ -0,0 +1,157 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/import/out/wizard/pages/summaryPage" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importInformation">
|
||||
<source xml:lang="en">Import information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importStatus">
|
||||
<source xml:lang="en">Import status</source>
|
||||
<target state="translated">Importstatus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serverName">
|
||||
<source xml:lang="en">Server name</source>
|
||||
<target state="translated">Servername</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Datenbankname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableName">
|
||||
<source xml:lang="en">Table name</source>
|
||||
<target state="translated">Tabellenname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableSchema">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileImport">
|
||||
<source xml:lang="en">File to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.success.norows">
|
||||
<source xml:lang="en">✔ You have successfully inserted the data into a table.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/prosePreviewPage" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.refresh">
|
||||
<source xml:lang="en">Refresh</source>
|
||||
<target state="translated">Aktualisieren</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.prosePreviewMessage">
|
||||
<source xml:lang="en">This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/modifyColumnsPage" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importData">
|
||||
<source xml:lang="en">Import Data</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Weiter</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.columnName">
|
||||
<source xml:lang="en">Column Name</source>
|
||||
<target state="translated">Spaltenname</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.dataType">
|
||||
<source xml:lang="en">Data Type</source>
|
||||
<target state="translated">Datentyp</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.primaryKey">
|
||||
<source xml:lang="en">Primary Key</source>
|
||||
<target state="translated">Primärschlüssel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.allowNulls">
|
||||
<source xml:lang="en">Allow Nulls</source>
|
||||
<target state="translated">NULL-Werte zulassen</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/fileConfigPage" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.serverDropdownTitle">
|
||||
<source xml:lang="en">Server the database is in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseDropdownTitle">
|
||||
<source xml:lang="en">Database the table is created in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.browseFiles">
|
||||
<source xml:lang="en">Browse</source>
|
||||
<target state="translated">Durchsuchen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.openFile">
|
||||
<source xml:lang="en">Open</source>
|
||||
<target state="translated">Eröffnungskurs</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileTextboxTitle">
|
||||
<source xml:lang="en">Location of the file to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableTextboxTitle">
|
||||
<source xml:lang="en">New table name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.schemaTextboxTitle">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/telemetry" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="import.serviceCrashButton">
|
||||
<source xml:lang="en">Give Feedback</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceCrashMessage">
|
||||
<source xml:lang="en">service component could not start</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/serviceClient" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="serviceStarted">
|
||||
<source xml:lang="en">Service Started</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceStarting">
|
||||
<source xml:lang="en">Starting service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serviceStartFailed">
|
||||
<source xml:lang="en">Failed to start Import service{0}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingServiceDetailed">
|
||||
<source xml:lang="en">Installing {0} service to {1}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingService">
|
||||
<source xml:lang="en">Installing Service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceInstalled">
|
||||
<source xml:lang="en">Installed</source>
|
||||
<target state="translated">INSTALLIERT</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingService">
|
||||
<source xml:lang="en">Downloading {0}</source>
|
||||
<target state="translated">{0} wird heruntergeladen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceStatus">
|
||||
<source xml:lang="en">Downloading Service</source>
|
||||
<target state="translated">Download-Dienst</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceComplete">
|
||||
<source xml:lang="en">Done!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/flatFileWizard" source-language="en" target-language="de" datatype="plaintext"><body>
|
||||
<trans-unit id="import.needConnection">
|
||||
<source xml:lang="en">Please connect to a server before using this wizard.</source>
|
||||
<target state="translated">Bitte verbinden Sie sich mit einem Server, bevor Sie diesen Assistenten verwenden.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.wizardName">
|
||||
<source xml:lang="en">Import flat file wizard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page1Name">
|
||||
<source xml:lang="en">Specify Input File</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page2Name">
|
||||
<source xml:lang="en">Preview Data</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page3Name">
|
||||
<source xml:lang="en">Modify Columns</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page4Name">
|
||||
<source xml:lang="en">Summary</source>
|
||||
<target state="translated">Zusammenfassung</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importNewFile">
|
||||
<source xml:lang="en">Import new file</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
156
resources/xlf/vscode-extensions/import.es.xlf
Normal file
156
resources/xlf/vscode-extensions/import.es.xlf
Normal file
@@ -0,0 +1,156 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/import/out/wizard/pages/summaryPage" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importInformation">
|
||||
<source xml:lang="en">Import information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importStatus">
|
||||
<source xml:lang="en">Import status</source>
|
||||
<target state="translated">Estado de importación</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serverName">
|
||||
<source xml:lang="en">Server name</source>
|
||||
<target state="translated">Nombre del servidor</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nombre de la base de datos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableName">
|
||||
<source xml:lang="en">Table name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableSchema">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileImport">
|
||||
<source xml:lang="en">File to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.success.norows">
|
||||
<source xml:lang="en">✔ You have successfully inserted the data into a table.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/prosePreviewPage" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.refresh">
|
||||
<source xml:lang="en">Refresh</source>
|
||||
<target state="translated">Actualizar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.prosePreviewMessage">
|
||||
<source xml:lang="en">This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/modifyColumnsPage" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importData">
|
||||
<source xml:lang="en">Import Data</source>
|
||||
<target state="translated">Importar datos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Siguiente</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.columnName">
|
||||
<source xml:lang="en">Column Name</source>
|
||||
<target state="translated">Nombre de columna</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.dataType">
|
||||
<source xml:lang="en">Data Type</source>
|
||||
<target state="translated">Tipo de datos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.primaryKey">
|
||||
<source xml:lang="en">Primary Key</source>
|
||||
<target state="translated">Clave principal</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.allowNulls">
|
||||
<source xml:lang="en">Allow Nulls</source>
|
||||
<target state="translated">Permitir valores NULL</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/fileConfigPage" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.serverDropdownTitle">
|
||||
<source xml:lang="en">Server the database is in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseDropdownTitle">
|
||||
<source xml:lang="en">Database the table is created in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.browseFiles">
|
||||
<source xml:lang="en">Browse</source>
|
||||
<target state="translated">Examinar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.openFile">
|
||||
<source xml:lang="en">Open</source>
|
||||
<target state="translated">Abrir</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileTextboxTitle">
|
||||
<source xml:lang="en">Location of the file to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableTextboxTitle">
|
||||
<source xml:lang="en">New table name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.schemaTextboxTitle">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/telemetry" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="import.serviceCrashButton">
|
||||
<source xml:lang="en">Give Feedback</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceCrashMessage">
|
||||
<source xml:lang="en">service component could not start</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/serviceClient" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="serviceStarted">
|
||||
<source xml:lang="en">Service Started</source>
|
||||
<target state="translated">Servicio iniciado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceStarting">
|
||||
<source xml:lang="en">Starting service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serviceStartFailed">
|
||||
<source xml:lang="en">Failed to start Import service{0}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingServiceDetailed">
|
||||
<source xml:lang="en">Installing {0} service to {1}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingService">
|
||||
<source xml:lang="en">Installing Service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceInstalled">
|
||||
<source xml:lang="en">Installed</source>
|
||||
<target state="translated">INSTALADO</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingService">
|
||||
<source xml:lang="en">Downloading {0}</source>
|
||||
<target state="translated">Descargando {0}</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceStatus">
|
||||
<source xml:lang="en">Downloading Service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceComplete">
|
||||
<source xml:lang="en">Done!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/flatFileWizard" source-language="en" target-language="es" datatype="plaintext"><body>
|
||||
<trans-unit id="import.needConnection">
|
||||
<source xml:lang="en">Please connect to a server before using this wizard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.wizardName">
|
||||
<source xml:lang="en">Import flat file wizard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page1Name">
|
||||
<source xml:lang="en">Specify Input File</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page2Name">
|
||||
<source xml:lang="en">Preview Data</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page3Name">
|
||||
<source xml:lang="en">Modify Columns</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page4Name">
|
||||
<source xml:lang="en">Summary</source>
|
||||
<target state="translated">Resumen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importNewFile">
|
||||
<source xml:lang="en">Import new file</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
169
resources/xlf/vscode-extensions/import.fr.xlf
Normal file
169
resources/xlf/vscode-extensions/import.fr.xlf
Normal file
@@ -0,0 +1,169 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/import/out/wizard/pages/summaryPage" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importInformation">
|
||||
<source xml:lang="en">Import information</source>
|
||||
<target state="translated">Importer les informations</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importStatus">
|
||||
<source xml:lang="en">Import status</source>
|
||||
<target state="translated">État de l’importation</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serverName">
|
||||
<source xml:lang="en">Server name</source>
|
||||
<target state="translated">Nom du serveur</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nom de la base de données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableName">
|
||||
<source xml:lang="en">Table name</source>
|
||||
<target state="translated">Nom de la table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableSchema">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
<target state="translated">Schéma de table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileImport">
|
||||
<source xml:lang="en">File to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.success.norows">
|
||||
<source xml:lang="en">✔ You have successfully inserted the data into a table.</source>
|
||||
<target state="translated">✔ Vous avez inséré les données dans une table.</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/prosePreviewPage" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.refresh">
|
||||
<source xml:lang="en">Refresh</source>
|
||||
<target state="translated">Actualiser</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.prosePreviewMessage">
|
||||
<source xml:lang="en">This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/modifyColumnsPage" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importData">
|
||||
<source xml:lang="en">Import Data</source>
|
||||
<target state="translated">Importer des données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Suivant</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.columnName">
|
||||
<source xml:lang="en">Column Name</source>
|
||||
<target state="translated">Nom de la colonne</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.dataType">
|
||||
<source xml:lang="en">Data Type</source>
|
||||
<target state="translated">Type de données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.primaryKey">
|
||||
<source xml:lang="en">Primary Key</source>
|
||||
<target state="translated">Clé primaire</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.allowNulls">
|
||||
<source xml:lang="en">Allow Nulls</source>
|
||||
<target state="translated">Autoriser les valeurs Null</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/fileConfigPage" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.serverDropdownTitle">
|
||||
<source xml:lang="en">Server the database is in</source>
|
||||
<target state="translated">Serveur dans lequel se trouve la base de données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseDropdownTitle">
|
||||
<source xml:lang="en">Database the table is created in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.browseFiles">
|
||||
<source xml:lang="en">Browse</source>
|
||||
<target state="translated">Parcourir</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.openFile">
|
||||
<source xml:lang="en">Open</source>
|
||||
<target state="translated">Ouvrir </target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileTextboxTitle">
|
||||
<source xml:lang="en">Location of the file to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableTextboxTitle">
|
||||
<source xml:lang="en">New table name</source>
|
||||
<target state="translated">Nouveau nom de table</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.schemaTextboxTitle">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
<target state="translated">Schéma de table</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/telemetry" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="import.serviceCrashButton">
|
||||
<source xml:lang="en">Give Feedback</source>
|
||||
<target state="translated">Donner son avis</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceCrashMessage">
|
||||
<source xml:lang="en">service component could not start</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/serviceClient" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="serviceStarted">
|
||||
<source xml:lang="en">Service Started</source>
|
||||
<target state="translated">Service démarré</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceStarting">
|
||||
<source xml:lang="en">Starting service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serviceStartFailed">
|
||||
<source xml:lang="en">Failed to start Import service{0}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingServiceDetailed">
|
||||
<source xml:lang="en">Installing {0} service to {1}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingService">
|
||||
<source xml:lang="en">Installing Service</source>
|
||||
<target state="translated">Installation du Service</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceInstalled">
|
||||
<source xml:lang="en">Installed</source>
|
||||
<target state="translated">INSTALLÉ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingService">
|
||||
<source xml:lang="en">Downloading {0}</source>
|
||||
<target state="translated">Téléchargement de {0} en cours</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceStatus">
|
||||
<source xml:lang="en">Downloading Service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceComplete">
|
||||
<source xml:lang="en">Done!</source>
|
||||
<target state="translated">Terminé !</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/flatFileWizard" source-language="en" target-language="fr" datatype="plaintext"><body>
|
||||
<trans-unit id="import.needConnection">
|
||||
<source xml:lang="en">Please connect to a server before using this wizard.</source>
|
||||
<target state="translated">Connectez-vous à un serveur avant d’utiliser cet Assistant.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.wizardName">
|
||||
<source xml:lang="en">Import flat file wizard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page1Name">
|
||||
<source xml:lang="en">Specify Input File</source>
|
||||
<target state="translated">Spécifier le fichier d'entrée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page2Name">
|
||||
<source xml:lang="en">Preview Data</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page3Name">
|
||||
<source xml:lang="en">Modify Columns</source>
|
||||
<target state="translated">Modifier les colonnes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page4Name">
|
||||
<source xml:lang="en">Summary</source>
|
||||
<target state="translated">Récapitulatif</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importNewFile">
|
||||
<source xml:lang="en">Import new file</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
160
resources/xlf/vscode-extensions/import.it.xlf
Normal file
160
resources/xlf/vscode-extensions/import.it.xlf
Normal file
@@ -0,0 +1,160 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<file original="extensions/import/out/wizard/pages/summaryPage" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importInformation">
|
||||
<source xml:lang="en">Import information</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importStatus">
|
||||
<source xml:lang="en">Import status</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serverName">
|
||||
<source xml:lang="en">Server name</source>
|
||||
<target state="translated">Nome del server</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">Nome del database</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableName">
|
||||
<source xml:lang="en">Table name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableSchema">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
<target state="translated">Schema della tabella</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileImport">
|
||||
<source xml:lang="en">File to be imported</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.success.norows">
|
||||
<source xml:lang="en">✔ You have successfully inserted the data into a table.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/prosePreviewPage" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.refresh">
|
||||
<source xml:lang="en">Refresh</source>
|
||||
<target state="translated">Aggiorna</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.prosePreviewMessage">
|
||||
<source xml:lang="en">This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/modifyColumnsPage" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.importData">
|
||||
<source xml:lang="en">Import Data</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.next">
|
||||
<source xml:lang="en">Next</source>
|
||||
<target state="translated">Avanti</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.columnName">
|
||||
<source xml:lang="en">Column Name</source>
|
||||
<target state="translated">Nome colonna</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.dataType">
|
||||
<source xml:lang="en">Data Type</source>
|
||||
<target state="translated">Tipo di dato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.primaryKey">
|
||||
<source xml:lang="en">Primary Key</source>
|
||||
<target state="translated">Chiave primaria</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.allowNulls">
|
||||
<source xml:lang="en">Allow Nulls</source>
|
||||
<target state="translated">Consenti valori Null</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/fileConfigPage" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.serverDropdownTitle">
|
||||
<source xml:lang="en">Server the database is in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseDropdownTitle">
|
||||
<source xml:lang="en">Database the table is created in</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.browseFiles">
|
||||
<source xml:lang="en">Browse</source>
|
||||
<target state="translated">Sfoglia</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.openFile">
|
||||
<source xml:lang="en">Open</source>
|
||||
<target state="translated">Apri</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.fileTextboxTitle">
|
||||
<source xml:lang="en">Location of the file to be imported</source>
|
||||
<target state="translated">Percorso del file da importare</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.tableTextboxTitle">
|
||||
<source xml:lang="en">New table name</source>
|
||||
<target state="translated">Nuovo nome di tabella</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.schemaTextboxTitle">
|
||||
<source xml:lang="en">Table schema</source>
|
||||
<target state="translated">Schema della tabella</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/telemetry" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="import.serviceCrashButton">
|
||||
<source xml:lang="en">Give Feedback</source>
|
||||
<target state="translated">Lascia un Feedback</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceCrashMessage">
|
||||
<source xml:lang="en">service component could not start</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/services/serviceClient" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="serviceStarted">
|
||||
<source xml:lang="en">Service Started</source>
|
||||
<target state="translated">Servizio avviato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceStarting">
|
||||
<source xml:lang="en">Starting service</source>
|
||||
<target state="translated">Avvio del servizio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.serviceStartFailed">
|
||||
<source xml:lang="en">Failed to start Import service{0}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingServiceDetailed">
|
||||
<source xml:lang="en">Installing {0} service to {1}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="installingService">
|
||||
<source xml:lang="en">Installing Service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="serviceInstalled">
|
||||
<source xml:lang="en">Installed</source>
|
||||
<target state="translated">Installato</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingService">
|
||||
<source xml:lang="en">Downloading {0}</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceStatus">
|
||||
<source xml:lang="en">Downloading Service</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceComplete">
|
||||
<source xml:lang="en">Done!</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/flatFileWizard" source-language="en" target-language="it" datatype="plaintext"><body>
|
||||
<trans-unit id="import.needConnection">
|
||||
<source xml:lang="en">Please connect to a server before using this wizard.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.wizardName">
|
||||
<source xml:lang="en">Import flat file wizard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page1Name">
|
||||
<source xml:lang="en">Specify Input File</source>
|
||||
<target state="translated">Specificare il File di Input</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page2Name">
|
||||
<source xml:lang="en">Preview Data</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page3Name">
|
||||
<source xml:lang="en">Modify Columns</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.page4Name">
|
||||
<source xml:lang="en">Summary</source>
|
||||
<target state="translated">Riepilogo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.importNewFile">
|
||||
<source xml:lang="en">Import new file</source>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
</xliff>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user