🚀 在 VS Code 中

2019 年 7 月 (版本 1.37)

更新 1.37.1:此更新解決了這些問題

下載:Windows:x64 | Mac:Intel | Linux:deb rpm tarball snap


歡迎使用 Visual Studio Code 2019 年 7 月發行版本。此版本包含許多更新,我們希望您會喜歡,以下是一些主要重點:

如果您想線上閱讀這些版本資訊,請前往 Updates,網址為 code.visualstudio.com
您也可以觀看 Developer Advocate Brian Clark 提供的此 1.37 版本重點影片

Insiders:想要盡快看到新功能嗎?您可以下載每晚 Insiders 組建,並在最新更新可用時立即試用。如需 Visual Studio Code 的最新新聞、更新和內容,請在 Twitter 上追蹤我們 @code

工作台

全新產品圖示

我們已更新所有產品圖示,使其在樣式、色彩和大小上保持一致。我們經歷了各種迭代,社群在整個過程中提供了有用的意見反應。

注意:這不包含我們對 Octicons 的使用,這些圖示會出現在狀態列和快速選取中。

VS Code product icons

設定編輯器支援字串陣列

「設定」編輯器現在允許編輯字串陣列設定。「新增項目」按鈕會顯示一個輸入方塊,以新增字串。

Settings UI for array-of-string settings

擴充功能作者可以透過貢獻組態,並使用 typeitems 金鑰來啟用此支援

{
  "type": "array",
  "items": {
    "type": "string"
  }
}

移除設定檔中的警告

您將不再在 settings.json 檔案中看到不明或不支援設定的警告。相反地,非使用中的設定會淡化,類似於未使用的原始碼,並以懸停提示說明原因。此外,您也不會看到來自目前已停用擴充功能的設定警告。

Faded unused settings

在檔案總管中顯示搜尋結果

「搜尋」檢視中的檔案內容選單現在具有「在檔案總管中顯示」命令,可導覽至檔案總管中的該檔案。

Reveal in Explorer command in search result

搜尋 regex 功能

早在 1.29 版本中,我們新增了設定 search.usePCRE2,讓搜尋使用 PCRE2 regex 引擎。這讓您能夠使用一些進階 regex 功能進行搜尋,例如反向參考lookahead 判斷提示。感謝 ripgrep 中的一些上游工作,您現在可以使用這些功能,而無需啟用特殊設定。如果 regex 使用 Rust regex 引擎不支援的功能,ripgrep 會自動回復為 PCRE2 引擎,而 search.usePCRE2 現在已淘汰。提醒您,VS Code 僅支援在 JavaScript 中有效的 regex,因為開放編輯器仍使用編輯器以 JavaScript 為基礎的搜尋進行搜尋。

NPM 指令碼總管預設為可見

先前,您必須啟用設定 npm.enableScriptExplorer 才能讓 NPM 指令碼總管可見,而且這很難發現。當工作區根目錄中有 package.json 檔案時,NPM 指令碼總管現在會摺疊顯示在檔案總管中。

NPM Scripts Explorer collapsed

當您的工作區根目錄中沒有 package.json 時,您仍然可以使用設定來啟用 NPM 指令碼總管。如果您想要隱藏總管,可以右鍵按一下其標題,然後從內容選單中選取「隱藏」。

focusedView 內容金鑰

有一個新的按鍵繫結 when 子句內容金鑰 focusedView,可在給定檢視處於焦點時顯示或啟用命令。

"when": "focusedView == nodeDependencies"

協助工具改善

我們修正了工作台各處的協助工具問題。在 GitHub 上可以找到已修正問題的完整清單,標籤為'accessibility' 標籤

樹狀檢視中採用新的樹狀結構 widget

貢獻樹狀檢視的擴充功能現在將取得新的樹狀結構 widget 體驗。樹狀結構 widget 提供更好的效能,以及改良的鍵盤導覽、篩選、自訂縮排、水平捲動等等。如果您最愛的擴充功能具有自訂樹狀檢視,您應該會看到先前新增至內建 VS Code 總管的相同 UX 改善。

編輯器

在選取範圍中顯示空白字元

editor.renderWhitespace 設定現在支援 selection 選項。設定此選項後,空白字元將僅顯示在選取的文字上

Whitespace rendered on selection

這對於快速檢查空白字元非常方便,而無需填滿整個編輯器。

改良的迷你地圖搜尋結果可見度

