如何为CKEditor 4.6所有插件维护统一语言文件夹(生产环境部署)
嘿,刚好折腾过CKEditor 4的语言配置,给你分享两种在生产环境里实现统一语言文件夹的靠谱方法:
方法一:统一存放插件语言文件,修改加载路径
这种方法适合想保留每个插件独立语言文件的情况,只是把它们从各自插件的lang目录移到统一位置:
创建统一语言目录
在CKEditor的根目录下新建一个文件夹,比如unified-lang,然后按语言代码创建子文件夹(比如en、zh-cn),接着把每个插件的语言文件(比如plugins/link/lang/en.js)移动到unified-lang/en/link.js,以此类推,所有插件对应语言的文件都放到对应语言的子文件夹里。修改CKEditor配置,指定语言文件路径
在你的config.js里添加以下配置,告诉CKEditor去哪里找统一存放的语言文件:CKEDITOR.on( 'pluginsLoaded', function() { // 覆盖插件语言文件的加载路径 CKEDITOR.plugins.langLoader = function( plugin, language ) { // 自定义路径:统一语言文件夹/语言代码/插件名.js var langPath = CKEDITOR.getUrl( 'unified-lang/' + language + '/' + plugin + '.js' ); CKEDITOR.scriptLoader.load( langPath ); }; }); // 设置默认语言(根据你的需求修改) config.language = 'zh-cn';这段代码会替换CKEditor默认的语言文件加载逻辑,让它从你新建的
unified-lang目录里读取对应插件的语言文件。清理旧语言文件(可选)
确认新配置生效后,可以删掉各个插件目录下的lang文件夹,减少冗余文件。
方法二:合并所有插件语言为单个文件
如果想进一步优化加载性能,建议把同一语言的所有插件语言合并成一个文件:
合并语言文件
比如针对中文(zh-cn),新建unified-lang/zh-cn.js,然后把所有插件的zh-cn.js里的内容合并进去。注意:每个插件的语言定义是CKEDITOR.plugins.setLang('插件名', '语言代码', { ... }),直接把这些代码依次复制到合并后的文件里就行,不需要修改结构。配置CKEditor加载合并后的语言文件
在config.js里添加:// 先加载合并后的语言文件 CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( 'unified-lang/' + config.language + '.js' ) ); // 禁用默认的插件语言加载逻辑,避免重复加载 CKEDITOR.plugins.langLoader = function() {}; config.language = 'zh-cn';这样CKEditor会先加载你合并好的语言文件,里面已经包含了所有插件的语言定义,就不会再去各个插件目录找语言文件了。
注意事项
- 生产环境建议开启CKEditor的压缩功能,把配置和语言文件一起打包,提升加载速度。
- 如果有自定义插件,同样把它们的语言文件放到统一目录或者合并到对应语言文件里就行。
- 测试的时候记得清空浏览器缓存,避免旧的语言文件干扰。
内容的提问来源于stack exchange,提问作者mariappan k

