news 2026/9/28 18:16:12

VSCode插件开发实战:获取系统语言环境与中英文切换配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VSCode插件开发实战:获取系统语言环境与中英文切换配置

1. 为什么插件一上架就被问“怎么是英文”

你写了一个 VSCode 插件,命令面板里全是中文提示,自己用着挺顺。结果海外用户装完发来 issue:菜单看不懂、报错像天书。更尴尬的是,有些用户系统是中文,但 VSCode 显示语言被单独设成了英文,你的插件却还在硬编码中文文案——两边对不上。

这就是 VSCode 插件国际化要解决的核心问题:读取当前语言环境,按语言加载对应文案,并让用户能自己切换。它适合所有准备把插件发布到 Marketplace、或者团队内部多语言协作的开发者。整条链路其实就三件事:拿到vscode.env.language、用 nls 文件组织多语言资源、在package.json里声明本地化入口。下面按可复制的顺序拆开讲,每一步都给完整代码和验证动作。

2. 前置准备:TaoToken 与开发环境

在动手写国际化之前,先把环境理顺。我习惯用 TaoToken 来统一管理模型调用和编码辅助,插件里如果要做 AI 补全、代码解释这类功能,直接走它的 API 就行,不用自己维护多套密钥。

TaoToken 官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=

API 地址(不带 UTM,直接用于代码里):https://taotoken.net/api

如果你只是做纯本地化的语言切换,不涉及模型调用,这一步可以跳过,直接看第 3 节。但如果你打算在插件里加“AI 翻译当前选中文本”这类功能,建议先把 API Key 配好。获取方式:登录后进入控制台,在 API Keys 页面新建一个 key,复制保存。

  • 控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=

开发环境本身只需要 Node.js 18+ 和 VSCode。用官方脚手架起项目:

npm install -g yo generator-code yo code

选择New Extension (TypeScript),生成后目录里会有package.json、src/extension.ts、tsconfig.json。接下来所有改动都围绕这几个文件。

3. 可复制配置:package.json 与 nls 骨架

3.1 package.json 里的本地化声明

VSCode 插件的国际化不是靠运行时判断,而是靠package.json里的l10n字段指向资源目录。先看关键片段:

{ "name": "my-i18n-extension", "displayName": "My I18n Extension", "version": "0.0.1", "engines": { "vscode": "^1.85.0" }, "main": "./out/extension.js", "l10n": "./l10n", "contributes": { "commands": [ { "command": "myI18n.showLang", "title": "%command.showLang.title%" } ] } }

注意"l10n": "./l10n"这一行,它告诉 VSCode 去l10n目录找翻译文件。contributes里的title用%key%占位,实际文案从 nls 文件读取。

3.2 nls 文件骨架

在项目根目录建l10n文件夹,里面放两个文件:

l10n/ bundle.l10n.json bundle.l10n.zh-cn.json

bundle.l10n.json是默认(英文)文案:

{ "command.showLang.title": "Show Current Language", "message.currentLang": "Current language: {0}", "message.switchHint": "Use Configure Display Language to switch." }

bundle.l10n.zh-cn.json是简体中文:

{ "command.showLang.title": "显示当前语言", "message.currentLang": "当前语言:{0}", "message.switchHint": "可通过“配置显示语言”进行切换。" }

文件名规则:bundle.l10n.<locale>.json,locale 用 VSCode 的语言 ID,比如zh-cn、zh-tw、ja、de。{0}是占位符,运行时用参数替换。

3.3 读取系统语言环境

在src/extension.ts里,核心就一行:

import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { const lang = vscode.env.language; console.log('VSCode language:', lang); const disposable = vscode.commands.registerCommand('myI18n.showLang', () => { const msg = vscode.l10n.t('message.currentLang', lang); const hint = vscode.l10n.t('message.switchHint'); vscode.window.showInformationMessage(`${msg} ${hint}`); }); context.subscriptions.push(disposable); }

vscode.env.language返回的是当前 VSCode 显示语言的 ID,比如en、zh-cn、zh-tw。它和系统语言不一定一致——用户在 VSCode 里单独设过显示语言,这里拿到的就是设置后的值。vscode.l10n.t()会根据当前语言自动选对应的 nls 文件,找不到就回退到默认英文。

4. 验证请求:切换语言后看结果