在上一個版本中,我們在迷你地圖 (程式碼大綱) 中引入了搜尋裝飾。這些裝飾很難看見,因此在此迭代中,我們致力於提高其可見度。現在,整行將在迷你地圖中以低不透明度醒目提示,而實際相符項目則以高不透明度顯示。

Minimap search results

您也可以使用新的 minimap.findMatchHighlight 主題色彩來變更裝飾的色彩。

在尋找及取代中保留大小寫

您現在可以在編輯器的「尋找」widget 中執行取代時保留大小寫。當編輯器「取代」輸入方塊中的「保留大小寫」選項 (AB 按鈕) 開啟時,此功能會開啟。

Preserve Case button

目前 VS Code 僅支援保留完整大寫完整小寫標題大小寫

Preserve case example

「尋找」widget 中的按鈕切換作用中狀態

我們已使用填滿的背景更新「尋找」widget 的按鈕切換作用中狀態,讓您現在可以輕鬆判斷您何時專注於作用中的切換。這會出現在「搜尋」檢視、「尋找及取代」和「終端機尋找」中。

在此更新中,我們引入了新的主題色彩 inputOption.activeBackground,以控制切換作用中狀態的背景色彩。此色彩重複使用 focusBorder,使其預設能與主題更搭配。我們也將 inputOption.activeBorder 的預設值設定為透明,讓邊框僅用於焦點。

Button toggle active state

更新的資訊色彩

統一警告色彩之後,我們也更新了 editorInfoForegroundeditorInfoBorder,以符合其餘的資訊診斷色彩。您會在「Peek 錯誤」檢視和編輯器底線中看到此更新的色彩

Info display colors

整合式終端機

搜尋 UX 改善

先前在終端機內搜尋會從終端機的檢視區頂端開始,然後向下搜尋。當到達底部時,它會換行至頂端。新的行為與其他幾個終端機模擬器一致,並從緩衝區底部開始向上搜尋,從而帶來更不讓人感到困惑的體驗。

Terminal search now searches upwards by default

終端機協助工具改善

終端機現在在使用螢幕助讀程式時,具有行導覽模式,可透過 方便地導覽行。可以使用 退出模式。

如果您想要自訂按鍵繫結,這些是新的命令

workbench.action.terminal.navigationModeExit
workbench.action.terminal.navigationModeFocusNext
workbench.action.terminal.navigationModeFocusPrevious

也進行了其他協助工具改善

  • 現在,空白行會使用不斷行空格字元,而不是明確的字串,讓螢幕助讀程式可以正確宣告。
  • 螢幕助讀程式現在會在輸入和移除字元時宣告字元。在某些情況下,這將無法運作,但涵蓋了大多數情況。

在設定中解析變數

變數現在可用於下列設定中

terminal.integrated.cwd
terminal.integrated.shell.<platform>
terminal.integrated.shellArgs.<platform>

例如,您不再需要擴充功能即可在目前檔案的資料夾中開啟終端機,只需新增此設定即可

"terminal.integrated.cwd": "${fileDirname}"

改良的錯誤報告和診斷

先前,當終端機以錯誤的組態啟動時,它只會指出處理序以錯誤碼結束。現在提供了更完善的錯誤訊息,可引導使用者找到數個常見案例的解決方案。

Using an invalid shell setting will tell you the shell is invalid

語言

改良 SCSS @import 的導覽

VS Code 過去會靜態解析 SCSS 匯入。例如,@import './foo' 會解析為 _foo.scss。但是,SCSS 在解析匯入方面更具彈性,允許 ./foo 解析為五個位置之一

  • foo.scss
  • _foo.scss
  • foo/index.scss
  • foo/_index.scss
  • foo.css

如果解析的檔案存在於磁碟上,VS Code 現在會將 @import './foo' 解析為這些位置之一。請注意,如果連結以 / 結尾,則只會解析為 /index.scss/_index.scss。如果連結以 .css.scss 等字尾結尾,VS Code 將不會嘗試替代檔案位置。

改良的 CSS 屬性值完成

CSS 完成現在提供額外 754 個 CSS 屬性值的詳細文件,包括較不常用的值。

CSS property value completion documentation

更快地使用 JavaScript 和 TypeScript 的僅語法功能

在上一個版本中,我們新增了實驗性設定,將支援 VS Code JavaScript 和 TypeScript 語言功能的 TypeScript 伺服器,分割成個別的語法和語意伺服器。

在 VS Code 1.37 中,分割伺服器現在預設為啟用。這表示對於大型 JavaScript 和 TypeScript 專案,以語法為基礎的操作 (例如程式碼摺疊或文件大綱) 應該能更快地使用。

