diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index a4db68c9b9..356eabc190 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -3,6 +3,7 @@ import { UserService } from './shared/services/user.service'; import { RouterModule, Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { SharedModule } from './shared/shared.module'; import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NgModule, Injectable } from '@angular/core'; import { ReactiveFormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; @@ -90,6 +91,7 @@ export class AppModule { SharedModule.forRoot(), ReactiveFormsModule, BrowserModule, + BrowserAnimationsModule, HttpModule, TranslateModule.forRoot(), PopoverModule, diff --git a/client/src/app/binding-input/binding-input.component.html b/client/src/app/binding-input/binding-input.component.html index 1d26fdba75..e1f156cb07 100644 --- a/client/src/app/binding-input/binding-input.component.html +++ b/client/src/app/binding-input/binding-input.component.html @@ -34,6 +34,12 @@ (selectItem)="finishDialogPicker($event)"> + + + (); this.downloadOptions = [{ displayLabel: this._translateService.instant(PortalResources.downloadFunctionAppContent_siteContent), @@ -38,13 +42,15 @@ export class DownloadFunctionAppContentComponent { downloadFunctionAppContent() { if (this.context) { const includeCsProj = this.currentDownloadOption === 'siteContent' ? false : true; - + this._globalStateService.setBusyState(); + this.closeModal(); this._functionAppService.getAppContentAsZip(this.context, includeCsProj, this.includeAppSettings) .subscribe(data => { if (data.isSuccessful) { - window.open(window.URL.createObjectURL(data.result)); + FileUtilities.saveFile(data.result, `${this.context.site.name}.zip`); } - }); + this._globalStateService.clearBusyState(); + }, () => this._globalStateService.clearBusyState()); } } diff --git a/client/src/app/function/binding-input-v2/binding-input-v2.component.html b/client/src/app/function/binding-input-v2/binding-input-v2.component.html index 1ccf17ce41..b70dbb45b8 100644 --- a/client/src/app/function/binding-input-v2/binding-input-v2.component.html +++ b/client/src/app/function/binding-input-v2/binding-input-v2.component.html @@ -27,6 +27,13 @@ (close)="closePicker($event)" (selectItem)="finishDialogPicker($event)"> + + + +

{{ 'tryNow_FreeAccountToolTip' | translate }} diff --git a/client/src/app/function/binding-input-v2/binding-input-v2.component.ts b/client/src/app/function/binding-input-v2/binding-input-v2.component.ts index af529d4c49..32f51524ff 100644 --- a/client/src/app/function/binding-input-v2/binding-input-v2.component.ts +++ b/client/src/app/function/binding-input-v2/binding-input-v2.component.ts @@ -105,7 +105,7 @@ export class BindingInputV2Component extends FunctionAppContextComponent { this.pickerName = 'AppSetting'; break; case ResourceType.DocumentDB: - this.pickerName = this.useCustomFunctionInputPicker ? 'AppSetting' : 'DocDbPickerBlade'; + this.pickerName = this.useCustomFunctionInputPicker ? 'AppSetting' : 'CosmosDB'; break; case ResourceType.ServiceBus: this.pickerName = this.useCustomFunctionInputPicker ? 'AppSetting' : 'NotificationHubPickerBlade'; @@ -128,7 +128,10 @@ export class BindingInputV2Component extends FunctionAppContextComponent { const picker = this.input; picker.inProcess = true; - if (this.pickerName !== 'EventHub' && this.pickerName !== 'ServiceBus' && this.pickerName !== 'AppSetting') { + if (this.pickerName !== 'EventHub' && + this.pickerName !== 'ServiceBus' && + this.pickerName !== 'AppSetting' && + this.pickerName !== 'CosmosDB') { this._globalStateService.setBusyState(this._translateService.instant(PortalResources.resourceSelect)); diff --git a/client/src/app/functions.module.ts b/client/src/app/functions.module.ts index 8825724e0e..4256122ad8 100644 --- a/client/src/app/functions.module.ts +++ b/client/src/app/functions.module.ts @@ -50,6 +50,7 @@ import { ErrorsWarningsComponent } from './errors-warnings/errors-warnings.compo import { MonitorDetailsComponent } from './function-monitor/monitor-details/monitor-details.component'; import { SidebarModule } from 'ng-sidebar'; import { MonitorConfigureComponent } from './function-monitor/monitor-configure/monitor-configure.component'; +import { CosmosDBComponent } from './pickers/cosmos-db/cosmos-db.component'; const routing: ModuleWithProviders = RouterModule.forChild([ { @@ -142,7 +143,8 @@ const routing: ModuleWithProviders = RouterModule.forChild([ JavaSplashPageComponent, ExtensionCheckerComponent, ErrorsWarningsComponent, - MonitorConfigureComponent + MonitorConfigureComponent, + CosmosDBComponent ], providers: [] }) diff --git a/client/src/app/pickers/cosmos-db/cosmos-db.component.html b/client/src/app/pickers/cosmos-db/cosmos-db.component.html new file mode 100644 index 0000000000..7237911ed3 --- /dev/null +++ b/client/src/app/pickers/cosmos-db/cosmos-db.component.html @@ -0,0 +1,63 @@ +

+ + \ No newline at end of file diff --git a/client/src/app/pickers/cosmos-db/cosmos-db.component.ts b/client/src/app/pickers/cosmos-db/cosmos-db.component.ts new file mode 100644 index 0000000000..3e314f8f2b --- /dev/null +++ b/client/src/app/pickers/cosmos-db/cosmos-db.component.ts @@ -0,0 +1,207 @@ +import { Component, Output } from '@angular/core'; +import { CacheService } from './../../shared/services/cache.service'; +import { GlobalStateService } from '../../shared/services/global-state.service'; +import { ArmObj, ArmArrayResult } from './../../shared/models/arm/arm-obj'; +import { ArmService } from '../../shared/services/arm.service'; +import { Observable } from 'rxjs/Observable'; +import { Subject } from 'rxjs/Subject'; +import { SelectOption } from '../../shared/models/select-option'; +import { TranslateService } from '@ngx-translate/core'; +import { PortalResources } from '../../shared/models/portal-resources'; +import { Subscription } from 'rxjs/Subscription'; +import { FunctionAppContextComponent } from 'app/shared/components/function-app-context-component'; +import { FunctionAppService } from 'app/shared/services/function-app.service'; +import { BroadcastService } from '../../shared/services/broadcast.service'; +import { UserService } from '../../shared/services/user.service'; +import { Subscription as Sub} from '../../shared/models/subscription'; +import { SiteService } from '../../shared/services/site.service'; + +class OptionTypes { + cosmosDB = 'CosmosDB'; + custom = 'Custom'; +} + +@Component({ + selector: 'cosmos-db', + templateUrl: './cosmos-db.component.html', + styleUrls: ['./../picker.scss'] +}) + +export class CosmosDBComponent extends FunctionAppContextComponent { + public subscriptions: SelectOption[]; + public databases: ArmArrayResult; + public selectedSubscription: string; + public selectedDatabase: string; + public appSettingName: string; + public appSettingValue: string; + public optionsChange: Subject; + public optionTypes: OptionTypes = new OptionTypes(); + + public selectInProcess = false; + public options: SelectOption[]; + public option: string; + public canSelect = false; + @Output() close = new Subject(); + @Output() selectItem = new Subject(); + + private _subscription: Subscription; + + constructor( + private _cacheService: CacheService, + private _armService: ArmService, + private _globalStateService: GlobalStateService, + private _translateService: TranslateService, + private _userService: UserService, + private _siteService: SiteService, + functionAppService: FunctionAppService, + broadcastService: BroadcastService) { + super('cosmos-db', functionAppService, broadcastService); + + this.options = [ + { + displayLabel: this._translateService.instant(PortalResources.azureCosmosDB_account), + value: this.optionTypes.cosmosDB, + }, + { + displayLabel: this._translateService.instant(PortalResources.eventHubPicker_custom), + value: this.optionTypes.custom + } + ]; + + this.option = this.optionTypes.cosmosDB; + + this.optionsChange = new Subject(); + this.optionsChange.subscribe((option) => { + this.option = option; + this.setSelect(); + }); + } + + setup(): Subscription { + return this.viewInfoEvents + .switchMap(view => { + return this._userService.getStartupInfo(); + }) + .first() + .subscribe(r => { + this.subscriptions = r.subscriptions + .map(e => ({ displayLabel: e.displayName, value: e })) + .sort((a, b) => a.displayLabel.localeCompare(b.displayLabel)); + + if (this.subscriptions.length > 0) { + this.selectedSubscription = this.subscriptions[0].value.subscriptionId; + this.onChangeSubscription(this.selectedSubscription); + } + }); + } + + onChangeSubscription(value: string) { + this.databases = null; + this.selectedDatabase = null; + if (this._subscription) { + this._subscription.unsubscribe(); + } + const id = `/subscriptions/${value}/providers/microsoft.documentdb/databaseAccounts`; + this._subscription = this._cacheService.getArm(id, true, '2015-04-08').subscribe(r => { + this.databases = r.json(); + if (this.databases.value.length > 0) { + this.selectedDatabase = this.databases.value[0].id; + this.setSelect(); + } + }); + } + + onClose() { + if (!this.selectInProcess) { + this.close.next(null); + } + } + + onSelect() { + if (this.option === this.optionTypes.cosmosDB) { + this._cosmosDBSelected(); + } else { + this._customSelected(); + } + } + + public setSelect() { + switch (this.option) { + case this.optionTypes.custom: + { + this.canSelect = !!(this.appSettingName && this.appSettingValue); + break; + } + case this.optionTypes.cosmosDB: + { + this.canSelect = !!(this.selectedDatabase); + break; + } + } + } + + private _cosmosDBSelected(): Subscription | null { + if (this.selectedDatabase) { + this.selectInProcess = true; + this._globalStateService.setBusyState(); + let appSettingName: string; + + return Observable.zip( + this._cacheService.postArm(this.selectedDatabase + '/listkeys', true, '2015-04-08'), + this._siteService.getAppSettings(this.context.site.id), + (p, a) => ({ keys: p, appSettings: a })) + .flatMap(r => { + const database = this.databases.value.find(d => d.id === this.selectedDatabase); + const keys = r.keys.json(); + + appSettingName = `${database.name}_DOCUMENTDB`; + const appSettingValue = `AccountEndpoint=${database.properties.documentEndpoint};AccountKey=${keys.primaryMasterKey};`; + + const appSettings: ArmObj = r.appSettings.result; + appSettings.properties[appSettingName] = appSettingValue; + return this._cacheService.putArm(appSettings.id, this._armService.websiteApiVersion, appSettings); + + }) + .do(null, e => { + this._globalStateService.clearBusyState(); + this.selectInProcess = false; + this.showComponentError(e); + }) + .subscribe(() => { + this._globalStateService.clearBusyState(); + this.selectItem.next(appSettingName); + }); + } else { + return null; + } + } + + private _customSelected(): Subscription | null { + let appSettingName: string; + let appSettingValue: string; + appSettingName = this.appSettingName; + appSettingValue = this.appSettingValue; + + if (appSettingName && appSettingValue) { + this.selectInProcess = true; + this._globalStateService.setBusyState(); + this._siteService.getAppSettings(this.context.site.id).flatMap(r => { + const appSettings: ArmObj = r.result; + appSettings.properties[appSettingName] = appSettingValue; + return this._cacheService.putArm(appSettings.id, this._armService.websiteApiVersion, appSettings); + }) + .do(null, e => { + this._globalStateService.clearBusyState(); + this.selectInProcess = false; + this.showComponentError(e); + }) + .subscribe(() => { + this._globalStateService.clearBusyState(); + this.selectItem.next(appSettingName); + }); + } else { + return null; + } + return null; + } +} diff --git a/client/src/app/pickers/picker.scss b/client/src/app/pickers/picker.scss index 590b642dff..2b0a3379c7 100644 --- a/client/src/app/pickers/picker.scss +++ b/client/src/app/pickers/picker.scss @@ -73,3 +73,7 @@ select { .disabled{ color: $disabled-color; } + +#cosmos-picker { + display: block +} diff --git a/client/src/app/shared/Utilities/file.ts b/client/src/app/shared/Utilities/file.ts index 88d1adcadd..d7188ab270 100644 --- a/client/src/app/shared/Utilities/file.ts +++ b/client/src/app/shared/Utilities/file.ts @@ -7,4 +7,26 @@ export class FileUtilities { public static isBinary(fileName: string): boolean { return !!fileName && FileUtilities.binaryExtensions.some(e => fileName.toLowerCase().endsWith(e)); } + + // /~https://github.com/eligrey/FileSaver.js/blob/00e540fda507173f83a9408f1604622538d0c81a/src/FileSaver.js#L128-L136 + public static saveFile(blob: Blob, fileName: string) { + const windowUrl = window.URL || (window).webkitURL; + if (window.navigator.msSaveOrOpenBlob) { + // Currently, Edge doesn' respect the "download" attribute to name the file from blob + // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7260192/ + window.navigator.msSaveOrOpenBlob(blob, fileName); + } else { + const anchor = document.createElement('a'); + anchor.style.display = 'none'; + document.body.appendChild(anchor); + // http://stackoverflow.com/questions/37432609/how-to-avoid-adding-prefix-unsafe-to-link-by-angular2 + setTimeout(() => { + const url = windowUrl.createObjectURL(blob); + anchor.href = url; + anchor.download = fileName; + anchor.click(); + window.URL.revokeObjectURL(url); + }); + } + } } diff --git a/client/src/app/shared/models/constants.ts b/client/src/app/shared/models/constants.ts index c297209054..990a247434 100644 --- a/client/src/app/shared/models/constants.ts +++ b/client/src/app/shared/models/constants.ts @@ -73,6 +73,7 @@ export class SiteTabIds { public static readonly applicationSettings = 'site-config'; public static readonly continuousDeployment = 'site-continuous-deployment'; public static readonly logicApps = 'logic-apps'; + public static readonly console = 'console'; public static readonly deploymentSlotsConfig = 'deployment-slots-config'; public static readonly deploymentSlotsSwap = 'deployment-slots-swap'; public static readonly deploymentSlotsCreate = 'deployment-slots-create'; @@ -109,6 +110,9 @@ export class Regex { public static readonly header: RegExp = /^[a-zA-Z0-9\-_]+$/; public static queryParam: RegExp = /^[a-zA-Z0-9\-_*]+$/; public static readonly functionName: RegExp = /^[a-zA-Z][a-zA-Z0-9_\-]{0,127}$/; + public static readonly singleForwardSlash: RegExp = /\//g; + public static readonly doubleBackslash: RegExp = /\\\\/g; + public static readonly newLine: RegExp = /(\n)+/g; } export class Links { @@ -320,6 +324,14 @@ export class KeyCodes { public static readonly arrowDown = 40; public static readonly delete = 46; public static readonly f2 = 113; + public static readonly backspace = 8; + public static readonly ctrl = 17; + public static readonly f1 = 112; + public static readonly scrollLock = 145; + public static readonly leftWindow = 91; + public static readonly select = 93; + public static readonly c = 67; + public static readonly v = 86; } export class ExtensionInstallStatusConstants { @@ -408,7 +420,6 @@ export class DeploymentCenterConstants { public static readonly vstsRegionsApi = 'https://app.vssps.visualstudio.com/_apis/commerce/regions'; public static readonly vstsAccountsFetchUri = 'https://app.vssps.visualstudio.com/_apis/Commerce/Subscription?memberId={0}&includeMSAAccounts=true&queryOnlyOwnerAccounts=false&inlcudeDisabledAccounts=false&includeMSAAccounts=true&providerNamespaceId=VisualStudioOnline'; - // VSTS Validation constants // Build definition public static readonly buildSecurityNameSpace = '33344D9C-FC72-4d6f-ABA5-FA317101A7E9'; @@ -431,6 +442,23 @@ export class ComponentNames { export class WorkerRuntimeLanguages { public static dotnet = 'C#'; public static node = 'JavaScript'; + public static nodejs = 'JavaScript'; public static python = 'Python'; public static java = 'Java'; -} \ No newline at end of file +} + +export class ConsoleConstants { + public static readonly newLines = '\n\n'; + public static readonly singleBackslash = '\\'; + public static readonly currentDirectory = '.'; + public static readonly previousDirectory = '..'; + public static readonly successExitcode = 0; + public static readonly whitespace = ' '; + public static readonly newLine = '\n'; + + // commands + public static readonly exit = 'exit'; + public static readonly changeDirectory = 'cd'; + public static readonly windowsClear = 'cls'; + public static readonly linuxClear = 'clear'; +} diff --git a/client/src/app/shared/models/portal-resources.ts b/client/src/app/shared/models/portal-resources.ts index 80652bc101..2874aca346 100644 --- a/client/src/app/shared/models/portal-resources.ts +++ b/client/src/app/shared/models/portal-resources.ts @@ -401,8 +401,14 @@ public static feature_deploymentSourceInfo = 'feature_deploymentSourceInfo'; public static feature_deploymentCredsName = 'feature_deploymentCredsName'; public static feature_deploymentCredsInfo = 'feature_deploymentCredsInfo'; + public static error_consoleNotAvailable = 'error_consoleNotAvailable'; public static feature_consoleName = 'feature_consoleName'; public static feature_consoleInfo = 'feature_consoleInfo'; + public static feature_consoleMsg = 'feature_consoleMsg'; + public static feature_cmdConsoleName = 'feature_cmdConsoleName'; + public static feature_powerShellConsoleName = 'feature_powerShellConsoleName'; + public static feature_bashConsoleName = 'feature_bashConsoleName'; + public static feature_sshConsoleName = 'feature_sshConsoleName'; public static feature_sshName = 'feature_sshName'; public static feature_sshInfo = 'feature_sshInfo'; public static feature_extensionsName = 'feature_extensionsName'; @@ -978,7 +984,6 @@ public static pricing_includedFeaturesDesc = 'pricing_includedFeaturesDesc'; public static pricing_includedHardware = 'pricing_includedHardware'; public static pricing_includedHardwareDesc = 'pricing_includedHardwareDesc'; - public static pricing_linuxAseDiscount = 'pricing_linuxAseDiscount'; public static pricing_linuxTrial = 'pricing_linuxTrial'; public static pricing_windowsContainers = 'pricing_windowsContainers'; public static pricing_emptyIsolatedGroup = 'pricing_emptyIsolatedGroup'; @@ -1131,6 +1136,8 @@ public static edit = 'edit'; public static sync = 'sync'; public static deploymentCredentials = 'deploymentCredentials'; + public static pricing_dv3SeriesCompute = 'pricing_dv3SeriesCompute'; + public static pricing_dv3SeriesDedicatedCpu = 'pricing_dv3SeriesDedicatedCpu'; public static funcConnStringsInfoText = 'funcConnStringsInfoText'; public static appFunctionSettings_functionAppSettings_versionLoading = 'appFunctionSettings_functionAppSettings_versionLoading'; public static readOnlyLocalCache = 'readOnlyLocalCache'; @@ -1148,4 +1155,6 @@ public static appSettingsHeader_physicalPath = 'appSettingsHeader_physicalPath'; public static type_application = 'type_application'; public static type_directory = 'type_directory'; + public static databaseAccount = 'databaseAccount'; + public static azureCosmosDB_account = 'azureCosmosDB_account'; } \ No newline at end of file diff --git a/client/src/app/site/console/bash/bash.component.html b/client/src/app/site/console/bash/bash.component.html new file mode 100644 index 0000000000..cb95a269fa --- /dev/null +++ b/client/src/app/site/console/bash/bash.component.html @@ -0,0 +1,25 @@ +
+
+
+ +
+ + _ _____ _ ___ ___ + /_\ |_ / | | | _ \ __| + _ ___/ _ \__/ /| |_| | / _|___ _ _ +(___ /_/ \_\/___|\___/|_|_\___| _____) +(_______ _ _) _ ______ _)_ _ + (______________ _ ) (___ _ _) + +
+ {{ 'feature_consoleMsg' | translate}} +
+
+
+ {{appName}}:~$ {{commandInParts.leftCmd}}{{commandInParts.middleCmd}}{{commandInParts.rightCmd}} +
+ +
+
+
diff --git a/client/src/app/site/console/bash/bash.component.spec.ts b/client/src/app/site/console/bash/bash.component.spec.ts new file mode 100644 index 0000000000..436d2a8f1f --- /dev/null +++ b/client/src/app/site/console/bash/bash.component.spec.ts @@ -0,0 +1,130 @@ +import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing'; +import { BashComponent } from './bash.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { ConsoleService } from './../shared/services/console.service'; +import { Injector } from '@angular/core'; +import { HttpModule } from '@angular/http'; +import { SiteService } from '../../../shared/services/site.service'; +import { LogService } from '../../../shared/services/log.service'; +import { MockLogService } from '../../../test/mocks/log.service.mock'; +import { CacheService } from '../../../shared/services/cache.service'; +import { BroadcastService } from '../../../shared/services/broadcast.service'; +import { TelemetryService } from '../../../shared/services/telemetry.service'; +import { MockTelemetryService } from '../../../test/mocks/telemetry.service.mock'; +import { TestClipboard, MockConsoleService, MockSiteService, MockCacheService } from '../shared/services/mock.services'; +import { MessageComponent } from '../shared/components/message.component'; +import { CommonModule } from '@angular/common'; +import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; +import { PromptComponent } from '../shared/components/prompt.component'; + +describe('BashComponent', () => { + let component: BashComponent; + let fixture: ComponentFixture; + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), HttpModule, CommonModule + ], + providers: [ + BroadcastService, Injector, + {provide: TelemetryService, useClass: MockTelemetryService}, + { provide: ConsoleService, useClass: MockConsoleService }, + { provide: SiteService, useClass: MockSiteService }, + { provide: CacheService, useClass: MockCacheService }, + { provide: LogService, useClass: MockLogService }, + ], + declarations: [BashComponent, MessageComponent, PromptComponent] + }).overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [MessageComponent, PromptComponent] + } + }).compileComponents().then(() => { + fixture = TestBed.createComponent(BashComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + })); + + describe('init', () => { + it('should create', async(() => { + expect(component).toBeTruthy(); + })); + + // command elements should be empty by default, + // with the excpetion of middle command element which should just be a ' ' + it('console should be in focus by default', () => { + expect(component.isFocused).toBeTruthy(); + }); + + // fixed directory + it('default dir is fixed', async(() => { + expect(component.dir).toEqual('/home'); + })); + + // command elements should be empty by default, + // with the excpetion of middle command element which should just be a ' ' + it('command should be empty by default', async(() => { + expect(component.commandInParts.leftCmd).toEqual(''); + expect(component.commandInParts.middleCmd).toEqual(' '); + expect(component.commandInParts.rightCmd).toEqual(''); + })); + }); + + describe('console-focus', () => { + // mouse-click outside the console, + // this will de-focus the console. + it('unfocus the console', fakeAsync(() => { + component.unFocusConsole(); + expect(component.isFocused).toBeFalsy(); + })); + + // focus the console back after being out of focus + it('focus the console', fakeAsync(() => { + component.unFocusConsole(); + expect(component.isFocused).toBeFalsy(); + component.focusConsole(); + expect(component.isFocused).toBeTruthy(); + })); + }); + + describe('key-events', () => { + it('Ctrl + C', fakeAsync(() => { + component.commandInParts.leftCmd = 'python'; + component.handleCopy(null); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + + it('Ctrl + V', fakeAsync(() => { + component.handlePaste({clipboardData: new TestClipboard()}); + expect(component.commandInParts.leftCmd).toEqual('paste'); + })); + + it('alphanumeric-key', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + })); + + it('down-arrow-press', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + component.keyEvent({which: 38, key: 'left'}); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + + it('backspace-press', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + component.keyEvent({which: 86, key: 'v'}); + expect(component.commandInParts.leftCmd).toEqual('cv'); + component.keyEvent({which: 8, key: 'backspace'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + })); + + it('esc-key-press', fakeAsync(() => { + component.keyEvent({which: 86, key: 'v'}); + component.keyEvent({which: 86, key: 'v'}); + expect(component.commandInParts.leftCmd).toEqual('vv'); + component.keyEvent({which: 27, key: 'esc'}); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + }); +}); diff --git a/client/src/app/site/console/bash/bash.component.ts b/client/src/app/site/console/bash/bash.component.ts new file mode 100644 index 0000000000..7c875e0ab9 --- /dev/null +++ b/client/src/app/site/console/bash/bash.component.ts @@ -0,0 +1,142 @@ +import { Component, ComponentFactoryResolver} from '@angular/core'; +import { ConsoleService, ConsoleTypes } from './../shared/services/console.service'; +import { AbstractConsoleComponent } from '../shared/components/abstract.console.component'; +import { Regex, ConsoleConstants, HttpMethods } from '../../../shared/models/constants'; + +@Component({ + selector: 'app-bash', + templateUrl: './bash.component.html', + styleUrls: ['./../console.component.scss'], + providers: [] +}) +export class BashComponent extends AbstractConsoleComponent { + + private _defaultDirectory = '/home'; + constructor( + componentFactoryResolver: ComponentFactoryResolver, + public consoleService: ConsoleService + ) { + super(componentFactoryResolver, consoleService); + this.dir = this._defaultDirectory; + this.consoleType = ConsoleTypes.BASH; + } + + /** + * Get the tab-key command for bash console + */ + protected getTabKeyCommand(): string { + return 'ls -a'; + } + + /** + * Get Kudu API URL + */ + protected getKuduUri(): string { + const scmHostName = this.site.properties.hostNameSslStates.find (h => h.hostType === 1).name; + return `https://${scmHostName}/command`; + } + + /** + * Handle the tab-pressed event + */ + protected tabKeyEvent() { + this.unFocusConsoleManually(); + if (this.listOfDir.length === 0) { + const uri = this.getKuduUri(); + const header = this.getHeader(); + const body = { + 'command': (`bash -c \' ${this.getTabKeyCommand()} && echo \'\' && pwd\'`), + 'dir': this.dir + }; + const res = this.consoleService.send(HttpMethods.POST, uri, JSON.stringify(body), header); + res.subscribe( + data => { + const output = data.json(); + if (output.ExitCode === ConsoleConstants.successExitcode) { + // fetch the list of files/folders in the current directory + const cmd = this.command.substring(0, this.ptrPosition); + const allFiles = output.Output.split(ConsoleConstants.newLine.repeat(2) + this.dir)[0].split(ConsoleConstants.newLine); + this.listOfDir = this.consoleService.findMatchingStrings(allFiles, cmd.substring(cmd.lastIndexOf(ConsoleConstants.whitespace) + 1)); + if (this.listOfDir.length > 0) { + this.dirIndex = 0; + this.command = this.command.substring(0, this.ptrPosition); + this.command = this.command.substring(0, this.command.lastIndexOf(ConsoleConstants.whitespace) + 1) + this.listOfDir[0]; + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + } + } + this.focusConsole(); + }, + err => { + console.log('Tab Key Error' + err.text); + } + ); + return; + } + this.command = this.command.substring(0, this.ptrPosition); + this.command = this.command.substring(0, this.command.lastIndexOf(ConsoleConstants.whitespace) + 1) + this.listOfDir[(this.dirIndex++) % this.listOfDir.length]; + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + this.focusConsole(); + } + + /** + * Connect to the kudu API and display the response; + * both incase of an error or a valid response + */ + protected connectToKudu() { + const uri = this.getKuduUri(); + const header = this.getHeader(); + const cmd = this.command; + const body = { + 'command': (`bash -c \' ${cmd} && echo \'\' && pwd\'`), + 'dir': this.dir + }; + const res = this.consoleService.send(HttpMethods.POST, uri, JSON.stringify(body), header); + this.lastAPICall = res.subscribe( + data => { + const output = data.json(); + if (output.Output === '' && output.ExitCode !== ConsoleConstants.successExitcode) { + this.addErrorComponent(output.Error + ConsoleConstants.newLine); + } else if (output.ExitCode === ConsoleConstants.successExitcode && output.Output !== '' && this.performAction(cmd, output.Output)) { + this.addMessageComponent(output.Output.split(ConsoleConstants.newLine.repeat(2) + this.dir)[0] + ConsoleConstants.newLine.repeat(2)); + } + this.addPromptComponent(); + this.enterPressed = false; + return output; + }, + err => { + this.addErrorComponent(err.text); + this.enterPressed = false; + } + ); + } + + /** + * perform action on key pressed. + */ + protected performAction(cmd?: string, output?: string): boolean { + if (this.command.toLowerCase() === ConsoleConstants.linuxClear) { // bash uses clear to empty the console + this.removeMsgComponents(); + return false; + } + if (this.command.toLowerCase() === ConsoleConstants.exit) { + this.removeMsgComponents(); + this.dir = this._defaultDirectory; + return false; + } + if (cmd && cmd.toLowerCase().startsWith(ConsoleConstants.changeDirectory)) { + output = output.replace(Regex.newLine, ''); + this.dir = output; + return false; + } + return true; + } + + /** + * Get the left-hand-side text for the console + */ + protected getConsoleLeft() { + return `${this.appName}:~$ `; + } +} diff --git a/client/src/app/site/console/cmd/cmd.component.html b/client/src/app/site/console/cmd/cmd.component.html new file mode 100755 index 0000000000..3533ae9c04 --- /dev/null +++ b/client/src/app/site/console/cmd/cmd.component.html @@ -0,0 +1,26 @@ +
+
+
+ +
+ + _ _____ _ ___ ___ + /_\ |_ / | | | _ \ __| + _ ___/ _ \__/ /| |_| | / _|___ _ _ +(___ /_/ \_\/___|\___/|_|_\___| _____) +(_______ _ _) _ ______ _)_ _ + (______________ _ ) (___ _ _) + +
+ {{ 'feature_consoleMsg' | translate}} +
+
+ +
+ {{dir}}>{{commandInParts.leftCmd}}{{commandInParts.middleCmd}}{{commandInParts.rightCmd}} +
+ +
+
+
diff --git a/client/src/app/site/console/cmd/cmd.component.spec.ts b/client/src/app/site/console/cmd/cmd.component.spec.ts new file mode 100755 index 0000000000..e31523f9e2 --- /dev/null +++ b/client/src/app/site/console/cmd/cmd.component.spec.ts @@ -0,0 +1,132 @@ +import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing'; +import { CmdComponent } from './cmd.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { ConsoleService } from './../shared/services/console.service'; +import { Injector } from '@angular/core'; +import { HttpModule } from '@angular/http'; +import { SiteService } from '../../../shared/services/site.service'; +import { LogService } from '../../../shared/services/log.service'; +import { MockLogService } from '../../../test/mocks/log.service.mock'; +import { CacheService } from '../../../shared/services/cache.service'; +import { BroadcastService } from '../../../shared/services/broadcast.service'; +import { TelemetryService } from '../../../shared/services/telemetry.service'; +import { MockTelemetryService } from '../../../test/mocks/telemetry.service.mock'; +import { MockDirective } from 'ng-mocks'; +import { LoadImageDirective } from '../../../controls/load-image/load-image.directive'; +import { TestClipboard, MockConsoleService, MockSiteService, MockCacheService } from '../shared/services/mock.services'; +import { MessageComponent } from '../shared/components/message.component'; +import { CommonModule } from '@angular/common'; +import { PromptComponent } from '../shared/components/prompt.component'; +import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; + +describe('CmdConsoleComponent', () => { + let component: CmdComponent; + let fixture: ComponentFixture; + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), HttpModule, CommonModule + ], + providers: [ + BroadcastService, Injector, + {provide: TelemetryService, useClass: MockTelemetryService}, + { provide: ConsoleService, useClass: MockConsoleService }, + { provide: SiteService, useClass: MockSiteService }, + { provide: CacheService, useClass: MockCacheService }, + { provide: LogService, useClass: MockLogService }, + ], + declarations: [CmdComponent, MockDirective(LoadImageDirective), MessageComponent, PromptComponent] + }).overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [MessageComponent, PromptComponent] + } + }).compileComponents().then(() => { + fixture = TestBed.createComponent(CmdComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + })); + + describe('init', () => { + it('should create', async(() => { + expect(component).toBeTruthy(); + })); + + // command elements should be empty by default, + // with the excpetion of middle command element which should just be a ' ' + it('console should be in focus by default', () => { + expect(component.isFocused).toBeTruthy(); + }); + + // fixed directory + it('default dir is fixed', async(() => { + expect(component.dir).toEqual('D:\\home\\site\\wwwroot'); + })); + + // command elements should be empty by default, + // with the excpetion of middle command element which should just be a ' ' + it('command should be empty by default', async(() => { + expect(component.commandInParts.leftCmd).toEqual(''); + expect(component.commandInParts.middleCmd).toEqual(' '); + expect(component.commandInParts.rightCmd).toEqual(''); + })); + }); + + describe('console-focus', () => { + // mouse-click outside the console, + // this will de-focus the console. + it('unfocus the console', fakeAsync(() => { + component.unFocusConsole(); + expect(component.isFocused).toBeFalsy(); + })); + + // focus the console back after being out of focus + it('focus the console', fakeAsync(() => { + component.unFocusConsole(); + expect(component.isFocused).toBeFalsy(); + component.focusConsole(); + expect(component.isFocused).toBeTruthy(); + })); + }); + + describe('key-events', () => { + it('Ctrl + C', fakeAsync(() => { + component.commandInParts.leftCmd = 'python'; + component.handleCopy(null); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + + it('Ctrl + V', fakeAsync(() => { + component.handlePaste({clipboardData: new TestClipboard()}); + expect(component.commandInParts.leftCmd).toEqual('paste'); + })); + + it('alphanumeric-key', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + })); + + it('down-arrow-press', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + component.keyEvent({which: 38, key: 'left'}); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + + it('backspace-press', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + component.keyEvent({which: 86, key: 'v'}); + expect(component.commandInParts.leftCmd).toEqual('cv'); + component.keyEvent({which: 8, key: 'backspace'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + })); + + it('esc-key-press', fakeAsync(() => { + component.keyEvent({which: 86, key: 'v'}); + component.keyEvent({which: 86, key: 'v'}); + expect(component.commandInParts.leftCmd).toEqual('vv'); + component.keyEvent({which: 27, key: 'esc'}); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + }); +}); diff --git a/client/src/app/site/console/cmd/cmd.component.ts b/client/src/app/site/console/cmd/cmd.component.ts new file mode 100755 index 0000000000..709f5cccba --- /dev/null +++ b/client/src/app/site/console/cmd/cmd.component.ts @@ -0,0 +1,34 @@ +import { Component, ComponentFactoryResolver} from '@angular/core'; +import { ConsoleService, ConsoleTypes } from './../shared/services/console.service'; +import { AbstractWindowsComponent } from '../shared/components/abstract.windows.component'; + +@Component({ + selector: 'app-cmd', + templateUrl: './cmd.component.html', + styleUrls: ['./../console.component.scss'] +}) +export class CmdComponent extends AbstractWindowsComponent { + + constructor( + componentFactoryResolver: ComponentFactoryResolver, + public consoleService: ConsoleService + ) { + super(componentFactoryResolver, consoleService); + this.consoleType = ConsoleTypes.CMD; + } + + protected getTabKeyCommand(): string { + return 'dir /b /a'; + } + + protected getCommandPrefix(): string { + return ''; + } + + /** + * Get the left-hand-side text for the console + */ + protected getConsoleLeft() { + return `${this.dir}>`; + } +} diff --git a/client/src/app/site/console/console.component.html b/client/src/app/site/console/console.component.html new file mode 100644 index 0000000000..1ff7c50795 --- /dev/null +++ b/client/src/app/site/console/console.component.html @@ -0,0 +1,8 @@ +
+ +   + + + + +
\ No newline at end of file diff --git a/client/src/app/site/console/console.component.scss b/client/src/app/site/console/console.component.scss new file mode 100755 index 0000000000..aa96f71c26 --- /dev/null +++ b/client/src/app/site/console/console.component.scss @@ -0,0 +1,99 @@ +@import '../../../sass/common/variables'; + +h2{ + display: inline; +} +div.browse-container{ + overflow: auto; +} + +#console-container{ + position: absolute; + padding-top: 2em; + height: calc(100% - 90px); + width: calc(100% - 50px); +} + +div.console{ + font-family: 'Courier New', 'Lucida Console', 'Times New', monospace; + height: 100%; + font-size: medium; + white-space: normal; + width: 100%; +} + +div.console div.console-inner{ + background-color: $console-background-color; // #215b7e; + color: $console-text-color; + margin-left:auto; + margin-right: auto; + overflow: auto; + word-break: break-word; + word-wrap: break-word; + padding: 0.8em; + width: 100%; + height: 100%; +} + +div.console-message-header{ + color: $console-default-msg-color; +} + +div.console-message-header span{ + white-space:pre-wrap; +} + +div.console-message-value{ + white-space: pre-wrap; +} + +div.console-message-error{ + color: $console-error-color; + white-space: pre-wrap; +} + +div.console-prompt-box{ + font-size: 0; +} + +span.console-prompt-label{ + font-size: medium; +} + +textarea.console-typer{ + position: absolute; + top: 0px; + left: -9999px; +} + +span.console-prompt{ + font-size: medium; + white-space: pre-wrap; +} + +span.console-cursor{ + text-decoration: none; + border-bottom: 5px solid $console-text-color; + font-size: medium; + animation: blink 1s steps(3, start) infinite; + -webkit-animation: blink 1s steps(3, start) infinite; +} + +span.bash-cursor{ + border: none; + color: $bash-cursor-text-color; + background-color: $bash-cursor-background-color; +} + +@-webkit-keyframes blink{ + to{ + visibility: hidden; + } +} + +@keyframes blink{ + to{ + visibility: hidden; + } +} + diff --git a/client/src/app/site/console/console.component.ts b/client/src/app/site/console/console.component.ts new file mode 100644 index 0000000000..407280b438 --- /dev/null +++ b/client/src/app/site/console/console.component.ts @@ -0,0 +1,154 @@ +import { Injector, Input, Component } from '@angular/core'; +import { FeatureComponent } from '../../shared/components/feature-component'; +import { SiteData, TreeViewInfo } from '../../tree-view/models/tree-view-info'; +import { Subject } from 'rxjs/Subject'; +import { SelectOption } from '../../shared/models/select-option'; +import { LogCategories, SiteTabIds } from '../../shared/models/constants'; +import { SiteService } from '../../shared/services/site.service'; +import { LogService } from '../../shared/services/log.service'; +import { CacheService } from '../../shared/services/cache.service'; +import { ConsoleService, ConsoleTypes } from './shared/services/console.service'; +import { Observable } from 'rxjs/Observable'; +import { ArmUtil } from '../../shared/Utilities/arm-utils'; +import { TranslateService } from '@ngx-translate/core'; +import { PortalResources } from '../../shared/models/portal-resources'; +import { fade } from './shared/animations/fade.animation'; +import { ArmObj } from '../../shared/models/arm/arm-obj'; +import { PublishingCredentials } from '../../shared/models/publishing-credentials'; +import { Site } from '../../shared/models/arm/site'; +import { errorIds } from '../../shared/models/error-ids'; + +@Component({ + selector: 'app-console', + templateUrl: './console.component.html', + styleUrls: ['./console.component.scss'], + animations: [ + fade + ] +}) +export class ConsoleComponent extends FeatureComponent> { + public toggleConsole = true; + public consoleIcon = 'image/console.svg'; + public resourceId: string; + public initialized = false; + public windows = true; + public appName: string; + public viewInfoStream = new Subject>(); + public currentOption: number; + public options: SelectOption[]; + public optionsChange: Subject; + + @Input() set viewInfoInput(viewInfo: TreeViewInfo) { + this.setInput(viewInfo); + } + constructor( + private _translateService: TranslateService, + private _siteService: SiteService, + private _logService: LogService, + private _cacheService: CacheService, + private _consoleService: ConsoleService, + injector: Injector + ) { + super('site-console', injector, SiteTabIds.console); + this.featureName = 'console'; + this.isParentComponent = true; + this.initialized = true; + this.optionsChange = new Subject(); + this.optionsChange.subscribe((option) => { + this.currentOption = option; + this._onOptionChange(); + }); + this.currentOption = ConsoleTypes.CMD; + } + + protected setup(inputEvents: Observable>) { + // ARM API request to get the site details and the publishing credentials + return inputEvents + .distinctUntilChanged() + .switchMap(view => { + this.setBusy(); + this.resourceId = view.resourceId; + this._consoleService.sendResourceId(this.resourceId); + return Observable.zip( + this._siteService.getSite(this.resourceId), + this._cacheService.postArm(`${this.resourceId}/config/publishingcredentials/list`), + (site, publishingCredentials) => ({ + site: site.result, + publishingCredentials: publishingCredentials.json() + }) + ); + }) + .do( + r => { + this._consoleService.sendSite(r.site); + this._consoleService.sendPublishingCredentials(r.publishingCredentials); + this.appName = r.publishingCredentials.name; + if (ArmUtil.isLinuxApp(r.site)) { + // linux-app + this._setLinuxDashboard(); + }else { + this._setWindowsDashboard(); + } + this.clearBusyEarly(); + if (!this._siteDetailAvailable(r.site, r.publishingCredentials)) { + this.showComponentError({ + message: this._translateService.instant(PortalResources.error_consoleNotAvailable), + errorId: errorIds.unknown, + resourceId: this.resourceId + }); + this.setBusy(); + return; + } + }, + err => { + this._logService.error(LogCategories.cicd, '/load-linux-console', err); + this.clearBusyEarly(); + }); + } + + private _siteDetailAvailable(site: ArmObj, publishingCredentials: ArmObj): boolean { + if (!site || !site.properties.hostNameSslStates.find (h => h.hostType === 1) || !publishingCredentials || + publishingCredentials.properties.publishingPassword === '' || publishingCredentials.properties.publishingUserName === '') { + return false; + } + return true; + } + + private _setWindowsDashboard() { + this.windows = true; + this.options = [ + { + displayLabel: this._translateService.instant(PortalResources.feature_cmdConsoleName), + value: ConsoleTypes.CMD + }, + { + displayLabel: this._translateService.instant(PortalResources.feature_powerShellConsoleName), + value: ConsoleTypes.PS + } + ]; + this.currentOption = ConsoleTypes.CMD; + } + + private _setLinuxDashboard() { + this.windows = false; + this.options = [ + { + displayLabel: this._translateService.instant(PortalResources.feature_bashConsoleName), + value: ConsoleTypes.BASH + }, + { + displayLabel: this._translateService.instant(PortalResources.feature_sshConsoleName), + value: ConsoleTypes.SSH + } + ]; + this.currentOption = ConsoleTypes.BASH; + } + + private _onOptionChange() { + if (this.currentOption === ConsoleTypes.CMD || this.currentOption === ConsoleTypes.BASH) { + this.toggleConsole = true; + return; + } + this.toggleConsole = false; + } +} diff --git a/client/src/app/site/console/console.module.ts b/client/src/app/site/console/console.module.ts new file mode 100644 index 0000000000..605a1e7c8e --- /dev/null +++ b/client/src/app/site/console/console.module.ts @@ -0,0 +1,51 @@ +import { NgModule } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { PromptComponent } from './shared/components/prompt.component'; +import { ErrorComponent } from './shared/components/error.component'; +import { MessageComponent } from './shared/components/message.component'; +import { CommonModule } from '@angular/common'; +import { ClickOutsideDirective } from './shared/directives/click.directive'; +import { SharedModule } from '../../shared/shared.module'; +import { ConsoleService } from './shared/services/console.service'; +import { CmdComponent } from './cmd/cmd.component'; +import { PowershellComponent } from './powershell/powershell.component'; +import { BashComponent } from './bash/bash.component'; +import { SSHComponent } from './ssh/ssh.component'; +import { ConsoleComponent } from './console.component'; + +@NgModule({ + entryComponents: [ + ConsoleComponent, + CmdComponent, + PowershellComponent, + BashComponent, + SSHComponent, + PromptComponent, + ErrorComponent, + MessageComponent + ], + imports: [ + TranslateModule.forChild(), CommonModule, SharedModule + ], + declarations: [ + ConsoleComponent, + CmdComponent, + PowershellComponent, + BashComponent, + SSHComponent, + PromptComponent, + ClickOutsideDirective, + ErrorComponent, + MessageComponent + ], + providers: [ + ConsoleService + ], + exports: [ + CmdComponent, + PowershellComponent, + BashComponent, + SSHComponent + ] + }) +export class ConsoleModule { } diff --git a/client/src/app/site/console/powershell/powershell.component.html b/client/src/app/site/console/powershell/powershell.component.html new file mode 100644 index 0000000000..864222d177 --- /dev/null +++ b/client/src/app/site/console/powershell/powershell.component.html @@ -0,0 +1,26 @@ +
+
+
+ +
+ + _ _____ _ ___ ___ + /_\ |_ / | | | _ \ __| + _ ___/ _ \__/ /| |_| | / _|___ _ _ +(___ /_/ \_\/___|\___/|_|_\___| _____) +(_______ _ _) _ ______ _)_ _ + (______________ _ ) (___ _ _) + +
+ {{ 'feature_consoleMsg' | translate}} +
+
+ +
+ PS {{dir}}>{{commandInParts.leftCmd}}{{commandInParts.middleCmd}}{{commandInParts.rightCmd}} +
+ +
+
+
\ No newline at end of file diff --git a/client/src/app/site/console/powershell/powershell.component.scss b/client/src/app/site/console/powershell/powershell.component.scss new file mode 100644 index 0000000000..a24c074b96 --- /dev/null +++ b/client/src/app/site/console/powershell/powershell.component.scss @@ -0,0 +1,5 @@ +@import '../../../../sass/common/variables'; + +div.console div.console-inner{ + background-color: $powershell-background-color; +} diff --git a/client/src/app/site/console/powershell/powershell.component.spec.ts b/client/src/app/site/console/powershell/powershell.component.spec.ts new file mode 100644 index 0000000000..00f09d28c4 --- /dev/null +++ b/client/src/app/site/console/powershell/powershell.component.spec.ts @@ -0,0 +1,132 @@ +import { async, ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing'; +import { PowershellComponent } from './powershell.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { ConsoleService } from './../shared/services/console.service'; +import { Injector } from '@angular/core'; +import { HttpModule } from '@angular/http'; +import { SiteService } from '../../../shared/services/site.service'; +import { LogService } from '../../../shared/services/log.service'; +import { MockLogService } from '../../../test/mocks/log.service.mock'; +import { CacheService } from '../../../shared/services/cache.service'; +import { BroadcastService } from '../../../shared/services/broadcast.service'; +import { TelemetryService } from '../../../shared/services/telemetry.service'; +import { MockTelemetryService } from '../../../test/mocks/telemetry.service.mock'; +import { LoadImageDirective } from '../../../controls/load-image/load-image.directive'; +import { MockDirective } from 'ng-mocks'; +import { TestClipboard, MockConsoleService, MockSiteService, MockCacheService } from '../shared/services/mock.services'; +import { CommonModule } from '@angular/common'; +import { MessageComponent } from '../shared/components/message.component'; +import { PromptComponent } from '../shared/components/prompt.component'; +import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; + +describe('PowershellConsoleComponent', () => { + let component: PowershellComponent; + let fixture: ComponentFixture; + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + TranslateModule.forRoot(), HttpModule, CommonModule + ], + providers: [ + BroadcastService, Injector, + {provide: TelemetryService, useClass: MockTelemetryService}, + { provide: ConsoleService, useClass: MockConsoleService }, + { provide: SiteService, useClass: MockSiteService }, + { provide: CacheService, useClass: MockCacheService }, + { provide: LogService, useClass: MockLogService }, + ], + declarations: [PowershellComponent, MockDirective(LoadImageDirective), MessageComponent, PromptComponent], + }).overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [MessageComponent, PromptComponent] + } + }).compileComponents().then(() => { + fixture = TestBed.createComponent(PowershellComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + })); + + describe('init', () => { + it('should create', async(() => { + expect(component).toBeTruthy(); + })); + + // command elements should be empty by default, + // with the excpetion of middle command element which should just be a ' ' + it('console should be in focus by default', () => { + expect(component.isFocused).toBeTruthy(); + }); + + // fixed directory + it('default dir is fixed', async(() => { + expect(component.dir).toEqual('D:\\home\\site\\wwwroot'); + })); + + // command elements should be empty by default, + // with the excpetion of middle command element which should just be a ' ' + it('command should be empty by default', async(() => { + expect(component.commandInParts.leftCmd).toEqual(''); + expect(component.commandInParts.middleCmd).toEqual(' '); + expect(component.commandInParts.rightCmd).toEqual(''); + })); + }); + + describe('console-focus', () => { + // mouse-click outside the console, + // this will de-focus the console. + it('unfocus the console', fakeAsync(() => { + component.unFocusConsole(); + expect(component.isFocused).toBeFalsy(); + })); + + // focus the console back after being out of focus + it('focus the console', fakeAsync(() => { + component.unFocusConsole(); + expect(component.isFocused).toBeFalsy(); + component.focusConsole(); + expect(component.isFocused).toBeTruthy(); + })); + }); + + describe('key-events', () => { + it('Ctrl + C', fakeAsync(() => { + component.commandInParts.leftCmd = 'python'; + component.handleCopy(null); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + + it('Ctrl + V', fakeAsync(() => { + component.handlePaste({clipboardData: new TestClipboard()}); + expect(component.commandInParts.leftCmd).toEqual('paste'); + })); + + it('alphanumeric-key', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + })); + + it('down-arrow-press', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + component.keyEvent({which: 38, key: 'left'}); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + + it('backspace-press', fakeAsync(() => { + component.keyEvent({which: 67, key: 'c'}); + component.keyEvent({which: 86, key: 'v'}); + expect(component.commandInParts.leftCmd).toEqual('cv'); + component.keyEvent({which: 8, key: 'backspace'}); + expect(component.commandInParts.leftCmd).toEqual('c'); + })); + + it('esc-key-press', fakeAsync(() => { + component.keyEvent({which: 86, key: 'v'}); + component.keyEvent({which: 86, key: 'v'}); + expect(component.commandInParts.leftCmd).toEqual('vv'); + component.keyEvent({which: 27, key: 'esc'}); + expect(component.commandInParts.leftCmd).toEqual(''); + })); + }); +}); diff --git a/client/src/app/site/console/powershell/powershell.component.ts b/client/src/app/site/console/powershell/powershell.component.ts new file mode 100644 index 0000000000..4fdbd1d624 --- /dev/null +++ b/client/src/app/site/console/powershell/powershell.component.ts @@ -0,0 +1,35 @@ +import { Component, ComponentFactoryResolver} from '@angular/core'; +import { ConsoleService, ConsoleTypes } from './../shared/services/console.service'; +import { AbstractWindowsComponent } from '../shared/components/abstract.windows.component'; + +@Component({ + selector: 'app-powershell', + templateUrl: './powershell.component.html', + styleUrls: ['./../console.component.scss', './powershell.component.scss'], + providers: [] +}) +export class PowershellComponent extends AbstractWindowsComponent { + + constructor( + componentFactoryResolver: ComponentFactoryResolver, + public consoleService: ConsoleService + ) { + super(componentFactoryResolver, consoleService); + this.consoleType = ConsoleTypes.PS; + } + + protected getTabKeyCommand(): string { + return 'Get-ChildItem -name'; + } + + protected getCommandPrefix(): string { + return 'powershell '; + } + + /** + * Get the left-hand-side text for the console + */ + protected getConsoleLeft() { + return `PS ${this.dir}>`; + } +} diff --git a/client/src/app/site/console/shared/animations/fade.animation.ts b/client/src/app/site/console/shared/animations/fade.animation.ts new file mode 100644 index 0000000000..6c3fbe9f48 --- /dev/null +++ b/client/src/app/site/console/shared/animations/fade.animation.ts @@ -0,0 +1,9 @@ +import {trigger, transition, state, animate, style} from '@angular/animations'; + +export let fade = trigger('fade', [ + state('void', style({opacity: 0})), + + transition(':enter, :leave', [ + animate(500) + ]) +]); diff --git a/client/src/app/site/console/shared/components/abstract.console.component.ts b/client/src/app/site/console/shared/components/abstract.console.component.ts new file mode 100644 index 0000000000..ea119de8ae --- /dev/null +++ b/client/src/app/site/console/shared/components/abstract.console.component.ts @@ -0,0 +1,489 @@ +import { OnInit, OnDestroy, ComponentFactoryResolver, ComponentFactory, ComponentRef, ViewChild, ViewContainerRef, ElementRef, Input } from '@angular/core'; +import { ArmObj } from '../../../../shared/models/arm/arm-obj'; +import { Site } from '../../../../shared/models/arm/site'; +import { PublishingCredentials } from '../../../../shared/models/publishing-credentials'; +import { Subscription } from 'rxjs/Subscription'; +import { ConsoleService } from './../services/console.service'; +import { KeyCodes, ConsoleConstants } from '../../../../shared/models/constants'; +import { ErrorComponent } from './error.component'; +import { MessageComponent } from './message.component'; +import { PromptComponent } from './prompt.component'; +import { Headers } from '@angular/http'; + +export abstract class AbstractConsoleComponent implements OnInit, OnDestroy { + public resourceId: string; + public consoleType: number; + public isFocused = false; + public commandInParts = {leftCmd: '', middleCmd: ' ' , rightCmd: ''}; // commands to left, right and on the pointer + public dir: string; + public initialized = false; + protected enterPressed = false; + protected site: ArmObj; + protected publishingCredentials: ArmObj; + /*** Variables for Tab-key ***/ + protected listOfDir: string[] = []; + protected dirIndex = -1; + protected lastAPICall: Subscription = undefined; + /*** Variables for Command + Dir @Input ***/ + protected command = ''; + protected ptrPosition = 0; + protected commandHistory: string[] = ['']; + protected commandHistoryIndex = 1; + private _lastKeyPressed = -1; + private _promptComponent: ComponentFactory; + private _messageComponent: ComponentFactory; + private _errorComponent: ComponentFactory; + private _msgComponents: ComponentRef[] = []; + private _currentPrompt: ComponentRef = null; + private _resourceIdSubscription: Subscription; + private _siteSubscription: Subscription; + private _publishingCredSubscription: Subscription; + + @Input() + public appName: string; + /** + * UI Elements + */ + @ViewChild('prompt', {read: ViewContainerRef}) + private _prompt: ViewContainerRef; + @ViewChild('consoleText') + private _consoleText: ElementRef; + + constructor( + private _componentFactoryResolver: ComponentFactoryResolver, + private _consoleService: ConsoleService) { + } + + ngOnInit() { + this._resourceIdSubscription = this._consoleService.getResourceId().subscribe(resourceId => { + this.resourceId = resourceId; }); + this._siteSubscription = this._consoleService.getSite().subscribe(site => { + this.site = site; }); + this._publishingCredSubscription = this._consoleService.getPublishingCredentials().subscribe(publishingCredentials => { + this.publishingCredentials = publishingCredentials; + }); + this.initialized = true; + this.focusConsole(); + } + + ngOnDestroy() { + this._resourceIdSubscription.unsubscribe(); + this._siteSubscription.unsubscribe(); + this._publishingCredSubscription.unsubscribe(); + if (this.lastAPICall && !this.lastAPICall.closed) { + this.lastAPICall.unsubscribe(); + } + } + + /** + * Mouse Press outside the console, + * i.e. the console no longer in focus + */ + unFocusConsole() { + this.isFocused = false; + this._renderPromptVariables(); + } + + /** + * Unfocus console manually + */ + unFocusConsoleManually() { + this._consoleText.nativeElement.blur(); + } + + /** + * Console brought to focus when textarea comes into focus + */ + focusConsoleOnTabPress() { + this.isFocused = true; + this._renderPromptVariables(); + } + + /** + * Mouse press inside the console, i.e. console comes into focus. + * If already in focus, the console remains to be in focus. + */ + focusConsole() { + this.isFocused = true; + this._renderPromptVariables(); + this._consoleText.nativeElement.focus(); + } + + /** + * Handle the paste event when in focus + * @param event: KeyEvent (paste in particular) + */ + handlePaste(event) { + const text = event.clipboardData.getData('text/plain'); + this.command += text; + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + } + + /** + * Handle the right mouse click + * @param event: MouseEvent, particularly right-click + */ + handleRightMouseClick(event): boolean { + return false; + } + + /** + * Handle the copy event when in focus + * @param event: Keyevent (copy in particular) + */ + handleCopy(event) { + if (!this.lastAPICall || this.lastAPICall.closed) { + this._removePrompt(); + this.addMessageComponent(); + } else if (!this.lastAPICall.closed) { + this.lastAPICall.unsubscribe(); + } + this._resetCommand(); + this.addPromptComponent(); + } + + /** + * Handles the key event of the keyboard, + * is called only when the console is in focus. + * @param event: KeyEvent + */ + keyEvent(event) { + if (!this._isKeyEventValid(event.which)) { + return; + } + /** + * Switch case on the key number + */ + switch (event.which) { + case KeyCodes.backspace: { + this._backspaceKeyEvent(); + break; + } + case KeyCodes.tab: { + event.preventDefault(); + this.tabKeyEvent(); + return; + } + case KeyCodes.enter: { + this._enterKeyEvent(); + break; + } + + case KeyCodes.escape: { + this._resetCommand(); + break; + } + + case KeyCodes.space: { + this._appendToCommand(ConsoleConstants.whitespace); + break; + } + + case KeyCodes.arrowLeft: { + this._leftArrowKeyEvent(); + break; + } + + case KeyCodes.arrowUp: { + this._topArrowKeyEvent(); + break; + } + + case KeyCodes.arrowRight: { + this._rightArrowKeyEvent(); + break; + } + + case KeyCodes.arrowDown: { + this._downArrowKeyEvent(); + break; + } + + default: { + this._appendToCommand(event.key, event.which); + break; + } + } + this._lastKeyPressed = event.which; + this._renderPromptVariables(); + this._refreshTabFunctionElements(); + } + + /** + * Get the command to list all the directories for the specific console-type + */ + protected abstract getTabKeyCommand(): string; + + /** + * perform action on key pressed. + */ + protected abstract performAction(cmd?: string): boolean; + + /** + * Handle the tab-pressed event + */ + protected abstract tabKeyEvent(); + + /** + * Get Kudu API URL + */ + protected abstract getKuduUri(): string ; + + /** + * Get the left-hand-side text for the console + */ + protected abstract getConsoleLeft(); + + /** + * Connect to the kudu API and display the response; + * both incase of an error or a valid response + */ + protected abstract connectToKudu(); + + /** + * Get the header to connect to the KUDU API. + */ + protected getHeader(): Headers { + const headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); + headers.append('Authorization', `Basic ` + ((this.publishingCredentials) ? btoa(`${this.publishingCredentials.properties.publishingUserName}:${this.publishingCredentials.properties.publishingPassword}`) : btoa(`admin:kudu`))); + return headers; + } + + /** + * Remove all the message history + */ + protected removeMsgComponents() { + let len = this._msgComponents.length; + while (len > 0) { + --len; + this._msgComponents.pop().destroy(); + } + } + + /** + * Add a message component, this is usually called after user presses enter + * and we have a response from the Kudu API(might be an error). + * @param message: String, represents a message to be passed to be shown + */ + protected addMessageComponent(message?: string) { + if (!this._messageComponent) { + this._messageComponent = this._componentFactoryResolver.resolveComponentFactory(MessageComponent); + } + const msgComponent = this._prompt.createComponent(this._messageComponent); + msgComponent.instance.loading = (message ? false : true); + msgComponent.instance.message = (message ? message : (this.getConsoleLeft() + this.command)); + this._msgComponents.push(msgComponent); + } + + /** + * Creates a new prompt box, + * created everytime a command is entered by the user and + * some response is generated from the server, or 'cls', 'exit' + */ + protected addPromptComponent() { + if (!this._promptComponent) { + this._promptComponent = this._componentFactoryResolver.resolveComponentFactory(PromptComponent); + } + this._currentPrompt = this._prompt.createComponent(this._promptComponent); + this._currentPrompt.instance.dir = this.getConsoleLeft(); + this._currentPrompt.instance.consoleType = this.consoleType; + // hide the loader on the last 2 msg-components + if (this._msgComponents.length > 0) { // check required if 'clear' command is entered. + this._msgComponents[this._msgComponents.length - 1].instance.loading = false; + } + if (this._msgComponents.length > 1) { + this._msgComponents[this._msgComponents.length - 2].instance.loading = false; + } + } + + /** + * Create a error message + * @param error : String, represents the error message to be shown + */ + protected addErrorComponent(error: string) { + if (!this._errorComponent) { + this._errorComponent = this._componentFactoryResolver.resolveComponentFactory(ErrorComponent); + } + const errorComponent = this._prompt.createComponent(this._errorComponent); + this._msgComponents.push(errorComponent); + errorComponent.instance.message = error; + } + + /** + * Divide the commands into left, current and right + */ + protected divideCommandForPtr() { + if (this.ptrPosition < 0 || this.ptrPosition > this.command.length) { + return; + } + if (this.ptrPosition === this.command.length) { + this.commandInParts.leftCmd = this.command; + this.commandInParts.middleCmd = ConsoleConstants.whitespace; + this.commandInParts.rightCmd = ''; + return; + } + this.commandInParts.leftCmd = this.command.substring(0, this.ptrPosition); + this.commandInParts.middleCmd = this.command.substring(this.ptrPosition, this.ptrPosition + 1); + this.commandInParts.rightCmd = this.command.substring(this.ptrPosition + 1, this.command.length); + } + + private _isKeyEventValid(key: number) { + if (this.enterPressed && key !== KeyCodes.ctrl && key !== KeyCodes.c) { + // command already in progress + return false; + } + return true; + } + + /** + * Left Arrow key pressed + */ + private _leftArrowKeyEvent() { + if (this.ptrPosition >= 1) { + --this.ptrPosition; + this.divideCommandForPtr(); + } + } + + /** + * Right Arrow key pressed + */ + private _rightArrowKeyEvent() { + if (this.ptrPosition < this.command.length) { + ++this.ptrPosition; + this.divideCommandForPtr(); + } + } + + /** + * Down Arrow key pressed + */ + private _downArrowKeyEvent() { + if (this.commandHistory.length > 0 && this.commandHistoryIndex < this.commandHistory.length - 1) { + this.commandHistoryIndex = (this.commandHistoryIndex + 1) % (this.commandHistory.length); + this.command = this.commandHistory[this.commandHistoryIndex]; + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + } + } + + /** + * Top Arrow key pressed + */ + private _topArrowKeyEvent() { + if (this.commandHistoryIndex > 0) { + this.command = this.commandHistory[this.commandHistoryIndex - 1]; + this.commandHistoryIndex = (this.commandHistoryIndex === 1 ? 0 : --this.commandHistoryIndex); + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + } + } + + /** + * Backspace pressed by the user + */ + private _backspaceKeyEvent() { + if (this.ptrPosition < 1) { + return; + } + this.commandInParts.leftCmd = this.commandInParts.leftCmd.slice(0, -1); + if (this.ptrPosition === this.command.length) { + this.command = this.commandInParts.leftCmd; + --this.ptrPosition; + return; + } + this.command = this.commandInParts.leftCmd + this.commandInParts.middleCmd + this.commandInParts.rightCmd; + --this.ptrPosition; + this.divideCommandForPtr(); + } + + /** + * Handle the Enter key pressed operation + */ + private _enterKeyEvent() { + this.enterPressed = true; + const flag = this.performAction(); + this._removePrompt(); + this.commandHistory.push(this.command); + this.commandHistoryIndex = this.commandHistory.length; + if (flag) { + this.addMessageComponent(); + this.connectToKudu(); + } else { + this.addPromptComponent(); + this.enterPressed = false; + } + this._resetCommand(); + } + + /** + * Remove the current prompt from the console + */ + private _removePrompt() { + const oldPrompt = document.getElementById('prompt'); + if (!oldPrompt) { + return; + } + oldPrompt.remove(); + } + + /** + * Refresh the tab elements, + * i.e. the list of files/folder and the current dir index + */ + private _refreshTabFunctionElements() { + this.listOfDir.length = 0; + this.dirIndex = -1; + } + + /** + * Reset the command + */ + private _resetCommand() { + this.command = ''; + this.commandInParts.rightCmd = ''; + this.commandInParts.leftCmd = ''; + this.commandInParts.middleCmd = ConsoleConstants.whitespace; + this.ptrPosition = 0; + } + + /** + * Add the text to the current command + * @param cmd :String + */ + private _appendToCommand(cmd: string, key?: number) { + if (key && ((key > KeyCodes.backspace && key <= KeyCodes.delete) || (key >= KeyCodes.leftWindow && key <= KeyCodes.select) || (key >= KeyCodes.f1 && key < KeyCodes.scrollLock))) { + // key-strokes not allowed, for e.g F1-F12 + return; + } + if (key && (key === KeyCodes.c || key === KeyCodes.v) && this._lastKeyPressed === KeyCodes.ctrl) { + // Ctrl + C or Ctrl + V pressed, should not append c/v to the current command + return; + } + this.commandHistoryIndex = this.commandHistory.length; // reset the command-index to the last command + if (this.ptrPosition === this.command.length) { + this.commandInParts.leftCmd += cmd; + this.command = this.commandInParts.leftCmd; + ++this.ptrPosition; + return; + } + this.commandInParts.leftCmd += cmd; + this.command = this.commandInParts.leftCmd + this.commandInParts.middleCmd + this.commandInParts.rightCmd; + ++this.ptrPosition; + } + + /** + * Render the dynamically loaded prompt box, + * i.e. pass in the updated command the inFocus value to the PromptComponent. + */ + private _renderPromptVariables() { + if (this._currentPrompt) { + this._currentPrompt.instance.command = this.command; + this._currentPrompt.instance.commandInParts = this.commandInParts; + this._currentPrompt.instance.isFocused = this.isFocused; + } + } +} diff --git a/client/src/app/site/console/shared/components/abstract.windows.component.ts b/client/src/app/site/console/shared/components/abstract.windows.component.ts new file mode 100644 index 0000000000..9bd48f80b4 --- /dev/null +++ b/client/src/app/site/console/shared/components/abstract.windows.component.ts @@ -0,0 +1,152 @@ +import { AbstractConsoleComponent } from './abstract.console.component'; +import { ComponentFactoryResolver } from '@angular/core'; +import { ConsoleService } from '../services/console.service'; +import { Regex, ConsoleConstants, HttpMethods } from '../../../../shared/models/constants'; + +export abstract class AbstractWindowsComponent extends AbstractConsoleComponent { + private readonly _defaultDirectory = 'D:\\home\\site\\wwwroot'; + private readonly _windowsNewLine = '\r\n'; + constructor( + componentFactoryResolver: ComponentFactoryResolver, + public consoleService: ConsoleService + ) { + super(componentFactoryResolver, consoleService); + this.dir = this._defaultDirectory; + } + + /** + * Get Kudu API URL + */ + protected getKuduUri(): string { + const scmHostName = this.site.properties.hostNameSslStates.find (h => h.hostType === 1).name; + return `https://${scmHostName}/api/command`; + } + + /** + * Handle the tab-pressed event + */ + protected tabKeyEvent() { + this.unFocusConsoleManually(); + if (this.listOfDir.length === 0) { + const uri = this.getKuduUri(); + const header = this.getHeader(); + const body = { + 'command': (this.getCommandPrefix() + this.getTabKeyCommand()), + 'dir': this.dir + ConsoleConstants.singleBackslash + }; + const res = this.consoleService.send(HttpMethods.POST, uri, JSON.stringify(body), header); + res.subscribe( + data => { + const output = data.json(); + if (output.ExitCode === ConsoleConstants.successExitcode) { + // fetch the list of files/folders in the current directory + const cmd = this.command.substring(0, this.ptrPosition); + const allFiles = output.Output.split(this._windowsNewLine); + this.listOfDir = this.consoleService.findMatchingStrings(allFiles, cmd.substring(cmd.lastIndexOf(ConsoleConstants.whitespace) + 1)); + if (this.listOfDir.length > 0) { + this.dirIndex = 0; + this.command = this.command.substring(0, this.ptrPosition); + this.command = this.command.substring(0, this.command.lastIndexOf(ConsoleConstants.whitespace) + 1) + this.listOfDir[0]; + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + } + } + this.focusConsole(); + }, + err => { + console.log('Tab Key Error' + err.text); + } + ); + return; + } + this.command = this.command.substring(0, this.ptrPosition); + this.command = this.command.substring(0, this.command.lastIndexOf(ConsoleConstants.whitespace) + 1) + this.listOfDir[ (this.dirIndex++) % this.listOfDir.length]; + this.ptrPosition = this.command.length; + this.divideCommandForPtr(); + this.focusConsole(); + } + + /** + * Connect to the kudu API and display the response; + * both incase of an error or a valid response + */ + protected connectToKudu() { + const uri = this.getKuduUri(); + const header = this.getHeader(); + const cmd = this.command; + const body = { + 'command': this.getCommandPrefix() + cmd, + 'dir': (this.dir + ConsoleConstants.singleBackslash) + }; + const res = this.consoleService.send(HttpMethods.POST, uri, JSON.stringify(body), header); + this.lastAPICall = res.subscribe( + data => { + const output = data.json(); + if (output.Output === '' && output.ExitCode !== ConsoleConstants.successExitcode) { + this.addErrorComponent(output.Error + ConsoleConstants.newLine); + } else { + this.addMessageComponent(output.Output + ConsoleConstants.newLine); + if (output.ExitCode === ConsoleConstants.successExitcode && output.Output === '') { + this.performAction(cmd); + } + } + this.addPromptComponent(); + this.enterPressed = false; + return output; + }, + err => { + this.addErrorComponent(err.text); + this.enterPressed = false; + } + ); + } + + /** + * perform action on key pressed. + */ + protected performAction(cmd?: string): boolean { + if (this.command.toLowerCase() === ConsoleConstants.windowsClear) { + this.removeMsgComponents(); + return false; + } + if (this.command.toLowerCase() === ConsoleConstants.exit) { + this.removeMsgComponents(); + this.dir = this._defaultDirectory; + return false; + } + if (cmd && cmd.toLowerCase().startsWith(ConsoleConstants.changeDirectory)) { + cmd = cmd.substring(2).trim().replace(Regex.singleForwardSlash, ConsoleConstants.singleBackslash).replace(Regex.doubleBackslash, ConsoleConstants.singleBackslash); + this._changeCurrentDirectory(cmd); + return false; + } + return true; + } + + protected abstract getCommandPrefix(): string; + + /** + * Change current directory; run cd command + */ + private _changeCurrentDirectory(cmd: string) { + const currentDirs = this.dir.split(ConsoleConstants.singleBackslash); + if (cmd === ConsoleConstants.singleBackslash) { + this.dir = currentDirs[0]; + } else { + const dirsInPath = cmd.split(ConsoleConstants.singleBackslash); + for (let i = 0; i < dirsInPath.length; ++i) { + if (dirsInPath[i] === ConsoleConstants.currentDirectory) { + // remain in current directory + } else if (dirsInPath[i] === '' || dirsInPath[i] === ConsoleConstants.previousDirectory) { + if (currentDirs.length === 1) { + break; + } + currentDirs.pop(); + } else { + currentDirs.push(dirsInPath[i]); + } + } + this.dir = currentDirs.join(ConsoleConstants.singleBackslash); + } + } + +} diff --git a/client/src/app/site/console/shared/components/error.component.ts b/client/src/app/site/console/shared/components/error.component.ts new file mode 100644 index 0000000000..c21c2100e9 --- /dev/null +++ b/client/src/app/site/console/shared/components/error.component.ts @@ -0,0 +1,10 @@ +import {Component, Input} from '@angular/core'; +@Component({ + template: `
{{message}}
`, + styleUrls: ['./../../console.component.scss'] +}) +export class ErrorComponent { + @Input() message: string; + constructor() { + } +} diff --git a/client/src/app/site/console/shared/components/message.component.ts b/client/src/app/site/console/shared/components/message.component.ts new file mode 100644 index 0000000000..4f6582955a --- /dev/null +++ b/client/src/app/site/console/shared/components/message.component.ts @@ -0,0 +1,11 @@ +import {Component, Input} from '@angular/core'; +@Component({ + template: `
{{message}}
`, + styleUrls: ['./../../console.component.scss'] +}) +export class MessageComponent { + @Input() message: string; + @Input() loading: boolean; + constructor() { + } +} diff --git a/client/src/app/site/console/shared/components/prompt.component.ts b/client/src/app/site/console/shared/components/prompt.component.ts new file mode 100644 index 0000000000..942cd80bb1 --- /dev/null +++ b/client/src/app/site/console/shared/components/prompt.component.ts @@ -0,0 +1,16 @@ +import {Component, Input} from '@angular/core'; +import { ConsoleTypes } from '../services/console.service'; +@Component({ + template: `
{{dir}}{{commandInParts.leftCmd}}{{commandInParts.middleCmd}}{{commandInParts.rightCmd}}
`, + styleUrls: ['./../../console.component.scss'] +}) +export class PromptComponent { + public types = ConsoleTypes; + @Input() dir = ''; + @Input() command = ''; + @Input() commandInParts = {leftCmd: '', middleCmd: ' ' , rightCmd: ''}; + @Input() isFocused = true; + @Input() consoleType: number; + constructor() { + } +} diff --git a/client/src/app/site/console/shared/directives/click.directive.ts b/client/src/app/site/console/shared/directives/click.directive.ts new file mode 100644 index 0000000000..8b0ff45934 --- /dev/null +++ b/client/src/app/site/console/shared/directives/click.directive.ts @@ -0,0 +1,19 @@ +import {Directive, ElementRef, Output, HostListener, EventEmitter} from '@angular/core'; +@Directive({ + selector: '[clickOutside]' +}) +export class ClickOutsideDirective { + @Output() + public clickOutside = new EventEmitter(); + + constructor(private _elementRef: ElementRef) { + } + + @HostListener('document: click', ['$event.target']) + public onClick(targetElement) { + const inside = this._elementRef.nativeElement.contains(targetElement); + if (!inside) { + this.clickOutside.emit(null); + } + } +} diff --git a/client/src/app/site/console/shared/services/console.service.ts b/client/src/app/site/console/shared/services/console.service.ts new file mode 100644 index 0000000000..57b1ec29c6 --- /dev/null +++ b/client/src/app/site/console/shared/services/console.service.ts @@ -0,0 +1,105 @@ +import { Injectable } from '@angular/core'; +import { Headers, Http, Request } from '@angular/http'; +import { ArmObj } from '../../../../shared/models/arm/arm-obj'; +import { Site } from '../../../../shared/models/arm/site'; +import { PublishingCredentials } from '../../../../shared/models/publishing-credentials'; +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; +import { Observable } from 'rxjs/Observable'; + +export enum ConsoleTypes { + CMD = 1, + PS = 2, + BASH = 3, + SSH = 4 +} + +@Injectable() +export class ConsoleService { + + private _resourceIdSubject = new BehaviorSubject(''); + private _siteSubject = new BehaviorSubject>(undefined); + private _publishingCredentialsSubject = new BehaviorSubject>(undefined); + + constructor( + private _http: Http) { + } + + /** + * Send the resource ID to child components + */ + sendResourceId(resourceId: string) { + this._resourceIdSubject.next(resourceId); + } + + /** + * Send the site object to child components + */ + sendSite(site: ArmObj) { + this._siteSubject.next(site); + } + + /** + * Send the publishing credentials' object to child components + */ + sendPublishingCredentials(publishingCredentials: ArmObj) { + this._publishingCredentialsSubject.next(publishingCredentials); + } + + /** + * Get resourceID + */ + getResourceId(): Observable { + return this._resourceIdSubject.asObservable(); + } + + /** + * Get Site object as Observable + */ + getSite(): Observable> { + return this._siteSubject.asObservable(); + } + + /** + * Get publishing credentials as Observable + */ + getPublishingCredentials(): Observable< ArmObj> { + return this._publishingCredentialsSubject.asObservable(); + } + + /** + * Connect the given service(url) using the passed in method, + * body and header elements. + * @param method : String, one of {GET, POST, PUT, DELETE} + * @param url : String + * @param body: any? + * @param headers: Headers? + */ + send(method: string, url: string, body?: any, headers?: Headers) { + const request = new Request({ + url: url, + method: method, + search: null, + headers: headers, + body: body ? body : null + }); + return this._http.request(request); + } + + /** + * Find all the strings which start with the given string, 'cmd' from the given string array + * Incase the string is empty, the inital array of strings is returned. + */ + findMatchingStrings(allFiles: string[], cmd: string): string[] { + if (!cmd || cmd === '') { + return allFiles; + } + const ltOfDir: string[] = []; + cmd = cmd.toLowerCase(); + allFiles.forEach (element => { + if (element.toLowerCase().startsWith(cmd)) { + ltOfDir.push(element); + } + }); + return ltOfDir; + } +} diff --git a/client/src/app/site/console/shared/services/mock.services.ts b/client/src/app/site/console/shared/services/mock.services.ts new file mode 100644 index 0000000000..bb9c945eaa --- /dev/null +++ b/client/src/app/site/console/shared/services/mock.services.ts @@ -0,0 +1,79 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import { ArmObj } from '../../../../shared/models/arm/arm-obj'; +import { Site } from '../../../../shared/models/arm/site'; +import { PublishingCredentials } from '../../../../shared/models/publishing-credentials'; + +export class TestClipboard { + getData(type: string) { + return 'paste'; + } + } + +@Injectable() +export class MockCacheService { + postArm(resourceId: string, force?: boolean, apiVersion?: string, content?: any, cacheKeyPrefix?: string): Observable { + return Observable.of(null); + } +} + +@Injectable() +export class MockSiteService { + public siteObject = { + properties: { + hostNameSslStates: [{ name: '', hostType: 1 }] + } + }; + getSite(resourceId: string) { + return Observable.of({ + isSuccessful: true, + result: this.siteObject + }); + } +} + +@Injectable() +export class MockConsoleService { + + send(method: string, url: string, body?: any, headers?: Headers) { + return Observable.of(null); + } + + findMatchingStrings(allFiles: string[], cmd: string): string[] { + if (!cmd || cmd === '') { + return allFiles; + } + const ltOfDir: string[] = []; + cmd = cmd.toLowerCase(); + allFiles.forEach(element => { + if (element.toLowerCase().startsWith(cmd)) { + ltOfDir.push(element); + } + }); + return ltOfDir; + } + + sendResourceId(resourceId: string) { + return; + } + + sendSite(site: ArmObj) { + return; + } + + sendPublishingCredentials(publishingCredentials: ArmObj) { + return; + } + + getResourceId(): Observable { + return Observable.of(null); + } + + getSite(): Observable> { + return Observable.of(null); + } + + getPublishingCredentials(): Observable< ArmObj> { + return Observable.of(null); + } +} diff --git a/client/src/app/site/console/ssh/ssh.component.html b/client/src/app/site/console/ssh/ssh.component.html new file mode 100644 index 0000000000..7e5f51318d --- /dev/null +++ b/client/src/app/site/console/ssh/ssh.component.html @@ -0,0 +1,4 @@ +
+

{{'feature_sshInfo' | translate}}

+ Go-> +
diff --git a/client/src/app/site/console/ssh/ssh.component.ts b/client/src/app/site/console/ssh/ssh.component.ts new file mode 100644 index 0000000000..89885be6d7 --- /dev/null +++ b/client/src/app/site/console/ssh/ssh.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit, OnDestroy} from '@angular/core'; +import { ConsoleService } from './../shared/services/console.service'; +import { Site } from '../../../shared/models/arm/site'; +import { ArmObj } from '../../../shared/models/arm/arm-obj'; +import { PublishingCredentials } from '../../../shared/models/publishing-credentials'; +import { Subscription } from 'rxjs/Subscription'; + +@Component({ + selector: 'app-ssh', + templateUrl: './ssh.component.html', + styleUrls: ['./../console.component.scss'] +}) +export class SSHComponent implements OnInit, OnDestroy { + + protected site: ArmObj; + protected publishingCredentials: ArmObj; + public resourceId: string; + private _resourceIdSubscription: Subscription; + private _siteSubscription: Subscription; + private _publishingCredSubscription: Subscription; + constructor( + private _consoleService: ConsoleService + ) { + + } + + ngOnInit() { + this._resourceIdSubscription = this._consoleService.getResourceId().subscribe(resourceId => { + this.resourceId = resourceId; }); + this._siteSubscription = this._consoleService.getSite().subscribe(site => { + this.site = site; }); + this._publishingCredSubscription = this._consoleService.getPublishingCredentials().subscribe(publishingCredentials => { + this.publishingCredentials = publishingCredentials; + }); + } + + ngOnDestroy() { + this._resourceIdSubscription.unsubscribe(); + this._siteSubscription.unsubscribe(); + this._publishingCredSubscription.unsubscribe(); + } + + /** + * Get Kudu API URL + */ + public getKuduUri(): string { + const scmHostName = this.site ? (this.site.properties.hostNameSslStates.find (h => h.hostType === 1).name) : 'funcplaceholder01.scm.azurewebsites.net'; + return `https://${scmHostName}/webssh/host`; + } + +} diff --git a/client/src/app/site/deployment-center/deployment-center-setup/validators/vsts-validators.ts b/client/src/app/site/deployment-center/deployment-center-setup/validators/vsts-validators.ts index 8a6ccb460b..7062e61393 100644 --- a/client/src/app/site/deployment-center/deployment-center-setup/validators/vsts-validators.ts +++ b/client/src/app/site/deployment-center/deployment-center-setup/validators/vsts-validators.ts @@ -39,16 +39,20 @@ export class VstsValidators { const vstsProjectValue: string = projectControl.value; if (vstsAccountValue && vstsProjectValue) { return _cacheService.get(`https://${vstsAccountValue}.visualstudio.com/_apis/projects?includeCapabilities=true`) - .switchMap(r => { + .concatMap(r => { const projectList: [{ id: string, name: string }] = r.json().value; const currentProject = projectList.find(x => x.name.toLowerCase() === vstsProjectValue.toLowerCase()); if (currentProject) { const callHeaders = _wizard.getVstsDirectHeaders(); callHeaders.append('accept', 'application/json;api-version=3.2-preview.2'); - return Observable.forkJoin( - _cacheService.get(`https://${vstsAccountValue}.visualstudio.com/DefaultCollection/_apis/Permissions/${DeploymentCenterConstants.buildSecurityNameSpace}/${DeploymentCenterConstants.editBuildDefinitionBitMask}?tokens=${currentProject.id}`, true, callHeaders), - _cacheService.get(`https://${vstsAccountValue}.visualstudio.com/DefaultCollection/_apis/Permissions/${DeploymentCenterConstants.releaseSecurityNameSpace}/${DeploymentCenterConstants.editReleaseDefinitionPermission}?tokens=${currentProject.id}`, true, callHeaders) - ); + // need to ping the release rp in vso in order to subscribe to user to the RP, otherwise the rp call will fail + return _cacheService.get(`https://${vstsAccountValue}.vsrm.visualstudio.com/${currentProject.id}/_apis/Release/definitions/environmenttemplates`, true, callHeaders) + .switchMap(() => { + return Observable.forkJoin( + _cacheService.get(`https://${vstsAccountValue}.visualstudio.com/DefaultCollection/_apis/Permissions/${DeploymentCenterConstants.buildSecurityNameSpace}/${DeploymentCenterConstants.editBuildDefinitionBitMask}?tokens=${currentProject.id}`, true, callHeaders), + _cacheService.get(`https://${vstsAccountValue}.visualstudio.com/DefaultCollection/_apis/Permissions/${DeploymentCenterConstants.releaseSecurityNameSpace}/${DeploymentCenterConstants.editReleaseDefinitionPermission}?tokens=${currentProject.id}`, true, callHeaders) + ); + }); } return Observable.of(null); }) diff --git a/client/src/app/site/deployment-center/provider-dashboards/vso-Dashboard/vso-dashboard.component.ts b/client/src/app/site/deployment-center/provider-dashboards/vso-Dashboard/vso-dashboard.component.ts index 9b9796be8e..1cc14af915 100644 --- a/client/src/app/site/deployment-center/provider-dashboards/vso-Dashboard/vso-dashboard.component.ts +++ b/client/src/app/site/deployment-center/provider-dashboards/vso-Dashboard/vso-dashboard.component.ts @@ -220,13 +220,12 @@ export class VsoDashboardComponent implements OnChanges, OnDestroy { } private _getMessage(messageJSON: KuduLogMessage, status: number, logType: VSTSLogMessageType, targetApp?: string): string { - //TODO: Move strings to localization targetApp = targetApp ? targetApp : messageJSON.slotName; switch (logType) { case VSTSLogMessageType.Deployment: return status === 4 ? this._translateService.instant('deployedSuccessfullyTo').format(targetApp) - : this._translateService.instant('deployedSuccessfullyTo').format(targetApp); + : this._translateService.instant('deployedFailedTo').format(targetApp); case VSTSLogMessageType.SlotSwap: return status === 4 ? this._translateService.instant('swappedSlotSuccess').format(messageJSON.sourceSlot, messageJSON.targetSlot) diff --git a/client/src/app/site/site-dashboard/site-dashboard.component.ts b/client/src/app/site/site-dashboard/site-dashboard.component.ts index ac22494a7f..c4474b0a56 100644 --- a/client/src/app/site/site-dashboard/site-dashboard.component.ts +++ b/client/src/app/site/site-dashboard/site-dashboard.component.ts @@ -32,6 +32,7 @@ import { PartSize } from '../../shared/models/portal'; import { NavigableComponent, ExtendedTreeViewInfo } from '../../shared/components/navigable-component'; import { DeploymentCenterComponent } from 'app/site/deployment-center/deployment-center.component'; import { Observable } from 'rxjs/Observable'; +import { ConsoleComponent } from '../console/console.component'; @Component({ selector: 'site-dashboard', @@ -318,11 +319,20 @@ export class SiteDashboardComponent extends NavigableComponent implements OnDest info.componentFactory = LogicAppsComponent; info.closeable = true; break; + + case SiteTabIds.console: + info.title = this._translateService.instant(PortalResources.feature_consoleName); + info.iconUrl = 'image/console.svg'; + info.componentFactory = ConsoleComponent; + info.closeable = true; + break; + case SiteTabIds.continuousDeployment: info.title = this._translateService.instant(PortalResources.deploymentCenter); info.iconUrl = 'image/deployment-source.svg'; info.componentFactory = DeploymentCenterComponent; break; + case SiteTabIds.scaleUp: info.title = this._translateService.instant('Scale up'); info.iconUrl = 'image/scale-up.svg'; diff --git a/client/src/app/site/site-manage/site-manage.component.ts b/client/src/app/site/site-manage/site-manage.component.ts index a137779930..d36a188219 100644 --- a/client/src/app/site/site-manage/site-manage.component.ts +++ b/client/src/app/site/site-manage/site-manage.component.ts @@ -220,22 +220,15 @@ export class SiteManageComponent extends FeatureComponent )); } - if (this._scenarioService.checkScenario(ScenarioIds.addConsole, { site: site }).status !== 'disabled') { - developmentToolFeatures.push(new DisableableBladeFeature( + if (this._scenarioService.checkScenario(ScenarioIds.addConsole, { site: site }).status !== 'disabled' || + this._scenarioService.checkScenario(ScenarioIds.addSsh, { site: site }).status === 'enabled') { + developmentToolFeatures.push(new TabFeature( this._translateService.instant(PortalResources.feature_consoleName), - this._translateService.instant(PortalResources.feature_consoleName) + - ' ' + - this._translateService.instant(PortalResources.debug), + this._translateService.instant(PortalResources.feature_consoleMsg), this._translateService.instant(PortalResources.feature_consoleInfo), 'image/console.svg', - { - detailBlade: 'ConsoleBlade', - detailBladeInputs: { - resourceUri: site.id - } - }, - this._portalService, - this._hasSiteWritePermissionStream + SiteTabIds.console, + this._broadcastService )); } diff --git a/client/src/app/site/site.module.ts b/client/src/app/site/site.module.ts index 27704bf117..58fb9d31b1 100644 --- a/client/src/app/site/site.module.ts +++ b/client/src/app/site/site.module.ts @@ -20,6 +20,7 @@ import { HostEditorComponent } from './../host-editor/host-editor.component'; import { SiteConfigModule } from 'app/site/site-config/site-config.module'; import { SpecPickerModule } from './spec-picker/spec-picker.module'; import { ProdFunctionInitialUploadComponent } from '../prod-function-initial-upload/prod-function-initial-upload.component'; +import { ConsoleModule } from './console/console.module'; const routing: ModuleWithProviders = RouterModule.forChild([{ path: '', component: SiteDashboardComponent }]); @@ -37,6 +38,7 @@ const routing: ModuleWithProviders = RouterModule.forChild([{ path: '', componen SharedModule, SharedFunctionsModule, SiteConfigModule, + ConsoleModule, DeploymentCenterModule, SpecPickerModule, routing diff --git a/client/src/app/site/spec-picker/price-spec-manager/premium-container-plan-price-spec.ts b/client/src/app/site/spec-picker/price-spec-manager/premium-container-plan-price-spec.ts new file mode 100644 index 0000000000..304e2d3847 --- /dev/null +++ b/client/src/app/site/spec-picker/price-spec-manager/premium-container-plan-price-spec.ts @@ -0,0 +1,123 @@ +import { PriceSpec, PriceSpecInput } from './price-spec'; +import { Injector } from '@angular/core'; +import { PortalResources } from '../../../shared/models/portal-resources'; +import { Links } from '../../../shared/models/constants'; + +export abstract class PremiumContainerPlanPriceSpec extends PriceSpec { + + featureItems = [{ + iconUrl: 'image/ssl.svg', + title: this._ts.instant(PortalResources.pricing_customDomainsSsl), + description: this._ts.instant(PortalResources.pricing_customDomainsIpSslDesc) + }, + { + iconUrl: 'image/scale-up.svg', + title: this._ts.instant(PortalResources.pricing_autoScale), + description: this._ts.instant(PortalResources.pricing_scaleDesc).format(20) + }, + { + iconUrl: 'image/slots.svg', + title: this._ts.instant(PortalResources.pricing_stagingSlots), + description: this._ts.instant(PortalResources.pricing_slotsDesc).format(20) + }, + { + iconUrl: 'image/globe.svg', + title: this._ts.instant(PortalResources.pricing_trafficManager), + description: this._ts.instant(PortalResources.pricing_trafficManagerDesc) + }]; + + hardwareItems = [{ + iconUrl: 'image/app-service-plan.svg', + title: this._ts.instant(PortalResources.cpu), + description: this._ts.instant(PortalResources.pricing_dv3SeriesDedicatedCpu), + learnMoreUrl: Links.vmSizeLearnMore + }, + { + iconUrl: 'image/website-power.svg', + title: this._ts.instant(PortalResources.memory), + description: this._ts.instant(PortalResources.pricing_dedicatedMemory) + }, + { + iconUrl: 'image/storage.svg', + title: this._ts.instant(PortalResources.storage), + description: this._ts.instant(PortalResources.pricing_sharedDisk).format('250 GB') + }]; + + cssClass = 'spec premium-spec'; + + constructor(injector: Injector) { + super(injector); + } + + runInitialization(input: PriceSpecInput) { + // NOTE(michinoy): Only allow premium containers for xenon. + if ((input.specPickerInput.data && input.specPickerInput.data.isXenon) || + (input.plan && input.plan.properties.isXenon)) { + this.state = 'enabled'; + } else { + this.state = 'hidden'; + } + + return this.checkIfDreamspark(input.subscriptionId); + } +} + +export class PremiumContainerSmallPriceSpec extends PremiumContainerPlanPriceSpec { + skuCode = 'PC2'; + legacySkuName = 'small_premium_container'; + topLevelFeatures = [ + this._ts.instant(PortalResources.pricing_numCores).format('2x'), + this._ts.instant(PortalResources.pricing_memory).format('8'), + this._ts.instant(PortalResources.pricing_dv3SeriesCompute) + ]; + + meterFriendlyName = 'Premium Container Small App Service Hours'; + + specResourceSet = { + id: this.skuCode, + firstParty: [{ + quantity: 744, + resourceId: null + }] + }; +} + +export class PremiumContainerMediumPriceSpec extends PremiumContainerPlanPriceSpec { + skuCode = 'PC3'; + legacySkuName = 'medium_premium_container'; + topLevelFeatures = [ + this._ts.instant(PortalResources.pricing_numCores).format('4x'), + this._ts.instant(PortalResources.pricing_memory).format('16'), + this._ts.instant(PortalResources.pricing_dv3SeriesCompute) + ]; + + meterFriendlyName = 'Premium Container Medium App Service Hours'; + + specResourceSet = { + id: this.skuCode, + firstParty: [{ + quantity: 744, + resourceId: null + }] + }; +} + +export class PremiumContainerLargePriceSpec extends PremiumContainerPlanPriceSpec { + skuCode = 'PC4'; + legacySkuName = 'large_premium_container'; + topLevelFeatures = [ + this._ts.instant(PortalResources.pricing_numCores).format('8x'), + this._ts.instant(PortalResources.pricing_memory).format('32'), + this._ts.instant(PortalResources.pricing_dv3SeriesCompute) + ]; + + meterFriendlyName = 'Premium Container Large App Service Hours'; + + specResourceSet = { + id: this.skuCode, + firstParty: [{ + quantity: 744, + resourceId: null + }] + }; +} diff --git a/client/src/app/site/spec-picker/price-spec-manager/premiumv2-plan-price-spec.ts b/client/src/app/site/spec-picker/price-spec-manager/premiumv2-plan-price-spec.ts index e49afdb455..abb735a795 100644 --- a/client/src/app/site/spec-picker/price-spec-manager/premiumv2-plan-price-spec.ts +++ b/client/src/app/site/spec-picker/price-spec-manager/premiumv2-plan-price-spec.ts @@ -65,14 +65,6 @@ export abstract class PremiumV2PlanPriceSpec extends PriceSpec { runInitialization(input: PriceSpecInput) { let $checkStamp: Observable = Observable.of(null); - if ((input.specPickerInput.data && input.specPickerInput.data.isXenon) - || (input.plan && input.plan.properties.isXenon)) { - const slotsFeatureIndex = this.featureItems.findIndex(f => f.title === this._ts.instant(PortalResources.pricing_stagingSlots)); - if (slotsFeatureIndex > -1) { - this.featureItems.splice(slotsFeatureIndex, 1); - } - } - if (input.specPickerInput.data) { if (input.specPickerInput.data.hostingEnvironmentName) { @@ -147,6 +139,19 @@ export class PremiumV2SmallPlanPriceSpec extends PremiumV2PlanPriceSpec { resourceId: null }] }; + + runInitialization(input: PriceSpecInput) { + if (input.specPickerInput.data && input.specPickerInput.data.isXenon) { + this.state = 'hidden'; + return Observable.of(null); + } + + if (input.plan && input.plan.properties.isXenon) { + this.state = 'hidden'; + } + + return super.runInitialization(input); + } } export class PremiumV2MediumPlanPriceSpec extends PremiumV2PlanPriceSpec { @@ -167,6 +172,19 @@ export class PremiumV2MediumPlanPriceSpec extends PremiumV2PlanPriceSpec { resourceId: null }] }; + + runInitialization(input: PriceSpecInput) { + if (input.specPickerInput.data && input.specPickerInput.data.isXenon) { + this.state = 'hidden'; + return Observable.of(null); + } + + if (input.plan && input.plan.properties.isXenon) { + this.state = 'hidden'; + } + + return super.runInitialization(input); + } } export class PremiumV2LargePlanPriceSpec extends PremiumV2PlanPriceSpec { @@ -187,4 +205,17 @@ export class PremiumV2LargePlanPriceSpec extends PremiumV2PlanPriceSpec { resourceId: null }] }; + + runInitialization(input: PriceSpecInput) { + if (input.specPickerInput.data && input.specPickerInput.data.isXenon) { + this.state = 'hidden'; + return Observable.of(null); + } + + if (input.plan && input.plan.properties.isXenon) { + this.state = 'hidden'; + } + + return super.runInitialization(input); + } } \ No newline at end of file diff --git a/client/src/app/site/spec-picker/price-spec-manager/price-spec-group.ts b/client/src/app/site/spec-picker/price-spec-manager/price-spec-group.ts index 791558c2a8..a6621ee132 100644 --- a/client/src/app/site/spec-picker/price-spec-manager/price-spec-group.ts +++ b/client/src/app/site/spec-picker/price-spec-manager/price-spec-group.ts @@ -1,4 +1,4 @@ -import { Links, Kinds } from 'app/shared/models/constants'; +import { Links } from 'app/shared/models/constants'; import { StatusMessage } from './../spec-picker.component'; import { PriceSpec, PriceSpecInput } from './price-spec'; import { FreePlanPriceSpec } from './free-plan-price-spec'; @@ -11,7 +11,8 @@ import { IsolatedSmallPlanPriceSpec, IsolatedMediumPlanPriceSpec, IsolatedLargeP import { Injector } from '@angular/core'; import { PortalResources } from '../../../shared/models/portal-resources'; import { TranslateService } from '@ngx-translate/core'; -import { AppKind } from '../../../shared/Utilities/app-kind'; +import { PremiumContainerSmallPriceSpec, PremiumContainerMediumPriceSpec, PremiumContainerLargePriceSpec } from './premium-container-plan-price-spec'; +import { ArmUtil } from '../../../shared/Utilities/arm-utils'; export abstract class PriceSpecGroup { abstract iconUrl: string; @@ -80,10 +81,12 @@ export class DevSpecGroup extends PriceSpecGroup { export class ProdSpecGroup extends PriceSpecGroup { recommendedSpecs = [ - new StandardSmallPlanPriceSpec(this.injector), new PremiumV2SmallPlanPriceSpec(this.injector), new PremiumV2MediumPlanPriceSpec(this.injector), - new PremiumV2LargePlanPriceSpec(this.injector) + new PremiumV2LargePlanPriceSpec(this.injector), + new PremiumContainerSmallPriceSpec(this.injector), + new PremiumContainerMediumPriceSpec(this.injector), + new PremiumContainerLargePriceSpec(this.injector) ]; additionalSpecs = [ @@ -120,6 +123,14 @@ export class ProdSpecGroup extends PriceSpecGroup { }; } } + + // NOTE(michinoy): The OS type determines whether standard small plan is recommended or additional pricing tier. + if ((input.specPickerInput.data && input.specPickerInput.data.isLinux) || + (ArmUtil.isLinuxApp(input.plan))) { + this.additionalSpecs.unshift(new StandardSmallPlanPriceSpec(this.injector)); + } else { + this.recommendedSpecs.unshift(new StandardSmallPlanPriceSpec(this.injector)); + } } } @@ -145,19 +156,5 @@ export class IsolatedSpecGroup extends PriceSpecGroup { } initialize(input: PriceSpecInput) { - if (input.specPickerInput.data && input.specPickerInput.data.isLinux) { - this.bannerMessage = { - message: this.ts.instant(PortalResources.pricing_linuxAseDiscount), - level: 'info' - }; - } else if (input.plan - && input.plan.properties.hostingEnvironmentProfile - && AppKind.hasKinds(input.plan, [Kinds.linux])) { - - this.bannerMessage = { - message: this.ts.instant(PortalResources.pricing_linuxAseDiscount), - level: 'info' - }; - } } } diff --git a/client/src/app/site/spec-picker/price-spec-manager/standard-plan-price-spec.ts b/client/src/app/site/spec-picker/price-spec-manager/standard-plan-price-spec.ts index 5df4edc436..15b4fb937f 100644 --- a/client/src/app/site/spec-picker/price-spec-manager/standard-plan-price-spec.ts +++ b/client/src/app/site/spec-picker/price-spec-manager/standard-plan-price-spec.ts @@ -88,12 +88,13 @@ export class StandardSmallPlanPriceSpec extends StandardPlanPriceSpec { }; runInitialization(input: PriceSpecInput) { - if ((input.specPickerInput.data && input.specPickerInput.data.isXenon) - || (input.plan && input.plan.properties.isXenon)) { - const slotsFeatureIndex = this.featureItems.findIndex(f => f.title === this._ts.instant(PortalResources.pricing_stagingSlots)); - if (slotsFeatureIndex > -1) { - this.featureItems.splice(slotsFeatureIndex, 1); - } + if (input.specPickerInput.data && input.specPickerInput.data.isXenon) { + this.state = 'hidden'; + return Observable.of(null); + } + + if (input.plan && input.plan.properties.isXenon) { + this.state = 'hidden'; } return super.runInitialization(input); diff --git a/client/src/app/slot-new/slot-new.component.ts b/client/src/app/slot-new/slot-new.component.ts index 7f4d8e698c..38aa4a1f84 100644 --- a/client/src/app/slot-new/slot-new.component.ts +++ b/client/src/app/slot-new/slot-new.component.ts @@ -63,7 +63,7 @@ export class SlotNewComponent extends NavigableComponent { const validator = new RequiredValidator(this._translateService); // parse the site resourceId from slot's - this._siteId = viewInfo.resourceId.substring(0, viewInfo.resourceId.indexOf('/slots')); + this._siteId = viewInfo.context.site.id; const slotNameValidator = new SlotNameValidator(this.injector, this._siteId); this.newSlotForm = this.fb.group({ name: [null, diff --git a/client/src/sass/common/_variables.scss b/client/src/sass/common/_variables.scss index 157eaf5a69..72743c053c 100644 --- a/client/src/sass/common/_variables.scss +++ b/client/src/sass/common/_variables.scss @@ -131,4 +131,12 @@ $row-hover-color: rgba(0, 137, 250, 0.08); $row-selected-color: #e5f8fd; $row-selected-color-dark: #1c1c1c; -$summary-header-color: rgb(0, 88, 173); \ No newline at end of file +$summary-header-color: rgb(0, 88, 173); + +$console-text-color: white; +$console-background-color: black; +$powershell-background-color: #002456; +$console-error-color: red; +$console-default-msg-color: rgb(197, 195, 195); +$bash-cursor-text-color: black; +$bash-cursor-background-color: white; diff --git a/server/Resources/Resources.resx b/server/Resources/Resources.resx index 9bca2b2a03..677068daab 100644 --- a/server/Resources/Resources.resx +++ b/server/Resources/Resources.resx @@ -1312,12 +1312,36 @@ Configure Azure account-level deployment credentials. To change your app-level credentials (also known as 'Publish Credentials'), choose 'Reset publish credentials' in the 'Overview' tab. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Learn more</a>. + + The console service is not available on your app. + Console Explore your app's file system from an interactive web-based console. + + Manage your web app environment by running common commands ('mkdir', 'cd' to change directories, etc.) This is a sandbox environment, so any commands that require elevated privileges will not work. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -2876,7 +2900,7 @@ Set to "External URL" to use an API definition that is hosted elsewhere. Failed to stop {0} - {0} got restarted' + {0} got restarted Failed to restart {0} @@ -3061,9 +3085,6 @@ Set to "External URL" to use an API definition that is hosted elsewhere. Every instance of your App Service plan will include the following hardware configuration: - - Linux web apps in an App Service Environment are billed at a 50% discount while in preview. - The first Basic (B1) core for Linux is free for the first 30 days! @@ -3526,6 +3547,12 @@ Set to "External URL" to use an API definition that is hosted elsewhere. Deployment Credentials + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + Connection strings should only be used with a function app if you are using entity framework. For other scenarios use App Settings. Click to learn more. @@ -3577,4 +3604,10 @@ Set to "External URL" to use an API definition that is hosted elsewhere. Directory + + Database Account + + + Azure Cosmos DB account + \ No newline at end of file diff --git a/server/Resources/cs-CZ/Server/Resources/Resources.resx b/server/Resources/cs-CZ/Server/Resources/Resources.resx index f21e63a5ae..61a38baa35 100644 --- a/server/Resources/cs-CZ/Server/Resources/Resources.resx +++ b/server/Resources/cs-CZ/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Chyba funkce: {{error}} - Funkce (${{name}}) Chyba: {{error}} + Funkce ({{name}}) Chyba: {{error}} Adresa URL funkce @@ -406,12 +406,6 @@ Zadejte fyzickou cestu. - - Aplikace - - - Nastavení slotu - Skrytá hodnota. Kliknutím ji zobrazíte. @@ -1315,12 +1309,36 @@ Nakonfiguruje přihlašovací údaje Azure pro nasazení na úrovni účtu. Pokud chcete změnit svoje přihlašovací údaje na úrovni aplikace (známé taky jako přihlašovací údaje pro publikování), zvolte na kartě Přehled možnost Resetovat přihlašovací údaje pro publikování. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Další informace</a> + + The console service is not available on your app. + Konzola Prozkoumání systému souborů aplikace z interaktivní webové konzoly + + Spravujte prostředí své webové aplikace pomocí běžných příkazů (mkdir nebo cd pro změnu adresáře atd.). Jedná se o prostředí sandboxu, takže nebudou fungovat žádné příkazy, pro které se musí používat zvýšená úroveň oprávnění. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Použije ověřování/autorizaci k ochraně aplikace a pracuje s daty jednotlivých uživatelů. - Identita spravované služby (Preview) + Identita spravované služby Vaše aplikace může s ostatními službami Azure komunikovat sama za sebe pomocí spravované identity Azure Active Directory. @@ -2411,10 +2429,10 @@ Pokud chcete použít definici rozhraní API, která se hostuje někde jinde, na Jihovýchodní Asie - Korea – střed + Jižní Korea – střed - Korea – jih + Jižní Korea – jih Západní USA @@ -2540,7 +2558,7 @@ Pokud chcete použít definici rozhraní API, která se hostuje někde jinde, na Zpráva pro vrácení se změnami - Používáte předběžnou verzi Azure Functions. Děkujeme za vyzkoušení! + Používáte předběžnou verzi Azure Functions. Pokud chcete prostřednictvím naší stránky s oznámeními dostávat aktuální informace o nejnovějších změnách, klikněte na další informace. Kliknutím skryjete položky. @@ -3064,9 +3082,6 @@ Pokud chcete použít definici rozhraní API, která se hostuje někde jinde, na Všechny instance plánu služby App Service budou obsahovat následující hardwarovou konfiguraci: - - Linuxové webové aplikace v prostředí App Service Environment se během verze Preview účtují s 50% slevou. - První jádro Basic (B1) pro Linux je prvních 30 dní zdarma! @@ -3529,4 +3544,67 @@ Pokud chcete použít definici rozhraní API, která se hostuje někde jinde, na Pověření nasazení + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Připojovací řetězce by se spolu s aplikací funkcí měly používat jen v případě, že používáte Entity Framework. Pro ostatní scénáře použijte Nastavení aplikace. Kliknutím získáte další informace. + + + Verze modulu runtime: načítá se... + + + Vaše aplikace je v tuto chvíli v režimu jen pro čtení, protože používáte místní mezipaměť. Když se používá místní mezipaměť, změny provedené v místním souborovém systému se neukládají trvale do obsahu dané lokality. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Další informace</a> + + + Odstranit + + + Hodnota + + + Nastavení slotu + + + Název nastavení aplikace + + + Název připojovacího řetězce + + + Typ + + + Název dokumentu + + + Rozšíření + + + Procesor skriptů + + + Argumenty + + + Virtuální cesta + + + Fyzická cesta + + + Aplikace + + + Adresář + + + Databázový účet + + + Účet Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/de-DE/Server/Resources/Resources.resx b/server/Resources/de-DE/Server/Resources/Resources.resx index fb4011842b..c1d3dfdff5 100644 --- a/server/Resources/de-DE/Server/Resources/Resources.resx +++ b/server/Resources/de-DE/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Funktionsfehler: {{error}} - Fehler bei Funktion (${{name}}): {{error}} + Fehler bei Funktion ({{name}}): {{error}} Funktions-URL @@ -406,12 +406,6 @@ Physischen Pfad eingeben - - Anwendung - - - Sloteinstellung - Ausgeblendeter Wert. Klicken Sie, um den Wert anzuzeigen. @@ -1315,12 +1309,36 @@ Konfigurieren Sie Azure-Bereitstellungsanmeldeinformationen auf Kontoebene. Um die Anmeldeinformationen auf App-Ebene zu ändern (auch als "Veröffentlichungsanmeldeinformationen" bezeichnet), wählen Sie auf der Registerkarte "Übersicht" die Option "Veröffentlichungsanmeldeinformationen zurücksetzen". <a href="https://go.microsoft.com/fwlink/?linkid=846056">Weitere Informationen</a>. + + The console service is not available on your app. + Konsole Erkunden Sie das Dateisystem Ihrer App über eine interaktive, webbasierte Konsole. + + Verwalten Sie Ihre Web-App-Umgebung, indem Sie allgemeine Befehle ("mkdir", "cd" zum Wechseln zwischen Verzeichnissen usw.) ausführen. Dies ist eine Sandboxumgebung. Befehle, für die erhöhte Berechtigungen erforderlich sind, funktionieren daher nicht. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Mit der Authentifizierung/Autorisierung können Sie Ihre Anwendung schützen und mit benutzerbasierten Daten arbeiten. - Verwaltete Dienstidentität (Vorschau) + Verwaltete Dienstidentität Ihre Anwendung kann unter Verwendung einer verwalteten Azure Active Directory-Identität als sie selbst mit anderen Azure-Diensten kommunizieren. @@ -2540,7 +2558,7 @@ Legen Sie die Einstellung auf "Externe URL" fest, um eine API-Definition zu verw Meldung zum Eincheckvorgang - Sie verwenden eine Vorabversion von Azure Functions. Vielen Dank, dass Sie diese Version ausprobieren! + Sie verwenden eine Vorabversion von Azure Functions. Klicken Sie auf "Weitere Informationen", um über unsere Ankündigungsseite stets über die neuesten Änderungen auf dem Laufenden zu bleiben. Zum Ausblenden klicken @@ -3064,9 +3082,6 @@ Legen Sie die Einstellung auf "Externe URL" fest, um eine API-Definition zu verw Jede Instanz Ihres App Service-Plans umfasst die folgende Hardwarekonfiguration: - - Linux-Web-Apps in einer App Service-Umgebung werden während der Vorschau mit einem Rabatt von 50 % abgerechnet. - Der erste Basic-Kern (B1) für Linux ist für die ersten 30 Tage kostenlos! @@ -3529,4 +3544,67 @@ Legen Sie die Einstellung auf "Externe URL" fest, um eine API-Definition zu verw Anmeldeinformationen für die Bereitstellung + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Verbindungszeichenfolgen dürfen nur mit einer Funktions-App verwendet werden, wenn Sie Entity Framework einsetzen. In anderen Szenarien verwenden Sie App-Einstellungen. Klicken Sie hier, um weitere Informationen zu erhalten. + + + Runtimeversion wird geladen... + + + Ihre App wird zurzeit im schreibgeschützten Modus ausgeführt, weil Sie einen lokalen Cache verwenden. Wenn Sie einen lokalen Cache verwenden, werden Änderungen am lokalen Dateisystem nicht dauerhaft im Website-Inhalt gespeichert. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Weitere Informationen</a> + + + Löschen + + + Wert + + + Sloteinstellung + + + Name der App-Einstellung + + + Name der Verbindungszeichenfolge + + + Typ + + + Dokumentname + + + Erweiterung + + + Skriptprozessor + + + Argumente + + + Virtueller Pfad + + + Physischer Pfad + + + Anwendung + + + Verzeichnis + + + Datenbankkonto + + + Azure Cosmos DB-Konto + \ No newline at end of file diff --git a/server/Resources/es-ES/Server/Resources/Resources.resx b/server/Resources/es-ES/Server/Resources/Resources.resx index f2129dbe0d..2b43880a0b 100644 --- a/server/Resources/es-ES/Server/Resources/Resources.resx +++ b/server/Resources/es-ES/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Error de la función: {{error}}. - Función (${{name}}). Error: {{error}}. + Función ({{name}}) Error: {{error}} Dirección URL de la función @@ -406,12 +406,6 @@ Escribir la ruta de acceso física - - Aplicación - - - Configuración de espacios - Valor oculto. Haga clic para mostrarlo. @@ -1315,12 +1309,36 @@ Configure las credenciales de implementación a nivel de cuenta de Azure. Para cambiar las credenciales a nivel de aplicación (también conocidas como "Credenciales de publicación"), elija "Restablecer credenciales de publicación" en la pestaña "Información general". <a href="https://go.microsoft.com/fwlink/?linkid=846056">Más información</a>. + + The console service is not available on your app. + Consola Explore el sistema de archivos de la aplicación desde una consola web interactiva. + + Administre el entorno de la aplicación web ejecutando comandos comunes ("mkdir", "cd" para cambiar directorios, etc.). Este es un entorno de espacio aislado, por lo que los comandos que necesiten privilegios elevados no funcionarán. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Use Autenticación o autorización para proteger la aplicación y trabajar con datos por usuario. - Identidad de servicio administrada (versión preliminar) + Managed Service Identity La aplicación puede comunicarse con otros servicios de Azure como ella misma con una identidad de Azure Active Directory administrada. @@ -2540,7 +2558,7 @@ Elija "URL externa" para usar una definición de API hospedada en otro lugar.Mensaje de inserción en el repositorio - Está usando una versión preliminar de Azure Functions. Gracias por probar esta solución. + Está usando una versión preliminar de Azure Functions. Haga clic en "Más información" para conocer los últimos cambios disponibles gracias a nuestra página de anuncios. Haga clic aquí para ocultar @@ -2879,7 +2897,7 @@ Elija "URL externa" para usar una definición de API hospedada en otro lugar.No se pudo detener {0}. - {0} se ha reiniciado. + Se reinició {0}. No se pudo reiniciar {0}. @@ -3064,9 +3082,6 @@ Elija "URL externa" para usar una definición de API hospedada en otro lugar. Cada instancia del plan de App Service incluirá la configuración de hardware siguiente: - - Las aplicaciones web Linux de un entorno App Service Environment se facturan con un descuento del 50 % en la versión preliminar. - El primer núcleo Básico (B1) para Linux es gratis durante los primeros 30 días. @@ -3529,4 +3544,67 @@ Elija "URL externa" para usar una definición de API hospedada en otro lugar. Credenciales de implementación + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Las cadenas de conexión sólo deben utilizarse con una aplicación de función si se usa Entity Framework. Para otros escenarios, use la configuración de la aplicación. Haga clic para obtener más información. + + + Versión de entorno en tiempo de ejecución: cargando... + + + La aplicación está en modo de solo lectura porque está usando la memoria caché local. Cuando se utiliza la memoria caché local, no se guardan en el contenido del sitio los cambios realizados en el sistema de archivos local. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Más información</a> + + + Eliminar + + + Valor + + + Configuración de espacios + + + Nombre de la configuración de la aplicación + + + Nombre de la cadena de conexión + + + Tipo + + + Nombre del documento + + + Extensión + + + Procesador de script + + + Argumentos + + + Ruta de acceso virtual + + + Ruta de acceso física + + + Aplicación + + + Directorio + + + Cuenta de base de datos + + + Cuenta de Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/fr-FR/Server/Resources/Resources.resx b/server/Resources/fr-FR/Server/Resources/Resources.resx index b04f77a780..cd28c76265 100644 --- a/server/Resources/fr-FR/Server/Resources/Resources.resx +++ b/server/Resources/fr-FR/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Erreur de la fonction : {{error}} - Erreur de la fonction (${{name}}) : {{error}} + Erreur de la fonction ({{name}}) : {{error}} URL de fonction @@ -406,12 +406,6 @@ Entrer un chemin physique - - Application - - - Paramètre d'emplacement - Valeur masquée. Cliquez pour l'afficher. @@ -1315,12 +1309,36 @@ Configurez les informations d'identification de déploiement au niveau du compte Azure. Pour changer vos informations d'identification au niveau de l'application (c'est-à-dire les « informations d'identification de publication »), choisissez « Réinitialiser les informations d'identification de publication » sous l'onglet « Vue d'ensemble ». <a href="https://go.microsoft.com/fwlink/?linkid=846056">En savoir plus</a>. + + The console service is not available on your app. + Console Explorez le système de fichiers de votre application à partir d'une console web interactive. + + Gérez l'environnement de votre application web en exécutant des commandes courantes (« mkdir », « cd » pour changer de répertoire, etc.). Comme il s'agit d'un environnement de bac à sable (sandbox), les commandes nécessitant des privilèges élevés ne fonctionnent pas. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Utilisez Authentification/autorisation pour protéger votre application et utiliser les données par utilisateur. - Identité du service managé (préversion) + Managed Service Identity Votre application peut communiquer en son nom avec d'autres services Azure à l'aide d'une identité Azure Active Directory managée. @@ -2399,16 +2417,16 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Grouper par abonnement - Sud du centre des États-Unis + USA Centre Sud - Europe du Nord + Europe Nord - Europe de l'Ouest + Europe Ouest - Asie du Sud-Est + Asie Sud-Est Corée - Centre @@ -2417,46 +2435,46 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Corée - Sud - Ouest des États-Unis + USA Ouest - Est des États-Unis + USA Est - Ouest du Japon + Japon Ouest - Est du Japon + Japon Est - Asie de l'Est + Asie Est - Est des États-Unis 2 + USA Est 2 - Centre-Nord des États-Unis + USA Centre Nord - Centre des États-Unis + USA Centre - Sud du Brésil + Brésil Sud - Est de l'Australie + Australie Est - Sud-Est de l'Australie + Australie Sud-Est - Inde de l'Ouest + Inde Ouest - Centre de l'Inde + Inde Centre - Inde du Sud + Inde Sud Centre du Canada @@ -2465,7 +2483,7 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Est du Canada - Ouest du centre des États-Unis + USA Centre-Ouest Ouest du Royaume-Uni @@ -2474,7 +2492,7 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Sud du Royaume-Uni - Ouest des États-Unis 2 + USA Ouest 2 Tous les groupes de ressources @@ -2540,7 +2558,7 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Message d'archivage - Vous utilisez une préversion d'Azure Functions. Merci de l'avoir essayée ! + Vous utilisez une préversion d'Azure Functions. Cliquez sur « En savoir plus » pour rester informé des dernières modifications répertoriées sur notre page d'annonce. Cliquer pour masquer @@ -2879,7 +2897,7 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Échec d'arrêt de {0} - {0} redémarré + {0} a redémarré Échec de redémarrage de {0} @@ -3064,9 +3082,6 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Toutes les instances de votre plan App Service ont la configuration matérielle suivante : - - Les applications web Linux dans un environnement App Service bénéficient d'une remise de 50 % pendant la préversion. - Le premier cœur De base (B1) pour Linux est gratuit pendant les 30 premiers jours ! @@ -3529,4 +3544,67 @@ Choisissez « URL externe » pour utiliser une définition d'API hébergée ai Informations d'identification du déploiement + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Les chaînes de connexion ne doivent être utilisées avec une application de fonction que si vous utilisez Entity Framework. Pour d’autres scénarios, utilisez les paramètres de l’application. Cliquez ici pour en savoir plus. + + + Version du runtime : chargement en cours... + + + Votre application est actuellement en mode lecture seule, car vous utilisez le cache local. Lorsque vous utilisez le cache local, les modifications apportées sur le système de fichiers local ne sont pas conservées dans le contenu du site. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">En savoir plus</a> + + + Supprimer + + + Valeur + + + Paramètre d'emplacement + + + Nom du paramètre d'application + + + Nom de la chaîne de connexion + + + Type + + + Nom du document + + + Extension + + + Processeur de script + + + Arguments + + + Chemin virtuel + + + Chemin d'accès physique + + + Application + + + Annuaire + + + Compte de base de données + + + Compte Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/hu-HU/Server/Resources/Resources.resx b/server/Resources/hu-HU/Server/Resources/Resources.resx index b98a57ab87..aa64b4d4fc 100644 --- a/server/Resources/hu-HU/Server/Resources/Resources.resx +++ b/server/Resources/hu-HU/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Függvényhiba: {{error}} - A függvény (${{name}}) hibába ütközött: {{error}} + A függvény ({{name}}) hibába ütközött: {{error}} Függvény URL-címe @@ -406,12 +406,6 @@ Adja meg a fizikai elérési utat - - Alkalmazás - - - Tárhelybeállítás - Rejtett érték. A megjelenítéshez kattintson ide. @@ -1315,12 +1309,36 @@ Konfigurálhatja a Azure-fiókszintű üzembe helyezés hitelesítő adatait. Az alkalmazásszintű hitelesítő adatok (más néven közzétételi hitelesítő adatok) módosításához válassza az Áttekintés lap Reset publish credentials (Közzétételi hitelesítő adatok alaphelyzetbe állítása) elemét. <a href="https://go.microsoft.com/fwlink/?linkid=846056">További információ</a>. + + The console service is not available on your app. + Konzol Interaktív webes konzolon böngészhet az alkalmazás fájlrendszerében. + + A webalkalmazás környezete általános jellegű parancsok (például a könyvtárak létrehozására szolgáló mkdir vagy a könyvtárváltásra szolgáló cd parancs) futtatásával kezelhető. Mivel ez egy védőfal mögötti környezet, az emelt szintű jogosultságokat igénylő parancsok nem fognak működni. + + + CMD + + + PowerShell + + + PARANCS + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Hitelesítéssel és engedélyezéssel biztosíthatja az alkalmazás védelmét, és használat felhasználónkénti adatokat. - Felügyeltszolgáltatás-identitás (előzetes verzió) + Managed Service Identity Az alkalmazás egy Azure Active Directory-identitás használatával képes saját magaként kommunikálni más Azure-szolgáltatásokkal. @@ -2540,7 +2558,7 @@ Máshol tárolt API-definíció használatához a „Külső URL-cím” érték Beadási üzenet - Az Azure Functions előzetes verzióját használja. Köszönjük, hogy kipróbálja! + Az Azure Functions előzetes verzióját használja. Kattintson a További információ hivatkozásra, ha a közleményeinket tartalmazó lapon tájékozódni szeretne a legfrissebb változásokról. Kattintson ide az elrejtéséhez @@ -2879,7 +2897,7 @@ Máshol tárolt API-definíció használatához a „Külső URL-cím” érték A(z) {0} leállítása nem sikerült - {0} újraindítva' + A(z) {0} újra lett indítva A(z) {0} újraindítása nem sikerült @@ -3064,9 +3082,6 @@ Máshol tárolt API-definíció használatához a „Külső URL-cím” érték Az App Service-díjcsomag összes példánya a következő hardverkonfigurációt tartalmazza: - - Az App Service Environment előzetes verziójában a linuxos webalkalmazások díjaiból 50%-os kedvezményt adunk. - Az első linuxos Basic (B1) mag ingyenes az első 30 napban! @@ -3479,7 +3494,7 @@ Máshol tárolt API-definíció használatához a „Külső URL-cím” érték Sikertelen - Sikeres művelet + Sikeres Hitelesítő adatok mentése @@ -3529,4 +3544,67 @@ Máshol tárolt API-definíció használatához a „Külső URL-cím” érték Központi telepítés hitelesítő adatai + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Kapcsolati sztringeket csak akkor használhat függvényalkalmazásokhoz, ha az entitás-keretrendszert használja. Más esetekben használja az alkalmazásbeállításokat. További információért kattintson ide. + + + Futásidejű verzió: betöltés... + + + Az alkalmazás jelenleg írásvédett üzemmódban van, mert a helyi gyorsítótárat használja. Helyi gyorsítótár használatakor a helyi fájlrendszer módosításait a webhelytartalom nem őrzi meg. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">További információ</a> + + + Törlés + + + Érték + + + Tárhelybeállítás + + + Alkalmazásbeállítás neve + + + Kapcsolati sztring neve + + + Típus + + + Dokumentum neve + + + Kiterjesztés + + + Szkriptfeldolgozó + + + Argumentumok + + + Virtuális elérési út + + + Fizikai elérési út + + + Alkalmazás + + + Könyvtár + + + Adatbázisfiók + + + Azure Cosmos DB-fiók + \ No newline at end of file diff --git a/server/Resources/it-IT/Server/Resources/Resources.resx b/server/Resources/it-IT/Server/Resources/Resources.resx index 70a6a33669..a25ebaa6c2 100644 --- a/server/Resources/it-IT/Server/Resources/Resources.resx +++ b/server/Resources/it-IT/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Errore della funzione: {{error}} - Errore {{error}} della funzione (${{name}}) + Errore {{error}} della funzione ({{name}}) URL della funzione @@ -406,12 +406,6 @@ Immettere il percorso fisico - - Applicazione - - - Impostazione slot - Valore nascosto. Fare clic per visualizzarlo. @@ -1315,12 +1309,36 @@ Consente di configurare le credenziali di distribuzione a livello dell'account Azure. Per modificare le credenziali a livello dell'app, note anche come 'Credenziali di pubblicazione', scegliere 'Reimposta credenziali di pubblicazione' nella scheda 'Panoramica'. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Altre informazioni</a>. + + The console service is not available on your app. + Console Consente di esplorare il file system dell'app da una console interattiva basata sul Web. + + È possibile gestire l'ambiente dell'app Web tramite comandi comuni, ad esempio 'mkdir', 'cd' per passare a un'altra directory e così via. Si tratta di un ambiente sandbox, quindi i comandi che richiedono privilegi elevati non funzioneranno. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Consente di usare la modalità Autenticazione/Autorizzazione per proteggere l'applicazione e di lavorare con i dati per utente. - Identità del servizio gestita (anteprima) + Identità del servizio gestita L'applicazione può comunicare con altri servizi di Azure come se stessa usando un'identità di Azure Active Directory gestita. @@ -2540,7 +2558,7 @@ Impostare il valore su "URL esterno" per usare una definizione dell'API ospitata Messaggio di archiviazione - È in uso una versione non definitiva di Funzioni di Azure. Grazie per aver scelto di provare il servizio. + È in uso una versione preliminare di Funzioni di Azure. Fare clic su 'Altre informazioni' per rimanere aggiornati sulle modifiche più recenti tramite la pagina degli annunci. Fare clic per nascondere @@ -2879,7 +2897,7 @@ Impostare il valore su "URL esterno" per usare una definizione dell'API ospitata Non è stato possibile arrestare {0} - {0} è stato riavviato' + {0} è stato riavviato Non è stato possibile riavviare {0} @@ -3064,9 +3082,6 @@ Impostare il valore su "URL esterno" per usare una definizione dell'API ospitata Ogni istanza del piano di servizio app includerà la configurazione hardware seguente: - - Durante il periodo di anteprima, le app Web Linux in un ambiente del servizio app vengono fatturate con uno sconto del 50%. - Il primo core Basic (B1) per Linux è gratuito per i primi 30 giorni. @@ -3479,7 +3494,7 @@ Impostare il valore su "URL esterno" per usare una definizione dell'API ospitata Operazione non riuscita - Operazione riuscita + Operazione completata Salva credenziali @@ -3529,4 +3544,67 @@ Impostare il valore su "URL esterno" per usare una definizione dell'API ospitata Credenziali distribuzione + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Le stringhe di connessione devono essere usate con un'app per le funzioni solo se è in uso Entity Framework. Per altri scenari, usare Impostazioni app. Fare clic per altre informazioni. + + + Versione runtime: caricamento... + + + L'app è attualmente in modalità di sola lettura perché è in uso la cache locale. Quando si usa la cache locale, le modifiche apportate al file system locale non vengono salvate in modo permanente nel contenuto del sito. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Altre informazioni</a> + + + Elimina + + + Valore + + + Impostazione slot + + + Nome impostazione app + + + Nome stringa di connessione + + + Tipo + + + Nome documento + + + Estensione + + + Processore script + + + Argomenti + + + Percorso virtuale + + + Percorso fisico + + + Applicazione + + + Directory + + + Account del database + + + Account Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/ja-JP/Server/Resources/Resources.resx b/server/Resources/ja-JP/Server/Resources/Resources.resx index 3661dcda10..d50f5afea2 100644 --- a/server/Resources/ja-JP/Server/Resources/Resources.resx +++ b/server/Resources/ja-JP/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ 関数エラー: {{error}} - 関数 (${{name}}) エラー: {{error}} + 関数 ({{name}}) エラー: {{error}} 関数の URL @@ -406,12 +406,6 @@ 物理パスを入力してください - - アプリケーション - - - スロットの設定 - 非表示の値です。表示するには、クリックしてください。 @@ -1315,12 +1309,36 @@ Azure アカウントレベルのデプロイ資格情報を構成します。アプリレベルの資格情報 (つまり、'発行資格情報') を変更するには、[概要] タブで [Reset publish credentials] を選択してください。<a href="https://go.microsoft.com/fwlink/?linkid=846056">詳細情報</a>。 + + The console service is not available on your app. + コンソール Web ベースの対話型コンソールでアプリのファイル システムを調査します。 + + 一般コマンド ('mkdir'、ディレクトリを変更する 'cd' など) を実行して、Web アプリ環境を管理します。これはサンドボックス環境であるため、管理者特権を必要とするコマンドは機能しません。 + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ アプリケーションを保護してユーザーごとのデータを取り扱うには、認証/承認を使用します。 - マネージド サービス ID (プレビュー) + マネージド サービス ID アプリケーションが、マネージド Azure Active Directory ID を使って自ら他の Azure サービスと通信できます。 @@ -2438,7 +2456,7 @@ 米国中北部 - 米国中央部 + 米国中部 ブラジル南部 @@ -2465,7 +2483,7 @@ カナダ東部 - 西中央アメリカ + 米国中西部 英国西部 @@ -2540,7 +2558,7 @@ チェックイン メッセージ - プレリリース版の Azure Functions を使用しています。ご利用ありがとうございます。 + Azure Functions のリリース前バージョンを使用しています。[詳細] をクリックして、お知らせページで最新の変更内容をご確認ください。 非表示にするにはクリック @@ -2879,7 +2897,7 @@ {0} を停止できませんでした - {0} は再開されました' + {0} が再開されました {0} を再開できませんでした @@ -3064,9 +3082,6 @@ App Service プランのすべてのインスタンスには、次のハードウェア構成が含まれます: - - App Service Environment の Linux Web アプリはプレビュー期間中は 50% 割引で課金されます。 - Linux の最初の Basic (B1) コアは、最初の 30 日間無料です。 @@ -3529,4 +3544,67 @@ 展開の資格情報 + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Entity Framework を使用している場合、接続文字列は関数アプリでのみご使用ください。他のシナリオではアプリ設定を使用します。詳細についてはクリックしてください。 + + + ランタイム バージョン: 読み込んでいます... + + + ローカル キャッシュを使用しているため、アプリは現在読み取り専用モードです。ローカル キャッシュを使用している場合、ローカル ファイル システムに加えられた変更は、サイトのコンテンツには反映されません。<a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">詳細情報</a> + + + 削除 + + + + + + スロットの設定 + + + アプリ設定名 + + + 接続文字列名 + + + 種類 + + + ドキュメント名 + + + 拡張機能 + + + スクリプト プロセッサ + + + 引数 + + + 仮想パス + + + 物理パス + + + アプリケーション + + + ディレクトリ + + + データベース アカウント + + + Azure Cosmos DB アカウント + \ No newline at end of file diff --git a/server/Resources/ko-KR/Server/Resources/Resources.resx b/server/Resources/ko-KR/Server/Resources/Resources.resx index 9c64ff509d..6fc2ebd27b 100644 --- a/server/Resources/ko-KR/Server/Resources/Resources.resx +++ b/server/Resources/ko-KR/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ 함수 오류: {{error}} - 함수(${{name}}) 오류: {{error}} + 함수 ({{name}}) 오류: {{error}} 함수 URL @@ -406,12 +406,6 @@ 물리적 경로 입력 - - 응용 프로그램 - - - 슬롯 설정 - 숨겨진 값. 표시하려면 클릭하세요. @@ -1315,12 +1309,36 @@ Azure 계정 수준 배포 자격 증명을 구성합니다. '게시 자격 증명'이라고도 하는 앱 수준 자격 증명을 변경하려면 '개요' 탭에서 '게시 자격 증명 다시 설정'을 선택합니다. <a href="https://go.microsoft.com/fwlink/?linkid=846056">자세히 알아보세요</a>. + + The console service is not available on your app. + 콘솔 대화형 웹 기반 콘솔에서 앱의 파일 시스템을 탐색합니다. + + 일반적인 명령('mkdir', 디렉터리를 변경하기 위한 'cd' 등)을 실행하여 웹앱 환경을 관리합니다. 샌드박스 환경이므로 높은 권한이 필요한 명령은 작동되지 않습니다. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ 인증/권한 부여를 사용하여 응용 프로그램을 보호하고 사용자 단위 데이터로 작업합니다. - 관리 서비스 ID(미리 보기) + 관리 서비스 ID 응용 프로그램은 관리되는 Azure Active Directory ID를 사용하여 다른 Azure 서비스와 통신할 수 있습니다. @@ -2540,7 +2558,7 @@ 체크 인 메시지 - Azure Functions의 시험판 버전을 사용하고 있습니다. 사용해 주셔서 감사합니다! + 현재 Azure Functions의 시험판 버전을 사용하고 있습니다. '자세한 정보'를 클릭하여 알림 페이지의 최신 변경 내용으로 계속 업데이트합니다. 숨기려면 클릭 @@ -2879,7 +2897,7 @@ {0}을(를) 중지하지 못함 - {0}이(가) 다시 시작됨' + {0}이(가) 다시 시작되었음 {0}을(를) 다시 시작하지 못함 @@ -3064,9 +3082,6 @@ App Service 계획의 모든 인스턴스에는 다음 하드웨어 구성이 포함됩니다. - - App Service Environment의 Linux 웹앱은 미리 보기 중에는 50% 할인된 요금으로 청구됩니다. - Linux의 첫 번째 기본(B1) 코어는 처음 30일간 무료입니다! @@ -3529,4 +3544,67 @@ 배포 자격 증명 + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Entity Framework를 사용 중인 경우 연결 문자열은 함수 앱과만 사용해야 합니다. 다른 시나리오에서는 앱 설정을 사용하세요. 자세한 내용을 보려면 클릭하세요. + + + 런타임 버전: 로드하는 중... + + + 로컬 캐시를 사용하고 있으므로 앱이 현재 읽기 전용 모드입니다. 로컬 캐시를 사용할 때 로컬 파일 시스템에서 변경한 내용은 사이트 콘텐츠에까지 지속되지 않습니다. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">자세한 정보</a> + + + 삭제 + + + + + + 슬롯 설정 + + + 앱 설정 이름 + + + 연결 문자열 이름 + + + 종류 + + + 문서 이름 + + + 확장 + + + 스크립트 프로세서 + + + 인수 + + + 가상 경로 + + + 실제 경로 + + + 응용 프로그램 + + + 디렉터리 + + + 데이터베이스 계정 + + + Azure Cosmos DB 계정 + \ No newline at end of file diff --git a/server/Resources/nl-NL/Server/Resources/Resources.resx b/server/Resources/nl-NL/Server/Resources/Resources.resx index f78599fcae..adc8470ac1 100644 --- a/server/Resources/nl-NL/Server/Resources/Resources.resx +++ b/server/Resources/nl-NL/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Fout met functie: {{error}} - Functie (${{name}}), fout: {{error}} + Functie ({{name}}), fout: {{error}} Functie-URL @@ -406,12 +406,6 @@ Fysiek pad invoeren - - Toepassing - - - Site-instelling - Verborgen waarde. Klik om de waarde weer te geven. @@ -1315,12 +1309,36 @@ Configureer de implementatiereferenties op Azure-accountniveau. Als u de referenties op app-niveau (ook wel bekend als de publicatiereferenties) wilt wijzigen, gaat u naar het tabblad Overzicht en kiest u Publicatiereferenties opnieuw instellen. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Meer informatie</a>. + + The console service is not available on your app. + Console Verken het bestandssysteem van uw app via een interactieve webconsole. + + U beheert uw web-appomgeving door algemene opdrachten uit te voeren ('mkdir', 'cd' om naar een andere directory te gaan, enz.). Dit is een sandbox-omgeving, dus opdrachten waarvoor verhoogde toegangsrechten nodig zijn werken niet. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Gebruik Verificatie/autorisatie om uw toepassing te beschermen en met individuele gebruikersgegevens te werken. - Beheerde service-identiteit (preview) + Managed Service Identity Uw toepassing kan met een beheerde Azure Active Directory-id als zichzelf met andere Azure-services communiceren. @@ -2399,16 +2417,16 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Groeperen op abonnement - Zuid-centraal VS + US - zuid-centraal - Noord-Europa + Europa - noord - West-Europa + Europa - west - Zuidoost-Azië + Azië - zuidoost Korea - centraal @@ -2417,10 +2435,10 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Korea - zuid - VS - west + US - west - VS - Oost + US - oost Japan - west @@ -2429,16 +2447,16 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Japan - oost - Oost-Azië + Azië - oost - Verenigde Staten - oost 2 + US - oost 2 - Noord-centraal VS + US - noord-centraal - VS - Midden + US - centraal Brazilië - zuid @@ -2450,13 +2468,13 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Australië - zuidoost - West-India + India - west - Centraal-India + India - centraal - Zuid-India + India - zuid Canada Centraal @@ -2465,7 +2483,7 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Canada Oost - West-centraal VS + US - west-centraal VK West @@ -2474,7 +2492,7 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander VK Zuid - VS - west 2 + US - west 2 Alle resourcegroepen @@ -2540,7 +2558,7 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Check-inbericht - U gebruikt een voorlopige versie van Azure Functions. Bedankt dat u het uitprobeert. + U gebruikt een voorlopige versie van Azure Functions. Klik op Meer informatie om op te hoogte te blijven van de meest recente wijzigingen via onze pagina met aankondigingen. Klik om te verbergen @@ -3065,9 +3083,6 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Elke instantie van uw App Service-abonnement bevat de volgende hardwareconfiguratie: - - Linux-web-apps in een App Service Environment worden tijdens de preview-fase gefactureerd met 50% korting. - De eerste Basic-kern (B1) voor Linux is de eerste dertig dagen gratis. @@ -3480,7 +3495,7 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Mislukt - Voltooid + Geslaagd Referenties opslaan @@ -3530,4 +3545,67 @@ Geef de waarde Externe URL op om een API-definitie te gebruiken die ergens ander Referenties implementatie + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Verbindingsreeksen mogen alleen met een functie-app worden gebruikt als u Entity Framework gebruikt. Gebruik App-instellingen voor andere scenario's. Klik voor meer informatie. + + + Runtime-versie: laden... + + + Uw app bevindt zich momenteel in de modus alleen-lezen omdat u lokale cache gebruikt. Als u lokale cache gebruikt, worden wijzigingen die worden aangebracht in het lokale bestandssysteem niet doorgevoerd in de site-inhoud. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Meer informatie</a> + + + Verwijderen + + + Waarde + + + Site-instelling + + + Naam van de app-instelling + + + Naam van de verbindingsreeks + + + Type + + + Documentnaam + + + Extensie + + + Scriptprocessor + + + Argumenten + + + Virtueel pad + + + Fysiek pad + + + Toepassing + + + Map + + + Databaseaccount + + + Azure Cosmos DB-account + \ No newline at end of file diff --git a/server/Resources/pl-PL/Server/Resources/Resources.resx b/server/Resources/pl-PL/Server/Resources/Resources.resx index f9b9ece2c5..8da4912c2e 100644 --- a/server/Resources/pl-PL/Server/Resources/Resources.resx +++ b/server/Resources/pl-PL/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Błąd funkcji: {{error}} - Błąd funkcji (${{name}}): {{error}} + Błąd funkcji ({{name}}): {{error}} Adres URL funkcji @@ -406,12 +406,6 @@ Wprowadź ścieżkę fizyczną - - Aplikacja - - - Ustawienie miejsca - Wartość ukryta. Kliknij, aby pokazać. @@ -1315,12 +1309,36 @@ Konfiguruj poświadczenia wdrażania na poziomie konta platformy Azure. Aby zmienić poświadczenia na poziomie aplikacji (znane również jako poświadczenia publikowania), wybierz pozycję „Resetuj poświadczenia publikowania” na karcie „Przegląd”. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Dowiedz się więcej</a>. + + The console service is not available on your app. + Konsola Eksploruj system plików aplikacji z poziomu interaktywnej konsoli sieci Web. + + Zarządzaj środowiskiem aplikacji internetowej, uruchamiając typowe polecenia („mkdir”, „cd” do zmieniania katalogów itp.). To jest środowisko piaskownicy, dlatego wszelkie polecenia wymagające podniesionych uprawnień nie będą działać. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Chroń aplikację i pracuj z danymi pojedynczych użytkowników dzięki uwierzytelnianiu/autoryzacji. - Tożsamość usługi zarządzanej (wersja zapoznawcza) + Tożsamość usługi zarządzanej Twoja aplikacja może komunikować się z innymi usługami platformy Azure w swoim imieniu, używając zarządzanej tożsamości usługi Azure Active Directory. @@ -2540,7 +2558,7 @@ Ustaw wartość „Zewnętrzny adres URL”, aby użyć definicji interfejsu API Komunikat dotyczący zaewidencjonowania - Korzystasz z wersji wstępnej usługi Azure Functions. Dziękujemy za wypróbowanie jej! + Korzystasz z wersji wstępnej usługi Azure Functions. Kliknij pozycję „dowiedz się więcej”, aby być na bieżąco z najnowszymi zmianami dzięki naszej stronie anonsów. Kliknij, aby ukryć @@ -3064,9 +3082,6 @@ Ustaw wartość „Zewnętrzny adres URL”, aby użyć definicji interfejsu API Każde wystąpienie planu usługi App Service będzie obejmować następującą konfigurację sprzętu: - - Opłaty za aplikacje internetowe systemu Linux w środowisku App Service Environment są naliczane z 50% rabatem w wersji zapoznawczej. - Pierwszy rdzeń w warstwie Podstawowa (B1) dla systemu Linux jest bezpłatny przez pierwsze 30 dni! @@ -3529,4 +3544,67 @@ Ustaw wartość „Zewnętrzny adres URL”, aby użyć definicji interfejsu API Poświadczenia wdrożenia + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Jeśli używasz platformy Entity Framework, parametry połączenia powinny być używane tylko z aplikacją funkcji. W przypadku innych scenariuszy używaj ustawień aplikacji. Kliknij, aby dowiedzieć się więcej. + + + Wersja środowiska uruchomieniowego: ładowanie... + + + Twoja aplikacja jest obecnie w trybie tylko do odczytu, ponieważ korzystasz z lokalnej pamięci podręcznej. Podczas korzystania z lokalnej pamięci podręcznej zmiany wprowadzone w lokalnym systemie plików nie są utrwalane w ramach zawartości witryny. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Dowiedz się więcej</a> + + + Usuń + + + Wartość + + + Ustawienie miejsca + + + Nazwa ustawienia aplikacji + + + Nazwa parametrów połączenia + + + Typ + + + Nazwa dokumentu + + + Rozszerzenie + + + Procesor skryptów + + + Argumenty + + + Ścieżka wirtualna + + + Ścieżka fizyczna + + + Aplikacja + + + Katalog + + + Konto bazy danych + + + Konto usługi Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/pt-BR/Server/Resources/Resources.resx b/server/Resources/pt-BR/Server/Resources/Resources.resx index 057120dd41..3ec23c3513 100644 --- a/server/Resources/pt-BR/Server/Resources/Resources.resx +++ b/server/Resources/pt-BR/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Erro de Função: {{error}} - Função (${{name}}) Erro: {{error}} + Função ({{name}}) Erro: {{error}} URL da função @@ -406,12 +406,6 @@ Inserir caminho físico - - Aplicativo - - - Configuração do Slot - Valor oculto. Clique para mostrar. @@ -1315,12 +1309,36 @@ Configure suas credenciais de implantação no nível de conta do Azure. Para alterar suas credenciais no nível de aplicativo ('Publicar Credenciais'), escolha 'Redefinir credenciais públicas' na guia 'Visão geral'. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Saiba mais</a>. + + The console service is not available on your app. + Console Explore o sistema de arquivos de seu aplicativo a partir de um console interativo com base na Web. + + Gerencie o ambiente de seu aplicativo Web executando comandos comuns ('mkdir', 'cd' para mudar de diretórios, etc.) Esse é um ambiente de área restrita; portanto, os comandos que precisarem de privilégios elevados não funcionarão. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Use a Autenticação/Autorização para proteger seu aplicativo e trabalhar com dados por usuário. - Identidade de serviço gerenciado (Versão Prévia) + Identidade de serviço gerenciada Seu aplicativo pode se comunicar com outros serviços do Azure usando uma identidade gerenciada do Azure Active Directory. @@ -2540,7 +2558,7 @@ Defina como "URL Externa" para usar uma definição de API hospedada em outro lo Mensagem de Check-in - Você está usando um pré-lançamento do Azure Functions. Obrigado por experimentar! + Você está usando uma versão de pré-lançamento do Azure Functions. Clique em 'saiba mais' para se atualizar sobre as últimas alterações por meio de nossa página de anúncio. Clique para ocultar @@ -2879,7 +2897,7 @@ Defina como "URL Externa" para usar uma definição de API hospedada em outro lo Falha ao parar {0} - {0} foi reiniciado' + {0} foi reiniciado Falha ao reiniciar {0} @@ -3064,9 +3082,6 @@ Defina como "URL Externa" para usar uma definição de API hospedada em outro lo Cada instância de seu plano do Serviço de Aplicativo incluirá a seguinte configuração de hardware: - - Os aplicativos Web de Linux em um Ambiente do Serviço de Aplicativo são cobrados com um desconto de 50% enquanto estiverem no modo de visualização. - O primeiro núcleo Basic (B1) para Linux é grátis durante os primeiros 30 dias! @@ -3529,4 +3544,67 @@ Defina como "URL Externa" para usar uma definição de API hospedada em outro lo Credenciais da Implantação + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Cadeias de conexão apenas deverão ser usadas com um aplicativo de funções se você estiver usando o Entity Framework. Para outros cenários, use as Configurações do Aplicativo. Clique para saber mais. + + + Versão de tempo de execução: carregando... + + + Seu aplicativo está em modo somente leitura porque você está usando o Cache Local. Ao usar o Cache Local, não há persistência das alterações feitas no sistema de arquivos para o conteúdo do site. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Saiba mais</a> + + + Excluir + + + Valor + + + Configuração do Slot + + + Nome da Configuração do Aplicativo + + + Nome da Cadeia de Conexão + + + Tipo + + + Nome do Documento + + + Extensão + + + Processador de Script + + + Argumentos + + + Caminho Virtual + + + Caminho Físico + + + Aplicativo + + + Diretório + + + Conta do Banco de Dados + + + Conta do Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/pt-PT/Server/Resources/Resources.resx b/server/Resources/pt-PT/Server/Resources/Resources.resx index c672d83e98..9d6fb64616 100644 --- a/server/Resources/pt-PT/Server/Resources/Resources.resx +++ b/server/Resources/pt-PT/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Erro de Função: {{error}} - Erro da Função (${{name}}): {{error}} + Função ({{name}}) Erro: {{error}} URL de função @@ -406,12 +406,6 @@ Introduzir o caminho físico - - Aplicação - - - Definição de Ranhura - Valor oculto. Clique para mostrar. @@ -1315,12 +1309,36 @@ Configure as credenciais de implementação ao nível da conta do Azure. Para alterar as credenciais ao nível da aplicação (também conhecidas como "Credenciais de Publicação"), escolha "Redefinir credenciais de publicação" no separador "Descrição Geral". <a href="https://go.microsoft.com/fwlink/?linkid=846056">Saiba mais</a>. + + The console service is not available on your app. + Consola Explore o sistema de ficheiros de aplicações a partir de uma consola interativa baseada na Web. + + Faça a gestão do ambiente de aplicações Web através da execução de comandos comuns ("mkdir", "cd" para mudar de diretório, etc.). Este é um ambiente sandbox, pelo que qualquer comando que precise de privilégios elevados não funcionará. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Utilize a Autenticação/Autorização para proteger a aplicação e o trabalho com dados por utilizador. - Identidade de serviço gerida (Pré-visualização) + Identidade de serviço gerida A aplicação pode comunicar com outros serviços do Azure em nome próprio utilizando uma identidade do Azure Active Directory gerida. @@ -2411,10 +2429,10 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Sudeste Asiático - Coreia Central + Coreia do Sul Central - Sul da Coreia + Sul da Coreia do Sul E.U.A. Oeste @@ -2450,7 +2468,7 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Sudeste da Austrália - Índia Ocidental + Oeste da Índia Índia Central @@ -2540,7 +2558,7 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Mensagem de Entrada - Está a utilizar uma versão de pré-lançamento das Funções do Azure. Obrigado por experimentar! + Está a utilizar uma versão de pré-lançamento das Funções do Azure. Clique em "saber mais" para ficar a par das alterações mais recentes na nossa página de anúncios. Clique para ocultar @@ -2879,7 +2897,7 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Falha ao parar {0} - {0} foi reiniciado + {0} got restarted Falha ao reiniciar {0} @@ -3064,9 +3082,6 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Todas as instâncias do seu plano do Serviço de Aplicações irão incluir a seguinte configuração de hardware: - - As aplicações Web do Linux num Ambiente do Serviço de Aplicações são faturadas com 50% de desconto durante a pré-visualização. - O primeiro núcleo Basic (B1) para Linux é gratuito durante os primeiros 30 dias! @@ -3479,7 +3494,7 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Falha - Com êxito + Bem Sucedido Guardar Credenciais @@ -3529,4 +3544,67 @@ Defina para "URL Externo" para utilizar uma definição de API que está alojada Credenciais de Implementação + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + As cadeias de ligação só podem ser utilizadas com uma aplicação de função se estiver a utilizar o enquadramento de entidades. Para outros cenários, utilize as Definições da Aplicação. Clique para saber mais. + + + Versão de Runtime: a carregar... + + + A aplicação está atualmente em modo só de leitura porque está a utilizar a Cache Local. Ao utilizar a Cache Local, as alterações efetuadas no sistema de ficheiros local não são persistidas para o conteúdo do site. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Mais informações</a> + + + Eliminar + + + Valor + + + Definição de Ranhura + + + Nome de Definição de Aplicação + + + Nome da Cadeia de Ligação + + + Tipo + + + Nome do Documento + + + Extensão + + + Processador de Script + + + Argumentos + + + Caminho Virtual + + + Caminho Físico + + + Aplicação + + + Diretório + + + Conta de Base de Dados + + + Conta do Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/qps-ploc/Server/Resources/Resources.resx b/server/Resources/qps-ploc/Server/Resources/Resources.resx index 23288cc863..567fc04ba0 100644 --- a/server/Resources/qps-ploc/Server/Resources/Resources.resx +++ b/server/Resources/qps-ploc/Server/Resources/Resources.resx @@ -106,3427 +106,3505 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - [io2Ya][ØÐAzure Functions !!! !!] + [io2Ya][úÖAzure Functions !!! !!] - [P49PT][ãØAzure Functions Runtime !!! !!! !] + [P49PT][õëAzure Functions Runtime !!! !!! !] - [R71II][£¥Cancel !!!] + [R71II][îÞCancel !!!] - [j6VkN][ðõApply !!!] + [j6VkN][£ÏApply !!!] Configure - [yC9A6][ÈéUpgrade !!!] + [yC9A6][ÖÏUpgrade !!!] - [g957b][òÐUpgrade to enable !!! !!!] + [g957b][éÈUpgrade to enable !!! !!!] - [t7Nlz][ÚðSelect all !!! !] + [t7Nlz][ùÊSelect all !!! !] - [ZRG8G][ëþAll items selected !!! !!!] + [ZRG8G][óãAll items selected !!! !!!] - [WLpTT][Îà{0} items selected !!! !!!] + [WLpTT][Çó{0} items selected !!! !!!] - [lRfGu][ÏÁCPU !!] + [lRfGu][ÂÊCPU !!] - [mOaUp][ò§Memory !!!] + [mOaUp][åúMemory !!!] - [7hctT][¢òStorage !!!] + [7hctT][ÄÏStorage !!!] - [17ym6][ÀÇCreate Function Error: {{error}} !!! !!! !!! ] + [17ym6][ÌíCreate Function Error: {{error}} !!! !!! !!! ] - [S6XZZ][ÏéFunction creation error! Please try again. !!! !!! !!! !!! ] + [S6XZZ][êÛFunction creation error! Please try again. !!! !!! !!! !!! ] - [3Qo2N][ûæFunction Error: {{error}} !!! !!! !!] + [3Qo2N][ÏÈFunction Error: {{error}} !!! !!! !!] - [oR0Kt][ÌèFunction (${{name}}) Error: {{error}} !!! !!! !!! !!] + [oR0Kt][æÔFunction ({{name}}) Error: {{error}} !!! !!! !!! !!] - [z2m32][ìßFunction Url !!! !] + [z2m32][ËëFunction Url !!! !] - [G33l1][åÿGitHub Secret !!! !!] + [G33l1][ýÅGitHub Secret !!! !!] - [hZWeI][ùÀHide files !!! !] + [hZWeI][èÐHide files !!! !] - [rzF0R][ÁÍHost Error: {{error}} !!! !!! ] + [rzF0R][ãðHost Error: {{error}} !!! !!! ] - [9j93r][úµOutput !!!] + [9j93r][ÌÕOutput !!!] - [DNy8f][ÁìRequest body !!! !] + [DNy8f][ÇñRequest body !!! !] - [pb8gF][ÇÆSave and run !!! !] + [pb8gF][ªëSave and run !!! !] - [wZz1H][ØèStatus: !!!] + [wZz1H][ÐÎStatus: !!!] - [4oKjj][ÖàView files !!! !] + [4oKjj][©§View files !!! !] - [aVe0w][ÿðChoose a template below !!! !!! !] + [aVe0w][ÉüChoose a template below !!! !!! !] - [y46vR][ïòSubscription with name '{0}' already exist !!! !!! !!! !!! ] + [y46vR][èéSubscription with name '{0}' already exist !!! !!! !!! !!! ] - [LdQUj][øßChoose a plan below to create new subscription !!! !!! !!! !!! !] + [LdQUj][öúChoose a plan below to create new subscription !!! !!! !!! !!! !] - [qeek6][îýProvide a friendly subscription name !!! !!! !!! !!] + [qeek6][ÆÛProvide a friendly subscription name !!! !!! !!! !!] - [Z0Xft][ûàFriendly subscription name !!! !!! !!] + [Z0Xft][øæFriendly subscription name !!! !!! !!] - [fQmyD][æþInvitation code !!! !!] + [fQmyD][ÄÍInvitation code !!! !!] - [oNfto][á©This language is experimental and does not yet have full support. If you run into issues, please file a bug on our <a href="/~https://github.com/Azure/azure-webjobs-sdk-templates/issues" target="_blank">GitHub repository.</a> !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [oNfto][ôðThis language is experimental and does not yet have full support. If you run into issues, please file a bug on our <a href="/~https://github.com/Azure/azure-webjobs-sdk-templates/issues" target="_blank">GitHub repository.</a> !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [rtEBl][ûßFunction name !!! !!] + [rtEBl][ìÑFunction name !!! !!] - [5Uup0][ûóA function name is required !!! !!! !!] + [5Uup0][ýÈA function name is required !!! !!! !!] - [WF8As][ÞÉName your function !!! !!!] + [WF8As][íÉName your function !!! !!!] - [D06QT][ÈÈCreate + get started !!! !!! ] + [D06QT][ö¥Create + get started !!! !!! ] - [JzUDJ][üàFunction Apps !!! !!] + [JzUDJ][ÏùFunction Apps !!! !!] - [vUqFJ][©ÔGet started with Azure Functions !!! !!! !!! ] + [vUqFJ][ÚÇGet started with Azure Functions !!! !!! !!! ] - [hnFfT][ó§New function app !!! !!!] + [hnFfT][ïÏNew function app !!! !!!] - [GIcnj][©ÛYour subscription contains no function apps. These are containers where your functions are executed. Create one now. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [GIcnj][Î@Your subscription contains no function apps. These are containers where your functions are executed. Create one now. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [Mi23r][ÌÅOr create a function app from <a href="https://portal.azure.com/#create/Microsoft.FunctionApp">Azure Portal</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [Mi23r][ÂùOr create a function app from <a href="https://portal.azure.com/#create/Microsoft.FunctionApp">Azure Portal</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [Zm41F][£úSelect Location !!! !!] + [Zm41F][ñÕSelect Location !!! !!] - [Qo5CI][ÀÃSelect Subscription !!! !!! ] + [Qo5CI][¥ÞSelect Subscription !!! !!! ] - [l0pIk][ûúSubscription {{displayName}} ({{ subscriptionId }}) is not white listed for running functions !!! !!! !!! !!! !!! !!! !!! !!! !!] + [l0pIk][êäSubscription {{displayName}} ({{ subscriptionId }}) is not white listed for running functions !!! !!! !!! !!! !!! !!! !!! !!! !!] - [z9IKp][ÍùThis subscription contains one or more function apps. These are containers where your functions are executed. Select one or create a new one below. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [z9IKp][ø@This subscription contains one or more function apps. These are containers where your functions are executed. Select one or create a new one below. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [u4WqF][ËüThe name must be at least 2 characters !!! !!! !!! !!] + [u4WqF][¥ÉThe name must be at least 2 characters !!! !!! !!! !!] - [IiOWb][ç@The name must be at most 60 characters !!! !!! !!! !!] + [IiOWb][ÑÿThe name must be at most 60 characters !!! !!! !!! !!] - [2ldyz][ÊñThe name can contain letters, numbers, and hyphens (but the first and last character must be a letter or number) !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [2ldyz][Â¥The name can contain letters, numbers, and hyphens (but the first and last character must be a letter or number) !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [Cey3j][ûúfunction app name {{funcName}} isn't available !!! !!! !!! !!! !] + [Cey3j][æÿfunction app name {{funcName}} isn't available !!! !!! !!! !!! !] - [pMcuB][òãYou need an Azure subscription in order to use this service. <a href="https://azure.microsoft.com/en-us/free/">Click here</a> to create a free trial subscription !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [pMcuB][ÀéYou need an Azure subscription in order to use this service. <a href="https://azure.microsoft.com/en-us/free/">Click here</a> to create a free trial subscription !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [6S9B6][èÁYour function apps !!! !!!] + [6S9B6][ÊÚYour function apps !!! !!!] - [6fq5Y][@ÐYour subscription !!! !!!] + [6fq5Y][äµYour subscription !!! !!!] - [rAfl6][£ÌCreating a Function App will automatically provision a new container capable of hosting and running your code. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [rAfl6][æÊCreating a Function App will automatically provision a new container capable of hosting and running your code. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [5FLkV][ìíFailed to create app !!! !!! ] + [5FLkV][çÌFailed to create app !!! !!! ] - [pcHSk][Çÿ2. Choose a language !!! !!! ] + [pcHSk][Ëé2. Choose a language !!! !!! ] - [cQIBg][Ñø1. Choose a scenario !!! !!! ] + [cQIBg][©ò1. Choose a scenario !!! !!! ] - [2PwH3][òÜCreate this function !!! !!! ] + [2PwH3][èÏCreate this function !!! !!! ] - [BxjYr][íÙcreate your own custom function !!! !!! !!! ] + [BxjYr][ýècreate your own custom function !!! !!! !!! ] - [rQH0f][òÅCustom function !!! !!] + [rQH0f][ÜÙCustom function !!! !!] - [q007q][ÂôData processing !!! !!] + [q007q][èþData processing !!! !!] - [6044v][ëªor !!] + [6044v][þüor !!] - [AmEoC][åÈGet started quickly with a premade function !!! !!! !!! !!! ] + [AmEoC][øèGet started quickly with a premade function !!! !!! !!! !!! ] - [qgdAc][ÝÍGet started on your own !!! !!! !] + [qgdAc][ÉßGet started on your own !!! !!! !] - [VOCqm][ÀÓKeep using this quickstart !!! !!! !!] + [VOCqm][èÑKeep using this quickstart !!! !!! !!] - [ym8CF][ÏøFor PowerShell, Python, and Batch, !!! !!! !!! !] + [ym8CF][óÛFor PowerShell, Python, and Batch, !!! !!! !!! !] - [UC498][Ù§Start from source control !!! !!! !!] + [UC498][ÆÎStart from source control !!! !!! !!] - [OwYIy][ÂÞTimer !!!] + [OwYIy][ÊÄTimer !!!] - [hp33d][ÍêWebhook + API !!! !!] + [hp33d][ôÞWebhook + API !!! !!] - [l94nS][åßClear !!!] + [l94nS][ÔÓClear !!!] - [9d0rU][þñCopied! !!!] + [9d0rU][ôÍCopied! !!!] - [uRHXZ][øðCopy logs !!! ] + [uRHXZ][ÿûCopy logs !!! ] - [zX4DC][î£No logs to display !!! !!!] + [zX4DC][ÑÐNo logs to display !!! !!!] - [3tnmj][ÅÕFailed to download log content - '{0}' !!! !!! !!! !!] + [3tnmj][§èFailed to download log content - '{0}' !!! !!! !!! !!] - [quafK][ÆðPause !!!] + [quafK][äáPause !!!] - [LE06Q][òÎLogging paused !!! !!] + [LE06Q][à§Logging paused !!! !!] - [512zy][ÿóStart !!!] + [512zy][âÆStart !!!] - [MXQBR][ôÿToo many logs. Refresh rate: {{seconds}} seconds. !!! !!! !!! !!! !!] + [MXQBR][ñÙToo many logs. Refresh rate: {{seconds}} seconds. !!! !!! !!! !!! !!] - [cNops][óðName !!] + [cNops][Á£Name !!] Can't use "name" as key because typescript has own name property for the object - [SUapk][ãöOpen !!] + [SUapk][ÅøOpen !!] - [90m4i][èáor !!] + [90m4i][Éûor !!] - [CtSy2][ëÓYour app is currently in read only mode because you have source control integration enabled. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [CtSy2][äóYour app is currently in read only mode because you have source control integration enabled. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [Xv714][ÛÑRegion !!!] + [Xv714][µÌRegion !!!] - [NR2Ak][ã§Run !!] + [NR2Ak][ÂÔRun !!] - [664u6][ÌêRefresh !!!] + [664u6][ÃÂRefresh !!!] - [ZTiYZ][éæSave !!] + [ZTiYZ][ÚöSave !!] - [8rmT9][ØéUnsaved changes will be discarded. !!! !!! !!! !] + [8rmT9][ñÅUnsaved changes will be discarded. !!! !!! !!! !] - [RGdYZ][ÿÎA save operation is currently in progress. Navigating away may cause some changes to be lost. !!! !!! !!! !!! !!! !!! !!! !!! !!] + [RGdYZ][ƧA save operation is currently in progress. Navigating away may cause some changes to be lost. !!! !!! !!! !!! !!! !!! !!! !!! !!] - [eW5ij][ÿâ+ Add new setting !!! !!!] + [eW5ij][ßé+ Add new setting !!! !!!] - [IUV0u][íí+ Add new connection string !!! !!! !!] + [IUV0u][Þé+ Add new connection string !!! !!! !!] - [LPi4y][ÆÅ+ Add new document !!! !!!] + [LPi4y][Îä+ Add new document !!! !!!] - [hrIC1][ÐØ+ Add new handler mapping !!! !!! !!] + [hrIC1][ÃÇ+ Add new handler mapping !!! !!! !!] - [ZfnRd][æª+ Add new virtual application or directory !!! !!! !!! !!! ] + [ZfnRd][ñû+ Add new virtual application or directory !!! !!! !!! !!! ] - [agUQ6][ÔÞEnter a name !!! !] + [agUQ6][µªEnter a name !!! !] - [0lwKY][ÁÅEnter a value !!! !!] + [0lwKY][ÿÍEnter a value !!! !!] - [9x4RJ][£ÅEnter extension !!! !!] + [9x4RJ][áäEnter extension !!! !!] - [L8T7m][ÐëEnter script processor !!! !!! !] + [L8T7m][ââEnter script processor !!! !!! !] - [972D2][ÚÅEnter arguments !!! !!] + [972D2][¢ùEnter arguments !!! !!] - [ktrlc][ÄÿEnter virtual path !!! !!!] + [ktrlc][Ë©Enter virtual path !!! !!!] - [BgUUJ][ÉÙEnter physical path !!! !!! ] - - - [l22NP][ÌëApplication !!! !] - - - [sMGT8][þúSlot Setting !!! !] + [BgUUJ][ÿäEnter physical path !!! !!! ] - [j2VsP][ÿÌHidden value. Click to show. !!! !!! !!!] + [j2VsP][ÃâHidden value. Click to show. !!! !!! !!!] - [eskne][ÖÏChanges made to function {{name}} will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !!] + [eskne][ÃÚChanges made to function {{name}} will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !!] - [mzJsh][õåNew Function !!! !] + [mzJsh][@ÇNew Function !!! !] - [2JBgw][ª£Refresh !!!] + [2JBgw][ÄúRefresh !!!] - [Wv03z][üÎSearch !!!] + [Wv03z][¥ØSearch !!!] - [oOze2][ìÁScope to this item !!! !!!] + [oOze2][òÕScope to this item !!! !!!] - [WeDEG][øÑSearch features !!! !!] + [WeDEG][ÐùSearch features !!! !!] - [Exzv0][òÚSearch Function apps !!! !!! ] + [Exzv0][ÀðSearch Function apps !!! !!! ] - [cGfKd][ü§Subscription ID !!! !!] + [cGfKd][ôÔSubscription ID !!! !!] - [9AWwS][ôÐSubscription !!! !] + [9AWwS][âáSubscription !!! !] - [EMtWd][ØÃResource group !!! !!] + [EMtWd][ôÁResource group !!! !!] - [kfZFk][ÕéLocation !!! ] + [kfZFk][ØÑLocation !!! ] - [gnNUQ][ËÕNo results !!! !] + [gnNUQ][@úNo results !!! !] - [OfSsG][é¥Changes made to the current function will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !!!] + [OfSsG][óÍChanges made to the current function will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !!!] - [mVGCu][Ñ£Function app settings !!! !!! ] + [mVGCu][ÚëFunction app settings !!! !!! ] - [T5Tpi][ÿ§A new version of Azure Functions is available. To upgrade, click here !!! !!! !!! !!! !!! !!! !] + [T5Tpi][ÐýA new version of Azure Functions is available. To upgrade, click here !!! !!! !!! !!! !!! !!! !] - [cjfhr][ÝîQuickstart !!! !] + [cjfhr][ëÃQuickstart !!! !] - [9xZ9t][ùÏUsage !!!] + [9xZ9t][ÅîUsage !!!] - [U3vby][þÂAll !!] + [U3vby][ÚßAll !!] - [yo2If][ÏâApp executions !!! !!] + [yo2If][ÅçApp executions !!! !!] - [3dLXg][ĪApp Usage(Gb Sec) !!! !!!] + [3dLXg][ôâApp Usage(Gb Sec) !!! !!!] - [b4tIr][ÐÕFunction App Usage !!! !!!] + [b4tIr][ªÂFunction App Usage !!! !!!] - [OPtrV][ÜÕNo data available !!! !!!] + [OPtrV][ÛßNo data available !!! !!!] - [03hIV][íÏof executions !!! !!] + [03hIV][ÔÆof executions !!! !!] - [Wtqp5][ÐïParameter name !!! !!] + [Wtqp5][ÚýParameter name !!! !!] - [28Gw1][áÒClose !!!] + [28Gw1][ÁÒClose !!!] - [fiRY6][ÔÚConfig !!!] + [fiRY6][ÞÜConfig !!!] - [Oi4NP][áØCORS !!] + [Oi4NP][ÈàCORS !!] - [j7hh7][ÕêCreate !!!] + [j7hh7][ßÍCreate !!!] - [w6XMR][æÚYour trial has expired !!! !!! !] + [w6XMR][Ö¢Your trial has expired !!! !!! !] - [aHE4R][ÒàDisabled !!! ] + [aHE4R][õòDisabled !!! ] - [5tA68][ÿßEnabled !!!] + [5tA68][ÛÏEnabled !!!] - [c51Q2][ñôdisable !!!] + [c51Q2][Êõdisable !!!] - [8ijrm][ÂÅenabled !!!] + [8ijrm][èÂenabled !!!] - [StZeI][Øâhere !!] + [StZeI][ñòhere !!] - [qnJ4m][ôöYou may be experiencing an error. If you're having issues, please post them !!! !!! !!! !!! !!! !!! !!!] + [qnJ4m][ÉëYou may be experiencing an error. If you're having issues, please post them !!! !!! !!! !!! !!! !!! !!!] - [rAcqH][þñError parsing config: {{error}} !!! !!! !!! ] + [rAcqH][ÍÖError parsing config: {{error}} !!! !!! !!! ] - [47CFs][ÀØFailed to {{state}} function: {{functionName}} !!! !!! !!! !!! !] + [47CFs][éñFailed to {{state}} function: {{functionName}} !!! !!! !!! !!! !] - [m0qJa][úªFeatures !!! ] + [m0qJa][ÁòFeatures !!! ] - [qPCpe][ÊøThis field is required !!! !!! !] + [qPCpe][øûThis field is required !!! !!! !] - [J8v9W][çØCode !!] + [J8v9W][äÈCode !!] - [wmrlO][óæRun !!] + [wmrlO][óÿRun !!] - [L3v4Z][ÎþRead only - because you have started editing with source control, this view is read only. !!! !!! !!! !!! !!! !!! !!! !!! ] + [L3v4Z][ßÑRead only - because you have started editing with source control, this view is read only. !!! !!! !!! !!! !!! !!! !!! !!! ] - [XKoih][âäAdvanced editor !!! !!] + [XKoih][øËAdvanced editor !!! !!] - [UPPmU][ËàChanges made will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!] + [UPPmU][ÔÄChanges made will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!] - [oEF4e][§ûChanges made to function {{name}} will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !!] + [oEF4e][ÞðChanges made to function {{name}} will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !!] - [m230i][âôSetting name: !!! !!] + [m230i][ìÚSetting name: !!! !!] - [0m98f][ÇÃStandard editor !!! !!] + [0m98f][ñàStandard editor !!! !!] - [bxDrp][áäDelete Function {{name}} !!! !!! !] + [bxDrp][@ÉDelete Function {{name}} !!! !!! !] - [ofcbI][ÂßAre you sure you want to delete Function {{name}}? !!! !!! !!! !!! !!!] + [ofcbI][øÞAre you sure you want to delete Function {{name}}? !!! !!! !!! !!! !!!] - [z94cm][ñ¢Loading ... !!! !] + [z94cm][ÚÏLoading ... !!! !] - [r059Y][ÖçSuccess count since !!! !!! ] + [r059Y][ñçSuccess count since !!! !!! ] - [U9g38][ûÐError count since !!! !!!] + [U9g38][îÓError count since !!! !!!] - [a9qoH][íÀInvocation log !!! !!] + [a9qoH][ÂìInvocation log !!! !!] - [kXEkP][ÕþInvocation Details !!! !!!] + [kXEkP][ΧInvocation Details !!! !!!] - [5w5KC][ýÕLogs !!] + [5w5KC][µòLogs !!] - [gcbE8][Üëlive event stream !!! !!!] + [gcbE8][ûÛlive event stream !!! !!!] - [kN17H][òÛFunction !!! ] + [kN17H][ÅÞFunction !!! ] - [m5m6f][èüStatus !!!] + [m5m6f][¥ÿStatus !!!] - [BASuW][öèDetails: Last ran !!! !!!] + [BASuW][©ùDetails: Last ran !!! !!!] - [QYcnf][ñä(duration) !!! !] + [QYcnf][ÝÙ(duration) !!! !] - [t55X6][ÓÖParameter !!! ] + [t55X6][ëÈParameter !!! ] - [pie5F][þùAuthentication is enabled for the function app. Disable authentication before running the function. !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [pie5F][êåAuthentication is enabled for the function app. Disable authentication before running the function. !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [g55Ib][òÎThere was an error running function ({{name}}). Check logs output for the full error. !!! !!! !!! !!! !!! !!! !!! !!!] + [g55Ib][ÛòThere was an error running function ({{name}}). Check logs output for the full error. !!! !!! !!! !!! !!! !!! !!! !!!] - [ni51t][¢ÿInputs !!!] + [ni51t][ÂèInputs !!!] - [BxGrN][ÕÕLogs !!] + [BxGrN][íøLogs !!] - [9mkDf][úÃNew Input !!! ] + [9mkDf][ÛÊNew Input !!! ] - [u0x1V][æÝNew Output !!! !] + [u0x1V][ýîNew Output !!! !] - [fpntM][àéNew Trigger !!! !] + [fpntM][§èNew Trigger !!! !] - [e1rTR][ÞþNext !!] + [e1rTR][ËïNext !!] - [azTKD][ÔÛNot valid value !!! !!] + [azTKD][ËÆNot valid value !!! !!] - [F4dds][ÇþOutputs !!!] + [F4dds][ÚýOutputs !!!] - [vrdXE][ãâSelect !!!] + [vrdXE][ÇñSelect !!!] - [DqD6m][ÚóDevelop !!!] + [DqD6m][íÍDevelop !!!] - [hvG21][áêIntegrate !!! ] + [hvG21][øèIntegrate !!! ] - [50Yko][ùÂManage !!!] + [50Yko][àÁManage !!!] - [Bo1ZH][éØMonitor !!!] + [Bo1ZH][@µMonitor !!!] - [h8mDd][óïChoose an input binding !!! !!! !] + [h8mDd][ßàChoose an input binding !!! !!! !] - [FibqR][ͪChoose an output binding !!! !!! !] + [FibqR][ÃÄChoose an output binding !!! !!! !] - [4b5uS][ááChoose a template !!! !!!] + [4b5uS][ÙÈChoose a template !!! !!!] - [uB8CD][öÜChoose a trigger !!! !!!] + [uB8CD][ùïChoose a trigger !!! !!!] - [dppNp][û§Language: !!! ] + [dppNp][©ÅLanguage: !!! ] - [AMJtI][ËÄScenario: !!! ] + [AMJtI][©ÂScenario: !!! ] - [1Gq31][ÛÔTriggers !!! ] + [1Gq31][ÒêTriggers !!! ] - [Nav0l][©óTrial expired !!! !!] + [Nav0l][ÝøTrial expired !!! !!] - [z6q5S][ÚÝChanges made here will affect all of the functions within your function app. !!! !!! !!! !!! !!! !!! !!! ] + [z6q5S][ÉòChanges made here will affect all of the functions within your function app. !!! !!! !!! !!! !!! !!! !!! ] - [4WGl6][ñË<span>Create a brand-new function</span> - Get started with one of the pre-built function templates !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [4WGl6][îØ<span>Create a brand-new function</span> - Get started with one of the pre-built function templates !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [EazO5][ÑöDevelop !!!] + [EazO5][èÔDevelop !!!] - [cIfph][Õî<span>Dive into the documentation</span> - Explore all of the Azure Functions features <a target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=747839">here</a> !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [cIfph][¥Ê<span>Dive into the documentation</span> - Explore all of the Azure Functions features <a target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=747839">here</a> !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [Z0a96][øÄFunction App Settings !!! !!! ] + [Z0a96][æÖFunction App Settings !!! !!! ] - [Xw7Ys][Ú¥Integrate !!! ] + [Xw7Ys][£èIntegrate !!! ] - [kjLVb][ÌÙIntegrating your functions with other services and data sources is easy. !!! !!! !!! !!! !!! !!! !!] + [kjLVb][ܧIntegrating your functions with other services and data sources is easy. !!! !!! !!! !!! !!! !!! !!] - [YhOTp][Á£Next Steps !!! !] + [YhOTp][ÐÐNext Steps !!! !] - [BuAxL][éâSet up automated actions based on external triggers, include other input data sources, and send the output to multiple targets. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [BuAxL][£áSet up automated actions based on external triggers, include other input data sources, and send the output to multiple targets. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [uVXps][ÌÏSkip the tour and start coding !!! !!! !!!] + [uVXps][ÄÜSkip the tour and start coding !!! !!! !!!] - [xujYO][ɪThe fastest way to edit code is with the code editor, but you can also use Git.This example uses NodeJS, but many other languages are also supported. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [xujYO][ÇÑThe fastest way to edit code is with the code editor, but you can also use Git.This example uses NodeJS, but many other languages are also supported. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [Oeh5e][ÐÆThis page also includes a log stream and a test console for helping you debug your function. !!! !!! !!! !!! !!! !!! !!! !!! !] + [Oeh5e][ìáThis page also includes a log stream and a test console for helping you debug your function. !!! !!! !!! !!! !!! !!! !!! !!! !] - [SrGrl][Ìù<span>Tweak this sample function</span> - Make it yours on the easy-to-use dashboard !!! !!! !!! !!! !!! !!! !!! !!] + [SrGrl][øÜ<span>Tweak this sample function</span> - Make it yours on the easy-to-use dashboard !!! !!! !!! !!! !!! !!! !!! !!] - [c2DAb][äïYour functions are designed to run within Azure App Service as a function app, and this is where you modify the features of that app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [c2DAb][ÚöYour functions are designed to run within Azure App Service as a function app, and this is where you modify the features of that app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [BsMNY][ÕüUpdate !!!] + [BsMNY][óÂUpdate !!!] - [93db5][ÀÁselect !!!] + [93db5][Ùæselect !!!] - [Px7eu][Ðédelete !!!] + [Px7eu][Ï¥delete !!!] - [TFETU][ìúParameter 'direction' is missed. !!! !!! !!! ] + [TFETU][ÛêParameter 'direction' is missed. !!! !!! !!! ] - [yKPGF][ÍÛUnknown direction: '{{direction}}'. !!! !!! !!! !] + [yKPGF][óÐUnknown direction: '{{direction}}'. !!! !!! !!! !] - [88vLi][ÃÿParameter name must be unique in a function: '{{functionName}}' !!! !!! !!! !!! !!! !!!] + [88vLi][ïîParameter name must be unique in a function: '{{functionName}}' !!! !!! !!! !!! !!! !!!] - [wAfYV][ÕâParameter 'name' is missed. !!! !!! !!] + [wAfYV][áÒParameter 'name' is missed. !!! !!! !!] - [UPyLm][¢ûParameter 'type' is missed. !!! !!! !!] + [UPyLm][åæParameter 'type' is missed. !!! !!! !!] - [dBgLF][@öUnknown type: '{{type}}'. !!! !!! !!] + [dBgLF][ùÊUnknown type: '{{type}}'. !!! !!! !!] - [H9FOe][êýWaiting for the resource !!! !!! !] + [H9FOe][ÏîWaiting for the resource !!! !!! !] - [C0x5g][ôüWe've enjoyed hosting your functions ! !!! !!! !!! !!] + [C0x5g][üÿWe've enjoyed hosting your functions ! !!! !!! !!! !!] - [pEr2v][ùµYour trial has now expired, but you can sign up for an extended trial which includes the rest of Azure as well. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [pEr2v][ÏöYour trial has now expired, but you can sign up for an extended trial which includes the rest of Azure as well. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [MmFW5][ÆÒChoose an auth provider !!! !!! !] + [MmFW5][ÅâChoose an auth provider !!! !!! !] - [xGxmh][ÆÙMicrosoft Account !!! !!!] + [xGxmh][é§Microsoft Account !!! !!!] - [Y7sP3][óêCreate a free Azure account !!! !!! !!] + [Y7sP3][ÁËCreate a free Azure account !!! !!! !!] - [MpBJl][ܧExtend trial to 24 hours !!! !!! !] + [MpBJl][äÈExtend trial to 24 hours !!! !!! !] - [li1Tb][ÑþFree Trial - Time remaining: !!! !!! !!!] + [li1Tb][û¢Free Trial - Time remaining: !!! !!! !!!] - [XItrU][ÓúFunction creation error! Please try again. !!! !!! !!! !!! ] + [XItrU][§ýFunction creation error! Please try again. !!! !!! !!! !!! ] - [eNJlt][âÔCreate Function Error !!! !!! ] + [eNJlt][ÙíCreate Function Error !!! !!! ] - [JyFkD][óÂIf you'd prefer another supported language, you can choose one later in the functions portal. !!! !!! !!! !!! !!! !!! !!! !!! !!] + [JyFkD][ØýIf you'd prefer another supported language, you can choose one later in the functions portal. !!! !!! !!! !!! !!! !!! !!! !!! !!] - [795ge][ë© minutes !!! ] + [795ge][µý minutes !!! ] - [ECXmU][âÊnew !!] + [ECXmU][õÞnew !!] - [SP7uC][üÏInput bindings provide additional data provided to your function when it is triggered. For instance, you can fetch data from table storage on a new queue message. Inputs are optional. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [SP7uC][îõInput bindings provide additional data provided to your function when it is triggered. For instance, you can fetch data from table storage on a new queue message. Inputs are optional. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [PEQE2][§éOutputs bindings allow you to output data from your function. For instance, you can add a new item to a queue. Outputs are optional. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [PEQE2][Ú£Outputs bindings allow you to output data from your function. For instance, you can add a new item to a queue. Outputs are optional. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [l09UW][ÒíTriggers are what will start your function. For instance, you can trigger on a new queue message. You must always have a trigger. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [l09UW][ÌèTriggers are what will start your function. For instance, you can trigger on a new queue message. You must always have a trigger. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [ocAoW][åúCreate a new function triggered by this output !!! !!! !!! !!! !] + [ocAoW][ÅÞCreate a new function triggered by this output !!! !!! !!! !!! !] - [wMNk4][È@Documentation !!! !!] + [wMNk4][èëDocumentation !!! !!] - [q11Kx][üÙGo !!] + [q11Kx][úõGo !!] - [Gtjfq][áßCopied! !!!] + [Gtjfq][ÏÅCopied! !!!] - [BpNYe][ÜÑCopy to clipboard !!! !!!] + [BpNYe][ÙÌCopy to clipboard !!! !!!] - [mC5qm][Á£Changes made to current file will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! ] + [mC5qm][ñ@Changes made to current file will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! ] - [NAlJ6][ÄÂAre you sure you want to delete {{fileName}} !!! !!! !!! !!! ] + [NAlJ6][þÄAre you sure you want to delete {{fileName}} !!! !!! !!! !!! ] - [RGD9i][ÝéEditing binary files is not supported. !!! !!! !!! !!] + [RGD9i][ÞåEditing binary files is not supported. !!! !!! !!! !!] - [TOGJS][ÐïError creating file: {{fileName}} !!! !!! !!! !] + [TOGJS][ôÔError creating file: {{fileName}} !!! !!! !!! !] - [KcPQJ][ÇÊError deleting file: {{fileName}} !!! !!! !!! !] + [KcPQJ][ÚÁError deleting file: {{fileName}} !!! !!! !!! !] - [ODzDm][§éThe fastest way to edit code is with the code editor, but you can also use Git.This example uses C#, but many other languages are also supported. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [ODzDm][ÆÐThe fastest way to edit code is with the code editor, but you can also use Git.This example uses C#, but many other languages are also supported. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [thyZd][âþActions !!!] + [thyZd][ôòActions !!!] - [tFzAi][ÌðLess than 1 minute !!! !!!] + [tFzAi][òÛLess than 1 minute !!! !!!] - [QIBBg][ùèSigning up for a free Azure account unlocks all Functions capabilities without worrying about time limits! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [QIBBg][¢ÇSigning up for a free Azure account unlocks all Functions capabilities without worrying about time limits! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [BBlkj][ªóCORS is not configured for this function app. Please add {{origin}} to your CORS list. !!! !!! !!! !!! !!! !!! !!! !!!] + [BBlkj][ÃÌCORS is not configured for this function app. Please add {{origin}} to your CORS list. !!! !!! !!! !!! !!! !!! !!! !!!] - [Kw2qm][ÚûWe are unable to reach your function app. Your app could be having a temporary issue or may be failing to start. You can check logs or try again in a couple of minutes. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [Kw2qm][ÁÖWe are unable to reach your function app. Your app could be having a temporary issue or may be failing to start. You can check logs or try again in a couple of minutes. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [QKjJG][ÃÁUnable to retrieve Function App ({{functionApp}}) !!! !!! !!! !!! !!] + [QKjJG][çØUnable to retrieve Function App ({{functionApp}}) !!! !!! !!! !!! !!] - [jb97o][¢åWe are unable to reach your function app ({{statusText}}). Please try again later. !!! !!! !!! !!! !!! !!! !!! !!] + [jb97o][ÞúWe are unable to reach your function app ({{statusText}}). Please try again later. !!! !!! !!! !!! !!! !!! !!! !!] - [0A9sc][éîJust a few more seconds... !!! !!! !!] + [0A9sc][ãÊJust a few more seconds... !!! !!! !!] - [7LEKN][éûHang on while we put the 'fun' in functions... !!! !!! !!! !!! !] + [7LEKN][ÊÀHang on while we put the 'fun' in functions... !!! !!! !!! !!! !] - [0j5Pw][§ÖDiscover more !!! !!] + [0j5Pw][èõDiscover more !!! !!] - [oXxpn][§áAdd !!] + [oXxpn][£ÞAdd !!] - [ek1a0][ªùDelete !!!] + [ek1a0][ÐÕDelete !!!] - [onXWc][@µEdit !!] + [onXWc][øíEdit !!] - [G927o][ËíUpload !!!] + [G927o][¥ÈUpload !!!] - [pg1JB][þ¢See additional options !!! !!! !] + [pg1JB][ªÂSee additional options !!! !!! !] - [Ga714][ãßSee only recommended options !!! !!! !!!] + [Ga714][õêSee only recommended options !!! !!! !!!] - [eJppo][õÒOne or more function apps were linked to this storage account. You can see all the function apps linked to the account under 'files' or 'Shares'. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [eJppo][ÁµOne or more function apps were linked to this storage account. You can see all the function apps linked to the account under 'files' or 'Shares'. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [X3JOA][ØÃA File with the name {{fileName}} already exists. !!! !!! !!! !!! !!] + [X3JOA][£ÓA File with the name {{fileName}} already exists. !!! !!! !!! !!! !!] - [M24Zk][ÏîFunction with name '{{name}}' already exists. !!! !!! !!! !!! !] + [M24Zk][ÖÚFunction with name '{{name}}' already exists. !!! !!! !!! !!! !] - [EnwGU][ãôAccount Key: !!! !] + [EnwGU][êÞAccount Key: !!! !] - [gXF2N][ߢAccount Name: !!! !!] + [gXF2N][áèAccount Name: !!! !!] - [DXio5][ø©You can now view the blobs, queues and tables associated with this storage binding. !!! !!! !!! !!! !!! !!! !!! !!] + [DXio5][êùYou can now view the blobs, queues and tables associated with this storage binding. !!! !!! !!! !!! !!! !!! !!! !!] - [X9hDS][ëáConnecting to your Storage Account !!! !!! !!! !] + [X9hDS][ûÊConnecting to your Storage Account !!! !!! !!! !] - [c4Tku][µµDownload Storage explorer from here: !!! !!! !!! !!! ] + [c4Tku][ÜÈDownload Storage explorer from here: !!! !!! !!! !!! ] - [wASvF][¥úConnect using these credentials: !!! !!! !!! ] + [wASvF][áÆConnect using these credentials: !!! !!! !!! ] - [126IU][ÀìLearn more !!! !] + [126IU][¢ÖLearn more !!! !] - [dJh7w][óàClick to learn more. !!! !!! ] + [dJh7w][ÖÍClick to learn more. !!! !!! ] - [gtBG3][ΪAdd header !!! !] + [gtBG3][ÔëAdd header !!! !] - [BKdUW][þÒAdd parameter !!! !!] + [BKdUW][¢üAdd parameter !!! !!] - [pDm22][ÆýHTTP method !!! !] + [pDm22][ÅØHTTP method !!! !] - [6HP2E][ÚîQuery !!!] + [6HP2E][ÇÕQuery !!!] - [xhZqa][ëÑ'AlwaysOn' is not enabled. Your app may not function properly !!! !!! !!! !!! !!! !!] + [xhZqa][ïÝ'AlwaysOn' is not enabled. Your app may not function properly !!! !!! !!! !!! !!! !!] - [p3kEO][ÖÛThe 'AzureWebJobsSecretStorageType' setting should be set to 'blob',not having this setting will cause unexpected behavior when using deployment slots !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [p3kEO][åÙThe 'AzureWebJobsSecretStorageType' setting should be set to 'blob',not having this setting will cause unexpected behavior when using deployment slots !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [j7Dwg][ìÎAzure Functions release notes. !!! !!! !!!] + [j7Dwg][òéAzure Functions release notes. !!! !!! !!!] - [paZ7w][©ÄHost Keys (All functions) !!! !!! !!] + [paZ7w][ÞÐHost Keys (All functions) !!! !!! !!] - [46BXr][ÛüAdd new host key !!! !!!] + [46BXr][õÍAdd new host key !!! !!!] - [HdFLd][ÖÀAdd new function key !!! !!! ] + [HdFLd][ÔæAdd new function key !!! !!! ] - [cCZiE][ïïClick to show !!! !!] + [cCZiE][óþClick to show !!! !!] - [mTH2T][ÐöDiscard !!!] + [mTH2T][üïDiscard !!!] - [4QSZ9][Èå(Required) !!! !] + [4QSZ9][Úß(Required) !!! !] - [EUUtC][ªÏ(Optional) Leave empty to auto-generate a key. !!! !!! !!! !!! !] + [EUUtC][ÎÏ(Optional) Leave empty to auto-generate a key. !!! !!! !!! !!! !] - [erPUO][íëNAME !!] + [erPUO][êØNAME !!] - [mUjmH][Á£VALUE !!!] + [mUjmH][µÚVALUE !!!] - [JSzQT][ñôFunction Keys !!! !!] + [JSzQT][ñ£Function Keys !!! !!] - [MSHjP][ÂÖConnection String: !!! !!!] + [MSHjP][@ÃConnection String: !!! !!!] - [ROnSW][ýüDaily Usage Quota (GB-Sec) !!! !!! !!] + [ROnSW][ÉÚDaily Usage Quota (GB-Sec) !!! !!! !!] - [IkdMH][¢@The Function App has reached daily usage quota and has been stopped until the next 24 hours time frame. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [IkdMH][ö£The Function App has reached daily usage quota and has been stopped until the next 24 hours time frame. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [x3Egh][ÕÔRemove quota !!! !] + [x3Egh][ÛçRemove quota !!! !] - [l3EAu][ÙäSet quota !!! ] + [l3EAu][úëSet quota !!! ] - [asz3b][ÌíWhen the daily usage quota is exceeded, the Function App is stopped until the next day at 0:00 AM UTC. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [asz3b][ÒÿWhen the daily usage quota is exceeded, the Function App is stopped until the next day at 0:00 AM UTC. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [t45zF][ΩAre you sure you want to revoke {{name}} key? !!! !!! !!! !!! !] + [t45zF][§ÎAre you sure you want to revoke {{name}} key? !!! !!! !!! !!! !] - [WtYrO][ÏØKeys !!] + [WtYrO][ÃöKeys !!] - [KrHSb][ÚçThe name must be unique within a Function App. It must start with a letter and can contain letters, numbers (0-9), dashes ("-"), and underscores ("_"). !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [KrHSb][ÌÓThe name must be unique within a Function App. It must start with a letter and can contain letters, numbers (0-9), dashes ("-"), and underscores ("_"). !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [6XWuz][öïLoading.. !!! ] + [6XWuz][àõLoading.. !!! ] - [v8xCB][îáTest !!] + [v8xCB][ÙîTest !!] - [TKXLS][ôÌRuntime version !!! !!] + [TKXLS][ÌÖRuntime version !!! !!] - [oy47A][¢ÀRuntime version !!! !!] + [oy47A][ÿýRuntime version !!! !!] - [r3Xdc][ýÇAzure Functions v1 (.NET Framework) !!! !!! !!! !] + [r3Xdc][þÔAzure Functions v1 (.NET Framework) !!! !!! !!! !] - [KSi0w][ª¥Azure Functions v2 (.NET Standard) !!! !!! !!! !] + [KSi0w][èÒAzure Functions v2 (.NET Standard) !!! !!! !!! !] - [I6Y9K][ìÃcustom !!!] + [I6Y9K][æÄcustom !!!] - [lPVP6][©§Your function app is disabled because it has exceeded the set quota. You can change that from the function app settings view on the left side bar. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [lPVP6][çáYour function app is disabled because it has exceeded the set quota. You can change that from the function app settings view on the left side bar. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [twIVl][ëÌYour function app is stopped. You cannot use the functions portal when the app is stopped. You can change that by going to the function app settings view on the left side bar and then going to the app service settings blade. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [twIVl][ÞãYour function app is stopped. You cannot use the functions portal when the app is stopped. You can change that by going to the function app settings view on the left side bar and then going to the app service settings blade. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [XTkxH][ÞãYou don't have sufficient permissions to access this function app. You may still be able to see basic settings in the app service settings blade which you can access from the function app settings link on the left sidebar. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [XTkxH][ÙÖYou don't have sufficient permissions to access this function app. You may still be able to see basic settings in the app service settings blade which you can access from the function app settings link on the left sidebar. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [z6S2c][ÏôParameter name must be unique. !!! !!! !!!] + [z6S2c][ûÁParameter name must be unique. !!! !!! !!!] - [IjLOy][èÕUse function return value !!! !!! !!] + [IjLOy][ÃéUse function return value !!! !!! !!] - [gQuLe][òÞFunction State !!! !!] + [gQuLe][êËFunction State !!! !!] - [3o2Ex][ÂÜOff !!] + [3o2Ex][ØýOff !!] - [v4Xef][ïøOn !!] + [v4Xef][Ê¥On !!] - [l5gut][ªöAPI settings !!! !] + [l5gut][êöAPI settings !!! !] - [fGlxB][íµNew proxy !!! ] + [fGlxB][ÞÀNew proxy !!! ] - [j0s0Z][ÙåAll methods !!! !] + [j0s0Z][µÛAll methods !!! !] - [BwuPT][Â@Allowed HTTP methods !!! !!! ] + [BwuPT][øÑAllowed HTTP methods !!! !!! ] - [3zNSV][æÈBackend URL !!! !] + [3zNSV][òôBackend URL !!! !] - [HI9GS][ÎÁProxy or function with that name already exists. !!! !!! !!! !!! !!] + [HI9GS][ýÔProxy or function with that name already exists. !!! !!! !!! !!! !!] - [L8VLo][ÂÊName !!] + [L8VLo][èÃName !!] - [aDXoP][ÓÙProxy URL !!! ] + [aDXoP][Ú@Proxy URL !!! ] - [4OcB6][ñðRoute template !!! !!] + [4OcB6][¢ÌRoute template !!! !!] - [FYnNM][ÃÔSelected methods !!! !!!] + [FYnNM][õÕSelected methods !!! !!!] - [nFUXm][Úâfunction app settings !!! !!! ] + [nFUXm][©@function app settings !!! !!! ] - [qso5Y][ÍûRuntime version: {{exactExtensionVersion}}. A newer version is available ({{latestExtensionVersion}}). !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [qso5Y][§ÕRuntime version: {{exactExtensionVersion}}. A newer version is available ({{latestExtensionVersion}}). !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [YFkSm][öáRuntime version: {{exactExtensionVersion}} ({{latestExtensionVersion}}) !!! !!! !!! !!! !!! !!! !!] + [YFkSm][ÙµRuntime version: {{exactExtensionVersion}} ({{latestExtensionVersion}}) !!! !!! !!! !!! !!! !!! !!] - [9lEjA][ÂÓProxies !!!] + [9lEjA][íïProxies !!!] - [DGX5K][ëÈEnable Azure Functions Proxies (preview) !!! !!! !!! !!!] + [DGX5K][æäEnable Azure Functions Proxies (preview) !!! !!! !!! !!!] - [ISiRw][èèChanges made to proxy {{name}} will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !] + [ISiRw][¥ªChanges made to proxy {{name}} will be lost. Are you sure you want to continue? !!! !!! !!! !!! !!! !!! !!! !] - [tnqJ7][ñÞProxy with name '{{name}}' already exists !!! !!! !!! !!!] + [tnqJ7][íþProxy with name '{{name}}' already exists !!! !!! !!! !!!] - [7GHEr][©©Azure functions slots (preview) is currently disabled. To enable, visit !!! !!! !!! !!! !!! !!! !!] + [7GHEr][èõAzure functions slots (preview) is currently disabled. To enable, visit !!! !!! !!! !!! !!! !!! !!] - [ra6uk][î£Discard !!!] + [ra6uk][ËÝDiscard !!!] - [xdErx][çÅFunctions !!! ] + [xdErx][©ðFunctions !!! ] - [tqw1e][óçSign in with Facebook !!! !!! ] + [tqw1e][ÐòSign in with Facebook !!! !!! ] - [WO5nN][ÈúSign in with GitHub !!! !!! ] + [WO5nN][ÈÆSign in with GitHub !!! !!! ] - [X6DKg][îÉSign in with Google !!! !!! ] + [X6DKg][úæSign in with Google !!! !!! ] - [FL7vG][íÚSign in with Microsoft !!! !!! !] + [FL7vG][تSign in with Microsoft !!! !!! !] - [97BXl][áÔSign out !!! ] + [97BXl][ËçSign out !!! ] - [nMo9Z][óùBackend URL must start with 'http://' or 'https://' !!! !!! !!! !!! !!!] + [nMo9Z][ÃÞBackend URL must start with 'http://' or 'https://' !!! !!! !!! !!! !!!] - [XsfS6][ÔÖCopy !!] + [XsfS6][çõCopy !!] - [IPDd7][ØÿRenew !!!] + [IPDd7][öçRenew !!!] - [g265R][ÁóRevoke !!!] + [g265R][ÙíRevoke !!!] - [8bIOe][ÃüCollapse !!! ] + [8bIOe][þªCollapse !!! ] - [ocOfh][ÜÈExpand !!!] + [ocOfh][ÈÃExpand !!!] - [sQCz1][Òö</> Get function URL !!! !!! ] + [sQCz1][îÎ</> Get function URL !!! !!! ] - [qfsdP][âÄ</> Get GitHub secret !!! !!! ] + [qfsdP][õÜ</> Get GitHub secret !!! !!! ] - [2Em0O][ÌÛHeaders !!!] + [2Em0O][ÞÀHeaders !!!] - [1aGsR][ÁÈThere are no headers !!! !!! ] + [1aGsR][§ÆThere are no headers !!! !!! ] - [pmSwO][éªAll subscriptions !!! !!!] + [pmSwO][ó©All subscriptions !!! !!!] - [tkYhP][ãÝSubscriptions !!! !!] + [tkYhP][ÆÇSubscriptions !!! !!] - [uMBhy][åÑ{0} subscriptions !!! !!!] + [uMBhy][Èõ{0} subscriptions !!! !!!] - [vZ7Bd][ÑÒFunctions (No access) !!! !!! ] + [vZ7Bd][öÏFunctions (No access) !!! !!! ] - [O2pHZ][ÐßFunctions (ReadOnly lock) !!! !!! !!] + [O2pHZ][ÜÖFunctions (ReadOnly lock) !!! !!! !!] - [EKf4n][ÌÞFunctions (Stopped) !!! !!! ] + [EKf4n][åíFunctions (Stopped) !!! !!! ] - [8f72t][øóProxies (No access) !!! !!! ] + [8f72t][âùProxies (No access) !!! !!! ] - [kGBpC][ÖÍProxies (Stopped) !!! !!!] + [kGBpC][ÚÓProxies (Stopped) !!! !!!] - [atLg0][ÑúProxies (ReadOnly lock) !!! !!! !] + [atLg0][Ò§Proxies (ReadOnly lock) !!! !!! !] - [VHO8Q][ÊÐFunctions !!! ] + [VHO8Q][ÌäFunctions !!! ] - [zYKDm][ÂûNew function !!! !] + [zYKDm][ØÝNew function !!! !] - [sSKm2][ÈÈFunction Apps !!! !!] + [sSKm2][Ó©Function Apps !!! !!] - [Suz6N][çþStop !!] + [Suz6N][ÛÂStop !!] - [jEjj0][ÍÒStart !!!] + [jEjj0][@üStart !!!] - [nsHwD][ØÇRestart !!!] + [nsHwD][ÍÙRestart !!!] - [dlgc8][ÙÎSwap !!] + [dlgc8][üóSwap !!] - [n9kwd][ÕñComplete Swap !!! !!] + [n9kwd][ÄÞComplete Swap !!! !!] - [xAbs5][èòCancel Swap !!! !] + [xAbs5][òüCancel Swap !!! !] - [IId24][ÕÖDownload publish profile !!! !!! !] + [IId24][àÿDownload publish profile !!! !!! !] - [4E7dY][õÃReset publish credentials !!! !!! !!] + [4E7dY][ßàReset publish credentials !!! !!! !!] - [P3ijB][ÐÉDelete !!!] + [P3ijB][£©Delete !!!] Status - [PPGdx][ÇöAvailability !!! !] + [PPGdx][ÛÜAvailability !!! !] - [Rg83J][ÒäAvailable !!! ] + [Rg83J][@õAvailable !!! ] - [CXoAP][ÛîNo access !!! ] + [CXoAP][óýNo access !!! ] - [dD1nf][ÎöNot applicable !!! !!] + [dD1nf][ÆÉNot applicable !!! !!] - [v2ybf][ìùNot available !!! !!] + [v2ybf][£ÒNot available !!! !!] - [WtWPr][ßÌConfigured features !!! !!! ] + [WtWPr][ÉõConfigured features !!! !!! ] - [TTRUj][£òQuick links to your features will show up here after you've configured them from the "Platform features" tab above. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [TTRUj][ÏÛQuick links to your features will show up here after you've configured them from the "Platform features" tab above. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [VuY7O][öüUnsaved changes for the app '{0}' will be lost. Are you sure you would like to continue? !!! !!! !!! !!! !!! !!! !!! !!! ] + [VuY7O][êßUnsaved changes for the app '{0}' will be lost. Are you sure you would like to continue? !!! !!! !!! !!! !!! !!! !!! !!! ] - [17Hb9][äÚThere was an error retrieving information about the app '{0}' !!! !!! !!! !!! !!! !!] + [17Hb9][ÍùThere was an error retrieving information about the app '{0}' !!! !!! !!! !!! !!! !!] - [qTCMA][ÜàThe app '{0}' could not be found !!! !!! !!! ] + [qTCMA][àâThe app '{0}' could not be found !!! !!! !!! ] - [EnJ9t][èÝPin app to dashboard !!! !!! ] + [EnJ9t][ÛÉPin app to dashboard !!! !!! ] - [VqLFR][íåAre you sure you would like to stop '{0}' !!! !!! !!! !!!] + [VqLFR][¢§Are you sure you would like to stop '{0}' !!! !!! !!! !!!] - [4CGT0][¢ÀStopping app '{0}' !!! !!!] + [4CGT0][ÄâStopping app '{0}' !!! !!!] - [ekCYB][ÖûStarting app '{0}' !!! !!!] + [ekCYB][øÕStarting app '{0}' !!! !!!] - [7gKHc][ÁßSuccessfully stopped app '{0}' !!! !!! !!!] + [7gKHc][ÍïSuccessfully stopped app '{0}' !!! !!! !!!] - [0wR3v][¥ÓSuccessfully started app '{0}' !!! !!! !!!] + [0wR3v][íìSuccessfully started app '{0}' !!! !!! !!!] - [2qgZZ][ÌíFailed to stop app '{0}' !!! !!! !] + [2qgZZ][ÉçFailed to stop app '{0}' !!! !!! !] - [aGMIP][å£Failed to start app '{0}' !!! !!! !!] + [aGMIP][é¥Failed to start app '{0}' !!! !!! !!] - [DFbYX][îìAre you sure you want to reset your publish profile? Profiles downloaded previously will become invalid. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [DFbYX][âÉAre you sure you want to reset your publish profile? Profiles downloaded previously will become invalid. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [4fpVw][ØçResetting publishing profile !!! !!! !!!] + [4fpVw][ÅñResetting publishing profile !!! !!! !!!] - [a3Jat][ÔÄSuccessfully reset publishing profile !!! !!! !!! !!] + [a3Jat][ôÈSuccessfully reset publishing profile !!! !!! !!! !!] - [QqK8f][äýFailed to reset publishing profile !!! !!! !!! !] + [QqK8f][ãËFailed to reset publishing profile !!! !!! !!! !] - [Z8blP][ðùAre you sure you want to delete '{0}' !!! !!! !!! !!] + [Z8blP][§ÿAre you sure you want to delete '{0}' !!! !!! !!! !!] - [52jLn][á@Deleting app '{0}' !!! !!!] + [52jLn][çæDeleting app '{0}' !!! !!!] - [zMndx][äùSuccessfully deleted app '{0}' !!! !!! !!!] + [zMndx][ΪSuccessfully deleted app '{0}' !!! !!! !!!] - [d0Oqx][æÉFailed to delete app '{0}' !!! !!! !!] + [d0Oqx][ìÖFailed to delete app '{0}' !!! !!! !!] - [lKW4B][î¢Are you sure you would like to restart '{0}' !!! !!! !!! !!! ] + [lKW4B][¢íAre you sure you would like to restart '{0}' !!! !!! !!! !!! ] - [Qyh1I][ÍðRestarting app '{0}' !!! !!! ] + [Qyh1I][ÌíRestarting app '{0}' !!! !!! ] - [N5WOH][ÄòSuccessfully restarted app '{0}' !!! !!! !!! ] + [N5WOH][ó©Successfully restarted app '{0}' !!! !!! !!! ] - [fz1FM][ÖÖFailed to restart app '{0}' !!! !!! !!] + [fz1FM][ìñFailed to restart app '{0}' !!! !!! !!] - [jpXTk][ÒÒThis feature is not supported for apps on a Consumption plan !!! !!! !!! !!! !!! !!] + [jpXTk][þËThis feature is not supported for apps on a Consumption plan !!! !!! !!! !!! !!! !!] - [1tXW7][ÍÅThis feature is not supported for slots !!! !!! !!! !!!] + [1tXW7][µäThis feature is not supported for slots !!! !!! !!! !!!] - [xXStu][ùïThis feature is not supported for Linux apps !!! !!! !!! !!! ] + [xXStu][þýThis feature is not supported for Linux apps !!! !!! !!! !!! ] - [qd6IQ][¥åYou must have write permissions on the current app in order to use this feature !!! !!! !!! !!! !!! !!! !!! !] + [qd6IQ][þ¢You must have write permissions on the current app in order to use this feature !!! !!! !!! !!! !!! !!! !!! !] - [712lG][ÍæThis feature is disabled because the app has a ReadOnly lock on it !!! !!! !!! !!! !!! !!! ] + [712lG][ÍëThis feature is disabled because the app has a ReadOnly lock on it !!! !!! !!! !!! !!! !!! ] - [EpXji][è£You must have Read permissions on the associated App Service plan in order to use this feature !!! !!! !!! !!! !!! !!! !!! !!! !!] + [EpXji][ÆæYou must have Read permissions on the associated App Service plan in order to use this feature !!! !!! !!! !!! !!! !!! !!! !!! !!] - [zxYV9][æóAPI !!] + [zxYV9][ñÈAPI !!] - [CFtjV][çÂDeployment options !!! !!!] + [CFtjV][êîDeployment options !!! !!!] - [0JCcY][ÙÍConfigure and manage deployment options for your app, including continuous deployment from VSTS, Github and Bitbucket as well as trigger deployments from OneDrive, Dropbox, external Git and more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [0JCcY][éùConfigure and manage deployment options for your app, including continuous deployment from VSTS, Github and Bitbucket as well as trigger deployments from OneDrive, Dropbox, external Git and more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [Yvhge][ÓËDeployment credentials !!! !!! !] + [Yvhge][¥þDeployment credentials !!! !!! !] - [mWkr2][æôConfigure Azure account-level deployment credentials. To change your app-level credentials (also known as 'Publish Credentials'), choose 'Reset publish credentials' in the 'Overview' tab. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Learn more</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [mWkr2][ÕñConfigure Azure account-level deployment credentials. To change your app-level credentials (also known as 'Publish Credentials'), choose 'Reset publish credentials' in the 'Overview' tab. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Learn more</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + + + [MZJcz][ÄÍThe console service is not available on your app. !!! !!! !!! !!! !!] - [O6WB1][ÕÐConsole !!!] + [O6WB1][âÒConsole !!!] - [NoMcv][ÂÍExplore your app's file system from an interactive web-based console. !!! !!! !!! !!! !!! !!! !] + [NoMcv][ÄýExplore your app's file system from an interactive web-based console. !!! !!! !!! !!! !!! !!! !] + + + [uddXd][ÔÙManage your web app environment by running common commands ('mkdir', 'cd' to change directories, etc.) This is a sandbox environment, so any commands that require elevated privileges will not work. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + + + CMD + + + PowerShell + + + [hY69x][ðÓCMD !!] + + + [elzS3][ÿ£PowerShell !!! !] + + + [eaauU][èÅBash !!] + + + [iVVyS][Í¥SSH !!] - [bNGTE][ÆÞSSH !!] + [bNGTE][þûSSH !!] - [sqOfz][ýÓSSH provides a Web SSH console experience for your Linux app code !!! !!! !!! !!! !!! !!! ] + [sqOfz][Ò¥SSH provides a Web SSH console experience for your Linux app code !!! !!! !!! !!! !!! !!! ] - [oK4fh][êµExtensions !!! !] + [oK4fh][ÍÂExtensions !!! !] - [HoN7I][öªExtensions add functionality to your entire app. !!! !!! !!! !!! !!] + [HoN7I][ÖèExtensions add functionality to your entire app. !!! !!! !!! !!! !!] - [PhZwN][Îá(no application settings to display) !!! !!! !!! !!] + [PhZwN][Âü(no application settings to display) !!! !!! !!! !!] - [UhJWe][óµ(no connection strings to display) !!! !!! !!! !] + [UhJWe][æà(no connection strings to display) !!! !!! !!! !] [wFaZU][@ù(no default documents to display) !!! !!! !!! !] - [vj8xs][ùý(no handler mappings to display) !!! !!! !!! ] + [vj8xs][Çþ(no handler mappings to display) !!! !!! !!! ] - [ZsHQt][ÎÝ(no virtual applications or directories to display) !!! !!! !!! !!! !!!] + [ZsHQt][ûò(no virtual applications or directories to display) !!! !!! !!! !!! !!!] - [8KJCN][ËîGeneral settings !!! !!!] + [8KJCN][ßÇGeneral settings !!! !!!] - [XlXme][ÇüAuto Swap !!! ] + [XlXme][àïAuto Swap !!! ] - [4WLfX][àêDebugging !!! ] + [4WLfX][Õ¢Debugging !!! ] - [LM2DJ][ËóRuntime !!!] + [LM2DJ][ÌôRuntime !!!] - [4HfJf][ÙÇApplication settings !!! !!! ] + [4HfJf][ãìApplication settings !!! !!! ] - [Jaewj][õâManage app settings, connection strings, runtime settings, and more. !!! !!! !!! !!! !!! !!! !] + [Jaewj][ÁªManage app settings, connection strings, runtime settings, and more. !!! !!! !!! !!! !!! !!! !] - [o5op2][ýÅDefault documents !!! !!!] + [o5op2][âÄDefault documents !!! !!!] - [zu67y][âßHandler mappings !!! !!!] + [zu67y][ýéHandler mappings !!! !!!] - [30fBa][¢ÔVirtual applications and directories !!! !!! !!! !!] + [30fBa][ÏÀVirtual applications and directories !!! !!! !!! !!] - [l7Ted][Á§You must have write permissions on the current app in order to edit these settings. !!! !!! !!! !!! !!! !!! !!! !!] + [l7Ted][ïÕYou must have write permissions on the current app in order to edit these settings. !!! !!! !!! !!! !!! !!! !!! !!] - [eJkdI][øìThis app has a read-only lock that prevents editing settings or retrieving secure data. Please remove the lock and try again. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [eJkdI][âàThis app has a read-only lock that prevents editing settings or retrieving secure data. Please remove the lock and try again. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [zNEXq][ÚåView settings in read-only mode. !!! !!! !!! ] + [zNEXq][ÕõView settings in read-only mode. !!! !!! !!! ] - [sImY3][äþFailed to load settings. !!! !!! !] + [sImY3][ÍÇFailed to load settings. !!! !!! !] - [FZLa1][îàLoading... !!! !] + [FZLa1][ûÒLoading... !!! !] - [O7rq1][ÈÚUpdating web app settings !!! !!! !!] + [O7rq1][ÕïUpdating web app settings !!! !!! !!] - [um7xG][òÂSuccessfully updated web app settings !!! !!! !!! !!] + [um7xG][ÈÒSuccessfully updated web app settings !!! !!! !!! !!] - [w3HzK][åØFailed to update web app settings: !!! !!! !!! !] + [w3HzK][ÔÓFailed to update web app settings: !!! !!! !!! !] - [2oBCR][µô{{configGroupName}} Save Error: Invlid input provided. !!! !!! !!! !!! !!! ] + [2oBCR][ÜÆ{{configGroupName}} Save Error: Invlid input provided. !!! !!! !!! !!! !!! ] - [AzRs7][Æè.NET Framework version !!! !!! !] + [AzRs7][ÿÒ.NET Framework version !!! !!! !] - [hxMg7][ÆÎThe version used to run your web app if using the .NET Framework !!! !!! !!! !!! !!! !!!] + [hxMg7][åÈThe version used to run your web app if using the .NET Framework !!! !!! !!! !!! !!! !!!] - [ZvswO][çÓPHP version !!! !] + [ZvswO][ÊÙPHP version !!! !] - [lU4O0][ÝèThe version used to run your web app if using PHP !!! !!! !!! !!! !!] + [lU4O0][æ¢The version used to run your web app if using PHP !!! !!! !!! !!! !!] - [bcY1b][ÇîPython version !!! !!] + [bcY1b][ÆÁPython version !!! !!] - [wkTOz][åÊThe version used to run your web app if using Python !!! !!! !!! !!! !!!] + [wkTOz][ùÚThe version used to run your web app if using Python !!! !!! !!! !!! !!!] - [P3tb5][ùûApp Service supports installing newer versions of Python. Click here to learn more. !!! !!! !!! !!! !!! !!! !!! !!] + [P3tb5][äÓApp Service supports installing newer versions of Python. Click here to learn more. !!! !!! !!! !!! !!! !!! !!! !!] - [tC31B][ïäJava version !!! !] + [tC31B][þÃJava version !!! !] - [1k1gX][ØÕThe version used to run your web app if using Java !!! !!! !!! !!! !!!] + [1k1gX][ÒåThe version used to run your web app if using Java !!! !!! !!! !!! !!!] - [NsMzs][çÝJava minor version !!! !!!] + [NsMzs][ÏÞJava minor version !!! !!!] - [k1Hbm][£þSelect the desired Java minor version. Selecting 'Newest' will keep your app using the JVM most recently added to the portal. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [k1Hbm][ÎðSelect the desired Java minor version. Selecting 'Newest' will keep your app using the JVM most recently added to the portal. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [jzgjH][ÖÖJava web container !!! !!!] + [jzgjH][ÿÊJava web container !!! !!!] - [LjxPY][µÉThe web container version used to run your web app if using Java !!! !!! !!! !!! !!! !!!] + [LjxPY][ʧThe web container version used to run your web app if using Java !!! !!! !!! !!! !!! !!!] - [tSfaq][þÝPlatform !!! ] + [tSfaq][ÙÌPlatform !!! ] - [RmQnB][öïThe platform architecture your web app runs !!! !!! !!! !!! ] + [RmQnB][ãÉThe platform architecture your web app runs !!! !!! !!! !!! ] - [D36FH][ÿÂ64-bit configuration requires a basic or higher App Service plan !!! !!! !!! !!! !!! !!!] + [D36FH][ßÇ64-bit configuration requires a basic or higher App Service plan !!! !!! !!! !!! !!! !!!] - [6QpBJ][ÐéWeb sockets !!! !] + [6QpBJ][ÞÓWeb sockets !!! !] - [u7d0r][áÜWebSockets allow more flexible connectivity between web apps and modern browsers. Your web app would need to be built to leverage these capabilities. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [u7d0r][ÈüWebSockets allow more flexible connectivity between web apps and modern browsers. Your web app would need to be built to leverage these capabilities. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [ojE0N][Ì£Always On !!! ] + [ojE0N][âåAlways On !!! ] - [s40IF][ïÿIndicates that your web app needs to be loaded at all times. By default, web apps are unloaded after they have been idle. It is recommended that you enable this option when you have continuous web jobs running on the web app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [s40IF][©ÂIndicates that your web app needs to be loaded at all times. By default, web apps are unloaded after they have been idle. It is recommended that you enable this option when you have continuous web jobs running on the web app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [eMe02][îÌAlways on requires a basic or higher App Service plan !!! !!! !!! !!! !!! ] + [eMe02][ÚËAlways on requires a basic or higher App Service plan !!! !!! !!! !!! !!! ] - [cvFfl][ÕÎThe App Service plan associated with this app does not support this feature. Please contact your administrator to enable this feature for your current plan, or upgrade to a plan that already has it enabled. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [cvFfl][ËëThe App Service plan associated with this app does not support this feature. Please contact your administrator to enable this feature for your current plan, or upgrade to a plan that already has it enabled. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [oRZ8H][ÁãManaged Pipeline Version !!! !!! !] + [oRZ8H][îÜManaged Pipeline Version !!! !!! !] - [Vfset][ÄÎAuto swap destinations cannot be configured from production slot !!! !!! !!! !!! !!! !!!] + [Vfset][óáAuto swap destinations cannot be configured from production slot !!! !!! !!! !!! !!! !!!] - [dhkvh][êÎAuto Swap requires a standard or higher App Service Plan !!! !!! !!! !!! !!! !] + [dhkvh][çþAuto Swap requires a standard or higher App Service Plan !!! !!! !!! !!! !!! !] - [8eQty][èÐAuto Swap !!! ] + [8eQty][¥ôAuto Swap !!! ] - [FEl09][ïÚAuto Swap Slot !!! !!] + [FEl09][ÂõAuto Swap Slot !!! !!] - [Ap5oT][ã¥production !!! !] + [Ap5oT][ôÑproduction !!! !] - [Oyc0y][£ÉARR Affinity !!! !] + [Oyc0y][ÕòARR Affinity !!! !] - [TLr4t][öûYou can improve the performance of your stateless applications by turning off the Affinity Cookie, stateful applications should keep the Affinity Cookie turned on for increased compatibility. Click to learn more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [TLr4t][ÝóYou can improve the performance of your stateless applications by turning off the Affinity Cookie, stateful applications should keep the Affinity Cookie turned on for increased compatibility. Click to learn more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [3v1hz][î¥Remote debugging !!! !!!] + [3v1hz][¥ÎRemote debugging !!! !!!] - [BZL7H][õ§Remote Visual Studio version !!! !!! !!!] + [BZL7H][þØRemote Visual Studio version !!! !!! !!!] - [caOVE][ÍÛStack !!!] + [caOVE][ÙîStack !!!] - [2LB06][æÉWeb Apps on Linux provide run-time options through a collection of built in containers. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Learn more</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [2LB06][ôÐWeb Apps on Linux provide run-time options through a collection of built in containers. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Learn more</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [lX4FP][ù£Startup File !!! !] + [lX4FP][©éStartup File !!! !] - [xi6H7][ÌÅProvide an optional startup command that will be run as part of container startup. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Learn more</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [xi6H7][@òProvide an optional startup command that will be run as part of container startup. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Learn more</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [0wM2b][þ©Newest !!!] + [0wM2b][ÖëNewest !!!] - [pLhwL][Ëã32-bit !!!] + [pLhwL][Ðå32-bit !!!] - [iwPHz][ËÅ64-bit !!!] + [iwPHz][µÍ64-bit !!!] - [rU8tZ][ò§Classic !!!] + [rU8tZ][ýïClassic !!!] - [HtV2J][ÞôIntegrated !!! !] + [HtV2J][ÁûIntegrated !!! !] - [Xf4aE][£ÀProperties !!! !] + [Xf4aE][ßùProperties !!! !] - [VSoAq][ÂòView properties of your app. !!! !!! !!!] + [VSoAq][ÉñView properties of your app. !!! !!! !!!] - [AacQo][óÈBackups !!!] + [AacQo][ÁÏBackups !!!] - [mpx8N][ÇáUse Backup and Restore to easily create automatic or manual backups. !!! !!! !!! !!! !!! !!! !] + [mpx8N][ä§Use Backup and Restore to easily create automatic or manual backups. !!! !!! !!! !!! !!! !!! !] - [KlJLU][ÐåAll settings !!! !] + [KlJLU][åëAll settings !!! !] - [7i2fY][ÚõView all App Service settings. !!! !!! !!!] + [7i2fY][æôView all App Service settings. !!! !!! !!!] - [YwyI3][ËîManage settings that affect the Functions runtime for all functions within your app. !!! !!! !!! !!! !!! !!! !!! !!] + [YwyI3][ÂÐManage settings that affect the Functions runtime for all functions within your app. !!! !!! !!! !!! !!! !!! !!! !!] - [vYoSx][üÿGeneral Settings !!! !!!] + [vYoSx][þõGeneral Settings !!! !!!] - [jBK08][àÆCode Deployment !!! !!] + [jBK08][ï¥Code Deployment !!! !!] - [M7w0e][ýÔDeployment Slots !!! !!!] + [M7w0e][çÇDeployment Slots !!! !!!] - [yFyZs][ÔØDevelopment tools !!! !!!] + [yFyZs][ÒÙDevelopment tools !!! !!!] - [hsNk1][àÁNetworking !!! !] + [hsNk1][@èNetworking !!! !] - [McG3k][åÅSecurely access resources through VNET Integration and Hybrid Connections. !!! !!! !!! !!! !!! !!! !!!] + [McG3k][µÔSecurely access resources through VNET Integration and Hybrid Connections. !!! !!! !!! !!! !!! !!! !!!] - [2qHpU][ɪConfigure SSL bindings for your app using either a certificate you purchased externally or an App Service Certificate. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [2qHpU][ðÎConfigure SSL bindings for your app using either a certificate you purchased externally or an App Service Certificate. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [Dpt6o][ÌêCustom domains !!! !!] + [Dpt6o][ÓÅCustom domains !!! !!] - [2jED3][§µConfigure and purchase custom domain names. !!! !!! !!! !!! ] + [2jED3][öËConfigure and purchase custom domain names. !!! !!! !!! !!! ] - [A4M9T][£ûAuthentication / Authorization !!! !!! !!!] + [A4M9T][íÁAuthentication / Authorization !!! !!! !!!] - [LDdvE][ëÍUse Authentication / Authorization to protect your application and work with per-user data. !!! !!! !!! !!! !!! !!! !!! !!! !] + [LDdvE][©ëUse Authentication / Authorization to protect your application and work with per-user data. !!! !!! !!! !!! !!! !!! !!! !!! !] - [zHqWF][òÛManaged service identity (Preview) !!! !!! !!! !] + [zHqWF][èçManaged service identity !!! !!! !] - [FZyXa][çöYour application can communicate with other Azure services as itself using a managed Azure Active Directory identity. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [FZyXa][ðäYour application can communicate with other Azure services as itself using a managed Azure Active Directory identity. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [eT8r1][@ÖPush notifications !!! !!!] + [eT8r1][ßíPush notifications !!! !!!] - [x7Kgu][ßÊSend fast, scalable, and cross-platform mobile push notifications using Notification Hubs. !!! !!! !!! !!! !!! !!! !!! !!! !] + [x7Kgu][çøSend fast, scalable, and cross-platform mobile push notifications using Notification Hubs. !!! !!! !!! !!! !!! !!! !!! !!! !] - [LJCnd][©ÍDiagnostic logs !!! !!] + [LJCnd][ïæDiagnostic logs !!! !!] - [ZvSd4][ûÿConfigure where and when to log application and server events. !!! !!! !!! !!! !!! !!!] + [ZvSd4][Þ¥Configure where and when to log application and server events. !!! !!! !!! !!! !!! !!!] - [iTGu1][ÄíLog streaming !!! !!] + [iTGu1][ûÅLog streaming !!! !!] - [erdLM][ÃëView real-time application logs. !!! !!! !!! ] + [erdLM][áýView real-time application logs. !!! !!! !!! ] - [LxlAV][ûíProcess explorer !!! !!!] + [LxlAV][ÞúProcess explorer !!! !!!] - [aGiK7][Ú§View details on application processes, memory usage, and CPU utilization. !!! !!! !!! !!! !!! !!! !!!] + [aGiK7][@èView details on application processes, memory usage, and CPU utilization. !!! !!! !!! !!! !!! !!! !!!] - [KL5p5][æªSecurity scanning !!! !!!] + [KL5p5][øãSecurity scanning !!! !!!] - [eMcsP][ÌÉEnable security scanning for your app with Tinfoil Security. !!! !!! !!! !!! !!! !!] + [eMcsP][ÒëEnable security scanning for your app with Tinfoil Security. !!! !!! !!! !!! !!! !!] - [JkgTe][¥ÇMonitoring !!! !] + [JkgTe][þîMonitoring !!! !] - [d63px][îýConfigure Cross-Origin Resource Sharing (CORS) rules for your app. !!! !!! !!! !!! !!! !!! ] + [d63px][äÙConfigure Cross-Origin Resource Sharing (CORS) rules for your app. !!! !!! !!! !!! !!! !!! ] - [HZs7I][çàAPI definition !!! !!] + [HZs7I][ÒóAPI definition !!! !!] - [tPx3x][äÑConfigure the location of the Swagger 2.0 metadata describing your API. This makes it easy for others to discover and consume your API. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [tPx3x][ÃàConfigure the location of the Swagger 2.0 metadata describing your API. This makes it easy for others to discover and consume your API. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [m3I1v][æÇAn App Service plan is the container for your app. The App Service plan settings will determine the location, features, cost and compute resources associated with your app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [m3I1v][áúAn App Service plan is the container for your app. The App Service plan settings will determine the location, features, cost and compute resources associated with your app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [8m1dh][ÐæQuotas !!!] + [8m1dh][ÇþQuotas !!!] - [84VZ1][ÜßMonitor file system usage quotas. !!! !!! !!! !] + [84VZ1][óÄMonitor file system usage quotas. !!! !!! !!! !] - [u4ara][òÝActivity log !!! !] + [u4ara][âþActivity log !!! !] - [zH2Kt][ÌÎView management operations that have been performed on your app. !!! !!! !!! !!! !!! !!!] + [zH2Kt][ÑëView management operations that have been performed on your app. !!! !!! !!! !!! !!! !!!] - [K3627][ûÌAccess control (IAM) !!! !!! ] + [K3627][ûÖAccess control (IAM) !!! !!! ] - [rdcI0][èìConfigure Role-Based Access Control (RBAC) for your app. !!! !!! !!! !!! !!! !] + [rdcI0][íðConfigure Role-Based Access Control (RBAC) for your app. !!! !!! !!! !!! !!! !] - [axWqb][§âTags !!] + [axWqb][ÒÌTags !!] - [ul9nk][ÅëTags are key/value pairs that enable you to categorize resources and view consolidated billing by applying the same tag to multiple resources and resource groups. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [ul9nk][ÂÔTags are key/value pairs that enable you to categorize resources and view consolidated billing by applying the same tag to multiple resources and resource groups. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [AJdtj][áæLocks !!!] + [AJdtj][ÅóLocks !!!] - [ahTMZ][ÜñLock resources to prevent unexpected changes or deletions. !!! !!! !!! !!! !!! !] + [ahTMZ][àÜLock resources to prevent unexpected changes or deletions. !!! !!! !!! !!! !!! !] - [z4HmW][ÉÑAutomation script !!! !!!] + [z4HmW][ö¢Automation script !!! !!!] - [vVAN4][éûAutomate deploying resources with Azure Resource Manager templates in a single, coordinated operation. Define resources and configurable input parameters and deploy with script or code. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [vVAN4][ÍÜAutomate deploying resources with Azure Resource Manager templates in a single, coordinated operation. Define resources and configurable input parameters and deploy with script or code. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [hQFVK][øØResource management !!! !!! ] + [hQFVK][ûÕResource management !!! !!! ] - [jhZA9][ç©Diagnose and solve problems !!! !!! !!] + [jhZA9][ÈêDiagnose and solve problems !!! !!! !!] - [llb1c][âOur self-service diagnostic and troubleshooting experience helps you to identify and resolve issues with your app !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [llb1c][¥üOur self-service diagnostic and troubleshooting experience helps you to identify and resolve issues with your app !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [00JJA][ìÆAdvanced tools (Kudu) !!! !!! ] + [00JJA][ÛÆAdvanced tools (Kudu) !!! !!! ] - [mDuLz][ûµUse Kudu to inspect environment variables, access the debug console, upload zips, view processes, and more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [mDuLz][ÿàUse Kudu to inspect environment variables, access the debug console, upload zips, view processes, and more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [7SOPq][ÁãApp Service Editor !!! !!!] + [7SOPq][Ù§App Service Editor !!! !!!] - [j1sR8][ËÏApp Service Editor provides an in-browser editing experience for your code. !!! !!! !!! !!! !!! !!! !!!] + [j1sR8][¢ãApp Service Editor provides an in-browser editing experience for your code. !!! !!! !!! !!! !!! !!! !!!] - [9jh51][üÜResource Explorer !!! !!!] + [9jh51][ÖÙResource Explorer !!! !!!] - [4jCFN][ßÍExplore management APIs with Azure Resource Explorer (preview). !!! !!! !!! !!! !!! !!!] + [4jCFN][Ô¢Explore management APIs with Azure Resource Explorer (preview). !!! !!! !!! !!! !!! !!!] - [F31oN][Â¥CORS Rules ({0} defined) !!! !!! !] + [F31oN][ÅýCORS Rules ({0} defined) !!! !!! !] - [HNhDW][ãîDeployment options configured with {0} !!! !!! !!! !!] + [HNhDW][ÚµDeployment options configured with {0} !!! !!! !!! !!] - [LHVxe][ïÊSSL certificates !!! !!!] + [LHVxe][ÖÌSSL certificates !!! !!!] - [FmEKt][ÔµWebJobs ({0} defined) !!! !!! ] + [FmEKt][ÒÿWebJobs ({0} defined) !!! !!! ] - [lgND1][¥ÝExtensions ({0} installed) !!! !!! !!] + [lgND1][ÉÌExtensions ({0} installed) !!! !!! !!] - [cEFX1][õîOverview !!! ] + [cEFX1][ªæOverview !!! ] - [XjE8q][µøPlatform features !!! !!!] + [XjE8q][ÀàPlatform features !!! !!!] - [bQrEZ][ÓåSettings !!! ] + [bQrEZ][õøSettings !!! ] - [wBouT][ÎúFunction app settings !!! !!! ] + [wBouT][ТFunction app settings !!! !!! ] - [nJYS7][øþConfiguration !!! !!] + [nJYS7][§ÆConfiguration !!! !!] - [1RTcE][êÎApplication settings !!! !!! ] + [1RTcE][È¥Application settings !!! !!! ] - [FmJBy][ãÀManaging your Function app is not available for this trial. !!! !!! !!! !!! !!! !!] + [FmJBy][ûßManaging your Function app is not available for this trial. !!! !!! !!! !!! !!! !!] - [Nyxzz][ÑÛTemplate !!! ] + [Nyxzz][êøTemplate !!! ] - [O9ZVx][ÙÀEvents !!!] + [O9ZVx][óèEvents !!!] - [XOGqi][ÜÊApp Service plan !!! !!!] + [XOGqi][ÊÁApp Service plan !!! !!!] - [Ep7ZZ][þªApp Service plan / pricing tier !!! !!! !!! ] + [Ep7ZZ][ü@App Service plan / pricing tier !!! !!! !!! ] - [refs6][ÐÙAuthentication !!! !!] + [refs6][ÃëAuthentication !!! !!] - [lFBC2][ËêAuthorization !!! !!] + [lFBC2][äñAuthorization !!! !!] - [d86ro][ÖÄHybrid connections !!! !!!] + [d86ro][áÝHybrid connections !!! !!!] - [lKqDp][çùsupport request !!! !!] + [lKqDp][ݵsupport request !!! !!] - [B5Bnd][Ωscale !!!] + [B5Bnd][ôàscale !!!] - [TGaI7][¢íConnection strings !!! !!!] + [TGaI7][ÈêConnection strings !!! !!!] - [c8xo6][ÍðDebug !!!] + [c8xo6][ÆûDebug !!!] - [idt2l][ªÊContinuous deployment !!! !!! ] + [idt2l][µüContinuous deployment !!! !!! ] Source - [3qcql][àáTarget !!!] + [3qcql][ÓíTarget !!!] - [3kb02][þáOptions !!!] + [3kb02][åÌOptions !!!] - [B7fBh][ÁñWe are not able to access your Azure settings for your function app. !!! !!! !!! !!! !!! !!! !] + [B7fBh][µÆWe are not able to access your Azure settings for your function app. !!! !!! !!! !!! !!! !!! !] - [BUnjj][ÛÜFirst make sure you have proper access to the Azure resource {0}. If you dotTry refreshing the portal to renew your authentication token. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [BUnjj][æòFirst make sure you have proper access to the Azure resource {0}. If you dotTry refreshing the portal to renew your authentication token. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [KngnQ][µñPlease check the storage account connection string in application settings as it appears to be invalid. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [KngnQ][íäPlease check the storage account connection string in application settings as it appears to be invalid. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [A9CoY][ÎñUpdate the app setting with a valid storage connection string. !!! !!! !!! !!! !!! !!!] + [A9CoY][ÙèUpdate the app setting with a valid storage connection string. !!! !!! !!! !!! !!! !!!] - [V1vac][ÜÍ'{0}' application setting is missing from your app. This setting contains a connection string for an Azure Storage account that is used to host your functions content. Your app will be completely broken without this setting. You may need to delete and recreate this function app if you no longer have access to the value of that application setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [V1vac][ï¢'{0}' application setting is missing from your app. This setting contains a connection string for an Azure Storage account that is used to host your functions content. Your app will be completely broken without this setting. You may need to delete and recreate this function app if you no longer have access to the value of that application setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [SkOYm][Ôõ'{0}' application setting is missing from your app. This setting contains a share name where your function content lives. Your app will be completely broken without this setting. You may need to delete and recreate this function app if you no longer have access to the value of that application setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [SkOYm][ôÙ'{0}' application setting is missing from your app. This setting contains a share name where your function content lives. Your app will be completely broken without this setting. You may need to delete and recreate this function app if you no longer have access to the value of that application setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [6uI0W][Â¥'{0}' application setting is missing from your app. This setting contains a connection string for an Azure Storage account that is needed for the monitoring view of your functions. This is where invocation data is aggregated and then displayed in monitoring view. Your monitoring view might be broken. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [6uI0W][ÛÓ'{0}' application setting is missing from your app. This setting contains a connection string for an Azure Storage account that is needed for the monitoring view of your functions. This is where invocation data is aggregated and then displayed in monitoring view. Your monitoring view might be broken. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [KPa7R][Þð'{0}' application setting is missing from your app. This setting contains a connection string for an Azure Storage account that is needed for the functions runtime to handle multiple instances synchronization, log invocation results, and other infrastructure jobs. Your function app will not work correctly without that setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [KPa7R][Üã'{0}' application setting is missing from your app. This setting contains a connection string for an Azure Storage account that is needed for the functions runtime to handle multiple instances synchronization, log invocation results, and other infrastructure jobs. Your function app will not work correctly without that setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [xMA9r][©èCreate the app setting with a valid storage connection string. !!! !!! !!! !!! !!! !!!] + [xMA9r][õèCreate the app setting with a valid storage connection string. !!! !!! !!! !!! !!! !!!] - [KV55C][ε'{0}' application setting is missing from your app. Without this setting you'll always be running the latest version of the runtime even across major version updates which might contain breaking changes. It's advised to set that value to the current latest major version (~1) and you'll get notified with newer versions for update. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [KV55C][©Û'{0}' application setting is missing from your app. Without this setting you'll always be running the latest version of the runtime even across major version updates which might contain breaking changes. It's advised to set that value to the current latest major version (~1) and you'll get notified with newer versions for update. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [bntRS][ôåAzure Storage Account connection string stored in '{0}' is null or empty. This is required to have your function app working. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [bntRS][ÍêAzure Storage Account connection string stored in '{0}' is null or empty. This is required to have your function app working. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [aQUvT][ßÏUpdate the app setting with a valid storage connection string. !!! !!! !!! !!! !!! !!!] + [aQUvT][ÏÊUpdate the app setting with a valid storage connection string. !!! !!! !!! !!! !!! !!!] - [mJiuX][£çStorage account {0} doesn't exist. Deleting the storage account the function app is using will cause the function app to stop working. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [mJiuX][âÌStorage account {0} doesn't exist. Deleting the storage account the function app is using will cause the function app to stop working. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [12MKK][ÛÊUpdate the app setting with a valid existing storage connection string. !!! !!! !!! !!! !!! !!! !!] + [12MKK][úÖUpdate the app setting with a valid existing storage connection string. !!! !!! !!! !!! !!! !!! !!] - [zKm4a][ØÎStorage account {0} doesn't support Azure Queues Storage. Functions runtime require queues to work properly. You'll have to delete and recreate your function app with a storage account that supports Azure Queues Storage. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [zKm4a][þüStorage account {0} doesn't support Azure Queues Storage. Functions runtime require queues to work properly. You'll have to delete and recreate your function app with a storage account that supports Azure Queues Storage. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [oFzW4][ÈÄThere seem to be a problem querying Azure backend for your function app. !!! !!! !!! !!! !!! !!! !!] + [oFzW4][ÈèThere seem to be a problem querying Azure backend for your function app. !!! !!! !!! !!! !!! !!! !!] - [RUkcZ][Õ¢There seem to be a problem querying Azure backend for your function app. !!! !!! !!! !!! !!! !!! !!] + [RUkcZ][àóThere seem to be a problem querying Azure backend for your function app. !!! !!! !!! !!! !!! !!! !!] - [cF2yV][ÓüIf the problem persists, contact support with the following code {{code}} !!! !!! !!! !!! !!! !!! !!!] + [cF2yV][ÌüIf the problem persists, contact support with the following code {{code}} !!! !!! !!! !!! !!! !!! !!!] - [Ak6He][ËûWe are not able to retrieve the list of functions for this function app. !!! !!! !!! !!! !!! !!! !!] + [Ak6He][îêWe are not able to retrieve the list of functions for this function app. !!! !!! !!! !!! !!! !!! !!] - [CUb5G][ÇôWe are not able to create function {{functionName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [CUb5G][ìÚWe are not able to create function {{functionName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [mz5ka][ßýWe are unable to decrypt your function access keys. This can happen if you delete and recreate the app with the same name, or if you copied your keys from a different function app. You can try following steps here to fix the issue Follow steps here https://go.microsoft.com/fwlink/?linkid=844094 !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [mz5ka][¥©We are unable to decrypt your function access keys. This can happen if you delete and recreate the app with the same name, or if you copied your keys from a different function app. You can try following steps here to fix the issue Follow steps here https://go.microsoft.com/fwlink/?linkid=844094 !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [8eHRp][éÔWe are not able to delete the file {{fileName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!] + [8eHRp][î@We are not able to delete the file {{fileName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!] - [921Pl][ÓüWe are not able to delete function '{0}'. Please try again later. !!! !!! !!! !!! !!! !!! ] + [921Pl][ÒÐWe are not able to delete function '{0}'. Please try again later. !!! !!! !!! !!! !!! !!! ] - [n3ZhE][êWe are not able to get the content for {{fileName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [n3ZhE][ÜÀWe are not able to get the content for {{fileName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [6xua9][Å¥We are not able to retrieve your functions right now. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [6xua9][ÛâWe are not able to retrieve your functions right now. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [Mq223][ãôWe are not able to retrieve secrets file for {{functionName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! !!!] + [Mq223][ÚéWe are not able to retrieve secrets file for {{functionName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! !!!] - [d1vn7][ìðWe are not able to save the content for {{fileName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [d1vn7][ÃÃWe are not able to save the content for {{fileName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [GCI35][éãWe are not able to retrieve directory content for your function. Please try again later. !!! !!! !!! !!! !!! !!! !!! !!! ] + [GCI35][ÝìWe are not able to retrieve directory content for your function. Please try again later. !!! !!! !!! !!! !!! !!! !!! !!! ] - [t4Mct][ÐðWe are unable to get the content for function '{0}'. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [t4Mct][óóWe are unable to get the content for function '{0}'. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [svvPz][УWe are unable to save the content for function '{0}'. !!! !!! !!! !!! !!! ] + [svvPz][£ÿWe are unable to save the content for function '{0}'. !!! !!! !!! !!! !!! ] - [WuvPO][ö@We are unable to retrieve the runtime config. Please try again later. !!! !!! !!! !!! !!! !!! !] + [WuvPO][Þ@We are unable to retrieve the runtime config. Please try again later. !!! !!! !!! !!! !!! !!! !] - [xtFcf][§èWe are not able to retrieve the runtime master key. Please try again later. !!! !!! !!! !!! !!! !!! !!!] + [xtFcf][@óWe are not able to retrieve the runtime master key. Please try again later. !!! !!! !!! !!! !!! !!! !!!] - [b4qdt][@ÍWe are not able to update function {{functionName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [b4qdt][µ¢We are not able to update function {{functionName}}. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [NXrAF][ÚµThe function runtime is unable to start. !!! !!! !!! !!!] + [NXrAF][üçThe function runtime is unable to start. !!! !!! !!! !!!] - [hnooV][ßéWe are not able to create or update the key {{keyName}} for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [hnooV][ÅäWe are not able to create or update the key {{keyName}} for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [YBZ0y][ÙÊWe are not able to delete the key {{keyName}} for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [YBZ0y][ÎçWe are not able to delete the key {{keyName}} for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [LM61O][âÙWe are not able to renew the key {{keyName}} for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [LM61O][µëWe are not able to renew the key {{keyName}} for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [MF3jJ][ÑøWe are not able to retrieve the keys for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [MF3jJ][ÜÞWe are not able to retrieve the keys for function {{functionName}}. This can happen if the runtime is not able to load your function. Check other function errors. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [Y4myA][ÒîThe application is offline. Please check your internet connection. !!! !!! !!! !!! !!! !!! ] + [Y4myA][ÙÊThe application is offline. Please check your internet connection. !!! !!! !!! !!! !!! !!! ] - [dwixq][úÒACTIONS !!!] + [dwixq][ÒøACTIONS !!!] - [NYo3z][æÚgo to the quickstart !!! !!! ] + [NYo3z][ñögo to the quickstart !!! !!! ] - [TCWwD][þ§There are no query parameters !!! !!! !!!] + [TCWwD][ûÃThere are no query parameters !!! !!! !!!] - [tJL99][îÕCollapse !!! ] + [tJL99][ýâCollapse !!! ] - [ckWwM][ÒÈAre you sure you want to delete your API definition? !!! !!! !!! !!! !!!] + [ckWwM][ÄûAre you sure you want to delete your API definition? !!! !!! !!! !!! !!!] - [Vv7Oc][ÛôDocumentation !!! !!] + [Vv7Oc][ôãDocumentation !!! !!] - [jCjLN][ïæExpand !!!] + [jCjLN][ÆüExpand !!!] - [IF9rQ][ïÒExternal URL !!! !] + [IF9rQ][§ïExternal URL !!! !] - [4l8QL][ÝÀRead the feature overview !!! !!! !!] + [4l8QL][óüRead the feature overview !!! !!! !!] - [YoTQF][ÁàCheck out our getting started tutorial !!! !!! !!! !!] + [YoTQF][ÄûCheck out our getting started tutorial !!! !!! !!! !!] - [GTle9][òÄFunction (preview) !!! !!!] + [GTle9][ÞÈFunction (preview) !!! !!!] - [T84bF][ý©API definition key !!! !!!] + [T84bF][ìóAPI definition key !!! !!!] - [azP36][ÓùLoad API definition !!! !!! ] + [azP36][ÜûLoad API definition !!! !!! ] - [GW7Lo][æñGenerate API definition template !!! !!! !!! ] + [GW7Lo][íÑGenerate API definition template !!! !!! !!! ] - [64oB2][ñÏExport to PowerApps + Flow !!! !!! !!] + [64oB2][íÖExport to PowerApps + Flow !!! !!! !!] - [ERMjP][ÒôCannot save malformed API definition. !!! !!! !!! !!] + [ERMjP][þÓCannot save malformed API definition. !!! !!! !!! !!] - [3MNSt][ðùRenew !!!] + [3MNSt][ÏÅRenew !!!] - [DHcyM][ïñSet external definition URL !!! !!! !!] + [DHcyM][ÛµSet external definition URL !!! !!! !!] - [pjq3N][íÖAPI definition source !!! !!! ] + [pjq3N][èÎAPI definition source !!! !!! ] - [ZmaYW][µªConsume your HTTP triggered Functions in a variety of services using an OpenAPI 2.0 (Swagger) definition !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [ZmaYW][ßÜConsume your HTTP triggered Functions in a variety of services using an OpenAPI 2.0 (Swagger) definition !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [ARPZs][ûðFunction API definition (Swagger) !!! !!! !!! !] + [ARPZs][öùFunction API definition (Swagger) !!! !!! !!! !] - [vesbU][ùíAPI definition URL !!! !!!] + [vesbU][æªAPI definition URL !!! !!!] - [nx1L4][ý£Use your API definition !!! !!! !] + [nx1L4][ñÁUse your API definition !!! !!! !] - [oOnhd][üÖAPI definition !!! !!] + [oOnhd][üøAPI definition !!! !!] - [fph36][ÜÐWe are not able to create or update the key swaggerdocumentationkey for the Swagger Endpoint. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [fph36][ìèWe are not able to create or update the key swaggerdocumentationkey for the Swagger Endpoint. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [2pH3A][ÚìWe are not able to delete the API defintion. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [2pH3A][ÔãWe are not able to delete the API defintion. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [tzO0c][ÎøWe are not able to get the key {{keyName}}. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [tzO0c][âáWe are not able to get the key {{keyName}}. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [0wF6y][µóWe are not able to load the generated API definition. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [0wF6y][Ä©We are not able to load the generated API definition. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [V4UHe][Õ§We are unable to update the runtime config. Please try again later. !!! !!! !!! !!! !!! !!! ] + [V4UHe][þýWe are unable to update the runtime config. Please try again later. !!! !!! !!! !!! !!! !!! ] - [3XtJs][ÂÈWe are not able to update the API definition. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [3XtJs][Ô¥We are not able to update the API definition. Please check the runtime logs for any errors or try again later. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [H6hhu][öÚRevert to last save !!! !!! ] + [H6hhu][öÐRevert to last save !!! !!! ] - [2hLAJ][ÁÁConfigure App Service Authentication / Authorization !!! !!! !!! !!! !!!] + [2hLAJ][ÍÈConfigure App Service Authentication / Authorization !!! !!! !!! !!! !!!] - [pITlI][öß#Click "Generate API definition template" to get started !!! !!! !!! !!! !!! !] + [pITlI][ñÜ#Click "Generate API definition template" to get started !!! !!! !!! !!! !!! !] - [Q1Zo3][ÇöAre you sure you want to overwrite the API definition in the editor? !!! !!! !!! !!! !!! !!! !] + [Q1Zo3][ìªAre you sure you want to overwrite the API definition in the editor? !!! !!! !!! !!! !!! !!! !] - [lhYWH][£ÚUse your API definition to access your Functions from within <a href="https://powerapps.microsoft.com/en-us/" target="_blank">PowerApps</a> and <a href="https://ms.flow.microsoft.com/en-us/" target="_blank">Flow</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [lhYWH][ÜÛUse your API definition to access your Functions from within <a href="https://powerapps.microsoft.com/en-us/" target="_blank">PowerApps</a> and <a href="https://ms.flow.microsoft.com/en-us/" target="_blank">Flow</a>. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [SXxOE][ÆÅCreate a sparse definition with the metadata from your HTTP triggered functions. !!! !!! !!! !!! !!! !!! !!! !] -[SXxOE][ßÀFill in the <a href="http://swagger.io/specification/#operationObject" target="_blank">operation objects</a>, and other information about your API before use. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [SXxOE][ÁåCreate a sparse definition with the metadata from your HTTP triggered functions. !!! !!! !!! !!! !!! !!! !!! !] +[SXxOE][£ÞFill in the <a href="http://swagger.io/specification/#operationObject" target="_blank">operation objects</a>, and other information about your API before use. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [5MTfU][ÂçThis key secures your API Definition from access to anyone without the key. !!! !!! !!! !!! !!! !!! !!!] -[5MTfU][èËIt does not secure the underlying API. See each Function to see their key security. !!! !!! !!! !!! !!! !!! !!! !!] + [5MTfU][ÁÉThis key secures your API Definition from access to anyone without the key. !!! !!! !!! !!! !!! !!! !!!] +[5MTfU][ÇËIt does not secure the underlying API. See each Function to see their key security. !!! !!! !!! !!! !!! !!! !!! !!] - [Swwu3][ðÁSet to "Function" to enable a hosted API definition and template definition generation. !!! !!! !!! !!! !!! !!! !!! !!!] -[Swwu3][ÿÇSet to "External URL" to use an API definition that is hosted elsewhere. !!! !!! !!! !!! !!! !!! !!] + [Swwu3][âØSet to "Function" to enable a hosted API definition and template definition generation. !!! !!! !!! !!! !!! !!! !!! !!!] +[Swwu3][¥ØSet to "External URL" to use an API definition that is hosted elsewhere. !!! !!! !!! !!! !!! !!! !!] - [6UDTj][ôçUse this URL to directly access your API definition and import into 3rd party tools !!! !!! !!! !!! !!! !!! !!! !!] + [6UDTj][ÀÀUse this URL to directly access your API definition and import into 3rd party tools !!! !!! !!! !!! !!! !!! !!! !!] - [EzURR][ôÞApplication Insights !!! !!! ] + [EzURR][àÂApplication Insights !!! !!! ] - [mEQmo][åóChange the edit mode of your function app !!! !!! !!! !!!] + [mEQmo][õÌChange the edit mode of your function app !!! !!! !!! !!!] - [4eTe5][ýµFunction app edit mode !!! !!! !] + [4eTe5][àÑFunction app edit mode !!! !!! !] - [nJom2][úöRead Only !!! ] + [nJom2][óÈRead Only !!! ] - [U4pE3][ñËRead/Write !!! !] + [U4pE3][§ßRead/Write !!! !] - [Zzv2w][©ýPlease enter a valid decimal value with format 'ddd.dd'. !!! !!! !!! !!! !!! !] + [Zzv2w][ÞèPlease enter a valid decimal value with format 'ddd.dd'. !!! !!! !!! !!! !!! !] - [9JO8l][ÅõValue must be an decimal in the range of {{min}} to {{max}} !!! !!! !!! !!! !!! !!] + [9JO8l][çöValue must be an decimal in the range of {{min}} to {{max}} !!! !!! !!! !!! !!! !!] - [GCMGe][§öDuplicate values are not allowed !!! !!! !!! ] + [GCMGe][êôDuplicate values are not allowed !!! !!! !!! ] - [wNaEo][çÂERROR !!!] + [wNaEo][ôûERROR !!!] - [tChhA][ÄáThis field can only contain letters, numbers (0-9), periods ("."), and underscores ("_") !!! !!! !!! !!! !!! !!! !!! !!! ] + [tChhA][ÕÎThis field can only contain letters, numbers (0-9), periods ("."), and underscores ("_") !!! !!! !!! !!! !!! !!! !!! !!! ] - [woMWd][æøThis field is required !!! !!! !] + [woMWd][ÅóThis field is required !!! !!! !] - [gPeHU][ÆÈSum of routing percentage value of all rules must be less than or equal to 100.0 !!! !!! !!! !!! !!! !!! !!! !] + [gPeHU][ì§Sum of routing percentage value of all rules must be less than or equal to 100.0 !!! !!! !!! !!! !!! !!! !!! !] - [FJCjM][Ì£The name must be at least 2 characters !!! !!! !!! !!] + [FJCjM][ÙÕThe name must be at least 2 characters !!! !!! !!! !!] - [HNHBo][ç©The name must be fewer than 60 characters !!! !!! !!! !!!] + [HNHBo][ÝÕThe name must be fewer than 60 characters !!! !!! !!! !!!] - [Z4hHw][Êà'{0}' is an invalid character !!! !!! !!!] + [Z4hHw][Úÿ'{0}' is an invalid character !!! !!! !!!] - [uP4uR][ÊéThe app name '{0}' is not available !!! !!! !!! !] + [uP4uR][ªÙThe app name '{0}' is not available !!! !!! !!! !] - [ZA4jK][þµWe are unable to update your function app's edit mode. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] + [ZA4jK][ÄÈWe are unable to update your function app's edit mode. Please try again later. !!! !!! !!! !!! !!! !!! !!! ] - [p67R2][ìÊYour app is currently in read only mode because you've set the edit mode to read only. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [p67R2][êÊYour app is currently in read only mode because you've set the edit mode to read only. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [H4d2E][ÂôYour app is currently in read/write mode because you've set the edit mode to read/write despite having source control enabled. Any changes you make may get overwritten with your next deployment. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [H4d2E][ßÜYour app is currently in read/write mode because you've set the edit mode to read/write despite having source control enabled. Any changes you make may get overwritten with your next deployment. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [aFR98][ÔøYour app is currently in read-only mode because you have published a generated function.json. Changes made to function.json will not be honored by the Functions runtime. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [aFR98][¥ÇYour app is currently in read-only mode because you have published a generated function.json. Changes made to function.json will not be honored by the Functions runtime. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [iaYxN][ãÌYour app is currently in read/write mode because you've set the edit mode to read/write despite having a generated function.json. Changes made to function.json will not be honored by the Functions runtime. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [iaYxN][ßÓYour app is currently in read/write mode because you've set the edit mode to read/write despite having a generated function.json. Changes made to function.json will not be honored by the Functions runtime. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [g9tRk][£§Copy !!] + [g9tRk][¢ÇCopy !!] - [DBggp][úÆGet function URL !!! !!!] + [DBggp][ªØGet function URL !!! !!!] - [TaSk1][äõKey !!] + [TaSk1][ÁÑKey !!] - [rpLfL][ôôURL !!] + [rpLfL][äéURL !!] - [cwf16][ü§Download app content !!! !!! ] + [cwf16][@ÁDownload app content !!! !!! ] - [EFtI8][ÀÑAre you sure you want to renew {{name}} key? !!! !!! !!! !!! ] + [EFtI8][àÎAre you sure you want to renew {{name}} key? !!! !!! !!! !!! ] - [5Ipct][ÃÿAzure Functions are an event-based serverless compute experience to accelerate your development. Scale based on demand and pay only for the resources you consume. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [5Ipct][ÛéAzure Functions are an event-based serverless compute experience to accelerate your development. Scale based on demand and pay only for the resources you consume. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [lWp2b][àôLearn more about azure functions !!! !!! !!! ] + [lWp2b][öµLearn more about azure functions !!! !!! !!! ] - [8RrXM][@ðEvent Hub !!! ] + [8RrXM][óÞEvent Hub !!! ] - [aaleI][£ÌNamespace !!! ] + [aaleI][òÙNamespace !!! ] - [UHcee][þÏNot found. !!! !] + [UHcee][ïûNot found. !!! !] - [20U9s][ªÜEndpoint !!! ] + [20U9s][ßðEndpoint !!! ] - [yejjZ][øÇNo function apps to display !!! !!! !!] + [yejjZ][ÂûNo function apps to display !!! !!! !!] - [x0DPN][ÅðSlots (preview) !!! !!] + [x0DPN][¢ýSlots (preview) !!! !!] - [mKJji][ïÑEnable deployment slots (preview). !!! !!! !!! !] + [mKJji][ëÓEnable deployment slots (preview). !!! !!! !!! !] - [Q79Iw][ÈíKnown issues: !!! !!] + [Q79Iw][ûÉKnown issues: !!! !!] - [3IbBo][ÝÎLogic apps integration with Functions does not work when Slots(preview) is enabled. !!! !!! !!! !!! !!! !!! !!! !!] + [3IbBo][©ìLogic apps integration with Functions does not work when Slots(preview) is enabled. !!! !!! !!! !!! !!! !!! !!! !!] - [SytoJ][æÈOpting into this preview feature will reset any pre-existing secrets. Function secrets can be found under the !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [SytoJ][ðÁOpting into this preview feature will reset any pre-existing secrets. Function secrets can be found under the !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [OSJlv][£Ç'Manage' !!! ] + [OSJlv][Øå'Manage' !!! ] - [01pD8][ï£node for each function. !!! !!! !] + [01pD8][ñðnode for each function. !!! !!! !] - [Tq549][óØA slot create operation is currently in progress. After navigating away, you will no longer be able to check operation status. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [Tq549][öïA slot create operation is currently in progress. After navigating away, you will no longer be able to check operation status. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [QuACL][ÂóAdd Slot !!! ] + [QuACL][úüAdd Slot !!! ] - [g5FTm][þñName !!] + [g5FTm][üÑName !!] - [rjVnr][øîCreate a new deployment slot !!! !!! !!!] + [rjVnr][îàCreate a new deployment slot !!! !!! !!!] - [wt9Bn][ÈîDeployment slots let you deploy different versions of your function app to different URLs. You can test a certain version and then swap content and configuration between slots. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [wt9Bn][ÔêDeployment slots let you deploy different versions of your function app to different URLs. You can test a certain version and then swap content and configuration between slots. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [P5HvO][ÍêCreating new slot {0} !!! !!! !] + [P5HvO][çÓCreating new slot {0} !!! !!! !] - [VYz2A][æÌSuccessfully created slot {0} !!! !!! !!!] + [VYz2A][õéSuccessfully created slot {0} !!! !!! !!!] - [AwcrL][©ªFailed to create slot {0} !!! !!! !!] + [AwcrL][ÆÊFailed to create slot {0} !!! !!! !!] - [4D09u][ØÙUnable to upate the list of slots !!! !!! !!! !] + [4D09u][ãóUnable to upate the list of slots !!! !!! !!! !] - [NpJiv][îÔYou have reached the slots quota limit ({{quota}}) for the current plan. !!! !!! !!! !!! !!! !!! !!] + [NpJiv][Ñ©You have reached the slots quota limit ({{quota}}) for the current plan. !!! !!! !!! !!! !!! !!! !!] - [QXLB1][ì©Please upgrade your plan. !!! !!! !!] + [QXLB1][Ð@Please upgrade your plan. !!! !!! !!] - [VevG5][ÁÞNo access to create a slot. Please ensure you have the right RBAC access for the function app and do not have read locks enabled either. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [VevG5][ÝêNo access to create a slot. Please ensure you have the right RBAC access for the function app and do not have read locks enabled either. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [z7mIU][éòUpgrade to a standard or premium plan to add slots. !!! !!! !!! !!! !!!] + [z7mIU][©£Upgrade to a standard or premium plan to add slots. !!! !!! !!! !!! !!!] - [jZ9ZM][óñDeployment slots are live apps with their own hostnames. App content and configurations elements can be swapped between two deployment slots, including the production slot. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [jZ9ZM][ßÉDeployment slots are live apps with their own hostnames. App content and configurations elements can be swapped between two deployment slots, including the production slot. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [nM8wV][ûñSetting !!!] + [nM8wV][àÍSetting !!!] - [8Z8HD][äØType !!] + [8Z8HD][äÎType !!] - [45QYO][úªOld Value !!! ] + [45QYO][óçOld Value !!! ] - [euGjY][µÉNew Value !!! ] + [euGjY][Ä¥New Value !!! ] - [A0Cc5][ÈðYou haven't added any deployment slots. Click 'Add Slot' to get started. !!! !!! !!! !!! !!! !!! !!] + [A0Cc5][ªëYou haven't added any deployment slots. Click 'Add Slot' to get started. !!! !!! !!! !!! !!! !!! !!] - [LKyiE][öåName !!] + [LKyiE][ìÍName !!] - [gG2Mn][ÑöStatus !!!] + [gG2Mn][ðçStatus !!!] - [Dy7Lz][ÛàApp service plan !!! !!!] + [Dy7Lz][ÅàApp service plan !!! !!!] - [cvLVm][ãàTraffic % !!! ] + [cvLVm][ÊæTraffic % !!! ] - [zro6b][éÊSlots (preview) !!! !!] + [zro6b][ÔÜSlots (preview) !!! !!] - [Y5Ffx][ßåFor a richer monitoring experience, including live metrics and custom queries: !!! !!! !!! !!! !!! !!! !!! ] + [Y5Ffx][ÞÚFor a richer monitoring experience, including live metrics and custom queries: !!! !!! !!! !!! !!! !!! !!! ] - [6b5WZ][Ñöconfigure Application Insights for your function app !!! !!! !!! !!! !!!] + [6b5WZ][åÁconfigure Application Insights for your function app !!! !!! !!! !!! !!!] - [6I6Zu][§ÕThis value will be appended to your main web app's URL and will serve as the public address of the slot. For example if you have a web app named 'contoso' and a slot named ‘staging’ then the new slot will have a URL like ‘http://contoso-staging.azurewebsites.net’. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [6I6Zu][ì¢This value will be appended to your main web app's URL and will serve as the public address of the slot. For example if you have a web app named 'contoso' and a slot named ‘staging’ then the new slot will have a URL like ‘http://contoso-staging.azurewebsites.net’. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [Fh049][@ðConsumption plan allows only for a single slot. If you need more than one slot, please use dedicated App Service plans. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [Fh049][àÏConsumption plan allows only for a single slot. If you need more than one slot, please use dedicated App Service plans. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [1cMFu][óÚSearch functions !!! !!!] + [1cMFu][ÍÊSearch functions !!! !!!] - [LRWQt][ߣNew !!] + [LRWQt][ÎçNew !!] - [x5Q2C][ÿåCreate new !!! !] + [x5Q2C][èãCreate new !!! !] - [k41rD][ôùDelete function !!! !!] + [k41rD][ªÅDelete function !!! !!] - [lx92w][ÈÔA client certificate is required to call run this function. To run it from the portal you have to disable client certificate. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [lx92w][©ÒA client certificate is required to call run this function. To run it from the portal you have to disable client certificate. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [VtvSH][ÎæYour app is currently in read only mode because you have slot(s) configured. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [VtvSH][åëYour app is currently in read only mode because you have slot(s) configured. To change edit mode visit !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [pzNRc][óüManage application settings !!! !!! !!] + [pzNRc][ÃÆManage application settings !!! !!! !!] - [E7oyl][£ÉIoT hub !!!] + [E7oyl][ÉôIoT hub !!!] - [KH97Q][ÅÈKey !!] + [KH97Q][ÂãKey !!] - [F7c1R][@ÖValue !!!] + [F7c1R][ÿâValue !!!] - [FmFxE][éÀConnection !!! !] + [FmFxE][ÛýConnection !!! !] - [zby0Q][ÃðCustom !!!] + [zby0Q][ÜÄCustom !!!] - [ZWlMm][ßÅEvents (built-in endpoint) !!! !!! !!] + [ZWlMm][úÐEvents (built-in endpoint) !!! !!! !!] - [Z5ZPz][ÐÔOperations monitoring !!! !!! ] + [Z5ZPz][ÃæOperations monitoring !!! !!! ] - [TI96d][ÝéPolicy !!!] + [TI96d][ËÜPolicy !!!] - [4VkS7][¥ãThe proxies.json schema validation failed. Error: '{0}'. !!! !!! !!! !!! !!! !] + [4VkS7][äðThe proxies.json schema validation failed. Error: '{0}'. !!! !!! !!! !!! !!! !] - [tY43Y][ÙïOn a Consumption plan, you can limit platform usage by setting a daily usage quota, in gigabytes-seconds. Once the daily usage quota is reached, the Function App is stopped until the next day at 0:00 AM UTC. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [tY43Y][ßÑOn a Consumption plan, you can limit platform usage by setting a daily usage quota, in gigabytes-seconds. Once the daily usage quota is reached, the Function App is stopped until the next day at 0:00 AM UTC. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [2fYk0][Øï(hub policy) !!! !] + [2fYk0][ÊÎ(hub policy) !!! !] - [K8FZV][åå(namespace policy) !!! !!!] + [K8FZV][ûÅ(namespace policy) !!! !!!] - [LTeqh][ÀÌService Bus !!! !] + [LTeqh][ÄçService Bus !!! !] - [Gaeet][àæApp setting is not found. !!! !!! !!] + [Gaeet][çªApp setting is not found. !!! !!! !!] - [7zRjt][£Çshow value !!! !] + [7zRjt][øÒshow value !!! !] - [1TSkP][ËßAdd app setting !!! !!] + [1TSkP][àðAdd app setting !!! !!] - [blzNw][ØëAdd storage account connection string !!! !!! !!! !!] + [blzNw][ÕàAdd storage account connection string !!! !!! !!! !!] - [WjzcG][îÄAccount name !!! !] + [WjzcG][ËÈAccount name !!! !] - [dPdw7][íéAccount key !!! !] + [dPdw7][ÝëAccount key !!! !] - [yAWLf][óÐstorage account connection string name !!! !!! !!! !!] + [yAWLf][Ðÿstorage account connection string name !!! !!! !!! !!] - [YP0Mw][ÝïEnter a name for storage account connection string !!! !!! !!! !!! !!!] + [YP0Mw][ó£Enter a name for storage account connection string !!! !!! !!! !!! !!!] - [PZfYT][ÒÚStorage endpoints domain !!! !!! !] + [PZfYT][îèStorage endpoints domain !!! !!! !] - [XLC5Z][ÐÕMicrosoft Azure !!! !!] + [XLC5Z][ÊáMicrosoft Azure !!! !!] - [7Xri2][ÔÚOther(specify bellow) !!! !!! ] + [7Xri2][ÙÙOther(specify bellow) !!! !!! ] - [i1Yet][ûâEnter storage endpoints domain !!! !!! !!!] + [i1Yet][ÓéEnter storage endpoints domain !!! !!! !!!] - [75Jr6][ÔîAdd Sql connection string !!! !!! !!] + [75Jr6][óÓAdd Sql connection string !!! !!! !!] - [ovl20][Æ@SQL Server endpoint !!! !!! ] + [ovl20][ÀÍSQL Server endpoint !!! !!! ] - [j9wHa][äãDatabase name !!! !!] + [j9wHa][ÖµDatabase name !!! !!] - [b1nE3][ðæUser name !!! ] + [b1nE3][ùÿUser name !!! ] - [vn2m0][ç£Password !!! ] + [vn2m0][µöPassword !!! ] - [lZ40c][ÕçDownload !!! ] + [lZ40c][ÖÚDownload !!! ] - [X4DJu][ÍüInclude app settings in the download !!! !!! !!! !!] + [X4DJu][ÞÆInclude app settings in the download !!! !!! !!! !!] - [GaH6W][Ù¥This will include a file called local.settings.json which will contain your app settings values. This file will not be encrypted on download, but can be encrypted using the Azure Functions Core Tools command line. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [GaH6W][ÃìThis will include a file called local.settings.json which will contain your app settings values. This file will not be encrypted on download, but can be encrypted using the Azure Functions Core Tools command line. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [Lw6h3][ëÜSite content !!! !] + [Lw6h3][ÎÁSite content !!! !] - [p1ON6][þÖContent and Visual Studio project !!! !!! !!! !] + [p1ON6][òáContent and Visual Studio project !!! !!! !!! !] - [XoZZE][µñretrieve !!! ] + [XoZZE][ýõretrieve !!! ] - [w14cI][ÈÍDelete proxy !!! !] + [w14cI][à¢Delete proxy !!! !] - [cSEIi][ÍßNew proxy !!! ] + [cSEIi][ÿûNew proxy !!! ] - [PyIlD][ØÃNo override !!! !] + [PyIlD][âìNo override !!! !] - [AFdQO][ÕéExpress AAD Registration !!! !!! !] + [AFdQO][ÔÂExpress AAD Registration !!! !!! !] - [bddiW][Öæcreate !!!] + [bddiW][êécreate !!!] - [yYNx2][ÞÌYou need to add Event Grid subscription after function creation. !!! !!! !!! !!! !!! !!!] + [yYNx2][ßÇYou need to add Event Grid subscription after function creation. !!! !!! !!! !!! !!! !!!] - [yeMVM][ÎÿEvent Grid Subscription URL !!! !!! !!] + [yeMVM][äçEvent Grid Subscription URL !!! !!! !!] - [2cXar][âôEvent Grid Subscription URL !!! !!! !!] + [2cXar][ÆÆEvent Grid Subscription URL !!! !!! !!] - [b5lFs][ÇÉManage Event Grid subscriptions !!! !!! !!! ] + [b5lFs][Þ£Manage Event Grid subscriptions !!! !!! !!! ] - [jMclh][úéAdd Event Grid subscription !!! !!! !!] + [jMclh][ñàAdd Event Grid subscription !!! !!! !!] - [YxLqo][åâAll locations !!! !!] + [YxLqo][ïóAll locations !!! !!] - [LEsTI][Ïö{0} locations !!! !!] + [LEsTI][ÄÔ{0} locations !!! !!] - [Jpoxb][ÝûLocation: !!! ] + [Jpoxb][ð¢Location: !!! ] - [gRZrb][àÐGroup by location !!! !!!] + [gRZrb][ÃÿGroup by location !!! !!!] - [exfIA][ð§No grouping !!! !] + [exfIA][ËÓNo grouping !!! !] - [oGE50][õãGroup by resource group !!! !!! !] + [oGE50][ÞøGroup by resource group !!! !!! !] - [00Oih][ÂÁGroup by subscription !!! !!! ] + [00Oih][ÉÿGroup by subscription !!! !!! ] - [3yiMx][åôSouth Central US !!! !!!] + [3yiMx][ÒûSouth Central US !!! !!!] - [EUzvP][ϧNorth Europe !!! !] + [EUzvP][ÏÛNorth Europe !!! !] - [guPGZ][çÃWest Europe !!! !] + [guPGZ][ùÐWest Europe !!! !] - [xS9TN][ðÚSoutheast Asia !!! !!] + [xS9TN][ÅÒSoutheast Asia !!! !!] - [kg5k6][§óKorea Central !!! !!] + [kg5k6][©êKorea Central !!! !!] - [TAcHH][àªKorea South !!! !] + [TAcHH][óÛKorea South !!! !] - [oTtF2][©ÛWest US !!!] + [oTtF2][ÀÚWest US !!!] - [E2QYb][ýÓEast US !!!] + [E2QYb][ßðEast US !!!] - [lOg0d][ѧJapan West !!! !] + [lOg0d][ÚâJapan West !!! !] - [17plQ][ýîJapan East !!! !] + [17plQ][ÈÜJapan East !!! !] - [5T1Ay][îèEast Asia !!! ] + [5T1Ay][ÁèEast Asia !!! ] - [1urMP][ÝûEast US 2 !!! ] + [1urMP][åÆEast US 2 !!! ] - [66n1n][¢ÜNorth Central US !!! !!!] + [66n1n][îÕNorth Central US !!! !!!] - [qhVOZ][ÁÈCentral US !!! !] + [qhVOZ][¢ØCentral US !!! !] - [4C1Ym][àÿBrazil South !!! !] + [4C1Ym][öóBrazil South !!! !] - [RKZvt][ÉÃAustralia East !!! !!] + [RKZvt][@ÍAustralia East !!! !!] - [NJBiv][éÈAustralia Southeast !!! !!! ] + [NJBiv][ÙæAustralia Southeast !!! !!! ] - [XMaSa][µéWest India !!! !] + [XMaSa][ÎèWest India !!! !] - [nH0IH][åïCentral India !!! !!] + [nH0IH][òÇCentral India !!! !!] - [JxQIz][ÂôSouth India !!! !] + [JxQIz][ÕçSouth India !!! !] - [JaRYE][áÄCanada Central !!! !!] + [JaRYE][§ØCanada Central !!! !!] - [CRBb4][þÜCanada East !!! !] + [CRBb4][ðØCanada East !!! !] - [FU30n][õÿWest Central US !!! !!] + [FU30n][åÈWest Central US !!! !!] - [j1Z6n][ÍæUK West !!!] + [j1Z6n][ÁçUK West !!!] - [uCcvA][éñUK South !!! ] + [uCcvA][öæUK South !!! ] - [cCuEK][ÄüWest US 2 !!! ] + [cCuEK][ùÅWest US 2 !!! ] - [AvkK3][@ôAll resource groups !!! !!! ] + [AvkK3][¢íAll resource groups !!! !!! ] - [2QtJL][òÒResource Group: !!! !!] + [2QtJL][ùðResource Group: !!! !!] - [GpXkv][öÒ{0} resource groups !!! !!! ] + [GpXkv][Ôð{0} resource groups !!! !!! ] - [msE4p][îÐBody !!] + [msE4p][ÈãBody !!] - [Dtfy3][àÛStatus code !!! !] + [Dtfy3][áÈStatus code !!! !] - [jUqZr][µúStatus message !!! !!] + [jUqZr][àóStatus message !!! !!] - [zj3oN][ÅúRequest override !!! !!!] + [zj3oN][çåRequest override !!! !!!] - [VJAdo][òÙResponse override !!! !!!] + [VJAdo][ààResponse override !!! !!!] - [cTz7g][áÏOptional !!! ] + [cTz7g][ÐÙOptional !!! ] - [2Rxoj][òåGit Clone Uri !!! !!] + [2Rxoj][ø£Git Clone Uri !!! !!] - [CHlQt][ò¢Rollback Enabled !!! !!!] + [CHlQt][¢ÁRollback Enabled !!! !!!] - [Pw6js][ËÇSource Control Type !!! !!! ] + [Pw6js][ÀðSource Control Type !!! !!! ] - [c17X7][@âRedeploy !!! ] + [c17X7][à©Redeploy !!! ] - [1akXj][ÃÇActivity !!! ] + [1akXj][ÀåActivity !!! ] - [nsok1][êâActive !!!] + [nsok1][ñªActive !!!] - [HUTfw][âëTime !!] + [HUTfw][å£Time !!] - [x99lt][ÖÎLog !!] + [x99lt][ùÛLog !!] - [s452x][ãøShow Logs... !!! !] + [s452x][ßêShow Logs... !!! !] - [gr7nB][©ÛStatus !!!] + [gr7nB][ÍÊStatus !!!] - [ONfWr][ØÂCommit ID (Author) !!! !!!] + [ONfWr][¢ÅCommit ID (Author) !!! !!!] - [LueEf][öéCheckin Message !!! !!] + [LueEf][Ñ¢Checkin Message !!! !!] - [4eS5j][ªùYou're using a prerelease version of Azure Functions. Thanks for trying it out! !!! !!! !!! !!! !!! !!! !!! !] + [4eS5j][ÙøYou are using a pre-release version of Azure Functions. Click 'learn more' to stay updated on the latest changes through our announcement page. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [kUC52][ò@Click to hide !!! !!] + [kUC52][þêClick to hide !!! !!] - [kbNfC][©êLogic Apps allow you to easily utilize your function across multiple platforms !!! !!! !!! !!! !!! !!! !!! ] + [kbNfC][ÖöLogic Apps allow you to easily utilize your function across multiple platforms !!! !!! !!! !!! !!! !!! !!! ] - [04P41][ÒúLogic Apps !!! !] + [04P41][ïªLogic Apps !!! !] - [gQgYV][ÐôAssociated Logic Apps !!! !!! ] + [gQgYV][êÀAssociated Logic Apps !!! !!! ] - [IlI8F][ã§Orchestrate with Logic Apps !!! !!! !!] + [IlI8F][ܧOrchestrate with Logic Apps !!! !!! !!] - [ZxCEE][ÿæCreate Logic Apps !!! !!!] + [ZxCEE][êþCreate Logic Apps !!! !!!] - [G0cDC][þúNo Logic Apps to display !!! !!! !] + [G0cDC][ÚÀNo Logic Apps to display !!! !!! !] - [YIctd][Å©Logic Apps !!! !] + [YIctd][èËLogic Apps !!! !] - [582ZC][£òLogic Apps lets you quickly build integrations with SaaS and Enterprise apps, as well as visually design processes and workflows. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [582ZC][ÐÊLogic Apps lets you quickly build integrations with SaaS and Enterprise apps, as well as visually design processes and workflows. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [qwwjj][ÌÄExpand or Collapse !!! !!!] + [qwwjj][ÆÐExpand or Collapse !!! !!!] - [TZ4re][ýÝApp service Authentication / Authorization: !!! !!! !!! !!! ] + [TZ4re][ÊàApp service Authentication / Authorization: !!! !!! !!! !!! ] - [ruQYi][üËConfigure AAD now !!! !!!] + [ruQYi][ÇÉConfigure AAD now !!! !!!] - [ilUpe][ãòAdd permissions now !!! !!! ] + [ilUpe][ùðAdd permissions now !!! !!! ] - [74NLd][ÖÛconfigured !!! !] + [74NLd][úòconfigured !!! !] - [bZcbD][æµIdentity requirements (not satisfied) !!! !!! !!! !!] + [bZcbD][ÓÀIdentity requirements (not satisfied) !!! !!! !!! !!] - [0CSVV][µßnot configured !!! !!] + [0CSVV][çÈnot configured !!! !!] - [X20JH][äùRequired permissions !!! !!! ] + [X20JH][öÏRequired permissions !!! !!! ] - [gsUHu][óðThe template needs the following permission: !!! !!! !!! !!! ] + [gsUHu][ÚÓThe template needs the following permission: !!! !!! !!! !!! ] - [ODiaG][àÓThis integration requires an AAD configuration for the function app. !!! !!! !!! !!! !!! !!! !] + [ODiaG][ÏÇThis integration requires an AAD configuration for the function app. !!! !!! !!! !!! !!! !!! !] - [2YR4l][ÇðThis template requires an AAD configuration for the function app. !!! !!! !!! !!! !!! !!! ] + [2YR4l][ØÀThis template requires an AAD configuration for the function app. !!! !!! !!! !!! !!! !!! ] - [0Fx0t][ÝÓYou may need to configure any additional permissions you function requires. Please see the documentation for this binding. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [0Fx0t][öìYou may need to configure any additional permissions you function requires. Please see the documentation for this binding. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [L7kot][ÝþManage App Service Authentication / Authorization !!! !!! !!! !!! !!] + [L7kot][ä¢Manage App Service Authentication / Authorization !!! !!! !!! !!! !!] - [jNMub][ÉõAuth configuration required !!! !!! !!] + [jNMub][Å£Auth configuration required !!! !!! !!] - [TOWSF][ÐþIdentity requirements !!! !!! ] + [TOWSF][ª@Identity requirements !!! !!! ] - [GAHPn][îìManage !!!] + [GAHPn][àùManage !!!] - [r2SOZ][ÎâWe are not able to get the list of installed runtime extensions !!! !!! !!! !!! !!! !!!] + [r2SOZ][üÃWe are not able to get the list of installed runtime extensions !!! !!! !!! !!! !!! !!!] - [1GZb6][ûùWe are not able to install runtime extension {{extensionId}} !!! !!! !!! !!! !!! !!] + [1GZb6][ãÎWe are not able to install runtime extension {{extensionId}} !!! !!! !!! !!! !!! !!] - [h3P90][µóWe are not able to uninstall runtime extension {{extensionId}} !!! !!! !!! !!! !!! !!!] + [h3P90][ÞÅWe are not able to uninstall runtime extension {{extensionId}} !!! !!! !!! !!! !!! !!!] - [MOdU2][ÞúInstalling runtime extensions is taking longer than expected !!! !!! !!! !!! !!! !!] + [MOdU2][ãÐInstalling runtime extensions is taking longer than expected !!! !!! !!! !!! !!! !!] - [q4RGN][ÐåThe extension {{extensionId}} with a different version is already installed !!! !!! !!! !!! !!! !!! !!!] + [q4RGN][µÂThe extension {{extensionId}} with a different version is already installed !!! !!! !!! !!! !!! !!! !!!] - [t592D][âÈOpen Application Insights !!! !!! !!] + [t592D][ÂÕOpen Application Insights !!! !!! !!] - [ekL3i][ÎÃApp Insights is enabled for your function. !!! !!! !!! !!! ] + [ekL3i][ê§App Insights is enabled for your function. !!! !!! !!! !!! ] - [FyKZE][ÛøNo Monitoring data to display !!! !!! !!!] + [FyKZE][ÌÿNo Monitoring data to display !!! !!! !!!] - [xeWsw][àëInstall !!!] + [xeWsw][ÌÇInstall !!!] - [Ntn02][ÃûExtension Installation Succeeded !!! !!! !!! ] + [Ntn02][þòExtension Installation Succeeded !!! !!! !!! ] - [s1W3p][¢üExtensions not Installed !!! !!! !] + [s1W3p][ÙàExtensions not Installed !!! !!! !] - [cl2t5][ÇÃThis integration requires the following extensions. !!! !!! !!! !!! !!!] + [cl2t5][óåThis integration requires the following extensions. !!! !!! !!! !!! !!!] - [m06uq][ÅÆThis template requires the following extensions. !!! !!! !!! !!! !!] + [m06uq][òÿThis template requires the following extensions. !!! !!! !!! !!! !!] - [hkEiW][¥òInstalling template dependencies, you will be able to create a function once this is done. Dependency installation happens in the background and can take up to 2 minutes. You can close this blade and continue to use the portal during this time. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [hkEiW][ýáInstalling template dependencies, you will be able to create a function once this is done. Dependency installation happens in the background and can take up to 2 minutes. You can close this blade and continue to use the portal during this time. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [1gFO9][àêWe are not able to install runtime extension. Install id {{installationId}} !!! !!! !!! !!! !!! !!! !!!] + [1gFO9][þÆWe are not able to install runtime extension. Install id {{installationId}} !!! !!! !!! !!! !!! !!! !!!] - [tmqqB][¢ÍEnter value in GB-sec !!! !!! ] + [tmqqB][ðøEnter value in GB-sec !!! !!! ] - [ws1Kg][ëÑConnection !!! !] + [ws1Kg][ñÛConnection !!! !] - [FZED7][ÇúNotification Hub !!! !!!] + [FZED7][ßåNotification Hub !!! !!!] - [RbFwl][ëßJava Functions can be built, tested and deployed locally from your machine. No portal required! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [RbFwl][ð@Java Functions can be built, tested and deployed locally from your machine. No portal required! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [rSeSX][Ü¥Click below to get started with documentation on how to build your first Azure Function with Java. !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [rSeSX][ÇøClick below to get started with documentation on how to build your first Azure Function with Java. !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [ub1oe][åÃProxies has been enabled. To disable again, delete or disable all individual proxies. !!! !!! !!! !!! !!! !!! !!! !!!] + [ub1oe][õþProxies has been enabled. To disable again, delete or disable all individual proxies. !!! !!! !!! !!! !!! !!! !!! !!!] - [nI5EQ][êþJava on Azure Functions Quickstart !!! !!! !!! !] + [nI5EQ][ÉÑJava on Azure Functions Quickstart !!! !!! !!! !] - [4Ew3W][¢ÎName: !!!] + [4Ew3W][ÿÛName: !!!] - [ukwFj][çSearch by trigger, language, or description !!! !!! !!! !!! ] + [ukwFj][äßSearch by trigger, language, or description !!! !!! !!! !!! ] - [soqGS][ÇÓhide value !!! !] + [soqGS][Õþhide value !!! !] - [luhuk][óÛApp Insights instrumentation key is presented in app settings but App Insights is not found in Function App's subscription. Please make sure your App Insights is located in the same subscription as Function App. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [luhuk][âõApp Insights instrumentation key is presented in app settings but App Insights is not found in Function App's subscription. Please make sure your App Insights is located in the same subscription as Function App. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [7diyP][âóStart of row !!! !] + [7diyP][ÙêStart of row !!! !] - [iNsVt][ÃöEnd of row !!! !] + [iNsVt][ÛûEnd of row !!! !] - [GT5WP][ÓõCannot Upgrade with Existing Functions !!! !!! !!! !!] + [GT5WP][ïÝCannot Upgrade with Existing Functions !!! !!! !!! !!] - [taOXQ][ÑôMajor version upgrades can introduce breaking changes to languages and bindings. When upgrading major versions of the runtime, consider creating a new function app and migrate your functions to this new app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [taOXQ][Ü¢Major version upgrades can introduce breaking changes to languages and bindings. When upgrading major versions of the runtime, consider creating a new function app and migrate your functions to this new app. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [ISfs1][óÑWarning !!!] + [ISfs1][ÞáWarning !!!] - [5UrHU][§ÜAuthorized as: !!! !!] + [5UrHU][æóAuthorized as: !!! !!] Continue - [p8GSb][àÜAuthorize !!! ] + [p8GSb][ÂìAuthorize !!! ] - [DZwY6][üåChange Account !!! !!] + [DZwY6][ÌÉChange Account !!! !!] - [l6B9A][©ÕBack !!] + [l6B9A][ÑÈBack !!] - [9pANf][ØîContinue !!! ] + [9pANf][§ËContinue !!! ] - [FY0js][ìÃFinish !!!] + [FY0js][¥ÌFinish !!!] - [Z5zyM][ÕæCode !!] + [Z5zyM][ýóCode !!] - [Yx4Cc][ËäRepository !!! !] + [Yx4Cc][ÏàRepository !!! !] - [vNWqD][µóBranch !!!] + [vNWqD][ÀÒBranch !!!] - [Pz0ov][áÄFolder !!!] + [Pz0ov][ÙöFolder !!!] - [BNsxW][©¢Repository Type !!! !!] + [BNsxW][ߥRepository Type !!! !!] - [A7vHk][ÓèOrganization !!! !] + [A7vHk][ÃôOrganization !!! !] - [TEHZB][íÔVisual Studio Team Service Account !!! !!! !!! !] + [TEHZB][§ÅVisual Studio Team Service Account !!! !!! !!! !] - [cMe1h][ÊòProject !!!] + [cMe1h][¥ÈProject !!!] Build - [vbdk7][ÐéSource !!!] + [vbdk7][@£Source !!!] - [pVMxZ][òßAccount !!!] + [pVMxZ][ÄáAccount !!!] - [OeFzt][ÐìLoad Test !!! ] + [OeFzt][ÊòLoad Test !!! ] Slot - [qGYgI][ÉØProduction !!! !] + [qGYgI][ùíProduction !!! !] - [hhoZ0][ÌÞEntity !!!] + [hhoZ0][ÕñEntity !!!] - [sKkZ4][ýÆEntity: !!!] + [sKkZ4][ÓÇEntity: !!!] - [myYhL][ÈÙFunction API definition (Swagger) feature is not supported for beta runtime currently. !!! !!! !!! !!! !!! !!! !!! !!!] + [myYhL][ÑòFunction API definition (Swagger) feature is not supported for beta runtime currently. !!! !!! !!! !!! !!! !!! !!! !!!] - [Bq3Ae][ÊüDeployed Successfully to {0} !!! !!! !!!] + [Bq3Ae][õèDeployed Successfully to {0} !!! !!! !!!] - [nJcLj][ÙãFailed to deploy to {0} !!! !!! !] + [nJcLj][ÊçFailed to deploy to {0} !!! !!! !] - [PoJDD][ÆóPerform swap with preview !!! !!! !!] + [PoJDD][ßíPerform swap with preview !!! !!! !!] - [TGRH5][ØÝStart the swap !!! !!] + [TGRH5][ûÆStart the swap !!! !!] - [8lrXD][ÑËReview + complete the swap !!! !!! !!] + [8lrXD][ëÎReview + complete the swap !!! !!! !!] - [TCOkg][©îA swap operation is currently in progress. After navigating away, you will no longer be able to check operation status. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [TCOkg][ÕæA swap operation is currently in progress. After navigating away, you will no longer be able to check operation status. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [6biM7][ÅÉ{{swapType}} between slot {{srcSlot}} and slot {{destSlot}} !!! !!! !!! !!! !!! !!] + [6biM7][ìÁ{{swapType}} between slot {{srcSlot}} and slot {{destSlot}} !!! !!! !!! !!! !!! !!] - [sJpEF][àßswap !!] + [sJpEF][óýswap !!] - [QFJXH][ìþphase one of swap !!! !!!] + [QFJXH][íæphase one of swap !!! !!!] - [uMXdc][ªÏphase two of swap !!! !!!] + [uMXdc][µÞphase two of swap !!! !!!] - [sZX8g][@ÅPerforming {{operation}} !!! !!! !] + [sZX8g][þÿPerforming {{operation}} !!! !!! !] - [NojHz][úçSuccessfully completed {{operation}} !!! !!! !!! !!] + [NojHz][å©Successfully completed {{operation}} !!! !!! !!! !!] - [H94pM][ÓªFailed to complete {{operation}}. Error: {{error}} !!! !!! !!! !!! !!!] + [H94pM][ÌØFailed to complete {{operation}}. Error: {{error}} !!! !!! !!! !!! !!!] - [cb4lT][óåCancelling {{operation}} !!! !!! !] + [cb4lT][ÅòCancelling {{operation}} !!! !!! !] - [BlD9O][æØSuccessfully cancelled {{operation}} !!! !!! !!! !!] + [BlD9O][ýçSuccessfully cancelled {{operation}} !!! !!! !!! !!] - [e3UEU][ÞåFailed to cancel {{operation}}. Error: {{error}} !!! !!! !!! !!! !!] + [e3UEU][ýýFailed to cancel {{operation}}. Error: {{error}} !!! !!! !!! !!! !!] - [o8O7Q][µúSwapped slot {0} with {1} !!! !!! !!] + [o8O7Q][éÌSwapped slot {0} with {1} !!! !!! !!] - [22UW3][ÛÑFailed to swap slot {0} with {1} !!! !!! !!! ] + [22UW3][ÝÊFailed to swap slot {0} with {1} !!! !!! !!! ] - [xQTYJ][ûéSuccessfully setup Continuous Delivery and triggered build !!! !!! !!! !!! !!! !] + [xQTYJ][ÕÒSuccessfully setup Continuous Delivery and triggered build !!! !!! !!! !!! !!! !] - [tud16][ëÉSuccessfully setup Continuous Delivery for the repository !!! !!! !!! !!! !!! !] + [tud16][ÂãSuccessfully setup Continuous Delivery for the repository !!! !!! !!! !!! !!! !] - [6VegA][ÜôFailed to setup Continuous Delivery !!! !!! !!! !] + [6VegA][ïÿFailed to setup Continuous Delivery !!! !!! !!! !] - [v20pv][óµCreated new Visual Studio Team Services account !!! !!! !!! !!! !] + [v20pv][òµCreated new Visual Studio Team Services account !!! !!! !!! !!! !] - [a9KbU][õFailed to create Visual Studio Team Services account !!! !!! !!! !!! !!!] + [a9KbU][µªFailed to create Visual Studio Team Services account !!! !!! !!! !!! !!!] - [C0Uy2][Þ¥Created new slot !!! !!!] + [C0Uy2][©ôCreated new slot !!! !!!] - [Rgl6n][ÕçFailed to create a slot !!! !!! !] + [Rgl6n][ú§Failed to create a slot !!! !!! !] - [ertQF][ÕøCreated new Web Application for test environment !!! !!! !!! !!! !!] + [ertQF][@ÑCreated new Web Application for test environment !!! !!! !!! !!! !!] - [f62Iy][ÆûFailed to create new Web Application for test environment !!! !!! !!! !!! !!! !] + [f62Iy][ÊèFailed to create new Web Application for test environment !!! !!! !!! !!! !!! !] - [b26hz][ÕþSuccessfully disconnected Continuous Delivery for {0} !!! !!! !!! !!! !!! ] + [b26hz][êÒSuccessfully disconnected Continuous Delivery for {0} !!! !!! !!! !!! !!! ] - [yFw7j][áÑ{0} got started' !!! !!!] + [yFw7j][çÀ{0} got started' !!! !!!] - [vKIfO][ÐÆFailed to start {0} !!! !!! ] + [vKIfO][ÔËFailed to start {0} !!! !!! ] - [Dyvld][ªø{0} got stopped' !!! !!!] + [Dyvld][¢Å{0} got stopped' !!! !!!] - [8X0ut][µùFailed to stop {0} !!! !!!] + [8X0ut][ß@Failed to stop {0} !!! !!!] - [HaCYo][ÅÅ{0} got restarted' !!! !!!] + [HaCYo][Ñù{0} got restarted !!! !!!] - [uyZzV][ÑèFailed to restart {0} !!! !!! ] + [uyZzV][ÓÜFailed to restart {0} !!! !!! ] - [PbV9W][ïêSuccessfully triggered Continuous Delivery with latest source code from repository !!! !!! !!! !!! !!! !!! !!! !!] + [PbV9W][ÂÅSuccessfully triggered Continuous Delivery with latest source code from repository !!! !!! !!! !!! !!! !!! !!! !!] - [fpO2c][ëæBuild Definition !!! !!!] + [fpO2c][ÄÖBuild Definition !!! !!!] - [N36W9][ùÎRelease Definition !!! !!!] + [N36W9][ý§Release Definition !!! !!!] - [exG5d][òËBuild Triggered !!! !!] + [exG5d][ÒßBuild Triggered !!! !!] - [JPsxz][ÎÿWeb App !!!] + [JPsxz][ÇÆWeb App !!!] - [1lceo][éËSlot !!] + [1lceo][@ÖSlot !!] - [A03UR][æüVisual Studio Online Account !!! !!! !!!] + [A03UR][ÉïVisual Studio Online Account !!! !!! !!!] - [5vT1k][ÔóView Instructions !!! !!!] + [5vT1k][íÌView Instructions !!! !!!] - [OO85O][ÐúBuild: {0} !!! !] + [OO85O][§ÁBuild: {0} !!! !] - [i3V4I][áÌRelease: {0} !!! !] + [i3V4I][ÂÐRelease: {0} !!! !] - [uFsxF][üáDeployment Center !!! !!!] + [uFsxF][íªDeployment Center !!! !!!] - [VFhyf][ãõSource Control !!! !!] + [VFhyf][ÁßSource Control !!! !!] - [o9E1S][£þBuild Provider !!! !!] + [o9E1S][ÃòBuild Provider !!! !!] - [oYutu][ñµConfigure !!! ] + [oYutu][ËþConfigure !!! ] - [72S90][âÄDeploy to staging !!! !!!] + [72S90][ÝøDeploy to staging !!! !!!] - [oMUWM][ÉþSummary !!!] + [oMUWM][ÖÇSummary !!!] - [laES3][ØùExperimental Language Support: !!! !!! !!!] + [laES3][øïExperimental Language Support: !!! !!! !!!] - [m53CU][ôÿSource Provider !!! !!] + [m53CU][ÞâSource Provider !!! !!] - [Cdwyd][ÞÙSync content from a OneDrive cloud folder. !!! !!! !!! !!! ] + [Cdwyd][çèSync content from a OneDrive cloud folder. !!! !!! !!! !!! ] - [NxqiU][ìèConfigure continuous integration with a Github repo. !!! !!! !!! !!! !!!] + [NxqiU][îòConfigure continuous integration with a Github repo. !!! !!! !!! !!! !!!] - [X59iJ][üôConfigure continuous integration with a VSTS repo. !!! !!! !!! !!! !!!] + [X59iJ][ñðConfigure continuous integration with a VSTS repo. !!! !!! !!! !!! !!!] - [pWgIr][ÙôDeploy from a public Git or Mercurial repo. !!! !!! !!! !!! ] + [pWgIr][õóDeploy from a public Git or Mercurial repo. !!! !!! !!! !!! ] - [FWNLi][Å©Configure continuous integration with a Bitbucket repo. !!! !!! !!! !!! !!! ] + [FWNLi][óÀConfigure continuous integration with a Bitbucket repo. !!! !!! !!! !!! !!! ] - [oV0Ec][õãDeploy from a local Git repo. !!! !!! !!!] + [oV0Ec][ëâDeploy from a local Git repo. !!! !!! !!!] - [c8n2Z][ïìSync content from a Dropbox cloud folder. !!! !!! !!! !!!] + [c8n2Z][öÆSync content from a Dropbox cloud folder. !!! !!! !!! !!!] - [mZOFW][ËðDurable Functions !!! !!!] + [mZOFW][ÿÔDurable Functions !!! !!!] - [WBCbY][éâA function that will be run whenever an Activity is called by an orchestrator function. !!! !!! !!! !!! !!! !!! !!! !!!] + [WBCbY][ëæA function that will be run whenever an Activity is called by an orchestrator function. !!! !!! !!! !!! !!! !!! !!! !!!] - [2ulkB][ØõAn orchestrator function that invokes activity functions in a sequence. !!! !!! !!! !!! !!! !!! !!] + [2ulkB][ýçAn orchestrator function that invokes activity functions in a sequence. !!! !!! !!! !!! !!! !!! !!] - [Xi0ZG][УA function that will trigger whenever it receives an HTTP request to execute an orchestrator function. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [Xi0ZG][ÇÒA function that will trigger whenever it receives an HTTP request to execute an orchestrator function. !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [nFDGK][¢úFunctions (Preview) !!! !!! ] + [nFDGK][ØÚFunctions (Preview) !!! !!! ] - [iLCiI][§ÃYour app is currently in read-only mode because you are using Run-From-Zip. When using Run-From-Zip, the file system is read-only and no changes can be made to the files. To make any changes update the content in your zip file and WEBSITE_USE_ZIP app setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [iLCiI][àÎYour app is currently in read-only mode because you are using Run-From-Zip. When using Run-From-Zip, the file system is read-only and no changes can be made to the files. To make any changes update the content in your zip file and WEBSITE_USE_ZIP app setting. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [cb3zx][ãòCode !!] + [cb3zx][§þCode !!] - [NijdJ][@ëColumn !!!] + [NijdJ][àëColumn !!!] - [11z6A][õÓDescription !!! !] + [11z6A][ÎØDescription !!! !] - [Fwoku][¢ÀErrors and warnings !!! !!! ] + [Fwoku][ÿéErrors and warnings !!! !!! ] - [LvCn3][ñüFile !!] + [LvCn3][þ@File !!] - [rPFze][ÂÿLine !!] + [rPFze][áÂLine !!] - [PGPlb][ÿéRecommended pricing tiers !!! !!! !!] + [PGPlb][ÌùRecommended pricing tiers !!! !!! !!] - [xgUve][óÅAdditional pricing tiers !!! !!! !] + [xgUve][ôûAdditional pricing tiers !!! !!! !] - [EH3nS][ùÕYour subscription does not allow this pricing tier !!! !!! !!! !!! !!!] + [EH3nS][èªYour subscription does not allow this pricing tier !!! !!! !!! !!! !!!] - [JAObI][¥ïDev / Test !!! !] + [JAObI][û@Dev / Test !!! !] - [WjxPe][øÎFor less demanding workloads !!! !!! !!!] + [WjxPe][ÜÔFor less demanding workloads !!! !!! !!!] - [NMypF][ÒåProduction !!! !] + [NMypF][ÓáProduction !!! !] - [Q7mU6][üÔFor most production workloads !!! !!! !!!] + [Q7mU6][Û£For most production workloads !!! !!! !!!] - [Eitjm][à¥Isolated !!! ] + [Eitjm][ÎÝIsolated !!! ] - [6qw54][ÑóAdvanced networking and scale !!! !!! !!!] + [6qw54][ÓÎAdvanced networking and scale !!! !!! !!!] - [0b7kH][£óScale up is not available for consumption plans !!! !!! !!! !!! !] + [0b7kH][ÏñScale up is not available for consumption plans !!! !!! !!! !!! !] - [iQ5so][ÎõYou must have write permissions to scale up this plan !!! !!! !!! !!! !!! ] + [iQ5so][ñâYou must have write permissions to scale up this plan !!! !!! !!! !!! !!! ] - [Y0GGY][ñÞYou must have write permissions on the plan '{0}' to update it !!! !!! !!! !!! !!! !!!] + [Y0GGY][ÌÉYou must have write permissions on the plan '{0}' to update it !!! !!! !!! !!! !!! !!!] - [4lqLn][̧The plan '{0}' has a read only lock on it and cannot be updated !!! !!! !!! !!! !!! !!!] + [4lqLn][ÑþThe plan '{0}' has a read only lock on it and cannot be updated !!! !!! !!! !!! !!! !!!] - [mcnjy][òÜUpdating App Service Plan !!! !!! !!] + [mcnjy][ÏñUpdating App Service Plan !!! !!! !!] - [ebIHT][ÖéUpdating the plan {0} !!! !!! ] + [ebIHT][å©Updating the plan {0} !!! !!! ] - [gJosw][üñThe plan '{0}' was updated successfully! !!! !!! !!! !!!] + [gJosw][ÝúThe plan '{0}' was updated successfully! !!! !!! !!! !!!] - [faEAr][ÃëSuccessfully submitted job to scale the plan '{0}'. !!! !!! !!! !!! !!!] + [faEAr][øþSuccessfully submitted job to scale the plan '{0}'. !!! !!! !!! !!! !!!] - [tE1Zv][äÈA scale operation is currently in progress for the plan '{0}'. Please wait for the operation to complete before scaling again. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [tE1Zv][ÎÀA scale operation is currently in progress for the plan '{0}'. Please wait for the operation to complete before scaling again. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [3KX2T][àÀFailed to update the plan '{0}' !!! !!! !!! ] + [3KX2T][ÑËFailed to update the plan '{0}' !!! !!! !!! ] - [uKYXW][ÖÌIncluded features !!! !!!] + [uKYXW][ðÖIncluded features !!! !!!] - [kKF3g][ûçEvery app hosted on this App Service plan will have access to these features: !!! !!! !!! !!! !!! !!! !!! ] + [kKF3g][âÙEvery app hosted on this App Service plan will have access to these features: !!! !!! !!! !!! !!! !!! !!! ] - [9d1AS][ËíIncluded hardware !!! !!!] + [9d1AS][ÑâIncluded hardware !!! !!!] - [fJ3jd][ÚáEvery instance of your App Service plan will include the following hardware configuration: !!! !!! !!! !!! !!! !!! !!! !!! !] - - - [r4OvO][ÌÜLinux web apps in an App Service Environment are billed at a 50% discount while in preview. !!! !!! !!! !!! !!! !!! !!! !!! !] + [fJ3jd][íÝEvery instance of your App Service plan will include the following hardware configuration: !!! !!! !!! !!! !!! !!! !!! !!! !] - [dox5q][Ò¢The first Basic (B1) core for Linux is free for the first 30 days! !!! !!! !!! !!! !!! !!! ] + [dox5q][íÿThe first Basic (B1) core for Linux is free for the first 30 days! !!! !!! !!! !!! !!! !!! ] - [jz1zX][îÿWindows containers are billed at a 50% discount while in preview. !!! !!! !!! !!! !!! !!! ] + [jz1zX][þÝWindows containers are billed at a 50% discount while in preview. !!! !!! !!! !!! !!! !!! ] - [Ze4TG][ßïIsolated pricing tiers within an App Service Environment (ASE) are not available for your configuration. An ASE is a powerful feature offering of Azure App Service that gives network isolation and improved scale capabilities. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [Ze4TG][óõIsolated pricing tiers within an App Service Environment (ASE) are not available for your configuration. An ASE is a powerful feature offering of Azure App Service that gives network isolation and improved scale capabilities. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [Pzup4][ë¢Dev / Test pricing tiers are not available for your configuration and are only available to plans that are not hosted within an App Service environment. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [Pzup4][ÍÉDev / Test pricing tiers are not available for your configuration and are only available to plans that are not hosted within an App Service environment. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [oKRGU][ÕêProduction pricing tiers are not available for your configuration and are only available to plans that are not hosted within an App Service environment. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [oKRGU][ÍíProduction pricing tiers are not available for your configuration and are only available to plans that are not hosted within an App Service environment. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [F48OU][ôàPremium V2 is not supported for this scale unit. Please consider redeploying or cloning your app. !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [F48OU][çÆPremium V2 is not supported for this scale unit. Please consider redeploying or cloning your app. !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [G8Qq9][ÀâScale up !!! ] + [G8Qq9][þ@Scale up !!! ] - [EANBJ][ÔÇFree !!] + [EANBJ][ÉÞFree !!] - [Jj2Uw][ø@{0} {1}/Month (Estimated) !!! !!! !!] + [Jj2Uw][àÑ{0} {1}/Month (Estimated) !!! !!! !!] - [mjM1a][ÚÊ{0} {1}/Month (Estimated) !!! !!! !!] + [mjM1a][ÕÚ{0} {1}/Month (Estimated) !!! !!! !!] - [Apjuu][ôñChoose a different pricing tier to add more resources for your plan !!! !!! !!! !!! !!! !!! ] + [Apjuu][ÐõChoose a different pricing tier to add more resources for your plan !!! !!! !!! !!! !!! !!! ] - [gamR7][ÿíUpdate App Service plan !!! !!! !] + [gamR7][àÈUpdate App Service plan !!! !!! !] - [tGQFI][µâShared insfrastructure !!! !!! !] + [tGQFI][ðßShared insfrastructure !!! !!! !] - [TgGXc][§çShared compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!] + [TgGXc][ÅØShared compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!] - [mEzMq][ÅæDedicated A-series compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!! !!] + [mEzMq][ÎøDedicated A-series compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!! !!] - [5EOSf][ÐîDedicated Dv2-series compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [5EOSf][ÈíDedicated Dv2-series compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [ViM6v][ßöMemory available to run applications deployed and running in the App Service plan. !!! !!! !!! !!! !!! !!! !!! !!] + [ViM6v][ýòMemory available to run applications deployed and running in the App Service plan. !!! !!! !!! !!! !!! !!! !!! !!] - [jgjKe][ÆìMemory per instance available to run applications deployed and running in the App Service plan. !!! !!! !!! !!! !!! !!! !!! !!! !!] + [jgjKe][ÔñMemory per instance available to run applications deployed and running in the App Service plan. !!! !!! !!! !!! !!! !!! !!! !!! !!] - [7dXeJ][µÙ{0} disk storage shared by all apps deployed in the App Service plan. !!! !!! !!! !!! !!! !!! !] + [7dXeJ][è@{0} disk storage shared by all apps deployed in the App Service plan. !!! !!! !!! !!! !!! !!! !] - [gdWGg][ÐôCustom domains / SSL !!! !!! ] + [gdWGg][ô©Custom domains / SSL !!! !!! ] - [i0Mtl][ªØConfigure and purchase custom domains with SNI SSL bindings !!! !!! !!! !!! !!! !!] + [i0Mtl][¢çConfigure and purchase custom domains with SNI SSL bindings !!! !!! !!! !!! !!! !!] - [vEEOz][óÑConfigure and purchase custom domains with SNI and IP SSL bindings !!! !!! !!! !!! !!! !!! ] + [vEEOz][õäConfigure and purchase custom domains with SNI and IP SSL bindings !!! !!! !!! !!! !!! !!! ] - [bAP7R][ËÕManual scale !!! !] + [bAP7R][üëManual scale !!! !] - [wzXnl][ëØAuto scale !!! !] + [wzXnl][þÆAuto scale !!! !] - [Enqia][ÌÀScale to a large number of instances !!! !!! !!! !!] + [Enqia][ðØScale to a large number of instances !!! !!! !!! !!] - [ItGcn][ØØUp to 100 instances. More allowed upon request. !!! !!! !!! !!! !!] + [ItGcn][µ¥Up to 100 instances. More allowed upon request. !!! !!! !!! !!! !!] - [gM1l4][ÀäUp to {0} instances. Subject to availability. !!! !!! !!! !!! !] + [gM1l4][¢£Up to {0} instances. Subject to availability. !!! !!! !!! !!! !] - [SxTxf][ßæStaging slots !!! !!] + [SxTxf][ó§Staging slots !!! !!] - [MjVmN][ǪUp to {0} staging slots to use for testing and deployments before swapping them into production. !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [MjVmN][ý§Up to {0} staging slots to use for testing and deployments before swapping them into production. !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [e4U3w][åÆDaily backup !!! !] + [e4U3w][ÑéDaily backup !!! !] - [tODAu][Ò@Daily backups !!! !!] + [tODAu][ËÕDaily backups !!! !!] - [99WyQ][äôBackup your app {0} times daily. !!! !!! !!! ] + [99WyQ][üúBackup your app {0} times daily. !!! !!! !!! ] - [dvAFe][ãÂTraffic manager !!! !!] + [dvAFe][ãØTraffic manager !!! !!] - [b8Uyq][ÔÉImprove performance and availability by routing traffic between multiple instances of your app. !!! !!! !!! !!! !!! !!! !!! !!! !!] + [b8Uyq][ߣImprove performance and availability by routing traffic between multiple instances of your app. !!! !!! !!! !!! !!! !!! !!! !!! !!] - [H2FDo][úßSingle tenant system !!! !!! ] + [H2FDo][éúSingle tenant system !!! !!! ] - [4TgM9][ʧTake more control over the resources being used by your app. !!! !!! !!! !!! !!! !!] + [4TgM9][ÙÚTake more control over the resources being used by your app. !!! !!! !!! !!! !!! !!] - [HoK9t][ØþIsolated network !!! !!!] + [HoK9t][ÿÊIsolated network !!! !!!] - [1EkqD][ʵRuns within your own virtual network. !!! !!! !!! !!] + [1EkqD][ñâRuns within your own virtual network. !!! !!! !!! !!] - [5CHVr][ýðPrivate app access !!! !!!] + [5CHVr][¥ýPrivate app access !!! !!!] - [Mvdy4][áæUsing an App Service Environment with Internal Load Balancing (ILB). !!! !!! !!! !!! !!! !!! !] + [Mvdy4][ÎýUsing an App Service Environment with Internal Load Balancing (ILB). !!! !!! !!! !!! !!! !!! !] - [K0vpt][òª{0} GB memory !!! !!] + [K0vpt][áÝ{0} GB memory !!! !!] - [nMtlI][Ôä{0} minutes/day compute !!! !!! !] + [nMtlI][ÊÕ{0} minutes/day compute !!! !!! !] - [4FWVJ][ÇÍ{0} cores !!! ] + [4FWVJ][úÉ{0} cores !!! ] - [agJs6][éÄA-Series compute !!! !!!] + [agJs6][ÄðA-Series compute !!! !!!] - [2gUdY][É@Dv2-Series compute !!! !!!] + [2gUdY][ÝÜDv2-Series compute !!! !!!] - [LecOv][ÁüThe proxies.json is not valid. Error: '{0}'. !!! !!! !!! !!! ] + [LecOv][ôÍThe proxies.json is not valid. Error: '{0}'. !!! !!! !!! !!! ] - [p8x4M][§æThe proxies schema is not valid. Error: '{0}'. !!! !!! !!! !!! !] + [p8x4M][íçThe proxies schema is not valid. Error: '{0}'. !!! !!! !!! !!! !] - [GGNir][ýÙOperation Id !!! !] + [GGNir][úÌOperation Id !!! !] - [Xe3M4][ø¥Date (UTC) !!! !] + [Xe3M4][ëúDate (UTC) !!! !] - [IhCYg][΢URL !!] + [IhCYg][ªãURL !!] - [PhPiP][ªÝResult Code !!! !] + [PhPiP][ÀòResult Code !!! !] - [VjOPG][ÿßTrigger Reason !!! !!] + [VjOPG][ûîTrigger Reason !!! !!] - [xwrXO][ö¥Error !!!] + [xwrXO][ÚÿError !!!] - [XWS3p][ªÙRun in Application Insights !!! !!! !!] + [XWS3p][áúRun in Application Insights !!! !!! !!] - [WbYaS][òéApplication Insights Instance !!! !!! !!!] + [WbYaS][ÝñApplication Insights Instance !!! !!! !!!] Success - [BPXi3][ÝÝDuration (ms) !!! !!] + [BPXi3][ÞõDuration (ms) !!! !!] - [iu9XR][ÏøSuccess count in last 30 days !!! !!! !!!] + [iu9XR][ðìSuccess count in last 30 days !!! !!! !!!] - [G9Vn3][éªError count in last 30 days !!! !!! !!] + [G9Vn3][ÇæError count in last 30 days !!! !!! !!] - [IBIIQ][ðîQuery returned {0} items !!! !!! !] + [IBIIQ][¥òQuery returned {0} items !!! !!! !] - [YC58W][ØÎMessage !!!] + [YC58W][£ÚMessage !!!] - [3VvzK][¥øItem Count !!! !] + [3VvzK][ÑÉItem Count !!! !] - [9Abqv][@£Log Level !!! ] + [9Abqv][ÃÐLog Level !!! ] - [Iq64z][ªõVSTS Continuous Delivery !!! !!! !] + [Iq64z][ÈõVSTS Continuous Delivery !!! !!! !] - [doaI0][¢ÎVisual Studio Team Services sets up a robust deployment pipeline for your application. The pipeline builds, runs load tests and deploys to staging slot and then to production. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [doaI0][ñäVisual Studio Team Services sets up a robust deployment pipeline for your application. The pipeline builds, runs load tests and deploys to staging slot and then to production. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [vrrWU][ÂÿApp Service Kudu build server !!! !!! !!!] + [vrrWU][óÂApp Service Kudu build server !!! !!! !!!] - [SrsA7][ÖÓUse App Service as the build server. The App Service Kudu engine will automatically build your code during deployment when applicable with no additional configuration required. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [SrsA7][ÜíUse App Service as the build server. The App Service Kudu engine will automatically build your code during deployment when applicable with no additional configuration required. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [Q3ITe][åÓBuild !!!] + [Q3ITe][ÎèBuild !!!] - [7DA3J][æôSelect Account !!! !!] + [7DA3J][§ëSelect Account !!! !!] - [GoNRo][âíEnter Account Name !!! !!!] + [GoNRo][ÀÜEnter Account Name !!! !!!] - [BqRuB][éÇSelect Project !!! !!] + [BqRuB][üµSelect Project !!! !!] - [4JfRy][ÍìWeb Application Framework !!! !!! !!] + [4JfRy][ëèWeb Application Framework !!! !!! !!] - [tZVim][ÍâSelect Framework !!! !!!] + [tZVim][ééSelect Framework !!! !!!] - [iIlL1][ÿÂWorking Directory !!! !!!] + [iIlL1][ÀôWorking Directory !!! !!!] - [4k4wl][µùThere is an operation in progress. Are you sure you would like leave? !!! !!! !!! !!! !!! !!! !] + [4k4wl][©§There is an operation in progress. Are you sure you would like leave? !!! !!! !!! !!! !!! !!! !] - [GgJgT][ÌþTask Runner !!! !] + [GgJgT][ÜèTask Runner !!! !] - [tJ0vG][ïøPython Framework !!! !!!] + [tJ0vG][Æ©Python Framework !!! !!!] - [5ejOy][óãPython Version !!! !!] + [5ejOy][úéPython Version !!! !!] - [fO9yw][îÊDjango Settings Module !!! !!! !] + [fO9yw][ìÆDjango Settings Module !!! !!! !] - [K9W7z][ÝÞFlask Project !!! !!] + [K9W7z][àÈFlask Project !!! !!] - [wpa0q][ÀæNew !!] + [wpa0q][ÐÏNew !!] - [2jXO9][¥ÇExisting !!! ] + [2jXO9][ÌðExisting !!! ] - [ZnADs][£äSelect Respository !!! !!!] + [ZnADs][ÆÚSelect Respository !!! !!!] - [LdtEO][ÆÃSelect Folder !!! !!] + [LdtEO][ýóSelect Folder !!! !!] - [iZflk][ÅÞSelect branch !!! !!] + [iZflk][âÔSelect branch !!! !!] - [VHoMD][µÛDeployment !!! !] + [VHoMD][üÜDeployment !!! !] - [8MMNi][óµEnable Deployment Slot !!! !!! !] + [8MMNi][ðéEnable Deployment Slot !!! !!! !] - [ZTbtr][ÑàDeployment Slot !!! !!] + [ZTbtr][þ@Deployment Slot !!! !!] - [fY6n0][ÿ©Enter Deployment Slot Name !!! !!! !!] + [fY6n0][þþEnter Deployment Slot Name !!! !!! !!] - [b8wpA][ªýSelect Slot !!! !] + [b8wpA][ÌþSelect Slot !!! !] - [29xtK][ÔýYes !!] + [29xtK][©îYes !!] - [fAzB7][øÃNo !!] + [fAzB7][àñNo !!] - [T3Nzj][ÁâLoad Test !!! ] + [T3Nzj][ÓÞLoad Test !!! ] - [KiKO4][âÊEnable Load Test !!! !!!] + [KiKO4][üÐEnable Load Test !!! !!!] - [Je6qW][ÇÒApp Name !!! ] + [Je6qW][ÇÎApp Name !!! ] - [WVWbH][ÆóPricing Tier !!! !] + [WVWbH][àÏPricing Tier !!! !] - [Fgcdn][õ§Deployment Center (Preview) !!! !!! !!] + [Fgcdn][éÒDeployment Center (Preview) !!! !!! !!] - [fSxO6][ðçApp Service Deployment Center enables you to choose the location of your code as well as options for build and deployment to the cloud. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] + [fSxO6][£¢App Service Deployment Center enables you to choose the location of your code as well as options for build and deployment to the cloud. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! ] - [dLTXt][ÐÆNot Authorized !!! !!] + [dLTXt][ÐâNot Authorized !!! !!] - [B5aMb][µìThe call to get Host information failed. !!! !!! !!! !!!] + [B5aMb][ÀËThe call to get Host information failed. !!! !!! !!! !!!] - [5APsS][úÖConfigure Application Insights to capture invocation logs !!! !!! !!! !!! !!! !] + [5APsS][ÈìConfigure Application Insights to capture invocation logs !!! !!! !!! !!! !!! !] - [s1pJH][ÿòAzure Functions now supports Application Insights as the preferred monitoring solution for apps under construction and in production. App Insights offers powerful analytics, notifications, and visualizations of your log data, as well as higher overall reliability at scale. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [s1pJH][ñÍAzure Functions now supports Application Insights as the preferred monitoring solution for apps under construction and in production. App Insights offers powerful analytics, notifications, and visualizations of your log data, as well as higher overall reliability at scale. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [tAM2J][ÜÑSwitch to classic view !!! !!! !] + [tAM2J][ý¥Switch to classic view !!! !!! !] - [xwtq6][£òConfiguration Instructions !!! !!! !!] + [xwtq6][ªúConfiguration Instructions !!! !!! !!] - [Dtzaa][åÑConfigure !!! ] + [Dtzaa][ãÒConfigure !!! ] - [2l1v0][æÄInvocation traces !!! !!!] + [2l1v0][ÁþInvocation traces !!! !!!] - [NZ4xc][ÉáResults may be delayed for up to 5 minutes. !!! !!! !!! !!! ] + [NZ4xc][öÖResults may be delayed for up to 5 minutes. !!! !!! !!! !!! ] - [rU2a9][íÄDrag a file here or !!! !!! ] + [rU2a9][æùDrag a file here or !!! !!! ] - [GidgR][ê§browse !!!] + [GidgR][ÍÜbrowse !!!] - [eYoQy][ÃÍto upload !!! ] + [eYoQy][ñÿto upload !!! ] - [4xM4c][áÕMetrics !!!] + [4xM4c][âÑMetrics !!!] - [5VYO0][üíView metrics and setup alerts. !!! !!! !!!] + [5VYO0][ÐíView metrics and setup alerts. !!! !!! !!!] - [IRwQG][àÆFTP based deployment can be disabled or configured to accept FTP (plain text) or FTPS (secure) connections. Click to learn more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [IRwQG][ÓçFTP based deployment can be disabled or configured to accept FTP (plain text) or FTPS (secure) connections. Click to learn more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [x5r2I][þúFTP access !!! !] + [x5r2I][ÍòFTP access !!! !] - [HqZoj][ÌÐValidating... !!! !!] + [HqZoj][ÖýValidating... !!! !!] - [bRIeo][õÓYou do not have permissions to create a Build Definition or a Release definition on this project. Contact your project administrator !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] + [bRIeo][ØÃYou do not have permissions to create a Build Definition or a Release definition on this project. Contact your project administrator !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!!] - [g0KZu][ÈÌThe account name supplied is not valid. Please supply another account name. !!! !!! !!! !!! !!! !!! !!!] + [g0KZu][æäThe account name supplied is not valid. Please supply another account name. !!! !!! !!! !!! !!! !!! !!!] - [P9Kdv][@ÝFTP + FTPS !!! !] + [P9Kdv][§úFTP + FTPS !!! !] - [1pEB9][¥ãFTPS Only !!! ] + [1pEB9][ÙËFTPS Only !!! ] - [hlHgX][þÌDisable !!!] + [hlHgX][ôÓDisable !!!] - [2WcEV][ËÈShow !!] + [2WcEV][ÞáShow !!] - [1Szp7][èöHide !!] + [1Szp7][çñHide !!] - [DUA2Y][ÑàYour password and confirmation password do not match. !!! !!! !!! !!! !!! ] + [DUA2Y][ÈÖYour password and confirmation password do not match. !!! !!! !!! !!! !!! ] - [J3r4Q][ÆóDashboard !!! ] + [J3r4Q][Ù£Dashboard !!! ] - [GBCZE][ÇÂUse an FTP connection to access and copy app files. !!! !!! !!! !!! !!!] + [GBCZE][ñÕUse an FTP connection to access and copy app files. !!! !!! !!! !!! !!!] - [DS1T5][ÙÌApp Service enables you to access your app content through FTP/S. !!! !!! !!! !!! !!! !!! ] + [DS1T5][ÓëApp Service enables you to access your app content through FTP/S. !!! !!! !!! !!! !!! !!! ] - [4pIsy][âÐUser Credentials !!! !!!] + [4pIsy][ÉÂUser Credentials !!! !!!] - [Q5kzK][ÊäUser Credentials are defined by you, the user, and can be used with all the apps to which you have access. These credentials can be used with FTP, Local Git and WebDeploy. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [Q5kzK][ȧUser Credentials are defined by you, the user, and can be used with all the apps to which you have access. These credentials can be used with FTP, Local Git and WebDeploy. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [H3dBG][ÛìApp Credentials !!! !!] + [H3dBG][À@App Credentials !!! !!] - [WugMl][ÑÒApplication Credentials are auto-generated and provide access only to this specific app or deployment slot. These credentials can be used with FTP, Local Git and WebDeploy. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + [WugMl][ùôApplication Credentials are auto-generated and provide access only to this specific app or deployment slot. These credentials can be used with FTP, Local Git and WebDeploy. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] - [A72rs][éÔUsername !!! ] + [A72rs][ÉéUsername !!! ] - [JQj6z][åÕPassword !!! ] + [JQj6z][âæPassword !!! ] - [CCxxV][ýèConfirm Password !!! !!!] + [CCxxV][ÛÿConfirm Password !!! !!!] - [BTr6B][ÕÙFTPS Endpoint !!! !!] + [BTr6B][ÀÑFTPS Endpoint !!! !!] - [W4FHn][ÛïCredentials !!! !] + [W4FHn][ÝçCredentials !!! !] - [UFvcr][ÄÐPending !!!] + [UFvcr][ÜäPending !!!] - [UgGlw][ÎóFailed !!!] + [UgGlw][ßüFailed !!!] - [88eQU][ÁÝSucccess !!! ] + [88eQU][§¥Success !!!] - [MYDVN][äÑSave Credentials !!! !!!] + [MYDVN][ÒàSave Credentials !!! !!!] - [20aIT][ëÂReset Credentials !!! !!!] + [20aIT][ÐÓReset Credentials !!! !!!] - [M17c5][µ¥HTTP Version !!! !] + [M17c5][äÿHTTP Version !!! !] - [bAImL][ªÏDismiss !!!] + [bAImL][êÿDismiss !!!] - [cI6LC][ïéProvider !!! ] + [cI6LC][ààProvider !!! ] - [0A7EX][ÊÀNew Account !!! !] + [0A7EX][ÆéNew Account !!! !] - [sKOYF][öåNew Deployment Slot !!! !!! ] + [sKOYF][ÓÜNew Deployment Slot !!! !!! ] - [KMxsw][åáDeployment Slot Name !!! !!! ] + [KMxsw][ó¥Deployment Slot Name !!! !!! ] - [90dSH][ãïYour local git repository url will be generated upon completion. !!! !!! !!! !!! !!! !!!] + [90dSH][öÖYour local git repository url will be generated upon completion. !!! !!! !!! !!! !!! !!!] - [Hobbi][ÊïRuntime version loaded from Application Settings: {{extensionVersion}} !!! !!! !!! !!! !!! !!! !] + [Hobbi][óªRuntime version loaded from Application Settings: {{extensionVersion}} !!! !!! !!! !!! !!! !!! !] - [lgCfQ][ÁøUnsupported Runtime Version !!! !!! !!] + [lgCfQ][©üUnsupported Runtime Version !!! !!! !!] - [HM9nV][Ç£Your custom runtime version is not supported. As a result {{exactExtensionVersion}} runtime is being used. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + [HM9nV][ÝÃYour custom runtime version is not supported. As a result {{exactExtensionVersion}} runtime is being used. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] - [ssKV2][ÔÞDisconnect !!! !] + [ssKV2][õÊDisconnect !!! !] - [9HpaZ][ÞÇEdit !!] + [9HpaZ][òçEdit !!] - [OF1f3][ÓØSync !!] + [OF1f3][ÑÇSync !!] - [2SAfG][ÿÍDeployment Credentials !!! !!! !] + [2SAfG][úôDeployment Credentials !!! !!! !] + + + [b0ELn][ÀÏDv3-Series compute !!! !!!] + + + [hquSV][ÉëDedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. !!! !!! !!! !!! !!! !!! !!! !!! !!!] + + + [FWS63][ìëConnection strings should only be used with a function app if you are using entity framework. For other scenarios use App Settings. Click to learn more. !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!] + + + [A79gl][áüRuntime version: loading... !!! !!! !!] + + + [H5dZT][çìYour app is currently in read-only mode because you are using Local Cache. When using Local Cache, changes made on the local file system are not persisted to the site content. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Learn more</a> !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !] + + + [z9dNe][èáDelete !!!] + + + [ilBXP][ÙÌValue !!!] + + + [JUKVn][ÆÅSlot Setting !!! !] + + + [coayg][ÿÝApp Setting Name !!! !!!] + + + [UsSQZ][£ÁConnection String Name !!! !!! !] + + + [QZBcy][ÈßType !!] + + + [5hkxP][ÎüDocument Name !!! !!] + + + [d8eiU][áÂExtension !!! ] + + + [9wzfn][ãÑScript Processor !!! !!!] + + + [VIAw4][ÇæArguments !!! ] + + + [EkBVP][ÐöVirtual Path !!! !] + + + [CLKG3][ÃÎPhysical Path !!! !!] + + + [tKM7a][ÞÂApplication !!! !] + + + [fvJlZ][íÞDirectory !!! ] + + + [bIJ75][ïçDatabase Account !!! !!!] + + + [l0EsH][ÓØAzure Cosmos DB account !!! !!! !] \ No newline at end of file diff --git a/server/Resources/ru-RU/Server/Resources/Resources.resx b/server/Resources/ru-RU/Server/Resources/Resources.resx index f4d27a4bbe..e158cbb7ef 100644 --- a/server/Resources/ru-RU/Server/Resources/Resources.resx +++ b/server/Resources/ru-RU/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Ошибка функции: {{error}} - Ошибка функции (${{name}}): {{error}} + Ошибка функции ({{name}}): {{error}} URL-адрес функции @@ -406,12 +406,6 @@ Ввести физический путь - - Приложение - - - Параметр слота - Скрытое значение. Щелкните, чтобы показать. @@ -1315,12 +1309,36 @@ Вы можете настраивать учетные данные развертывания уровня учетной записи Azure. Чтобы изменить учетные данные уровня приложения (или "учетные данные для публикации"), выберите команду "Сбросить учетные данные публикации" на вкладке "Общие сведения". <a href="https://go.microsoft.com/fwlink/?linkid=846056">Дополнительные сведения</a>. + + The console service is not available on your app. + Консоль Просматривайте файловую систему приложения из интерактивной веб-консоли. + + Управляйте средой веб-приложений, запуская стандартные команды (mkdir, cd для изменения каталогов и т. д.). Это среда "песочницы", поэтому команды, требующие повышенных прав, не будут работать. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Используйте проверку подлинности и авторизацию, чтобы защитить приложение и работать с данными каждого пользователя. - Удостоверение управляемой службы (предварительная версия) + Управляемое удостоверение службы Приложение может взаимодействовать с другими службами Azure, так как использует управляемое удостоверение Azure Active Directory. @@ -2399,7 +2417,7 @@ Группировать по подписке - Юг и центр США + Центрально-южная часть США Северная Европа @@ -2435,7 +2453,7 @@ Восточная часть США 2 - Северо-центральный регион США + Центрально-северная часть США Центральная часть США @@ -2540,7 +2558,7 @@ Сообщение о возврате - Вы используете предварительную версию функций Azure. Спасибо за участие! + Вы используете предварительную версию Функций Azure. Щелкните "Дополнительные сведения", чтобы получать информацию о последних изменениях на нашей странице объявлений. Щелкните, чтобы скрыть @@ -2879,7 +2897,7 @@ Не удалось остановить {0} - Служба {0} перезапущена" + Служба {0} перезапущена Не удалось перезапустить {0} @@ -3064,9 +3082,6 @@ Каждый экземпляр вашего плана службы приложений будет включать следующую конфигурацию оборудования: - - Веб-приложения для Linux в среде службы приложений предоставляются в предварительной версии с 50-процентной скидкой. - Первое ядро категории "Базовый" (B1) для Linux предоставляется бесплатно в первые 30 дней. @@ -3479,7 +3494,7 @@ Сбой - Выполнено + Успешно выполнено Сохранить учетные данные @@ -3529,4 +3544,67 @@ Мандат на развертывание + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Строки подключения следует использовать с приложением-функцией, только если вы используете Entity Framework. Для других сценариев используйте параметры приложений. Щелкните здесь, чтобы получить дополнительные сведения. + + + Версия среды выполнения: загружается... + + + Ваше приложение сейчас находится в режиме только для чтения, так как вы используете локальный кэш. При использовании локального кэша изменения, внесенные в локальную файловую систему, не сохраняются в контенте сайта. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Дополнительные сведения</a> + + + Удалить + + + Значение + + + Параметр слота + + + Имя параметра приложения + + + Имя строки подключения + + + Тип + + + Название документа + + + Расширение + + + Обработчик сценариев + + + Аргументы + + + Виртуальный путь + + + Физический путь + + + Приложение + + + Каталог + + + Учетная запись базы данных + + + Учетная запись Azure Cosmos DB + \ No newline at end of file diff --git a/server/Resources/sv-SE/Server/Resources/Resources.resx b/server/Resources/sv-SE/Server/Resources/Resources.resx index 3a773ea924..aaff830b2c 100644 --- a/server/Resources/sv-SE/Server/Resources/Resources.resx +++ b/server/Resources/sv-SE/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ Funktionsfel: {{error}} - Fel på funktion (${{name}}): {{error}} + Funktionen (${{name}}) fel: {{error}} Funktionswebbadress @@ -226,7 +226,7 @@ Ny funktionsapp - Din prenumeration innehåller inga funktionsappar. Det är de behållare där dina funktioner körs. Skapa en nu. + Din prenumeration innehåller inga funktionsappar. Dessa är de containers där dina funktioner körs. Skapa en nu. Eller skapa en funktionsapp från <a href="https://portal.azure.com/#create/Microsoft.FunctionApp">Azure Portal</a>. @@ -241,7 +241,7 @@ Prenumerationen {{displayName}} ({{ subscriptionId }}) är inte godkänd för att köra funktioner - Den här prenumerationen innehåller en eller flera funktionsappar. Det är de behållare där dina funktioner körs. Välj en eller skapa en ny nedan. + Den här prenumerationen innehåller en eller flera funktionsappar. Det är de containers där dina funktioner körs. Välj en eller skapa en ny nedan. Namnet måste innehålla minst 2 tecken. @@ -265,7 +265,7 @@ Din prenumeration - När du skapar en funktionsapp etableras automatiskt en ny behållare som kan vara värd åt och köra din kod. + När du skapar en funktionsapp etableras automatiskt en ny container som kan vara värd åt och köra din kod. Det gick inte att skapa appen @@ -406,12 +406,6 @@ Ange fysisk sökväg - - Program - - - Platsinställning - Dolt värde. Klicka för att visa. @@ -1315,12 +1309,36 @@ Konfigurera autentiseringsuppgifter för distribution på Azure-kontonivå. Om du vill ändra autentiseringsuppgifterna på appnivå (kallas även autentiseringsuppgifter för publicering) väljer du alternativet för att återställa publiceringsautentiseringsuppgifter på fliken Översikt. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Läs mer</a>. + + The console service is not available on your app. + Konsol Utforska appfilsystemet från en interaktiv webbaserad konsol. + + Hantera din webbappmiljö genom att köra vanliga kommandon (mkdir, cd för att ändra kataloger osv.) Det här är en sandbox-miljö så alla kommandon som kräver utökade privilegier fungerar inte. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1436,10 +1454,10 @@ Välj önskad Java minor-version. Om du väljer Nyaste kommer din app att använda den JVM som senast lades till på portalen. - Java-webbehållare + Java-webbcontainer - Den webbehållarversion som används för att köra ditt webbprogram om det använder Java + Den webcontainerversion som används för att köra ditt webbprogram om det använder Java Plattform @@ -1502,13 +1520,13 @@ Stack - Web Apps på Linux ger körningsalternativ genom en samling med inbyggda behållare. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Läs mer</a>. + Web Apps på Linux ger körningsalternativ genom en samling med inbyggda containers. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Läs mer</a>. Startfil - Ange ett valfritt startkommando som ska köras som en del av behållarstarten. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Läs mer</a>. + Ange ett valfritt startkommando som ska köras som en del av containerstarten. <a href="https://go.microsoft.com/fwlink/?linkid=861969">Läs mer</a>. Nyast @@ -1580,7 +1598,7 @@ Använd autentisering/auktorisering för att skydda program och arbeta med data per användare. - Hanterad ACS-tjänstidentitet (förhandsversion) + Hanterad tjänstidentitet Ditt program kan kommunicera med andra Azure-tjänster som sig självt med hjälp av en hanterad Azure Active Directory-identitet. @@ -1628,7 +1646,7 @@ Konfigurera platsen för Swagger 2.0-metadata som beskriver ditt API. Detta gör det enkelt för andra att identifiera och använda API:t. - En App Service-plan fungerar som en behållare för din app. Inställningarna för App Service-planen bestämmer vilka platser, funktioner och beräkningsresurser som är kopplade till din app. + En App Service-plan fungerar som en container för din app. Inställningarna för App Service-planen bestämmer vilka platser, funktioner och beräkningsresurser som är kopplade till din app. Kvoter @@ -2411,10 +2429,10 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Sydostasien - Centrala Korea + Sydkorea, centrala - Södra Korea + Sydkorea, södra Västra USA @@ -2432,7 +2450,7 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Östasien - Östra USA 2 + USA, östra 2 Norra centrala USA @@ -2540,7 +2558,7 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Incheckningsmeddelande - Du använder en förhandsversion av Azure Functions. Tack för att du testar den! + Du använder en förhandsversion av Azure Functions. Klicka på läs mer för att hålla dig uppdaterad om de senaste ändringarn via vår meddelandesida. Klicka för att dölja @@ -2879,7 +2897,7 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Det gick inte att stoppa {0} - {0} har startats om + {0} startades om Det gick inte att starta om {0} @@ -3064,14 +3082,11 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Varje instans av din App Service-plan omfattar följande maskinvarukonfiguration: - - Linux-webbappar i en App Service Environment-plan faktureras med 50 % rabatt under förhandsversionen. - Den första Basic-kärnan (B1) för Linux är kostnadsfri de första 30 dagarna! - Windows-behållare debiteras med 50 % rabatt under förhandsversionen. + Windows-containers debiteras med 50 % rabatt under förhandsversionen. Isolerad-prisnivåer inom en App Service-miljö (ASE) finns inte tillgängliga för din konfiguration. En ASE är ett kraftfullt funktionserbjudande i Azure App Service som erbjuder nätverksisolering och förbättrade skalningsfunktioner. @@ -3479,7 +3494,7 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Misslyckades - Lyckades + Klart Spara autentiseringsuppgifter @@ -3529,4 +3544,67 @@ Ställ in på extern URL för att använda en API-definition som finns på någo Autentiseringsuppgifter för distributions + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Anslutningssträngar ska endast användas med en funktionsapp om du använder Entity Framework. Använd appinställningar för andra scenarier. Klicka för att läsa mer. + + + Runtime-version: läser in... + + + Din appen är i skrivskyddat läge eftersom du använder det lokala cacheminnet. När du använder det lokala cacheminnet, sparas ändringar som görs på det lokala filsystemet inte till webbplatsens innehåll. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Läs mer</a> + + + Ta bort + + + Värde + + + Platsinställning + + + Namn på appinställning + + + Namn på anslutningssträng + + + Typ + + + Dokumentnamn + + + Filtillägg + + + Skriptprocessor + + + Argument + + + Virtuell sökväg + + + Fysisk sökväg + + + Program + + + Katalog + + + Databaskonto + + + Azure Cosmos DB-konto + \ No newline at end of file diff --git a/server/Resources/tr-TR/Server/Resources/Resources.resx b/server/Resources/tr-TR/Server/Resources/Resources.resx index 8078e425fa..e65279928e 100644 --- a/server/Resources/tr-TR/Server/Resources/Resources.resx +++ b/server/Resources/tr-TR/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ İşlev Hatası: {{error}} - İşlev (${{name}}) Hatası: {{error}} + İşlev ({{name}}) Hatası: {{error}} İşlev URL'si @@ -406,12 +406,6 @@ Fiziksel yolu girin - - Uygulama - - - Yuva Ayarı - Gizli değer. Göstermek için tıklayın. @@ -1315,12 +1309,36 @@ Azure için hesap düzeyinde dağıtım kimlik bilgilerini yapılandırın. Uygulama düzeyinde kimlik bilgilerinizi değiştirmek için ('Yayımlama Kimlik Bilgileri' olarak da bilinir), 'Genel Bakış' sekmesindeki 'Yayımlama kimlik bilgilerini sıfırla' seçeneğini belirtin. <a href="https://go.microsoft.com/fwlink/?linkid=846056">Daha fazla bilgi edinin</a>. + + The console service is not available on your app. + Konsol Uygulamanızın dosya sistemini etkileşimli bir web tabanlı konsoldan inceleyin. + + Yaygın komutları (dizin değiştirmek için 'mkdir', 'cd' vb.) kullanarak Web uygulaması ortamınızı yönetin. Bu bir korumalı alan ortamıdır, bu yüzden yüksek ayrıcalık gerektiren komutların hiçbiri çalışmaz. + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ Uygulamanızı korumak ve kullanıcı başına verilerle çalışmak için Kimlik Doğrulaması / Yetkilendirme kullanın. - Yönetilen hizmet kimliği (Önizleme) + Yönetilen hizmet kimliği Uygulamanız diğer Azure hizmetleriyle kendisi olarak iletişim kurmak için, yönetilen bir Azure Active Directory kimliği kullanabilir. @@ -2540,7 +2558,7 @@ Başka yerde barındırılan bir API tanımı kullanmak için "Dış URL" olarak İade Etme İletisi - Azure İşlevleri'nin yayın öncesi sürümlerinden birini kullanıyorsunuz. Denediğiniz için teşekkür ederiz! + Azure İşlevleri'nin yayın öncesi bir sürümünü kullanıyorsunuz. Duyuru sayfamız aracılığıyla en son değişiklikleri öğrenmek için 'daha fazla bilgi edinin' seçeneğine tıklayın. Gizlemek için tıklayın @@ -2879,7 +2897,7 @@ Başka yerde barındırılan bir API tanımı kullanmak için "Dış URL" olarak {0} durdurulamadı - {0} yeniden başlatıldı' + {0} yeniden başlatıldı {0} yeniden başlatılamadı @@ -3064,9 +3082,6 @@ Başka yerde barındırılan bir API tanımı kullanmak için "Dış URL" olarak App Service planınızın her bir örneği aşağıdaki donanım yapılandırmasını içerecek: - - Bir App Service Ortamındaki Linux web uygulamaları, önizleme sırasında %50 indirimli faturalama avantajından yararlanır. - Linux için ilk Temel (B1) çekirdek ilk 30 gündür ücretsizdir! @@ -3529,4 +3544,67 @@ Başka yerde barındırılan bir API tanımı kullanmak için "Dış URL" olarak Dağıtım Kimlik Bilgileri + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + Bağlantı dizeleri, yalnızca Entity Framework kullanıyorsanız bir işlev uygulamasıyla kullanılmalıdır. Diğer senaryolar için Uygulama Ayarları'nı kullanın. Daha fazla bilgi için tıklayın. + + + Çalışma zamanı sürümü: Yükleniyor... + + + Yerel Önbellek kullandığınızdan uygulamanız şu anda salt okunur modda. Yerel Önbellek kullanırken, yerel dosya sistemi üzerinde yapılan değişiklikler site içeriğinde kalıcı hale getirilmez. <a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">Daha fazla bilgi edinin</a> + + + Sil + + + Değer + + + Yuva Ayarı + + + Uygulama Ayar Adı + + + Bağlantı Dizesi Adı + + + Tür + + + Belge Adı + + + Uzantı + + + Betik İşleyici + + + Bağımsız Değişkenler + + + Sanal Yol + + + Fiziksel Yol + + + Uygulama + + + Dizin + + + Veritabanı Hesabı + + + Azure Cosmos DB hesabı + \ No newline at end of file diff --git a/server/Resources/zh-CN/Server/Resources/Resources.resx b/server/Resources/zh-CN/Server/Resources/Resources.resx index a063ec21b4..a0a9ca1921 100644 --- a/server/Resources/zh-CN/Server/Resources/Resources.resx +++ b/server/Resources/zh-CN/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ 函数错误: {{error}} - 函数(${{name}})错误: {{error}} + 函数 ({{name}}) 错误: {{error}} 函数 URL @@ -406,12 +406,6 @@ 输入物理路径 - - 应用程序 - - - 插槽设置 - 隐藏值。单击以显示。 @@ -1315,12 +1309,36 @@ 配置 Azure 帐户级部署凭据。若要更改应用级凭据(也称为“发布凭据”),请在“概述”选项卡中选择“重置公用凭据”。<a href="https://go.microsoft.com/fwlink/?linkid=846056">了解详细信息</a>。 + + The console service is not available on your app. + 控制台 通过基于 Web 的交互式控制台浏览应用文件系统。 + + 通过运行常用命令来管理你的 Web 应用环境(通过 "mkdir"、"cd" 来更改目录等等)。这是一个沙盒环境,因此,任何需要提升权限的命令都不起作用。 + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ 使用身份验证/授权来保护应用程序,并使用按用户划分的数据工作。 - 托管的服务标识(预览) + 托管服务标识 应用程序可以与其他 Azure 服务通信,因为它本身使用的是托管 Azure Active Directory 标识。 @@ -2540,7 +2558,7 @@ 签入消息 - 你正在使用 Azure Functions 的预发行版本。感谢试用! + 你正在使用 Azure Functions 的预发布版本。单击“了解详细信息”,随时了解公告页面上的最新更改。 单击以隐藏 @@ -2879,7 +2897,7 @@ 未能停止 {0} - {0} 已重启” + {0} 已重启 未能重启 {0} @@ -3064,9 +3082,6 @@ 应用服务计划的每个实例均包括以下硬件配置: - - 应用服务环境中的 Linux Web 应用在预览版期间费用五折。 - 用于 Linux 的第一个 Basic (B1)核心前 30 天免费! @@ -3529,4 +3544,67 @@ 部署凭据 + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + 如果正在使用实体框架,则连接字符串只能用于函数应用。对于其他方案,则使用应用设置。单击以了解详细信息。 + + + 运行时版本: 正在加载... + + + 因为你正在使用本地缓存,所以应用当前处于只读模式。在使用本地缓存时,本地文件系统上所做的更改将不保存到网站内容。<a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">了解详细信息</a> + + + 删除 + + + + + + 插槽设置 + + + 应用设置名称 + + + 连接字符串名称 + + + 类型 + + + 文档名 + + + 扩展 + + + 脚本处理器 + + + 参数 + + + 虚拟路径 + + + 物理路径 + + + 应用程序 + + + 目录 + + + 数据库帐户 + + + Azure Cosmos DB 帐户 + \ No newline at end of file diff --git a/server/Resources/zh-TW/Server/Resources/Resources.resx b/server/Resources/zh-TW/Server/Resources/Resources.resx index 4243ac30bd..40fdb2520d 100644 --- a/server/Resources/zh-TW/Server/Resources/Resources.resx +++ b/server/Resources/zh-TW/Server/Resources/Resources.resx @@ -154,7 +154,7 @@ 函式錯誤: {{error}} - 函式 (${{name}}) 錯誤: {{error}} + 函式 ({{name}}) 錯誤: {{error}} 函數 URL @@ -406,12 +406,6 @@ 輸入實體路徑 - - 應用程式 - - - 位置設定 - 隱藏的值。按一下即可顯示。 @@ -1315,12 +1309,36 @@ 設定 Azure 帳戶層級部署認證。若要變更您的應用程式層級認證 (亦即「發行認證」),請選擇 [概觀] 索引標籤中的 [重設發行認證]。<a href="https://go.microsoft.com/fwlink/?linkid=846056">深入了解</a>。 + + The console service is not available on your app. + 主控台 從互動式 Web 主控台探索您的應用程式檔案系統。 + + 藉由執行常用命令 ('mkdir'、可變更目錄的 'cd' 等) 來管理您的 Web 應用程式環境。這是沙箱環境,因此任何需要較高權限的命令皆無法在此運作。 + + + CMD + + + PowerShell + + + CMD + + + PowerShell + + + Bash + + + SSH + SSH @@ -1580,7 +1598,7 @@ 使用驗證/授權保護您的應用程式及使用個別使用者的資料。 - 受管理的服務身分識別 (預覽) + 受控服務識別 因為您的應用程式使用受管理的 Azure Active Directory 身分識別,所以可與其他 Azure 服務通訊。 @@ -2540,7 +2558,7 @@ 簽入訊息 - 您使用的是 Azure Functions 發行前版本。感謝您的試用! + 您目前使用 Azure Functions 的發行前版本。按一下 [深入了解] 以透過我們的宣告頁面持續掌握最新變更。 按一下可隱藏 @@ -2879,7 +2897,7 @@ 無法停止 {0} - 已重新啟動 {0}」 + 已重新啟動 {0} 無法重新啟動 {0} @@ -3064,9 +3082,6 @@ App Service 方案的每個執行個體都將包含下列硬體組態: - - 在預覽期間,App Service 隔離式方案中的 Linux Web 應用程式會以 50% 的折扣計費。 - Linux 的第一個基本 (B1) 核心前 30 天免費! @@ -3529,4 +3544,67 @@ 部署認證 + + Dv3-Series compute + + + Dedicated Dv3-series compute resources used to run applications deployed in the App Service Plan. + + + 連接字串只有在您使用 Entity Framework 時,才能搭配函數應用程式使用。在其他情況下則請使用應用程式設定。若要深入了解,請按一下。 + + + run-time 版本: 正在載入... + + + 因為您在使用本機快取,所以您的應用程式目前處於唯讀模式。在使用本機快取時,在本機檔案系統上所做的變更不會保存至網站內容。<a target="_blank" href="https://go.microsoft.com/fwlink/?linkid=875723">深入了解</a> + + + 刪除 + + + + + + 位置設定 + + + 應用程式設定名稱 + + + 連接字串名稱 + + + 類型 + + + 文件名稱 + + + 延伸模組 + + + 指令碼處理器 + + + 引數 + + + 虛擬路徑 + + + 實體路徑 + + + 應用程式 + + + 目錄 + + + 資料庫帳戶 + + + Azure Cosmos DB 帳戶 + \ No newline at end of file diff --git a/server/src/actions/resources.en.json b/server/src/actions/resources.en.json index c52536b0fc..306d7a86ca 100644 --- a/server/src/actions/resources.en.json +++ b/server/src/actions/resources.en.json @@ -366,8 +366,14 @@ "feature_deploymentSourceInfo": "Configure and manage deployment options for your app, including continuous deployment from VSTS, Github and Bitbucket as well as trigger deployments from OneDrive, Dropbox, external Git and more.", "feature_deploymentCredsName": "Deployment credentials", "feature_deploymentCredsInfo": "Configure Azure account-level deployment credentials. To change your app-level credentials (also known as 'Publish Credentials'), choose 'Reset publish credentials' in the 'Overview' tab. Learn more.", + "error_consoleNotAvailable": "The console service is not available on your app.", "feature_consoleName": "Console", + "feature_cmdConsoleName": "CMD", + "feature_powerShellConsoleName": "CMD", + "feature_bashConsoleName": "Bash", + "feature_sshConsoleName": "SSH", "feature_consoleInfo": "Explore your app's file system from an interactive web-based console.", + "feature_consoleMsg": "Manage your web app environment by running common commands ('mkdir', 'cd' to change directories, etc.) This is a sandbox environment, so any commands that require elevated privileges will not work.", "feature_extensionsName": "Extensions", "feature_extensionsInfo": "Extensions add functionality to your entire app.", "feature_generalSettingsName": "General settings",