diff --git a/src/vs/workbench/parts/experiments/electron-browser/experimentalPrompt.ts b/src/vs/workbench/parts/experiments/electron-browser/experimentalPrompt.ts index d92206737f5db69f3bce13f7ee7dc8b891d6f1f6..f0fb773e43556d30398c3ccc870fd3f2d6e06437 100644 --- a/src/vs/workbench/parts/experiments/electron-browser/experimentalPrompt.ts +++ b/src/vs/workbench/parts/experiments/electron-browser/experimentalPrompt.ts @@ -10,6 +10,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IExtensionsViewlet } from 'vs/workbench/parts/extensions/common/extensions'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { language } from 'vs/base/common/platform'; export class ExperimentalPrompts extends Disposable implements IWorkbenchContribution { private _disposables: IDisposable[] = []; @@ -50,7 +51,8 @@ export class ExperimentalPrompts extends Disposable implements IWorkbenchContrib }; const actionProperties = (experiment.action.properties); - if (!actionProperties || !actionProperties.promptText) { + const promptText = ExperimentalPrompts.getPromptText(actionProperties, language); + if (!actionProperties || !promptText) { return; } if (!actionProperties.commands) { @@ -80,7 +82,7 @@ export class ExperimentalPrompts extends Disposable implements IWorkbenchContrib }; }); - this.notificationService.prompt(Severity.Info, actionProperties.promptText, choices, { + this.notificationService.prompt(Severity.Info, promptText, choices, { onCancel: () => { logTelemetry(); this.experimentService.markAsCompleted(experiment.id); @@ -91,4 +93,15 @@ export class ExperimentalPrompts extends Disposable implements IWorkbenchContrib dispose() { this._disposables = dispose(this._disposables); } + + static getPromptText(actionProperties: IExperimentActionPromptProperties, displayLanguage: string): string { + if (typeof actionProperties.promptText === 'string') { + return actionProperties.promptText; + } + displayLanguage = displayLanguage.toLowerCase(); + if (!actionProperties.promptText[displayLanguage] && displayLanguage.indexOf('-') === 2) { + displayLanguage = displayLanguage.substr(0, 2); + } + return actionProperties.promptText[displayLanguage]; + } } diff --git a/src/vs/workbench/parts/experiments/node/experimentService.ts b/src/vs/workbench/parts/experiments/node/experimentService.ts index d407611aa03349d12e98a4626c9b4b7b5c665ea6..c483896b8b716ccd49215b0020d426673d3ed507 100644 --- a/src/vs/workbench/parts/experiments/node/experimentService.ts +++ b/src/vs/workbench/parts/experiments/node/experimentService.ts @@ -76,7 +76,7 @@ export enum ExperimentActionType { } export interface IExperimentActionPromptProperties { - promptText: string; + promptText: string | { [key: string]: string }; commands: IExperimentActionPromptCommand[]; } diff --git a/src/vs/workbench/parts/experiments/test/electron-browser/experimentalPrompts.test.ts b/src/vs/workbench/parts/experiments/test/electron-browser/experimentalPrompts.test.ts index 995f1498e45956e05def57e9a6794e26bc4b59b0..44df807b708e0de19610148d0f78627ef82e0fe2 100644 --- a/src/vs/workbench/parts/experiments/test/electron-browser/experimentalPrompts.test.ts +++ b/src/vs/workbench/parts/experiments/test/electron-browser/experimentalPrompts.test.ts @@ -5,7 +5,7 @@ import * as assert from 'assert'; -import { IExperiment, ExperimentActionType, IExperimentService, ExperimentState } from 'vs/workbench/parts/experiments/node/experimentService'; +import { IExperiment, ExperimentActionType, IExperimentService, ExperimentState, IExperimentActionPromptProperties } from 'vs/workbench/parts/experiments/node/experimentService'; import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; import { Emitter } from 'vs/base/common/event'; @@ -157,4 +157,28 @@ suite('Experimental Prompts', () => { }); }); + + test('Test getPromptText', () => { + const simpleTextCase: IExperimentActionPromptProperties = { + promptText: 'My simple prompt', + commands: [] + }; + const englishTextCase: IExperimentActionPromptProperties = { + promptText: { + en: 'My simple prompt for en' + }, + commands: [] + }; + const englishUSTextCase: IExperimentActionPromptProperties = { + promptText: { + 'en-us': 'My simple prompt for en' + }, + commands: [] + }; + assert.equal(ExperimentalPrompts.getPromptText(simpleTextCase, 'any-language'), simpleTextCase.promptText); + assert.equal(ExperimentalPrompts.getPromptText(englishTextCase, 'en'), englishTextCase.promptText['en']); + assert.equal(ExperimentalPrompts.getPromptText(englishUSTextCase, 'en-us'), englishUSTextCase.promptText['en-us']); + assert.equal(ExperimentalPrompts.getPromptText(englishTextCase, 'en-au'), englishTextCase.promptText['en']); + assert.equal(!!ExperimentalPrompts.getPromptText(englishTextCase, 'de'), false); + }); }); \ No newline at end of file