工作

TypeScript 偵測到的工作警告

在上一個版本中,TypeScript 工作自動偵測已從在 tsconfig 路徑中使用作業系統特定的路徑分隔符號,變更為更跨平台友善的 /。如果 tsconfig 路徑中有 \\,VS Code 現在會顯示警告。

{
  "type": "typescript",
  "tsconfig": "src\\tsconfig.json", // This will cause a warning to show. It should be "tsconfig": "src/tsconfig.json"
  "option": "watch",
  "problemMatcher": [
    "$tsc-watch"
  ]
}

${relativeFileDirname} 工作和偵錯組態的變數

新的變數 ${relativeFileDirname} 會解析為目前開啟檔案目錄的工作區資料夾相對路徑。變數可用於工作和偵錯組態 (tasks.jsonlaunch.json)。

resolveTask 支援

工作提供者現在可以實作 resolveTask,以減少擴充功能提供工作的額外負荷。resolveTask 會在 provideTasks 之後呼叫,因此如果您的擴充功能具有關閉 provideTasks 和自動偵測的設定 (例如內建 gulp 擴充功能),但使用者仍在 tasks.json 中參考您的其中一項工作,則會呼叫 resolveTask,而且您的擴充功能可以傳回該單一工作。

擴充功能貢獻

遠端開發 (預覽)

持續開發遠端開發擴充功能,讓您可以使用容器、遠端電腦或 Windows Subsystem for Linux (WSL) 作為功能完整的開發環境。您可以在遠端開發版本資訊中,深入瞭解新的擴充功能功能和錯誤修正。

您也可以閱讀兩篇最近的部落格文章,描述

Java 支援智慧選取

Microsoft Java 擴充功能現在支援智慧語意選取。您可以根據原始碼中插入號位置的語意資訊,展開或縮小選取範圍。

  • 若要展開選取範圍,請使用 ⌃⇧⌘→ (Windows、Linux Shift+Alt+Right)
  • 若要縮小選取範圍,請使用 ⌃⇧⌘← (Windows、Linux Shift+Alt+Left)

擴充功能撰寫

vscode.workspace.fs

擴充功能有新的 API 可以讀取、寫入和管理檔案和資料夾。這是 Node.js 的 fs 檔案系統模組的替代方案,更重要的是,它允許從貢獻的檔案系統 (例如 SSH 或 WSL 遠端檔案系統) 存取檔案。

以下程式碼片段顯示如何寫入檔案,更多使用範例可以在fsconsumer-sample 中找到。

const writeStr = '1€ is 1.12$ is 0.9£';
const writeBytes = Buffer.from(writeStr, 'utf8');

await vscode.workspace.fs.writeFile(someUri, writeBytes);

行動呼籲:如果您的擴充功能目前使用 Node.js 的 fs 模組,請考慮移轉至新的 vscode.workspace.fs API。

DiagnosticsTag.Deprecated

診斷標籤可讓擴充功能作者豐富編輯器內診斷的表示方式。此版本新增了 DiagnosticTag.Deprecated,編輯器會以刪除線呈現。

Strikeout Deprecated decoration

上圖中的診斷是由以下顯示的 validate 函式所建立。程式碼行 diag.tags = [vscode.DiagnosticTag.Deprecated]; 新增了淘汰標籤。

let diagnostics = vscode.languages.createDiagnosticCollection('Sample Errors');
let validate = (editor: vscode.TextEditor | undefined) => {
  if (!editor) {
    return;
  }
  let result: vscode.Diagnostic[] = [];
  for (let line = 0; line < editor.document.lineCount; line++) {
    let pos = 0;
    while ((pos = editor.document.lineAt(line).text.indexOf('guys', pos)) >= 0) {
      let diag = new vscode.Diagnostic(
        new vscode.Range(line, pos, line, pos + 'guys'.length),
        'This is deprecated, use "folks", "people", or "you all" instead.'
      );
      diag.severity = vscode.DiagnosticSeverity.Warning;
      diag.tags = [vscode.DiagnosticTag.Deprecated];
      result.push(diag);
      pos += 'guys'.length;
    }
  }
  diagnostics.set(editor.document.uri, result);
};

vscode.workspace.workspaceFile

有一個新的工作區屬性 workspace.workspaceFile,會傳回工作區檔案的位置。例如:file:///Users/name/Development/myProject.code-workspace,或針對未命名且尚未儲存的工作區傳回 untitled:1555503116870

