Change:
Testing in Firefox, with Spanish (es-es) set Open "Get Started with VS Code in the Web" walkthrough Select last step (open up your code), then first command ("Open Folder" in English, "Abrir carpeta" in Spanish) Modal is in English: ! It isn't a new string, and I didn't think getting started or this command would be from an extension, but perhaps that is the case.
I also see this on modals on the overall welcome page when I try opening a file or folder: !
Thank you for your feedback. We are currently reviewing it (reference ).
This is an odd one. The string looks good here: but the file that that comes from doesn't show up at all in our Spanish files: I'll have to dig into why this is... any ideas?
might be a bug in the tool so that the localize call is not detected. When you generate the export is the string included.
Ok the web strings are now bundled in language packs. It may take a minute for all these new strings to make their way through the translation system... but by end game it should be good.

Discussion:
'use strict'; const gulp = require('gulp'); <ins> const merge = require('gulp-merge-json'); </ins> const fs = require('fs'); const os = require('os'); const cp = require('child_process');

} }); <ins> // #region nls </ins> const innoSetupConfig = { 'zh-cn': { codePage: 'CP936', defaultInfo: { name: 'Simplified Chinese', id: '$0804', } }, 'zh-tw': { codePage: 'CP950', defaultInfo: { name: 'Traditional Chinese', id: '$0404' } },

'tr': { codePage: 'CP1254' } }; <del> // Transifex Localizations const apiHostname = process.env.TRANSIFEX_API_URL; const apiName = process.env.TRANSIFEX_API_NAME; const apiToken = process.env.TRANSIFEX_API_TOKEN; gulp.task(task.define( 'vscode-translations-push', task.series( compileBuildTask, compileExtensionsBuildTask, optimizeVSCodeTask, function () { const pathToMetadata = './out-vscode/nls.metadata.json'; const pathToExtensions = '.build/extensions/*'; const pathToSetup = 'build/win32/**/{Default.isl,messages.en.isl}'; return es.merge( gulp.src(pathToMetadata).pipe(i18n.createXlfFilesForCoreBundle()), gulp.src(pathToSetup).pipe(i18n.createXlfFilesForIsl()), gulp.src(pathToExtensions).pipe(i18n.createXlfFilesForExtensions()) ).pipe(i18n.findObsoleteResources(apiHostname, apiName, apiToken) ).pipe(i18n.pushXlfFiles(apiHostname, apiName, apiToken)); } ) )); </del> gulp.task(task.define( 'vscode-translations-export', task.series( <del> compileBuildTask, </del> <ins> core, </ins> compileExtensionsBuildTask, <del> optimizeVSCodeTask, </del> function () { const pathToMetadata = './out-vscode/nls.metadata.json'; <ins> const pathToRehWebMetadata = './out-vscode-reh-web/nls.metadata.json'; </ins> const pathToExtensions = '.build/extensions/*'; const pathToSetup = 'build/win32/i18n/messages.en.isl'; return es.merge( <del> gulp.src(pathToMetadata).pipe(i18n.createXlfFilesForCoreBundle()), </del> <ins> gulp.src([pathToRehWebMetadata]).pipe(merge({ fileName: 'nls.metadata.json', jsonSpace: '', concatArrays: true })).pipe(i18n.createXlfFilesForCoreBundle()), </ins> gulp.src(pathToSetup).pipe(i18n.createXlfFilesForIsl()), gulp.src(pathToExtensions).pipe(i18n.createXlfFilesForExtensions()) ).pipe(vfs.dest('../vscode-translations-export'));

) )); <del> gulp.task('vscode-translations-pull', function () { return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => { const includeDefault = !!innoSetupConfig[language.id].defaultInfo; return i18n.pullSetupXlfFiles(apiHostname, apiName, apiToken, language, includeDefault).pipe(vfs.dest(`../vscode-translations-import/${language.id}/setup`)); })); }); </del> gulp.task('vscode-translations-import', function () { const options = minimist(process.argv.slice(2), { string: 'location',

.pipe(vfs.dest(`./build/win32/i18n`)); })); }); <ins> // #endregion </ins>

}); } exports.processNlsFiles = processNlsFiles; <del> const editorProject = 'vscode-editor', workbenchProject = 'vscode-workbench', extensionsProject = 'vscode-extensions', setupProject = 'vscode-setup'; </del> <ins> const editorProject = 'vscode-editor', workbenchProject = 'vscode-workbench', extensionsProject = 'vscode-extensions', setupProject = 'vscode-setup', serverProject = 'vscode-server'; </ins> function getResource(sourceFile) { let resource; if (/^vs/platform/.test(sourceFile)) {

else if (/^vs/code/.test(sourceFile)) { return { name: 'vs/code', project: workbenchProject }; } <ins> else if (/^vs/server/.test(sourceFile)) { return { name: 'vs/server', project: serverProject }; } </ins> else if (/^vs/workbench/contrib/.test(sourceFile)) { resource = sourceFile.split('/', 4).join('/'); return { name: resource, project: workbenchProject };

const editorProject: string = 'vscode-editor', workbenchProject: string = 'vscode-workbench', extensionsProject: string = 'vscode-extensions', <del> setupProject: string = 'vscode-setup'; </del> <ins> setupProject: string = 'vscode-setup', serverProject: string = 'vscode-server'; </ins> export function getResource(sourceFile: string): Resource { let resource: string;

return { name: 'vs/base', project: editorProject }; } else if (/^vs/code/.test(sourceFile)) { return { name: 'vs/code', project: workbenchProject }; <ins> } else if (/^vs/server/.test(sourceFile)) { return { name: 'vs/server', project: serverProject }; </ins> } else if (/^vs/workbench/contrib/.test(sourceFile)) { resource = sourceFile.split('/', 4).join('/'); return { name: resource, project: workbenchProject };