配置写完,按 F5 启动 Extension Development Host。新窗口里按Ctrl+Shift+P,输入Show Current Language,会弹出当前语言。

现在切换语言验证。在开发宿主窗口里按Ctrl+Shift+P,搜索Configure Display Language,选择中文(简体),重启窗口。再次执行命令,应该看到:

当前语言:zh-cn 可通过“配置显示语言”进行切换。

如果切到en,则显示英文。这一步验证了三件事:vscode.env.language读取正确、nls 文件被正确加载、占位符替换生效。

如果你在插件里集成了 TaoToken 的模型调用,可以顺手验证一下 API 是否通。用 curl 测:

curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}] }'

返回正常 JSON 就说明 key 和网络都没问题。模型对话入口:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=

5. 本篇常见错排查

5.1 命令标题还是英文,没跟着切

最常见的原因是package.json里title没写%key%,而是直接写了英文。VSCode 只对%...%形式的占位符做本地化替换。检查contributes.commands[].title是否用了%command.showLang.title%。

5.2 nls 文件名写错,中文不生效

locale 必须和 VSCode 的语言 ID 完全一致。zh-CN不行,要写zh-cn;zh_CN也不行。对照表里简体中文是zh-cn,繁体是zh-tw。文件名大小写敏感,建议全小写。

5.3 改了 nls 文件但没生效

nls 文件在扩展激活时加载,改完要重启 Extension Development Host 窗口,不是热重载。另外确认l10n路径是相对项目根目录的,"./l10n"和"l10n"都可以,但别写成"src/l10n"。

5.4 vscode.l10n.t 报 undefined

vscode.l10nAPI 需要 VSCode 1.73+,并且package.json里engines.vscode要声明^1.73.0或更高。如果版本太低,升级 VSCode 或改用vscode.env.language手动判断。

5.5 用户系统中文但插件显示英文

这通常是因为用户 VSCode 显示语言设成了英文。vscode.env.language返回的是 VSCode 显示语言,不是操作系统语言。这是预期行为——插件应该跟随 VSCode 显示语言,而不是系统语言。如果你确实需要系统语言,得用 Node 的os模块或Intl.DateTimeFormat().resolvedOptions().locale,但那和 VSCode 界面语言可能不一致,慎用。

6. 长期编码与 Agent 场景的接入建议

如果你在做的是长期维护的插件项目,或者要接 Agent 做自动化编码,建议把模型调用统一走 TaoToken 的 Coding Plan,省去自己管理额度和多模型切换的麻烦。接入文档里有完整的 SDK 示例和参数说明。

  • Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
  • 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=

回到国际化本身,最后补一个实用技巧:在activate里把vscode.env.language存到context.globalState,配合vscode.workspace.onDidChangeConfiguration监听语言变化,就能在用户切换语言后不重启也更新界面文案。不过 VSCode 的语言切换本身需要重启窗口,所以这个监听更多是给“插件内部自定义语言偏好”用的——比如你允许用户在插件设置里单独选语言,那就用vscode.workspace.getConfiguration('myI18n').get('language')覆盖vscode.env.language,优先级自己定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 18:13:34

【Oracle】PLSQL程序设计:用 TaoToken 统一 Key 打通 AI 辅助开发配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/28 18:13:01

从3.1代码开始:三步吃透任何一段示例代码的通用方法论

1. 从“3.1代码”说开去&#xff1a;每个章节都是入门的第一道坎很多新手朋友第一次看到“3.1代码”这样的标题时&#xff0c;大概率是在某一本编程教材、一门网课或者一份实验指导书里。第三章第一节&#xff0c;听起来平平无奇&#xff0c;但这往往是第一次真正接触“完整可运…

作者头像 李华
网站建设 2026/9/28 18:11:40

晶晨S905L3A盒子刷机救砖实战:B863AV3.2-M/E900V22C通刷指南

1. 三款盒子的硬件底子与通刷逻辑手里攒了好几台运营商退下来的魔百盒&#xff0c;型号分别是B863AV3.2-M、B863AV3.1-M2和E900V22C&#xff0c;都是晶晨S905L3A/3A-B这颗芯片的方案。这三台机器在二手市场上流通量极大&#xff0c;价格便宜&#xff0c;但原厂系统限制多、广告…

作者头像 李华