根據開啟的工作區,值會是

  • 未開啟工作區或單一資料夾時為 undefined
  • 工作區檔案的路徑,格式為 Uri

如果工作區未命名,則傳回的 URI 將使用 untitled: 結構描述。

工作區檔案位置的其中一個用途是呼叫 vscode.openFolder 命令,以在工作區關閉後再次開啟

vscode.commands.executeCommand('vscode.openFolder', uriOfWorkspace);

注意:不建議使用 workspace.workspaceFile 位置將組態資料直接寫入檔案。請改用 workspace.getConfiguration().update() 方法,此方法在開啟單一資料夾以及未命名或已儲存的工作區時都有效。

vscode.env.shell

建議的 vscode.env.shell API 現在已穩定。應該使用此 API 來取得終端機的預設 shell,而不是 terminal.integrated.shell.<platform> 設定。

const shell = vscode.env.shell;
if (shell.search(/(powershell|pwsh)/i) !== -1) {
  // Do something special that PowerShell needs
}

在 when 子句中支援 OR

現在可以在預期 when 子句的各種貢獻點中使用邏輯 OR (||)。

例如,新增選單貢獻時

"contributes": {
  "menus": {
    "editor/title": [{
      "command": "showPreviewToSide",
      "when": "editorLangId == markdown || editorLangId == html",
      "group": "navigation"
    }]
  }
}

AND && 運算子的優先順序高於 OR ||

作用中輸入選項的新主題色彩

新的色彩 inputOption.activeBackground 可讓您控制輸入欄位中已啟用選項的背景色彩。此色彩重複使用 focusBorder,使其預設能與主題更搭配。我們也將 inputOption.activeBorder 的預設值設定為透明,讓邊框僅用於焦點。

在執行擴充功能整合測試之前安裝擴充功能

使用 vscode-test@1.1.0,擴充功能作者可以解析已下載 VS Code 複本的 CLI 路徑,並將該路徑用於擴充功能管理。

例如

const cp = require('child_process');
const { downloadAndUnzipVSCode, resolveCliPathFromExecutablePath } = require('vscode-test');

(async () => {
  const vscodeExecutablePath = await downloadAndUnzipVSCode('1.36.0');
  const cliPath = resolveCliPathFromExecutablePath(vscodeExecutablePath);

  cp.spawnSync(cliPath, ['--install-extension', '<EXTENSION-ID-OR-PATH-TO-VSIX>'], {
    encoding: 'utf-8',
    stdio: 'inherit'
  });
})();

在更新的測試擴充功能文件中深入瞭解。

更新 Travis CI 指令碼,以在 Linux 上執行擴充功能整合測試

建議的組態 (如下所示) 可能無法在最新的 Travis CI Linux 環境中運作

if [ $TRAVIS_OS_NAME == "linux" ]; then
  export CXX="g++-4.9" CC="gcc-4.9" DISPLAY=:99.0;
  sh -e /etc/init.d/xvfb start;
  sleep 3;
fi

您現在可以使用以下的 Xvfb 指令碼來代替

if [ $TRAVIS_OS_NAME == "linux" ]; then
  export DISPLAY=':99.0'
  /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
fi

在更新的持續整合文件中深入瞭解。

建議的擴充功能 API

每個里程碑都隨附新的建議 API,擴充功能作者可以試用。與往常一樣,我們很樂意聽取您的意見反應。以下是您試用建議 API 必須執行的動作

  • 您必須使用 Insiders,因為建議的 API 經常變更。
  • 您的擴充功能的 package.json 檔案中必須有這一行:"enableProposedApi": true
  • 將最新版本的 vscode.proposed.d.ts 檔案複製到您的專案中。

請注意,您無法發佈使用建議 API 的擴充功能。我們可能會在下一個版本中進行重大變更,而且我們絕不希望中斷現有的擴充功能。

擴充功能終端機

去年推出的建議 TerminalRenderer API 經歷了重大變更,現在已淘汰,改用「擴充功能終端機」。新的 API 更符合終端機的實際運作方式,擴充功能現在實作了 Pseudoterminal 物件,這與 *nix 樣式的 pty 類似。

以下是目前的建議

export namespace window {
  export function createTerminal(options: ExtensionTerminalOptions): Terminal;
}

export interface ExtensionTerminalOptions {
  name: string;
  pty: Pseudoterminal;
}

interface Pseudoterminal {
  onDidWrite: Event<string>;
  onDidOverrideDimensions?: Event<TerminalDimensions | undefined>;
  onDidClose?: Event<void>;
  open(initialDimensions: TerminalDimensions | undefined): void;
  close(): void;
  handleInput?(data: string): void;
  setDimensions?(dimensions: TerminalDimensions): void;
}

