@@ -14,12 +14,14 @@ We can remove this once upstream supports all language packs.
1414 one but is worse because it does not handle non-existent or empty files.
15157. Replace some caching and Node requires because code-server does not restart
1616 when changing the language unlike native Code.
17+ 8. Make language extensions installable like normal rather than using the
18+ special set/clear language actions.
1719
1820Index: code-server/lib/vscode/src/vs/server/node/serverServices.ts
1921===================================================================
2022--- code-server.orig/lib/vscode/src/vs/server/node/serverServices.ts
2123+++ code-server/lib/vscode/src/vs/server/node/serverServices.ts
22- @@ -220 ,6 +220 ,9 @@ export async function setupServerService
24+ @@ -234 ,6 +234 ,9 @@ export async function setupServerService
2325 const channel = new ExtensionManagementChannel(extensionManagementService, (ctx: RemoteAgentConnectionContext) => getUriTransformer(ctx.remoteAuthority));
2426 socketServer.registerChannel('extensions', channel);
2527
@@ -138,7 +140,7 @@ Index: code-server/lib/vscode/src/vs/server/node/remoteLanguagePacks.ts
138140===================================================================
139141--- code-server.orig/lib/vscode/src/vs/server/node/remoteLanguagePacks.ts
140142+++ code-server/lib/vscode/src/vs/server/node/remoteLanguagePacks.ts
141- @@ -30 ,6 +30 ,12 @@ export function getNLSConfiguration(lang
143+ @@ -32 ,6 +32 ,12 @@ export function getNLSConfiguration(lang
142144 if (InternalNLSConfiguration.is(value)) {
143145 value._languagePackSupport = true;
144146 }
@@ -151,7 +153,7 @@ Index: code-server/lib/vscode/src/vs/server/node/remoteLanguagePacks.ts
151153 return value;
152154 });
153155 _cache.set(key, result);
154- @@ -44 ,3 +50 ,43 @@ export namespace InternalNLSConfiguratio
156+ @@ -46 ,3 +52 ,43 @@ export namespace InternalNLSConfiguratio
155157 return candidate && typeof candidate._languagePackId === 'string';
156158 }
157159 }
@@ -248,6 +250,15 @@ Index: code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts
248250===================================================================
249251--- code-server.orig/lib/vscode/src/vs/workbench/workbench.web.main.ts
250252+++ code-server/lib/vscode/src/vs/workbench/workbench.web.main.ts
253+ @@ -52,7 +52,7 @@ import 'vs/workbench/services/dialogs/br
254+ import 'vs/workbench/services/host/browser/browserHostService';
255+ import 'vs/workbench/services/lifecycle/browser/lifecycleService';
256+ import 'vs/workbench/services/clipboard/browser/clipboardService';
257+ - import 'vs/workbench/services/localization/browser/localeService';
258+ + import 'vs/workbench/services/localization/electron-sandbox/localeService';
259+ import 'vs/workbench/services/path/browser/pathService';
260+ import 'vs/workbench/services/themes/browser/browserHostColorSchemeService';
261+ import 'vs/workbench/services/encryption/browser/encryptionService';
251262@@ -119,8 +119,9 @@ import 'vs/workbench/contrib/logs/browse
252263 // Explorer
253264 import 'vs/workbench/contrib/files/browser/files.web.contribution';
@@ -264,9 +275,9 @@ Index: code-server/lib/vscode/src/vs/platform/languagePacks/browser/languagePack
264275===================================================================
265276--- code-server.orig/lib/vscode/src/vs/platform/languagePacks/browser/languagePacks.ts
266277+++ code-server/lib/vscode/src/vs/platform/languagePacks/browser/languagePacks.ts
267- @@ -6,18 +6,24 @@
278+ @@ -5,18 +5,24 @@
279+
268280 import { CancellationTokenSource } from 'vs/base/common/cancellation';
269- import { Language } from 'vs/base/common/platform';
270281 import { URI } from 'vs/base/common/uri';
271282+ import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc';
272283 import { IExtensionGalleryService } from 'vs/platform/extensionManagement/common/extensionManagement';
@@ -289,20 +300,20 @@ Index: code-server/lib/vscode/src/vs/platform/languagePacks/browser/languagePack
289300+ this.languagePackService = ProxyChannel.toService<ILanguagePackService>(remoteAgentService.getConnection()!.getChannel('languagePacks'))
290301 }
291302
292- async getBuiltInExtensionTranslationsUri(id: string): Promise<URI | undefined> {
293- @@ -73 ,6 +79 ,6 @@ export class WebLanguagePacksService ext
303+ async getBuiltInExtensionTranslationsUri(id: string, language: string ): Promise<URI | undefined> {
304+ @@ -72 ,6 +78 ,6 @@ export class WebLanguagePacksService ext
294305
295306 // Web doesn't have a concept of language packs, so we just return an empty array
296307 getInstalledLanguages(): Promise<ILanguagePackItem[]> {
297308- return Promise.resolve([]);
298309+ return this.languagePackService.getInstalledLanguages()
299310 }
300311 }
301- Index: code-server/lib/vscode/src/vs/workbench/contrib /localization/electron-sandbox/localeService.ts
312+ Index: code-server/lib/vscode/src/vs/workbench/services /localization/electron-sandbox/localeService.ts
302313===================================================================
303- --- code-server.orig/lib/vscode/src/vs/workbench/contrib /localization/electron-sandbox/localeService.ts
304- +++ code-server/lib/vscode/src/vs/workbench/contrib /localization/electron-sandbox/localeService.ts
305- @@ -41 ,7 +41 ,8 @@ export class NativeLocaleService impleme
314+ --- code-server.orig/lib/vscode/src/vs/workbench/services /localization/electron-sandbox/localeService.ts
315+ +++ code-server/lib/vscode/src/vs/workbench/services /localization/electron-sandbox/localeService.ts
316+ @@ -51 ,7 +51 ,8 @@ class NativeLocaleService implements ILo
306317 @IProductService private readonly productService: IProductService
307318 ) { }
308319
@@ -312,7 +323,7 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/localization/electron-san
312323 try {
313324 const content = await this.textFileService.read(this.environmentService.argvResource, { encoding: 'utf8' });
314325
315- @@ -68 ,9 +69 ,6 @@ export class NativeLocaleService impleme
326+ @@ -78 ,9 +79 ,6 @@ class NativeLocaleService implements ILo
316327 }
317328
318329 private async writeLocaleValue(locale: string | undefined): Promise<boolean> {
@@ -322,3 +333,70 @@ Index: code-server/lib/vscode/src/vs/workbench/contrib/localization/electron-san
322333 await this.jsonEditingService.write(this.environmentService.argvResource, [{ path: ['locale'], value: locale }], true);
323334 return true;
324335 }
336+ Index: code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
337+ ===================================================================
338+ --- code-server.orig/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
339+ +++ code-server/lib/vscode/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
340+ @@ -318,9 +318,6 @@ export abstract class AbstractInstallAct
341+ if (this.extension.isBuiltin) {
342+ return;
343+ }
344+ - if (this.extensionsWorkbenchService.canSetLanguage(this.extension)) {
345+ - return;
346+ - }
347+ if (this.extension.state === ExtensionState.Uninstalled && await this.extensionsWorkbenchService.canInstall(this.extension)) {
348+ this.enabled = this.installPreReleaseVersion ? this.extension.hasPreReleaseVersion : this.extension.hasReleaseVersion;
349+ this.updateLabel();
350+ @@ -697,7 +694,7 @@ export abstract class InstallInOtherServ
351+ }
352+
353+ if (isLanguagePackExtension(this.extension.local.manifest)) {
354+ - return true;
355+ + return false;
356+ }
357+
358+ // Prefers to run on UI
359+ @@ -1785,17 +1782,6 @@ export class SetLanguageAction extends E
360+ update(): void {
361+ this.enabled = false;
362+ this.class = SetLanguageAction.DisabledClass;
363+ - if (!this.extension) {
364+ - return;
365+ - }
366+ - if (!this.extensionsWorkbenchService.canSetLanguage(this.extension)) {
367+ - return;
368+ - }
369+ - if (this.extension.gallery && language === getLocale(this.extension.gallery)) {
370+ - return;
371+ - }
372+ - this.enabled = true;
373+ - this.class = SetLanguageAction.EnabledClass;
374+ }
375+
376+ override async run(): Promise<any> {
377+ @@ -1812,7 +1798,6 @@ export class ClearLanguageAction extends
378+ private static readonly DisabledClass = `${ClearLanguageAction.EnabledClass} disabled`;
379+
380+ constructor(
381+ - @IExtensionsWorkbenchService private readonly extensionsWorkbenchService: IExtensionsWorkbenchService,
382+ @ILocaleService private readonly localeService: ILocaleService,
383+ ) {
384+ super(ClearLanguageAction.ID, ClearLanguageAction.TITLE.value, ClearLanguageAction.DisabledClass, false);
385+ @@ -1822,17 +1807,6 @@ export class ClearLanguageAction extends
386+ update(): void {
387+ this.enabled = false;
388+ this.class = ClearLanguageAction.DisabledClass;
389+ - if (!this.extension) {
390+ - return;
391+ - }
392+ - if (!this.extensionsWorkbenchService.canSetLanguage(this.extension)) {
393+ - return;
394+ - }
395+ - if (this.extension.gallery && language !== getLocale(this.extension.gallery)) {
396+ - return;
397+ - }
398+ - this.enabled = true;
399+ - this.class = ClearLanguageAction.EnabledClass;
400+ }
401+
402+ override async run(): Promise<any> {
0 commit comments