mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 11:01:37 -05:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84009f65ec | ||
|
|
191648df0a | ||
|
|
1265a56ff4 | ||
|
|
2171d44922 | ||
|
|
812f315e69 | ||
|
|
d48258a0fb | ||
|
|
8ec78f67af | ||
|
|
348b03327e | ||
|
|
6497bbcc38 | ||
|
|
a1abca26df |
24
.vscode/launch.json
vendored
24
.vscode/launch.json
vendored
@@ -92,30 +92,6 @@
|
||||
"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,27 +1,5 @@
|
||||
# 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,13 +9,12 @@ Azure Data Studio is a data management tool that enables you to work with SQL Se
|
||||
|
||||
Platform | Link
|
||||
-- | --
|
||||
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
|
||||
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
|
||||
|
||||
Go to our [download page](https://aka.ms/azuredatastudio) for more specific instructions.
|
||||
|
||||
@@ -63,10 +62,6 @@ 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,9 +34,5 @@ steps:
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: '**/test-results.xml'
|
||||
condition: succeededOrFailed()
|
||||
|
||||
- script: |
|
||||
yarn run tslint
|
||||
displayName: 'Run TSLint'
|
||||
testResultsFiles: '**/test-results.xml'
|
||||
condition: succeededOrFailed()
|
||||
@@ -23,8 +23,4 @@ steps:
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: 'test-results.xml'
|
||||
condition: succeededOrFailed()
|
||||
|
||||
- script: |
|
||||
yarn run tslint
|
||||
displayName: 'Run TSLint'
|
||||
condition: succeededOrFailed()
|
||||
@@ -17,12 +17,12 @@
|
||||
"configuration": [
|
||||
{
|
||||
"type": "object",
|
||||
"title": "%azure.resource.config.title%",
|
||||
"title": "%azure.config.title%",
|
||||
"properties": {
|
||||
"azure.resource.config.filter": {
|
||||
"azureResource.resourceFilter": {
|
||||
"type": "array",
|
||||
"default": null,
|
||||
"description": "%azure.resource.config.filter.description%"
|
||||
"description": "%azure.resourceFilter.description%"
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -61,48 +61,40 @@
|
||||
"category": "Azure Accounts"
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.refreshall",
|
||||
"title": "%azure.resource.refreshall.title%",
|
||||
"command": "azureresource.refreshall",
|
||||
"title": "%azureresource.refreshall%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/refresh_inverse.svg",
|
||||
"light": "resources/light/refresh.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.refresh",
|
||||
"title": "%azure.resource.refresh.title%",
|
||||
"command": "azureresource.refresh",
|
||||
"title": "%azureresource.refresh%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/refresh_inverse.svg",
|
||||
"light": "resources/light/refresh.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.signin",
|
||||
"title": "%azure.resource.signin.title%"
|
||||
"command": "azureresource.signin",
|
||||
"title": "%azureresource.signin%"
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.selectsubscriptions",
|
||||
"title": "%azure.resource.selectsubscriptions.title%",
|
||||
"command": "azureresource.connectsqldb",
|
||||
"title": "%azureresource.connectsqldb%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/connect_to_inverse.svg",
|
||||
"light": "resources/light/connect_to.svg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "azureresource.selectsubscriptions",
|
||||
"title": "%azureresource.selectsubscriptions%",
|
||||
"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": "azure.resource.connectsqldb",
|
||||
"title": "%azure.resource.connectsqldb.title%",
|
||||
"icon": {
|
||||
"dark": "resources/dark/connect_to_inverse.svg",
|
||||
"light": "resources/light/connect_to.svg"
|
||||
}
|
||||
}
|
||||
],
|
||||
"viewsContainers": {
|
||||
@@ -118,47 +110,46 @@
|
||||
"azureResource": [
|
||||
{
|
||||
"id": "azureResourceExplorer",
|
||||
"name": "%azure.resource.explorer.title%"
|
||||
"name": "%azure.resourceExplorer.title%"
|
||||
}
|
||||
]
|
||||
},
|
||||
"menus": {
|
||||
"view/title": [
|
||||
{
|
||||
"command": "azure.resource.refreshall",
|
||||
"command": "azureresource.refreshall",
|
||||
"when": "view == azureResourceExplorer",
|
||||
"group": "navigation@1"
|
||||
}
|
||||
],
|
||||
"view/item/context": [
|
||||
{
|
||||
"command": "azure.resource.selectsubscriptions",
|
||||
"when": "viewItem == azure.resource.itemType.account",
|
||||
"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}$/",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.refresh",
|
||||
"when": "viewItem =~ /^azure\\.resource\\.itemType\\.(?:account|subscription|databaseContainer|databaseServerContainer)$/",
|
||||
"command": "azureresource.selectsubscriptions",
|
||||
"when": "viewItem == azureResource.itemType.account",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.connectsqlserver",
|
||||
"when": "viewItem == azure.resource.itemType.databaseServer",
|
||||
"group": "inline"
|
||||
},
|
||||
{
|
||||
"command": "azure.resource.connectsqldb",
|
||||
"when": "viewItem == azure.resource.itemType.database",
|
||||
"command": "azureresource.refresh",
|
||||
"when": "viewItem =~ /^azureResource\\.itemType\\.(?:account|subscription|databaseContainer|databaseServerContainer)$/",
|
||||
"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": {
|
||||
@@ -166,7 +157,6 @@
|
||||
"@types/node": "^8.0.24",
|
||||
"mocha": "^5.2.0",
|
||||
"should": "^13.2.1",
|
||||
"vscode": "^1.1.26",
|
||||
"typemoq": "^2.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,16 @@
|
||||
{
|
||||
"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.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",
|
||||
|
||||
"azure.resourceExplorer.title": "Resource Explorer",
|
||||
"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",
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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,48 +6,35 @@
|
||||
'use strict';
|
||||
|
||||
import { window, QuickPickItem } from 'vscode';
|
||||
import { AzureResource } from 'sqlops';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import { AppContext } from '../appContext';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
import * as sqlops from 'sqlops';
|
||||
import { generateGuid } from './utils';
|
||||
import { ApiWrapper } from '../apiWrapper';
|
||||
import { TreeNode } from '../treeNodes';
|
||||
|
||||
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 { IAzureResourceSubscriptionService, IAzureResourceSubscriptionFilterService } from '../azureResource/interfaces';
|
||||
import { AzureResourceServiceNames } from './constants';
|
||||
import { AzureResourceServicePool } from './servicePool';
|
||||
import { AzureResourceSubscription } from './models';
|
||||
|
||||
export function registerAzureResourceCommands(appContext: AppContext, tree: AzureResourceTreeProvider): void {
|
||||
appContext.apiWrapper.registerCommand('azure.resource.selectsubscriptions', async (node?: TreeNode) => {
|
||||
export function registerAzureResourceCommands(apiWrapper: ApiWrapper, tree: AzureResourceTreeProvider): void {
|
||||
apiWrapper.registerCommand('azureresource.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 subscriptions = (await accountNode.getCachedSubscriptions()) || <azureResource.AzureResourceSubscription[]>[];
|
||||
if (subscriptions.length === 0) {
|
||||
try {
|
||||
const tokens = await this.servicePool.apiWrapper.getSecurityToken(this.account, AzureResource.ResourceManagement);
|
||||
const servicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
let selectedSubscriptions = (await subscriptionFilterService.getSelectedSubscriptions(accountNode.account)) || <azureResource.AzureResourceSubscription[]>[];
|
||||
const selectedSubscriptions = (await servicePool.subscriptionFilterService.getSelectedSubscriptions(accountNode.account)) || <AzureResourceSubscription[]>[];
|
||||
const selectedSubscriptionIds: string[] = [];
|
||||
if (selectedSubscriptions.length > 0) {
|
||||
selectedSubscriptionIds.push(...selectedSubscriptions.map((subscription) => subscription.id));
|
||||
@@ -56,11 +43,11 @@ export function registerAzureResourceCommands(appContext: AppContext, tree: Azur
|
||||
selectedSubscriptionIds.push(...subscriptions.map((subscription) => subscription.id));
|
||||
}
|
||||
|
||||
interface AzureResourceSubscriptionQuickPickItem extends QuickPickItem {
|
||||
subscription: azureResource.AzureResourceSubscription;
|
||||
interface SubscriptionQuickPickItem extends QuickPickItem {
|
||||
subscription: AzureResourceSubscription;
|
||||
}
|
||||
|
||||
const subscriptionQuickPickItems: AzureResourceSubscriptionQuickPickItem[] = subscriptions.map((subscription) => {
|
||||
const subscriptionItems: SubscriptionQuickPickItem[] = subscriptions.map((subscription) => {
|
||||
return {
|
||||
label: subscription.name,
|
||||
picked: selectedSubscriptionIds.indexOf(subscription.id) !== -1,
|
||||
@@ -68,22 +55,66 @@ export function registerAzureResourceCommands(appContext: AppContext, tree: Azur
|
||||
};
|
||||
});
|
||||
|
||||
const selectedSubscriptionQuickPickItems = (await window.showQuickPick(subscriptionQuickPickItems, { canPickMany: true }));
|
||||
if (selectedSubscriptionQuickPickItems && selectedSubscriptionQuickPickItems.length > 0) {
|
||||
const pickedSubscriptionItems = (await window.showQuickPick(subscriptionItems, { canPickMany: true }));
|
||||
if (pickedSubscriptionItems && pickedSubscriptionItems.length > 0) {
|
||||
tree.refresh(node, false);
|
||||
|
||||
selectedSubscriptions = selectedSubscriptionQuickPickItems.map((subscriptionItem) => subscriptionItem.subscription);
|
||||
await subscriptionFilterService.saveSelectedSubscriptions(accountNode.account, selectedSubscriptions);
|
||||
const pickedSubscriptions = pickedSubscriptionItems.map((subscriptionItem) => subscriptionItem.subscription);
|
||||
await servicePool.subscriptionFilterService.saveSelectedSubscriptions(accountNode.account, pickedSubscriptions);
|
||||
}
|
||||
});
|
||||
|
||||
appContext.apiWrapper.registerCommand('azure.resource.refreshall', () => tree.notifyNodeChanged(undefined));
|
||||
apiWrapper.registerCommand('azureresource.refreshall', () => tree.notifyNodeChanged(undefined));
|
||||
|
||||
appContext.apiWrapper.registerCommand('azure.resource.refresh', async (node?: TreeNode) => {
|
||||
apiWrapper.registerCommand('azureresource.refresh', async (node?: TreeNode) => {
|
||||
tree.refresh(node, true);
|
||||
});
|
||||
|
||||
appContext.apiWrapper.registerCommand('azure.resource.signin', async (node?: TreeNode) => {
|
||||
appContext.apiWrapper.executeCommand('sql.action.accounts.manageLinkedAccount');
|
||||
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');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -6,19 +6,11 @@
|
||||
'use strict';
|
||||
|
||||
export enum AzureResourceItemType {
|
||||
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'
|
||||
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'
|
||||
}
|
||||
|
||||
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 readonly innerError: Error
|
||||
public innerError: Error
|
||||
) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
@@ -6,40 +6,49 @@
|
||||
'use strict';
|
||||
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { Account, DidChangeAccountsParams } from 'sqlops';
|
||||
import * as sqlops from 'sqlops';
|
||||
import { Event } from 'vscode';
|
||||
|
||||
import { azureResource } from './azure-resource';
|
||||
import { AzureResourceSubscription, AzureResourceDatabaseServer, AzureResourceDatabase } from './models';
|
||||
|
||||
export interface IAzureResourceAccountService {
|
||||
getAccounts(): Promise<Account[]>;
|
||||
getAccounts(): Promise<sqlops.Account[]>;
|
||||
|
||||
readonly onDidChangeAccounts: Event<DidChangeAccountsParams>;
|
||||
readonly onDidChangeAccounts: Event<sqlops.DidChangeAccountsParams>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceCredentialService {
|
||||
getCredentials(account: sqlops.Account, resource: sqlops.AzureResource): Promise<ServiceClientCredentials[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceSubscriptionService {
|
||||
getSubscriptions(account: Account, credential: ServiceClientCredentials): Promise<azureResource.AzureResourceSubscription[]>;
|
||||
getSubscriptions(account: sqlops.Account, credentials: ServiceClientCredentials[]): Promise<AzureResourceSubscription[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceSubscriptionFilterService {
|
||||
getSelectedSubscriptions(account: Account): Promise<azureResource.AzureResourceSubscription[]>;
|
||||
getSelectedSubscriptions(account: sqlops.Account): Promise<AzureResourceSubscription[]>;
|
||||
|
||||
saveSelectedSubscriptions(account: Account, selectedSubscriptions: azureResource.AzureResourceSubscription[]): Promise<void>;
|
||||
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[]>;
|
||||
}
|
||||
|
||||
export interface IAzureResourceCacheService {
|
||||
generateKey(id: string): string;
|
||||
|
||||
get<T>(key: string): T | undefined;
|
||||
|
||||
update<T>(key: string, value: T): void;
|
||||
}
|
||||
|
||||
export interface IAzureResourceTenantService {
|
||||
getTenantId(subscription: azureResource.AzureResourceSubscription): Promise<string>;
|
||||
}
|
||||
export interface IAzureResourceContextService {
|
||||
getAbsolutePath(relativePath: string): string;
|
||||
|
||||
export interface IAzureResourceNodeWithProviderId {
|
||||
resourceProviderId: string;
|
||||
resourceNode: azureResource.IAzureResourceNode;
|
||||
}
|
||||
executeCommand(commandId: string, ...args: any[]): void;
|
||||
|
||||
showErrorMessage(errorMessage: string): void;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,21 @@
|
||||
|
||||
'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;
|
||||
}
|
||||
@@ -1,53 +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 { 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');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,37 +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 { 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;
|
||||
}
|
||||
@@ -1,41 +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 { 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;
|
||||
}
|
||||
}
|
||||
@@ -1,87 +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 { 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');
|
||||
}
|
||||
@@ -1,19 +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 { 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;
|
||||
}
|
||||
@@ -1,13 +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';
|
||||
|
||||
export interface AzureResourceDatabase {
|
||||
name: string;
|
||||
serverName: string;
|
||||
serverFullName: string;
|
||||
loginName: string;
|
||||
}
|
||||
@@ -1,53 +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 { 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');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,37 +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 { 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;
|
||||
}
|
||||
@@ -1,31 +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 { 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;
|
||||
}
|
||||
}
|
||||
@@ -1,87 +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 { 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');
|
||||
}
|
||||
@@ -1,19 +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 { 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;
|
||||
}
|
||||
@@ -1,129 +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 { 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();
|
||||
}
|
||||
@@ -1,79 +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 { 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.');
|
||||
}
|
||||
35
extensions/azurecore/src/azureResource/servicePool.ts
Normal file
35
extensions/azurecore/src/azureResource/servicePool.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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,30 +5,21 @@
|
||||
|
||||
'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(
|
||||
context: ExtensionContext
|
||||
public readonly context: ExtensionContext
|
||||
) {
|
||||
this._context = context;
|
||||
}
|
||||
|
||||
public generateKey(id: string): string {
|
||||
return `${AzureResourceCacheService.cacheKeyPrefix}.${id}`;
|
||||
}
|
||||
|
||||
public get<T>(key: string): T | undefined {
|
||||
return this._context.workspaceState.get(key);
|
||||
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';
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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]: azureResource.AzureResourceSubscription[]};
|
||||
selectedSubscriptions: { [accountId: string]: AzureResourceSubscription[]};
|
||||
}
|
||||
|
||||
export class AzureResourceSubscriptionFilterService implements IAzureResourceSubscriptionFilterService {
|
||||
@@ -20,14 +20,12 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
cacheService: IAzureResourceCacheService
|
||||
) {
|
||||
this._cacheService = cacheService;
|
||||
|
||||
this._cacheKey = this._cacheService.generateKey('selectedSubscriptions');
|
||||
}
|
||||
|
||||
public async getSelectedSubscriptions(account: Account): Promise<azureResource.AzureResourceSubscription[]> {
|
||||
let selectedSubscriptions: azureResource.AzureResourceSubscription[] = [];
|
||||
public async getSelectedSubscriptions(account: Account): Promise<AzureResourceSubscription[]> {
|
||||
let selectedSubscriptions: AzureResourceSubscription[] = [];
|
||||
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(this._cacheKey);
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(AzureResourceSubscriptionFilterService.CacheKey);
|
||||
if (cache) {
|
||||
selectedSubscriptions = cache.selectedSubscriptions[account.key.accountId];
|
||||
}
|
||||
@@ -35,10 +33,10 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
return selectedSubscriptions;
|
||||
}
|
||||
|
||||
public async saveSelectedSubscriptions(account: Account, selectedSubscriptions: azureResource.AzureResourceSubscription[]): Promise<void> {
|
||||
let selectedSubscriptionsCache: { [accountId: string]: azureResource.AzureResourceSubscription[]} = {};
|
||||
public async saveSelectedSubscriptions(account: Account, selectedSubscriptions: AzureResourceSubscription[]): Promise<void> {
|
||||
let selectedSubscriptionsCache: { [accountId: string]: AzureResourceSubscription[]} = {};
|
||||
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(this._cacheKey);
|
||||
const cache = this._cacheService.get<AzureResourceSelectedSubscriptionsCache>(AzureResourceSubscriptionFilterService.CacheKey);
|
||||
if (cache) {
|
||||
selectedSubscriptionsCache = cache.selectedSubscriptions;
|
||||
}
|
||||
@@ -49,14 +47,14 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
|
||||
selectedSubscriptionsCache[account.key.accountId] = selectedSubscriptions;
|
||||
|
||||
this._cacheService.update<AzureResourceSelectedSubscriptionsCache>(this._cacheKey, { selectedSubscriptions: selectedSubscriptionsCache });
|
||||
this._cacheService.update<AzureResourceSelectedSubscriptionsCache>(AzureResourceSubscriptionFilterService.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) {
|
||||
@@ -68,12 +66,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 = 'azure.resource.config.filter';
|
||||
private static readonly FilterConfigName = 'resourceFilter';
|
||||
private static readonly CacheKey = 'azureResource.cache.selectedSubscriptions';
|
||||
}
|
||||
|
||||
@@ -9,19 +9,24 @@ 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, 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
|
||||
}));
|
||||
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.
|
||||
}
|
||||
}
|
||||
|
||||
return subscriptions;
|
||||
}
|
||||
|
||||
@@ -1,32 +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 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: 'azure.resource.signin',
|
||||
title: AzureResourceAccountNotSignedInTreeNode.SignInLabel,
|
||||
command: 'azureresource.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('azure.resource.tree.accountNotSignedInTreeNode.signInLabel', 'Sign in to Azure ...');
|
||||
private static readonly SignInLabel = localize('azureResource.tree.accountNotSignedInTreeNode.signIn', 'Sign in to Azure ...');
|
||||
}
|
||||
|
||||
@@ -6,59 +6,44 @@
|
||||
'use strict';
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { Account, NodeInfo, AzureResource } from 'sqlops';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import { AppContext } from '../../appContext';
|
||||
import { Account, NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
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, AzureResourceServiceNames } from '../constants';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
import { AzureResourceSubscriptionTreeNode } from './subscriptionTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from '../messageTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeChangeHandler';
|
||||
import { IAzureResourceSubscriptionService, IAzureResourceSubscriptionFilterService, IAzureResourceTenantService } from '../../azureResource/interfaces';
|
||||
import { AzureResourceSubscription } from '../models';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeProvider';
|
||||
|
||||
export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly account: Account,
|
||||
appContext: AppContext,
|
||||
account: Account,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler
|
||||
) {
|
||||
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);
|
||||
super(account, treeChangeHandler, undefined);
|
||||
|
||||
this._id = `account_${this.account.key.accountId}`;
|
||||
this.setCacheKey(`${this._id}.subscriptions`);
|
||||
this._label = this.generateLabel();
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
try {
|
||||
let subscriptions: azureResource.AzureResourceSubscription[] = [];
|
||||
let subscriptions: AzureResourceSubscription[] = [];
|
||||
|
||||
if (this._isClearingCache) {
|
||||
try {
|
||||
const tokens = await this.appContext.apiWrapper.getSecurityToken(this.account, AzureResource.ResourceManagement);
|
||||
const credentials = await this.getCredentials();
|
||||
subscriptions = (await this.servicePool.subscriptionService.getSubscriptions(this.account, credentials)) || <AzureResourceSubscription[]>[];
|
||||
|
||||
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);
|
||||
let cache = this.getCache<AzureResourceSubscriptionsCache>();
|
||||
if (!cache) {
|
||||
cache = { subscriptions: { } };
|
||||
}
|
||||
|
||||
this.updateCache<azureResource.AzureResourceSubscription[]>(subscriptions);
|
||||
cache.subscriptions[this.account.key.accountId] = subscriptions;
|
||||
this.updateCache<AzureResourceSubscriptionsCache>(cache);
|
||||
|
||||
this._isClearingCache = false;
|
||||
} else {
|
||||
@@ -67,8 +52,8 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
||||
|
||||
this._totalSubscriptionCount = subscriptions.length;
|
||||
|
||||
const selectedSubscriptions = await this._subscriptionFilterService.getSelectedSubscriptions(this.account);
|
||||
const selectedSubscriptionIds = (selectedSubscriptions || <azureResource.AzureResourceSubscription[]>[]).map((subscription) => subscription.id);
|
||||
let selectedSubscriptions = await this.servicePool.subscriptionFilterService.getSelectedSubscriptions(this.account);
|
||||
let selectedSubscriptionIds = (selectedSubscriptions || <AzureResourceSubscription[]>[]).map((subscription) => subscription.id);
|
||||
if (selectedSubscriptionIds.length > 0) {
|
||||
subscriptions = subscriptions.filter((subscription) => selectedSubscriptionIds.indexOf(subscription.id) !== -1);
|
||||
this._selectedSubscriptionCount = selectedSubscriptionIds.length;
|
||||
@@ -80,36 +65,31 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
||||
this.refreshLabel();
|
||||
|
||||
if (subscriptions.length === 0) {
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceAccountTreeNode.noSubscriptionsLabel, this)];
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceAccountTreeNode.NoSubscriptions, this)];
|
||||
} else {
|
||||
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);
|
||||
}));
|
||||
return subscriptions.map((subscription) => new AzureResourceSubscriptionTreeNode(subscription, this.account, this.treeChangeHandler, this));
|
||||
}
|
||||
} catch (error) {
|
||||
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)];
|
||||
}
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||
}
|
||||
}
|
||||
|
||||
public async getCachedSubscriptions(): Promise<azureResource.AzureResourceSubscription[]> {
|
||||
return this.getCache<azureResource.AzureResourceSubscription[]>();
|
||||
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 getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
const item = new TreeItem(this._label, TreeItemCollapsibleState.Collapsed);
|
||||
let item = new TreeItem(this._label, TreeItemCollapsibleState.Collapsed);
|
||||
item.id = this._id;
|
||||
item.contextValue = AzureResourceItemType.account;
|
||||
item.iconPath = {
|
||||
dark: this.appContext.extensionContext.asAbsolutePath('resources/dark/account_inverse.svg'),
|
||||
light: this.appContext.extensionContext.asAbsolutePath('resources/light/account.svg')
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/account_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/account.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
@@ -148,6 +128,10 @@ 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})`;
|
||||
|
||||
@@ -158,14 +142,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 noSubscriptionsLabel = localize('azure.resource.tree.accountTreeNode.noSubscriptionsLabel', 'No Subscriptions found.');
|
||||
}
|
||||
private static readonly NoSubscriptions = localize('azureResource.tree.accountTreeNode.noSubscriptions', 'No Subscriptions found.');
|
||||
}
|
||||
|
||||
interface AzureResourceSubscriptionsCache {
|
||||
subscriptions: { [accountId: string]: AzureResourceSubscription[] };
|
||||
}
|
||||
|
||||
@@ -5,16 +5,16 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { AppContext } from '../../appContext';
|
||||
import * as sqlops from 'sqlops';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { AzureResourceServicePool } from '../servicePool';
|
||||
import { AzureResourceCredentialError } from '../errors';
|
||||
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(
|
||||
appContext: AppContext,
|
||||
public readonly account: sqlops.Account,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(appContext, treeChangeHandler, parent);
|
||||
|
||||
this._cacheService = this.appContext.getService<IAzureResourceCacheService>(AzureResourceServiceNames.cacheService);
|
||||
super(treeChangeHandler, parent);
|
||||
}
|
||||
|
||||
public clearCache(): void {
|
||||
@@ -43,19 +43,29 @@ export abstract class AzureResourceContainerTreeNodeBase extends AzureResourceTr
|
||||
return this._isClearingCache;
|
||||
}
|
||||
|
||||
protected setCacheKey(id: string): void {
|
||||
this._cacheKey = this._cacheService.generateKey(id);
|
||||
}
|
||||
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 updateCache<T>(cache: T): void {
|
||||
this._cacheService.update<T>(this._cacheKey, cache);
|
||||
this.servicePool.cacheService.update<T>(this.cacheKey, cache);
|
||||
}
|
||||
|
||||
protected getCache<T>(): T {
|
||||
return this._cacheService.get<T>(this._cacheKey);
|
||||
return this.servicePool.cacheService.get<T>(this.cacheKey);
|
||||
}
|
||||
|
||||
protected abstract get cacheKey(): string;
|
||||
|
||||
protected _isClearingCache = true;
|
||||
private _cacheService: IAzureResourceCacheService = undefined;
|
||||
private _cacheKey: string = undefined;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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[] };
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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[] };
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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}`;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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,9 +7,9 @@
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { NodeInfo } from 'sqlops';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
import { TreeNode } from './treeNode';
|
||||
import { AzureResourceItemType } from './constants';
|
||||
import { AzureResourceItemType } from '../constants';
|
||||
|
||||
export class AzureResourceMessageTreeNode extends TreeNode {
|
||||
public constructor(
|
||||
@@ -7,66 +7,38 @@
|
||||
|
||||
import { TreeItem, TreeItemCollapsibleState } from 'vscode';
|
||||
import { Account, NodeInfo } from 'sqlops';
|
||||
import { AppContext } from '../../appContext';
|
||||
import * as nls from 'vscode-nls';
|
||||
const localize = nls.loadMessageBundle();
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
import { azureResource } from '../azure-resource';
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { IAzureResourceNodeWithProviderId } from '../interfaces';
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceTreeNodeBase, 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 AzureResourceContainerTreeNodeBase {
|
||||
export class AzureResourceSubscriptionTreeNode extends AzureResourceTreeNodeBase {
|
||||
public constructor(
|
||||
public readonly account: Account,
|
||||
public readonly subscription: azureResource.AzureResourceSubscription,
|
||||
public readonly tenatId: string,
|
||||
appContext: AppContext,
|
||||
public readonly subscription: AzureResourceSubscription,
|
||||
account: Account,
|
||||
treeChangeHandler: IAzureResourceTreeChangeHandler,
|
||||
parent: TreeNode
|
||||
) {
|
||||
super(appContext, treeChangeHandler, parent);
|
||||
super(treeChangeHandler, parent);
|
||||
|
||||
this._id = `account_${this.account.key.accountId}.subscription_${this.subscription.id}.tenant_${this.tenatId}`;
|
||||
this.setCacheKey(`${this._id}.resources`);
|
||||
this._children.push(new AzureResourceDatabaseContainerTreeNode(subscription, account, treeChangeHandler, this));
|
||||
this._children.push(new AzureResourceDatabaseServerContainerTreeNode(subscription, account, treeChangeHandler, this));
|
||||
}
|
||||
|
||||
public async getChildren(): Promise<TreeNode[]> {
|
||||
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)];
|
||||
}
|
||||
return this._children;
|
||||
}
|
||||
|
||||
public getTreeItem(): TreeItem | Promise<TreeItem> {
|
||||
const item = new TreeItem(this.subscription.name, TreeItemCollapsibleState.Collapsed);
|
||||
let item = new TreeItem(this.subscription.name, TreeItemCollapsibleState.Collapsed);
|
||||
item.contextValue = AzureResourceItemType.subscription;
|
||||
item.iconPath = {
|
||||
dark: this.appContext.extensionContext.asAbsolutePath('resources/dark/subscription_inverse.svg'),
|
||||
light: this.appContext.extensionContext.asAbsolutePath('resources/light/subscription.svg')
|
||||
dark: this.servicePool.contextService.getAbsolutePath('resources/dark/subscription_inverse.svg'),
|
||||
light: this.servicePool.contextService.getAbsolutePath('resources/light/subscription.svg')
|
||||
};
|
||||
return item;
|
||||
}
|
||||
@@ -86,10 +58,8 @@ export class AzureResourceSubscriptionTreeNode extends AzureResourceContainerTre
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return this._id;
|
||||
return `subscription_${this.subscription.id}`;
|
||||
}
|
||||
|
||||
private _id: string = undefined;
|
||||
|
||||
private static readonly noResourcesLabel = localize('azure.resource.tree.subscriptionTreeNode.noResourcesLabel', 'No Resources found.');
|
||||
private _children: AzureResourceContainerTreeNodeBase[] = [];
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
import { TreeNode } from '../treeNode';
|
||||
import { TreeNode } from '../../treeNodes';
|
||||
|
||||
export interface IAzureResourceTreeChangeHandler {
|
||||
notifyNodeChanged(node: TreeNode): void;
|
||||
|
||||
@@ -6,25 +6,26 @@
|
||||
'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 { TreeNode } from '../treeNode';
|
||||
import { AzureResourceServicePool } from '../servicePool';
|
||||
import { AzureResourceAccountTreeNode } from './accountTreeNode';
|
||||
import { AzureResourceAccountNotSignedInTreeNode } from './accountNotSignedInTreeNode';
|
||||
import { AzureResourceMessageTreeNode } from '../messageTreeNode';
|
||||
import { AzureResourceContainerTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceMessageTreeNode } from './messageTreeNode';
|
||||
import { AzureResourceContainerTreeNodeBase, AzureResourceTreeNodeBase } from './baseTreeNodes';
|
||||
import { AzureResourceErrorMessageUtil } from '../utils';
|
||||
import { IAzureResourceTreeChangeHandler } from './treeChangeHandler';
|
||||
import { IAzureResourceAccountService } from '../../azureResource/interfaces';
|
||||
import { AzureResourceServiceNames } from '../constants';
|
||||
|
||||
export interface IAzureResourceTreeChangeHandler {
|
||||
notifyNodeChanged(node: TreeNode): void;
|
||||
}
|
||||
|
||||
export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IAzureResourceTreeChangeHandler {
|
||||
public constructor(
|
||||
public readonly appContext: AppContext
|
||||
) {
|
||||
public constructor() {
|
||||
AzureResourceServicePool.getInstance().accountService.onDidChangeAccounts((e: DidChangeAccountsParams) => { this._onDidChangeTreeData.fire(undefined); });
|
||||
}
|
||||
|
||||
public async getChildren(element?: TreeNode): Promise<TreeNode[]> {
|
||||
@@ -36,7 +37,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 this.appContext.getService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService).getAccounts();
|
||||
await AzureResourceServicePool.getInstance().accountService.getAccounts();
|
||||
|
||||
// System has been initialized
|
||||
this.isSystemInitialized = true;
|
||||
@@ -50,16 +51,16 @@ export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IA
|
||||
// System not initialized yet
|
||||
this.isSystemInitialized = false;
|
||||
}
|
||||
}, AzureResourceTreeProvider.loadingTimerInterval);
|
||||
}, AzureResourceTreeProvider.LoadingTimerInterval);
|
||||
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceTreeProvider.loadingLabel, undefined)];
|
||||
return [AzureResourceMessageTreeNode.create(AzureResourceTreeProvider.Loading, undefined)];
|
||||
}
|
||||
|
||||
try {
|
||||
const accounts = await this.appContext.getService<IAzureResourceAccountService>(AzureResourceServiceNames.accountService).getAccounts();
|
||||
const accounts = await AzureResourceServicePool.getInstance().accountService.getAccounts();
|
||||
|
||||
if (accounts && accounts.length > 0) {
|
||||
return accounts.map((account) => new AzureResourceAccountTreeNode(account, this.appContext, this));
|
||||
return accounts.map((account) => new AzureResourceAccountTreeNode(account, this));
|
||||
} else {
|
||||
return [new AzureResourceAccountNotSignedInTreeNode()];
|
||||
}
|
||||
@@ -95,6 +96,6 @@ export class AzureResourceTreeProvider implements TreeDataProvider<TreeNode>, IA
|
||||
private _loadingTimer: NodeJS.Timer = undefined;
|
||||
private _onDidChangeTreeData = new EventEmitter<TreeNode>();
|
||||
|
||||
private static readonly loadingLabel = localize('azure.resource.tree.treeProvider.loadingLabel', 'Loading ...');
|
||||
private static readonly loadingTimerInterval = 5000;
|
||||
private static readonly Loading = localize('azureResource.tree.treeProvider.loading', 'Loading ...');
|
||||
private static readonly LoadingTimerInterval = 5000;
|
||||
}
|
||||
|
||||
@@ -12,9 +12,10 @@ 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('azure.resource.error', 'Error: {0}', getErrorMessage(error));
|
||||
return localize('azureResource.error', 'Error: {0}', getErrorMessage(error));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,53 +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 { 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 {
|
||||
}
|
||||
}
|
||||
54
extensions/azurecore/src/controllers/mainController.ts
Normal file
54
extensions/azurecore/src/controllers/mainController.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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,17 +6,12 @@ import * as path from 'path';
|
||||
import * as os from 'os';
|
||||
import * as constants from './constants';
|
||||
|
||||
import AzureResourceController from './controllers/azureResourceController';
|
||||
import MainController from './controllers/mainController';
|
||||
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[] = [];
|
||||
|
||||
|
||||
@@ -40,8 +35,7 @@ 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) {
|
||||
const apiWrapper = new ApiWrapper();
|
||||
let appContext = new AppContext(extensionContext, apiWrapper);
|
||||
let appContext = new AppContext(extensionContext, new ApiWrapper());
|
||||
let activations: Thenable<boolean>[] = [];
|
||||
|
||||
// Create the folder for storing the token caches
|
||||
@@ -62,19 +56,21 @@ export function activate(extensionContext: vscode.ExtensionContext) {
|
||||
extensionContext.subscriptions.push(accountProviderService);
|
||||
accountProviderService.activate();
|
||||
|
||||
const azureResourceController = new AzureResourceController(appContext);
|
||||
controllers.push(azureResourceController);
|
||||
extensionContext.subscriptions.push(azureResourceController);
|
||||
activations.push(azureResourceController.activate());
|
||||
// Start the main controller
|
||||
let mainController = new MainController(appContext);
|
||||
controllers.push(mainController);
|
||||
extensionContext.subscriptions.push(mainController);
|
||||
activations.push(mainController.activate());
|
||||
|
||||
return {
|
||||
provideResources() {
|
||||
return [
|
||||
new AzureResourceDatabaseServerProvider(new AzureResourceDatabaseServerService(), apiWrapper, extensionContext),
|
||||
new AzureResourceDatabaseProvider(new AzureResourceDatabaseService(), apiWrapper, extensionContext)
|
||||
];
|
||||
}
|
||||
};
|
||||
return Promise.all(activations)
|
||||
.then((results: boolean[]) => {
|
||||
for (let result of results) {
|
||||
if (!result) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
// this method is called when your extension is deactivated
|
||||
|
||||
@@ -1,150 +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 { 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1,150 +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 { 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);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1,180 +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 '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();
|
||||
});
|
||||
});
|
||||
@@ -1,184 +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 { 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('azure.resource.signin');
|
||||
should(treeItem.command.command).equal('azureresource.signin');
|
||||
|
||||
const nodeInfo = treeNode.getNodeInfo();
|
||||
should(nodeInfo.isLeaf).true();
|
||||
|
||||
@@ -10,38 +10,35 @@ import * as TypeMoq from 'typemoq';
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as vscode from 'vscode';
|
||||
import 'mocha';
|
||||
import { TokenCredentials } from 'ms-rest';
|
||||
import { AppContext } from '../../../appContext';
|
||||
import { ServiceClientCredentials } from 'ms-rest';
|
||||
|
||||
import { azureResource } from '../../../azureResource/azure-resource';
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import {
|
||||
IAzureResourceCacheService,
|
||||
IAzureResourceContextService,
|
||||
IAzureResourceCredentialService,
|
||||
IAzureResourceSubscriptionService,
|
||||
IAzureResourceSubscriptionFilterService,
|
||||
IAzureResourceTenantService
|
||||
IAzureResourceSubscriptionFilterService
|
||||
} 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, AzureResourceServiceNames } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/messageTreeNode';
|
||||
import { ApiWrapper } from '../../../apiWrapper';
|
||||
import { generateGuid } from '../../../azureResource/utils';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
|
||||
// Mock services
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
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',
|
||||
@@ -52,68 +49,51 @@ const mockAccount: sqlops.Account = {
|
||||
accountType: 'Microsoft',
|
||||
contextualDisplayName: 'test'
|
||||
},
|
||||
properties: {
|
||||
tenants: [
|
||||
{
|
||||
id: mockTenantId
|
||||
}
|
||||
]
|
||||
},
|
||||
properties: undefined,
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription1: azureResource.AzureResourceSubscription = {
|
||||
const mockCredential = TypeMoq.Mock.ofType<ServiceClientCredentials>().object;
|
||||
const mockCredentials = [mockCredential];
|
||||
|
||||
const mockSubscription1: AzureResourceSubscription = {
|
||||
id: 'mock_subscription_1',
|
||||
name: 'mock subscription 1'
|
||||
};
|
||||
|
||||
const mockSubscription2: azureResource.AzureResourceSubscription = {
|
||||
const mockSubscription2: AzureResourceSubscription = {
|
||||
id: 'mock_subscription_2',
|
||||
name: 'mock subscription 2'
|
||||
};
|
||||
|
||||
const mockSubscriptions = [mockSubscription1, mockSubscription2];
|
||||
|
||||
const mockFilteredSubscriptions = [mockSubscription1];
|
||||
|
||||
const mockTokens = {};
|
||||
mockTokens[mockTenantId] = {
|
||||
token: 'mock_token',
|
||||
tokenType: 'Bearer'
|
||||
};
|
||||
|
||||
const mockCredential = new TokenCredentials(mockTokens[mockTenantId].token, mockTokens[mockTenantId].tokenType);
|
||||
|
||||
let mockSubscriptionCache: azureResource.AzureResourceSubscription[] = [];
|
||||
let mockSubscriptionCache: { subscriptions: { [accountId: string]: AzureResourceSubscription[]} };
|
||||
|
||||
describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
beforeEach(() => {
|
||||
mockExtensionContext = TypeMoq.Mock.ofType<vscode.ExtensionContext>();
|
||||
mockApiWrapper = TypeMoq.Mock.ofType<ApiWrapper>();
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
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 = [];
|
||||
mockSubscriptionCache = { subscriptions: {} };
|
||||
|
||||
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);
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
mockServicePool.cacheService = mockCacheService.object;
|
||||
mockServicePool.credentialService = mockCredentialService.object;
|
||||
mockServicePool.subscriptionService = mockSubscriptionService.object;
|
||||
mockServicePool.subscriptionFilterService = mockSubscriptionFilterService.object;
|
||||
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
mockCredentialService.setup((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockCredentials));
|
||||
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));
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache.subscriptions[mockAccount.key.accountId] = mockSubscriptions);
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const accountTreeNodeId = `account_${mockAccount.key.accountId}`;
|
||||
const accountTreeNodeLabel = `${mockAccount.displayInfo.displayName} (${mockAccount.key.accountId})`;
|
||||
@@ -134,17 +114,14 @@ describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
});
|
||||
|
||||
it('Should be correct when there are subscriptions listed.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).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, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const subscriptionNodes = await accountTreeNode.getChildren();
|
||||
|
||||
should(subscriptionNodes).Array();
|
||||
should(subscriptionNodes.length).equal(mockSubscriptions.length);
|
||||
await accountTreeNode.getChildren();
|
||||
|
||||
const treeItem = await accountTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(accountTreeNodeLabel);
|
||||
@@ -154,17 +131,14 @@ describe('AzureResourceAccountTreeNode.info', function(): void {
|
||||
});
|
||||
|
||||
it('Should be correct when there are subscriptions filtered.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).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, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const subscriptionNodes = await accountTreeNode.getChildren();
|
||||
|
||||
should(subscriptionNodes).Array();
|
||||
should(subscriptionNodes.length).equal(mockFilteredSubscriptions.length);
|
||||
await accountTreeNode.getChildren();
|
||||
|
||||
const treeItem = await accountTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(accountTreeNodeLabel);
|
||||
@@ -176,41 +150,36 @@ 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 = [];
|
||||
mockSubscriptionCache = { subscriptions: {} };
|
||||
|
||||
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);
|
||||
mockServicePool.cacheService = mockCacheService.object;
|
||||
mockServicePool.credentialService = mockCredentialService.object;
|
||||
mockServicePool.subscriptionService = mockSubscriptionService.object;
|
||||
mockServicePool.subscriptionFilterService = mockSubscriptionFilterService.object;
|
||||
|
||||
mockApiWrapper.setup((o) => o.getSecurityToken(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockTokens));
|
||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||
mockCredentialService.setup((o) => o.getCredentials(mockAccount, sqlops.AzureResource.ResourceManagement)).returns(() => Promise.resolve(mockCredentials));
|
||||
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));
|
||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache.subscriptions[mockAccount.key.accountId] = mockSubscriptions);
|
||||
});
|
||||
|
||||
it('Should load subscriptions from scratch and update cache when it is clearing cache.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve([]));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
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));
|
||||
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());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
mockSubscriptionFilterService.verify((o) => o.getSelectedSubscriptions(mockAccount), TypeMoq.Times.once());
|
||||
|
||||
@@ -223,42 +192,43 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
should(children).Array();
|
||||
should(children.length).equal(mockSubscriptions.length);
|
||||
|
||||
should(mockSubscriptionCache).deepEqual(mockSubscriptions);
|
||||
should(Object.keys(mockSubscriptionCache.subscriptions)).deepEqual([mockAccount.key.accountId]);
|
||||
should(mockSubscriptionCache.subscriptions[mockAccount.key.accountId]).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(`account_${mockAccount.key.accountId}.subscription_${subscription.id}.tenant_${mockTenantId}`);
|
||||
should(child.nodePathValue).equal(`subscription_${subscription.id}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should load subscriptions from cache when it is not clearing cache.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
await accountTreeNode.getChildren();
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
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());
|
||||
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));
|
||||
|
||||
should(children.length).equal(mockSubscriptionCache.length);
|
||||
should(children.length).equal(mockSubscriptionCache.subscriptions[mockAccount.key.accountId].length);
|
||||
|
||||
for (let ix = 0; ix < mockSubscriptionCache.length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${mockSubscriptionCache[ix].id}.tenant_${mockTenantId}`);
|
||||
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}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should handle when there is no subscriptions.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(undefined));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(undefined));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
@@ -272,10 +242,10 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
});
|
||||
|
||||
it('Should honor subscription filtering.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => Promise.resolve(mockFilteredSubscriptions));
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
@@ -285,25 +255,23 @@ describe('AzureResourceAccountTreeNode.getChildren', function(): void {
|
||||
should(children.length).equal(mockFilteredSubscriptions.length);
|
||||
|
||||
for (let ix = 0; ix < mockFilteredSubscriptions.length; ix++) {
|
||||
should(children[ix].nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${mockFilteredSubscriptions[ix].id}.tenant_${mockTenantId}`);
|
||||
should(children[ix].nodePathValue).equal(`subscription_${mockFilteredSubscriptions[ix].id}`);
|
||||
}
|
||||
});
|
||||
|
||||
it('Should handle errors.', async function(): Promise<void> {
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredential)).returns(() => Promise.resolve(mockSubscriptions));
|
||||
|
||||
const mockError = 'Test error';
|
||||
mockSubscriptionFilterService.setup((o) => o.getSelectedSubscriptions(mockAccount)).returns(() => { throw new Error(mockError); });
|
||||
mockSubscriptionService.setup((o) => o.getSubscriptions(mockAccount, mockCredentials)).returns(() => { throw new Error(mockError); });
|
||||
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
|
||||
const children = await accountTreeNode.getChildren();
|
||||
|
||||
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());
|
||||
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.never());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||
mockCacheService.verify((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny()), TypeMoq.Times.never());
|
||||
mockSubscriptionFilterService.verify((o) => o.getSelectedSubscriptions(mockAccount), TypeMoq.Times.never());
|
||||
|
||||
should(children).Array();
|
||||
should(children.length).equal(1);
|
||||
@@ -315,33 +283,12 @@ 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, mockAppContext, mockTreeChangeHandler.object);
|
||||
const accountTreeNode = new AzureResourceAccountTreeNode(mockAccount, mockTreeChangeHandler.object);
|
||||
accountTreeNode.clearCache();
|
||||
should(accountTreeNode.isClearingCache).true();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,219 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* 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);
|
||||
});
|
||||
});
|
||||
@@ -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/messageTreeNode';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
|
||||
describe('AzureResourceMessageTreeNode.info', function(): void {
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
@@ -10,24 +10,20 @@ 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 { azureResource } from '../../../azureResource/azure-resource';
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { IAzureResourceContextService } from '../../../azureResource/interfaces';
|
||||
import { IAzureResourceTreeChangeHandler } from '../../../azureResource/tree/treeChangeHandler';
|
||||
import { AzureResourceSubscription } from '../../../azureResource/models';
|
||||
import { AzureResourceSubscriptionTreeNode } from '../../../azureResource/tree/subscriptionTreeNode';
|
||||
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';
|
||||
import { AzureResourceDatabaseContainerTreeNode } from '../../../azureResource/tree/databaseContainerTreeNode';
|
||||
import { AzureResourceDatabaseServerContainerTreeNode } from '../../../azureResource/tree/databaseServerContainerTreeNode';
|
||||
import { AzureResourceItemType } from '../../../azureResource/constants';
|
||||
|
||||
// Mock services
|
||||
let mockAppContext: AppContext;
|
||||
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 mockTreeChangeHandler: TypeMoq.IMock<IAzureResourceTreeChangeHandler>;
|
||||
|
||||
@@ -46,60 +42,24 @@ const mockAccount: sqlops.Account = {
|
||||
isStale: false
|
||||
};
|
||||
|
||||
const mockSubscription: azureResource.AzureResourceSubscription = {
|
||||
const mockSubscription: 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(() => {
|
||||
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());
|
||||
mockContextService = TypeMoq.Mock.ofType<IAzureResourceContextService>();
|
||||
|
||||
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;
|
||||
mockServicePool.contextService = mockContextService.object;
|
||||
});
|
||||
|
||||
it('Should be correct when created.', async function(): Promise<void> {
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockAccount, mockSubscription, mockTenantId, mockAppContext, mockTreeChangeHandler.object, undefined);
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockSubscription, mockAccount, mockTreeChangeHandler.object, undefined);
|
||||
|
||||
should(subscriptionTreeNode.nodePathValue).equal(`account_${mockAccount.key.accountId}.subscription_${mockSubscription.id}.tenant_${mockTenantId}`);
|
||||
should(subscriptionTreeNode.nodePathValue).equal(`subscription_${mockSubscription.id}`);
|
||||
|
||||
const treeItem = await subscriptionTreeNode.getTreeItem();
|
||||
should(treeItem.label).equal(mockSubscription.name);
|
||||
@@ -116,52 +76,16 @@ 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 return resource containers.', async function(): Promise<void> {
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockAccount, mockSubscription, mockTenantId, mockAppContext, mockTreeChangeHandler.object, undefined);
|
||||
it('Should load database containers.', async function(): Promise<void> {
|
||||
const subscriptionTreeNode = new AzureResourceSubscriptionTreeNode(mockSubscription, mockAccount, 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(expectedChildren.length);
|
||||
for (const child of children) {
|
||||
should(child).instanceOf(AzureResourceResourceTreeNode);
|
||||
}
|
||||
should(children.length).equal(2);
|
||||
should(children[0]).instanceof(AzureResourceDatabaseContainerTreeNode);
|
||||
should(children[1]).instanceof(AzureResourceDatabaseServerContainerTreeNode);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5,28 +5,21 @@
|
||||
|
||||
'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 { IAzureResourceCacheService, IAzureResourceAccountService } from '../../../azureResource/interfaces';
|
||||
import { AzureResourceServicePool } from '../../../azureResource/servicePool';
|
||||
import { 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/messageTreeNode';
|
||||
import { AzureResourceServiceNames } from '../../../azureResource/constants';
|
||||
import { generateGuid } from '../../../azureResource/utils';
|
||||
import { AzureResourceMessageTreeNode } from '../../../azureResource/tree/messageTreeNode';
|
||||
|
||||
// Mock services
|
||||
let mockAppContext: AppContext;
|
||||
const mockServicePool = AzureResourceServicePool.getInstance();
|
||||
|
||||
let mockExtensionContext: TypeMoq.IMock<vscode.ExtensionContext>;
|
||||
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||
let mockCacheService: TypeMoq.IMock<IAzureResourceCacheService>;
|
||||
let mockAccountService: TypeMoq.IMock<IAzureResourceAccountService>;
|
||||
|
||||
// Mock test data
|
||||
@@ -60,23 +53,15 @@ 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>();
|
||||
|
||||
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());
|
||||
mockServicePool.accountService = mockAccountService.object;
|
||||
});
|
||||
|
||||
it('Should load accounts.', async function(): Promise<void> {
|
||||
mockAccountService.setup((o) => o.getAccounts()).returns(() => Promise.resolve(mockAccounts));
|
||||
|
||||
const treeProvider = new AzureResourceTreeProvider(mockAppContext);
|
||||
const treeProvider = new AzureResourceTreeProvider();
|
||||
treeProvider.isSystemInitialized = true;
|
||||
|
||||
const children = await treeProvider.getChildren(undefined);
|
||||
@@ -98,7 +83,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(mockAppContext);
|
||||
const treeProvider = new AzureResourceTreeProvider();
|
||||
treeProvider.isSystemInitialized = true;
|
||||
|
||||
const children = await treeProvider.getChildren(undefined);
|
||||
@@ -112,7 +97,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(mockAppContext);
|
||||
const treeProvider = new AzureResourceTreeProvider();
|
||||
treeProvider.isSystemInitialized = true;
|
||||
|
||||
const children = await treeProvider.getChildren(undefined);
|
||||
|
||||
@@ -11,6 +11,16 @@ 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) {
|
||||
@@ -55,23 +65,13 @@ 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;
|
||||
|
||||
private _parent: TreeNode = undefined;
|
||||
abstract getChildren(refreshChildren: boolean): TreeNode[] | Promise<TreeNode[]>;
|
||||
abstract getTreeItem(): vscode.TreeItem | Promise<vscode.TreeItem>;
|
||||
|
||||
abstract getNodeInfo(): sqlops.NodeInfo;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -67,7 +67,7 @@
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.11",
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.10",
|
||||
"opener": "^1.4.3",
|
||||
"service-downloader": "github:anthonydresser/service-downloader#0.1.5",
|
||||
"vscode-extension-telemetry": "0.0.18",
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
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"
|
||||
@@ -19,10 +21,12 @@ 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"
|
||||
@@ -30,10 +34,12 @@ 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"
|
||||
@@ -41,14 +47,17 @@ 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"
|
||||
@@ -57,34 +66,39 @@ 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.11":
|
||||
version "0.2.11"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/bc80d2226699d23f45a2ec26129cbcdee4781ca9"
|
||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.10":
|
||||
version "0.2.10"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/4de3f7caf0eba54159911b977ddb4f5d7c0a9ca8"
|
||||
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"
|
||||
@@ -93,6 +107,7 @@ 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"
|
||||
@@ -103,6 +118,7 @@ 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"
|
||||
@@ -111,6 +127,7 @@ 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"
|
||||
@@ -120,6 +137,7 @@ 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"
|
||||
@@ -133,58 +151,70 @@ 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"
|
||||
@@ -192,14 +222,17 @@ 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"
|
||||
@@ -207,6 +240,7 @@ 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"
|
||||
@@ -214,94 +248,115 @@ 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"
|
||||
@@ -314,16 +369,19 @@ 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"
|
||||
@@ -339,18 +397,21 @@ 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"
|
||||
@@ -363,20 +424,24 @@ 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"
|
||||
@@ -384,26 +449,31 @@ 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"
|
||||
@@ -411,22 +481,27 @@ 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"
|
||||
@@ -434,3 +509,4 @@ 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.11",
|
||||
"dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.10",
|
||||
"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.65",
|
||||
"version": "1.5.0-alpha.63",
|
||||
"downloadFileNames": {
|
||||
"Windows_86": "win-x86-netcoreapp2.2.zip",
|
||||
"Windows_64": "win-x64-netcoreapp2.2.zip",
|
||||
|
||||
@@ -5,12 +5,14 @@
|
||||
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"
|
||||
@@ -19,10 +21,12 @@ 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"
|
||||
@@ -30,10 +34,12 @@ 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"
|
||||
@@ -41,14 +47,17 @@ 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"
|
||||
@@ -57,34 +66,39 @@ 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.11":
|
||||
version "0.2.11"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/bc80d2226699d23f45a2ec26129cbcdee4781ca9"
|
||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.2.10":
|
||||
version "0.2.10"
|
||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/4de3f7caf0eba54159911b977ddb4f5d7c0a9ca8"
|
||||
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"
|
||||
@@ -93,6 +107,7 @@ 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"
|
||||
@@ -103,6 +118,7 @@ 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"
|
||||
@@ -111,6 +127,7 @@ 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"
|
||||
@@ -120,6 +137,7 @@ 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"
|
||||
@@ -133,58 +151,70 @@ 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"
|
||||
@@ -192,14 +222,17 @@ 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"
|
||||
@@ -207,6 +240,7 @@ 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"
|
||||
@@ -214,94 +248,115 @@ 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"
|
||||
@@ -314,16 +369,19 @@ 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"
|
||||
@@ -339,18 +397,21 @@ 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"
|
||||
@@ -363,20 +424,24 @@ 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"
|
||||
@@ -384,26 +449,31 @@ 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"
|
||||
@@ -411,18 +481,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=
|
||||
|
||||
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"
|
||||
@@ -430,3 +504,4 @@ 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,11 +21,6 @@
|
||||
"type": "boolean",
|
||||
"default": true,
|
||||
"description": "%notebook.enabled.description%"
|
||||
},
|
||||
"notebook.pythonPath": {
|
||||
"type": "string",
|
||||
"default": "",
|
||||
"description": "%notebook.pythonPath.description%"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"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.4.2",
|
||||
"version": "1.3.8",
|
||||
"distro": "8c3e97e3425cc9814496472ab73e076de2ba99ee",
|
||||
"author": {
|
||||
"name": "Microsoft Corporation"
|
||||
@@ -23,8 +23,7 @@
|
||||
"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",
|
||||
"tslint": "node node_modules/tslint/bin/tslint -c tslint-gci.json -p src/tsconfig.json"
|
||||
"check-monaco-editor-compilation": "tsc -p src/tsconfig.monaco.json --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@angular/animations": "~4.1.3",
|
||||
@@ -155,7 +154,6 @@
|
||||
"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,8 +42,7 @@
|
||||
"Microsoft.server-report",
|
||||
"Microsoft.sql-vnext",
|
||||
"Microsoft.whoisactive",
|
||||
"Redgate.sql-search",
|
||||
"IDERA.sqldm-performance-insights"
|
||||
"Redgate.sql-search"
|
||||
],
|
||||
"extensionsGallery": {
|
||||
"serviceUrl": "https://sqlopsextensions.blob.core.windows.net/marketplace/v1/extensionsGallery.json"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -62,12 +62,6 @@
|
||||
<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>
|
||||
@@ -602,9 +596,6 @@
|
||||
<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>
|
||||
@@ -1151,9 +1142,6 @@
|
||||
<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>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,734 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,668 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,747 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,705 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,637 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,742 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,776 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,722 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,777 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,650 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,157 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,156 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,169 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,160 +0,0 @@
|
||||
<?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>
|
||||
@@ -1,154 +0,0 @@
|
||||
<?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="ja" 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">サーバー名</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.databaseName">
|
||||
<source xml:lang="en">Database name</source>
|
||||
<target state="translated">データベース名</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="ja" datatype="plaintext"><body>
|
||||
<trans-unit id="flatFileImport.refresh">
|
||||
<source xml:lang="en">Refresh</source>
|
||||
<target state="translated">最新の情報に更新</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="ja" 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">次へ</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.columnName">
|
||||
<source xml:lang="en">Column Name</source>
|
||||
<target state="translated">列名</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.dataType">
|
||||
<source xml:lang="en">Data Type</source>
|
||||
<target state="translated">データ型</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.primaryKey">
|
||||
<source xml:lang="en">Primary Key</source>
|
||||
<target state="translated">主キー</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.allowNulls">
|
||||
<source xml:lang="en">Allow Nulls</source>
|
||||
<target state="translated">Null を許容</target>
|
||||
</trans-unit>
|
||||
</body></file>
|
||||
<file original="extensions/import/out/wizard/pages/fileConfigPage" source-language="en" target-language="ja" 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">参照</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="flatFileImport.openFile">
|
||||
<source xml:lang="en">Open</source>
|
||||
<target state="translated">開く</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="ja" 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="ja" 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">インストール済み</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingService">
|
||||
<source xml:lang="en">Downloading {0}</source>
|
||||
<target state="translated">{0} をダウンロードしています</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="downloadingServiceStatus">
|
||||
<source xml:lang="en">Downloading Service</source>
|
||||
<target state="translated">ダウンロード サービス</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="ja" 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">概要</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