以下是一些重大變更

  • 擴充功能終端機現在的完成方式與一般終端機非常相似,只是使用不同的選項物件。這也消除了透過 TerminalRenderer.terminal 混淆存取 Terminal 物件的問題。
  • 作業系統處理序的概念已消失,而且必須傳回結束代碼。Pseudoterminal 可以簡單地關閉終端機,所有錯誤顯示/通知都由擴充功能驅動。
  • Pseudoterminal.open 會以初始維度 (如果可用) 呼叫 (終端機面板先前已顯示)。

以下是一個簡單的範例,說明如何執行簡單的終端機,以回應您的輸入

const writeEmitter = new vscode.EventEmitter<string>();
let line = '';
const pty = {
  onDidWrite: writeEmitter.event,
  open: () => writeEmitter.fire('Type and press enter to echo the text\r\n\r\n'),
  close: () => {},
  handleInput: (data: string) => {
    if (data === '\r') {
      writeEmitter.fire(`\r\necho: "${line}"\r\n\n`);
      line = '';
    } else {
      line += data;
      writeEmitter.fire(data);
    }
  }
};
const terminal = vscode.window.createTerminal({ name: `My Extension REPL`, pty });
terminal.show();

我們希望能夠穩定此功能,並相對快速地移除已淘汰的終端機轉譯器,可能在 v1.38 和 v1.39 之間。

vscode.CustomExecution2

此 API 是 vscode.CustomExecution 的演進。它使用新的改良式 vscode.Pseudoterminal,讓工作提供者能夠建立工作,讓擴充功能內的程式碼完全控制終端機,而不只是執行指令碼或處理序。

export class CustomExecution2 {
  /**
   * @param process The [Pseudoterminal](#_Pseudoterminal) to be used by the task to display output.
   * @param callback The callback that will be called when the task is started by a user.
   */
  constructor(callback: (thisArg?: any) => Thenable<Pseudoterminal>);

  /**
   * The callback used to execute the task. Cancellation should be handled using
   * [Pseudoterminal.close](#_Pseudoterminal.close). When the task is complete fire
   * [Pseudoterminal.onDidClose](#_Pseudoterminal.onDidClose).
   */
  callback: (thisArg?: any) => Thenable<Pseudoterminal>;
}

vscode.commands.onDidExecuteCommand

有一個新的事件會在每次執行命令時觸發,而事件的承載會識別命令和引數。

export interface CommandExecutionEvent {
  command: string;
  arguments: any[];
}
export namespace commands {
  /**
   * An event that is emitted when a [command](#_Command) is executed.
   */
  export const onDidExecuteCommand: Event<CommandExecutionEvent>;
}

Webview.toWebviewResource 和 Webview.cspSource

先前建議的 Webview.resourceRoot API 已重新設計。

現在 webview 上有兩個建議的屬性

  • Webview.toWebviewResource - 將本機檔案系統的 URI 轉換為可在 webview 內使用的 URI。

    對於桌面 VS Code,這會將 file: URI 轉換為 vscode-resource: URI。

  • Webview.cspSource - webview 資源的內容安全性原則來源。

    對於桌面 VS Code,這會是字串 vscode-resource:

const panel = vscode.window.createWebviewPanel(
  CatCodingPanel.viewType,
  'Cat Coding',
  vscode.ViewColumn.One,
  {
    // Restrict the webview to only loading local content from our extension's `media` directory.
    localResourceRoots: [vscode.Uri.file(path.join(extensionPath, 'media'))]
  }
);

const imagePath = vscode.Uri.file(path.join(extensionPath, 'media'));

panel.html = `<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${
      panel.webview.cspSource
    } https:;">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cat Coding</title>
</head>
<body>
    <img src="${panel.webview.toWebviewResource(imagePath)}/cat.gif" width="300" />
</body>
</html>`;

工程

移除 VS Code 程式碼庫中的 suppressImplicitAnyIndexErrors

當我們為 VS Code 的來源啟用嚴格的 Null 檢查時,我們也在 TypeScript 編譯器中開啟了 "suppressImplicitAnyIndexErrors": true。此設定允許對值使用方括號存取器,即使值的類型沒有明確的索引存取簽章也一樣。

這是有問題的,因為它很容易最終隱藏 TypeScript 可能已捕捉到的錯誤

const map = new Map()
map.set('property', true);

...

