Monaco Editor使用时右键功能菜单汉化

背景

某天产品要求在项目的某个页面添加一个代码编辑器,包含编辑器常见的功能。看完需求,想到了强大的Monaco Editor。按照官方文档进行配置开发,就在自己觉得大功告成之际,右击编辑框,发现功能菜单是英文状态,然后就开启了我的右键功能菜单汉化之路。
06f57226309c4277bb7f44d09f6c842d~tplv-73owjymdk6-watermark

问题剖析

在Monaco Editor的整个使用配置过程中,我没有添加关于本地语言的配置,所以目前使用的应该是默认配置。
所以目前解决问题的思路是:

  1. 查看官方API文档寻找关于本地语言的配置
  2. 寻找可以进行本地语言配置的第三方插件/库

按照以上思路首先在Monaco Editor官方文档中进行一番搜索尝试无果后,开始转向相关第三方插件/库的寻找,最终找到了monaco-editor-esm-webpack-plugin和monaco-editor/loader

解决方案

方案一:使用monaco-editor-esm-webpack-plugin

依赖下载

1npm install monaco-editor-esm-webpack-plugin --save-dev 2 3npm install monaco-editor monaco-editor-webpack-plugin monaco-editor-nls

vue.config.js文件

1const MonacoWebpackPlugin = require('monaco-editor-esm-webpack-plugin'); 2configureWebpack: { 3 plugins: [ 4 new MonacoWebpackPlugin() 5 ] 6}

xx.vue文件

1import { setLocaleData } from 'monaco-editor-nls'; 2import zh_CN from 'monaco-editor-nls/locale/zh-hans'; 3setLocaleData(zh_CN); 4// 先汉化语言,再加载monaco才能汉化成功,使用import方式无法汉化 5// 需要使用require方式引入monaco-editor 6const monaco = require('monaco-editor/esm/vs/editor/editor.api'); 7 8monaco.editor.create(document.getElementById('root'), { language: 'xml' });

效果图如下:
e2b00154a73941b5bdc9f3fe2949e040~tplv-73owjymdk6-watermark

从效果图我们发现功能菜单的”命令面板“是中文的了,但是”Copy“还是英文

方案二:使用monaco-editor/loader

依赖下载

npm install @monaco-editor/loader

xx.vue

1import loader from '@monaco-editor/loader'; 2loader.config({ 'vs/nls': { availableLanguages: { '*': 'zh-cn' } } }); // availableLanguages中可以配置想要的语言,例如de、zh-cn等 3loader.init().then(monaco => { 4 monaco.editor.create(document.querySelector("#mxlContainer"), { 5 value: '<params></params>', 6 language: 'xml', 7 }); 8});

至此已经完成。浏览下效果图 aa59dee66cd74dc9b4078a45c978095a~tplv-73owjymdk6-watermark 从效果图来看已经达到了我们的目标。但仔细看上方代码发现我们用的monaco实例是monaco-editor/loader自动从CDN下载后返回的,
如果我们想通过npm包的方式使用应该怎么做呢?废话不多说,直接上代码

1import loader from '@monaco-editor/loader'; 2import * as monaco from 'monaco-editor'; 3// 通过config方法我们可以配置我们使用的资源是通过非CDN方式引入 4loader.config({ monaco }); 5// 需要注意本地语言(locales)的配置一定放在loader.config({ monaco })后边,否则设置的locales会被npm包的monaco配置覆盖,导致设置locales失败 6loader.config({ "vs/nls": { availableLanguages: { "*": "zh-cn" } } }); 7loader.init().then(monacoInstance => { 8 // 通过loader.config({monaco})的配置后,此处的monacoInstance其实是我们 import * as monaco from 'monaco-editor'进来的npm包 9 monacoInstance.editor.create(document.querySelector("#mxlContainer"), { 10 value: '<params></params>', 11 language: 'xml', 12 }); 13});

版本

"monaco-editor": "^0.30.1"
"monaco-editor/loader": "^1.3.2"
"node": "v14.15.4"
"webpack": "v4.28.4"

小结

monaco-editor/loader会自动处理配置和加载monaco源码,并且它的使用方式与项目打包方式解耦,只需在需要使用的文件中引入即可。使用方式灵活,适用范围更加广阔。

点赞
收藏

评论区

加载中...

相关推荐

仿Windows下记事本小程序

在Windows操作系统中,记事本是一个小的应用程序,采用一个简单的文本编辑器进行文字信息的记录和存储。请仿照Windows的记事本,开发一个属于自己的记事本(Notepad)功能记事本的应该具备的功能,基本要求如下:(1)菜单栏中包含文件、编辑、查看和帮助菜单,具体如下图所示。(2)文件菜单中具有新建、打开、保存、另存为、打印和退出功能,具体如

10 个非常酷的基于jQuery的菜单效果插件

除了直观的界面效果外,炫酷的网站导航菜单或右键菜单也能为访问者带来眼前一亮的感觉。本文为你带来10个非常酷的基于jQuery的菜单效果插件。 1. 右击菜单 一个创建右击菜单的插件,简洁且易用。 !(http://static.oschina.net/uploads/img/201112/20185535_

TDD 测试驱动开发

测试驱动开发,英文全称TestDrivenDevelopment,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。1概述KentBeck先生最早在其极限编程(XP)方法论中,向大

MouseBoost Pro for Mac(右键扩展助手专业版)

是一款专为Mac平台开发的鼠标增强工具,其主要特点如下:1.可自定义菜单:MouseBoostMac右键助手允许用户自定义右键菜单,可以添加或删除菜单项,以适应不同用户的需求。2.多种快捷操作:MouseBoostMac右键助手支持多种快捷操作,例如剪切、

MouseBoost Pro for Mac(右键助手专业版) 3.3.1激活版

是一款专为Mac平台开发的鼠标增强工具,其主要特点如下:1.可自定义菜单:MouseBoostMac右键助手允许用户自定义右键菜单,可以添加或删除菜单项,以适应不同用户的需求。2.多种快捷操作:MouseBoostMac右键助手支持多种快捷操作,例如剪切、

MouseBoost Pro for Mac(右键助手专业版) 3.3.2激活版

是一款专为Mac平台开发的鼠标增强工具,其主要特点如下:1.可自定义菜单:MouseBoostMac右键助手允许用户自定义右键菜单,可以添加或删除菜单项,以适应不同用户的需求。2.多种快捷操作:MouseBoostMac右键助手支持多种快捷操作,例如剪切、

Monaco Editor使用时右键功能菜单汉化 - HelloWorld