if (map['property']) { // This is not an TS error but it does not do what you want!
    doImportantStuff();
}

在此迭代中,我們移除了 suppressImplicitAnyIndexErrors 解決方法,並修正了它所抑制的大約 250 個錯誤。兩個最常見的修正方式是新增明確的索引簽章,以及切換為使用適當的 Map 類型來儲存對應,而不是使用物件常值。

基於格線的工作台版面配置進度

在此里程碑中,我們繼續努力,從幾個里程碑前開始進行基於格線的工作台版面配置。一旦我們的初始解決方案完成,新版本的工作台應該會以類似的方式運作,但它在新增新的版面配置選項和功能方面會更具彈性。

我們正在測試的一項新行為是能夠將終端機一路向上拖曳,完全隱藏編輯器。目前,版面配置仍處於旗標 workbench.useExperimentalGridLayout 後方。我們在上一個里程碑中預設在 Insiders 中啟用它,並將在下一個里程碑中繼續。

持續探索以 iframe 為基礎的 webview

我們繼續探索使用一般 iframe 來託管 VS Code 的 webview。作為此工作的一部分,我們現在支援在唯一來源中載入每個以 iframe 為基礎的 webview。這可確保來自多個擴充功能的 webview 無法相互影響。

您現在也可以在桌面 VS Code 中啟用以 iframe 為基礎的 webview,方法是設定:"webview.experimental.useExternalEndpoint": true。請注意,目前使用以 iframe 為基礎的 webview 需要網際網路連線。雖然以 iframe 為基礎的 webview 仍處於實驗階段,但我們希望 webview 擴充功能作者提供意見反應,說明當使用以 iframe 為基礎的 webview 執行時,您的擴充功能哪些部分無法運作。

新文件

遠端開發教學課程

有新的入門教學課程,引導您逐步執行搭配遠端開發擴充功能執行 Visual Studio Code 的程序。

值得注意的修正

  • 422:還原最大化視窗時保留視窗大小
  • 70371:emmet 索引標籤完成功能在大型檔案中速度緩慢
  • 76922:側邊列檢視的順序會跨所有視窗持續存在
  • 76989:停用擴充功能不適用於擴充功能偵錯
  • 77110:偵錯整合式終端機支援未取得預設終端機
  • 77926:輸入 "string;" 有時會插入 "strings;"

感謝您

最後但同樣重要的是,非常感謝!下列人士協助讓 VS Code 變得更好

vscode 的貢獻

對我們的 issue 追蹤的貢獻

如果您想協助我們管理湧入的問題,請參閱我們的社群問題追蹤頁面。

language-server-protocol 的貢獻

debug-adapter-protocol 的貢獻

vscode-generator-code 的貢獻

vscode-vsce 的貢獻

inno-updater 的貢獻

localization 的貢獻

有超過 800 位「雲端 + AI 本地化」社群成員使用 Microsoft 本地化社群平台 (MLCP),其中約有 100 位活躍貢獻者投入 Visual Studio Code。我們感謝您的貢獻,無論是提供新的翻譯、對翻譯進行投票,或是建議流程改進。

以下是貢獻者的快照。如需專案詳細資訊 (包括貢獻者名稱清單),請造訪專案網站:https://aka.ms/vscodeloc

  • 波士尼亞文: Ismar Bašanović、Ernad Husremovic。
  • 保加利亞文: Hristiqn Hristov、Іван Іванов、Любомир Василев、Gheorghi Penkov。
  • 捷克文: Tadeáš Cvrček、Daniel Padrta、David Jareš、Jan Hajek、Jakub Stibůrek、Michal Franc、Jan Kos、Radim Hampl、Jiří Hofman、Samuel Tulach、Jan Brudný。
  • 丹麥文: René Pape、Lasse Stilvang、Allan Kimmer Jensen、Lars Vange Jørgensen、Alexander Matzen、Martin Liversage、Johan Fagerberg、Thomas Larsen、Anders Lund、Anton Ariens。
  • 荷蘭文: Leroy Witteveen、Maxim Janssens、Luc Sieben、Hans Zoons、Jos Verlinde、Eric Algera、Damien van Gageldonk、Maxim Van Damme、Sven Klaasen、Tom Meulemans、Sujith Quintelier。
  • 英文 (英國): Martin Littlecott、Alexander Ogilvie、Tobias Collier、William Wood、Fabio Zuin、Mohit Nain、Dan Jacobs、Sulkhan Ninidze、Giorgi Jambazishvili、alshyab wa3ed、YASHU MITTAL、Tejas kale、Mohammad Idrees、Chris Dias。
  • 芬蘭文: Petri Niinimäki、Kiti Suupohja、Lasse Leppänen、Sebastian de Mel、Riku Riikonen、Valtteri Vatanen。
  • 法文: Antoine Griffard、Thierry DEMAN-BARCELÒ、Corwin D'Ambre、Mohamed Sahbi、Rodolphe NOEL、Maxime Coquerel、Steven Dugois、Cédric M.、Michael VAUDIN、Bastien Boussouf、franto。
  • 德文: Julian Pritzi、Jakob von der Haar、Frank Lindecke、Dejan Dinic、Florian Erbs、Patrick Burke、Mario Koschischek、Florian Berger、Christof Opresnik、Hans Meiser、Carsten Kneip、Ettore Atalan、Thorsten Hans、Meghana Garise、Sebastian Seidl。
  • 希臘文: Δημήτρης Παπαϊωάννου、Sotiris Koukios-Panopoulos、Jim Spentzos、Θοδωρής Τσιρπάνης、Stratos Kourtzanidis、Charalampos Fanoulis、John D、Vassilis Vouvonikos。
  • 希伯來文: חיים לבוב、Shalom Craimer、Matan Amos、Eyal Ellenbogen、Snir Broshi、Kyle Orin。
  • 印地文: Satish Yadav、Amit Gusain、Sanyam Jain、Abhirav Kushwaha、Ashok Kumar Rathore、nirav adatiya、Rajeev Desai、shaswat rungta、Kumar Vaibhav、Pramit Das、Jagjeet Singh、Pratishek PII、Kiren Paul、Chethana S、Kishan K、Dhanvi Kapila。
  • 匈牙利文: Levente Borbély、Péter Nagy、Levente Hallai Seiler、Dániel Tar、Richard Borcsik、Boldi Kemény。
  • 簡體中文: Tingting Yi、斌 项、paul cheung、Yiting Zhu、建东 薛、feiyun0112 feiyun0112、Joel Yang、刘瑞恒 刘瑞恒、Edi Wang、Junzhe Liu、Dave Young、张锐、Yizhi Gu、Fan Su、昊宇 周、Justin Liu、Pluwen、Tony Xia、Yu Zhang、XIANG ZUO、少民 谈、彦佐 刘、Zhiqiang Li、福永 叶、G.Y. Z、Hao Hu、志乐 龚、meng shao、Horie Yuan、Xiangrui Kong、Liam Kennedy、王文杰、赵畅畅、松阳 樊、anson zhang、Young Bige、Shi Liu、Wang Debang、Jessica Zhang、Licheng Ren、驰 雷、sun qing、xiong Fu、Lynne Dong、zhao yu、吉姆 舒、红东 黄、游 尤、剑秋 陶、Hanlin Yang、 、bh wu、Bravo Yeung、Michael Zhang、Hanyu ZHANG、Y F、WangCG duoduobear、ziqiang sun、越 郑、正元 刘、Jiang LI、擎 钟、peng wei、涛 徐、逍遥 许、Charles Lee、瑜 周、WL、伟 全、rsy iridescent、Simon Chan、海龙 黄、仁松 陈、Jieting Xu、panda small、翼 张、Chen Yang、Wang Weixuan、舜杰 杨、Ludi Fang、雨齐 刘、建 周、涛 罗、cuibty wong、立飞 李、LI ZHAO、九鼎 谭。
  • 繁體中文: 謝政廷、Winnie Lin、LikKee 瀝祺 Richie、Martin Lau、Jeremy、奕濬 潘、小克、煾 雪。
  • 印尼文: Jakka Prihatna、Septian Adi、Arif Fahmi、Laurensius Dede Suhardiman、maziyank、Heston Sinuraya、Hendra Widjaja、Don Nisnoni、Rachmat Wahidi、Franky So、Bervianto Leo Pratama、Eriawan Kusumawardhono、Rifani Arsyad、Afnizar Nur Ghifari、Christian Elbrianno、Pradipta Hendri、Azhe Kun。
  • 義大利文: Alessandro Alpi、Bruni Luca、Luigi Bruno、Andrea Dottor、Riccardo Cappello、Aldo Donetti、andrea falco、Emanuele Meazzo、Michael Longo、Marco Dal Pino。
  • 日文: EbXpJ6bp -、nh、Kyohei Uchida、Yoshihisa Ozaki、Hasefumi、TENMYO Masakazu、Takayuki Fuwa、Michihito Kumamoto、Koichi Makino、Seiji Momoto、Aya Tokura、Yosuke Sano、Makoto Sakaguchi、Kyohei Moriyama、裕子 知念、Rie Moriguchi、Fujio Kojima、美穂 山本、taniokae、太郎 西岡、Hiroomi Kurosawa、Kazuya Ujihara、Yasuaki Matsuda。
  • 韓文: Hongju、우현 조、Jong Heun Shin、형섭 이、Kyunghee Ko、Youngjae Kim、siin lee、Jae Yong Kum、Hoyeon Han、Kevin Lee、SeungJin Jeong、Hong Kwon。
  • 拉脫維亞文: Kaspars Bergs、Andris Vilde。
  • 立陶宛文: Andrius Svylas、Augustas Grikšas、Tautvydas Derzinskas、Karolis Kundrotas、Martynas J..
  • 挪威文: Andreas Rødland、Cookius Monsterius、Dag H. Baardsen、Ole Kristian Losvik、Stephan Eriksen。
  • 波蘭文: Warchlak、Wojciech Maj、Marcin Weksznejder、Rafał Całka、Tomasz Świstak、Tomasz Wiśniewski、Marek Biedrzycki、Szymon Seliga、Michal Szulc、Jakub Żmidziński、Bartek PL、Igor 05、Rafał Wolak、Tomasz Chojnacki、Piotr Grędowski、Czech Kaczmarek、Artur Pelczar、Marcin Floryan、Paweł Modrzejewski、Jakub Jedryszek、‎Michał Stojke、Artur Zdanowski。
  • 葡萄牙文 (巴西): Alessandro Trovato、Thiago Dupin Ugeda、Weslei A. de T. Marinho、Rafael Lima Teixeira、Gerardo Magela Machado da Silva、Marcos Albuquerque、Loiane Groner、Alessandro Fragnani、Judson Santiago、Andrei Bosco、Fábio Corrêa、Roberto Fonseca、Fabio Lux、Emmanuel Gomes Brandão、Guilherme Pais、Rodrigo Vieira、André Gama。
  • 葡萄牙文 (葡萄牙): Ana Rebelo、Nuno Carapito、Pedro Daniel、Pedro Teixeira、João Carvalho、Diogo Barros、José Rodrigues、Sandro Pereira、Vitor Barbosa、Tiago Antunes。
  • 羅馬尼亞文: Mihai Marinescu、Stefan Gabos、Alexandru Staicu。
  • 俄文: Andrey Veselov、Дмитрий Кирьянов、michael v、Иван Лещенко、nata kazakova、Анатолий Калужин、Валерий Батурин、Эдуард Тихонов。
  • 塞爾維亞文: Milos Zivkovic、Radovan Skendzic。
  • 西班牙文: Andy Gonzalez、Alvaro Enrique Ruano、Engel Aguilar、Carlos Mendible、José María Aguilar、David Fernández Aldana、Ricardo Rubio、Thierry DEMAN、julian3xl、Ing. Sergio Uziel Tovar Lemus、Mario Mendieta、Jorge Serrano Pérez、Ricardo Estrada Rdez。
  • 瑞典文: Johan Spånberg、Notetur Nomen。
  • 坦米爾文: Merbin J Anselm、Kondasamy Jayaraman、Mani M、Boopesh Kumar、Vignesh Rajendran、Jeyanthinath Muthuram、Jaganathan B、Nithun Harikrishnan、Purusothaman Ramanujam、Krishna Pravin、Jeffin R P、Karunakaran Samayan、Vetri ..
  • 土耳其文: Meryem Aytek、BlueAngel-MG、Fıratcan Sucu、Ahmetcan Aksu、Ömer Sert、Mehmet Yönügül、Anıl MISIRLIOĞLU、Sinan Açar、Misir Jafarov、Umut Can Alparslan、Yakup Ad、Hüseyin Fahri Uzun、S. Ferit Arslan、Mesut Pişkin、Okan Çetin、Bruh Moment、Muhammed Emin TİFTİKÇİ、Burak Göksel。
  • 烏克蘭文: Dmytro Kutianskyi、Arthur Murauskas、Sviatoslav Ivaskiv、Yaroslav Y、George Molchanyuk、Did Kokos、Alexander Varchenko、Вадим Шашков、Евгений Коростылёв。
  • 越南文: Khôi Phạm、Van-Tien Hoang、Belikhun、Việt Anh Nguyễn、Spepirus Shouru、Vuong Bui、Chủ Tất。