第一次接触TinyMCE的开发者经常会遇到一个头疼的问题——编辑器界面全是英文。这就像给不懂英文的用户一台全英文界面的相机,虽然功能强大但用起来特别别扭。别担心,TinyMCE官方提供了完善的多语言支持,其中就包括我们最需要的中文语言包(zh_CN.js)。
要获取中文语言包,最正规的途径是访问TinyMCE官网的语言包下载页面。不过在实际开发中,我发现官网下载有两个小问题:一是国内访问速度较慢,二是需要注册账号。所以很多开发者会选择直接复制现成的语言包代码,就像文章开头提供的那样。
基础配置其实特别简单,只需要在TinyMCE初始化时加入language选项即可:
javascript复制tinymce.init({
selector: '#mytextarea',
language: 'zh_CN',
language_url: '/path/to/zh_CN.js'
});
这里有个小技巧:如果语言包文件放在项目根目录下,可以省略language_url参数,TinyMCE会自动查找对应语言文件。但建议还是显式指定路径,这样加载更可靠。
官方提供的中文翻译已经很完善了,但有时候我们可能需要调整某些术语的翻译。比如在医疗系统中,"Paste"翻译成"粘贴"可能不如"粘贴病历"更贴切。这时候可以这样覆盖默认翻译:
javascript复制tinymce.addI18n('zh_CN', {
"Paste": "粘贴病历",
"New document": "新建病历文档"
});
我做过一个项目,客户要求把所有"Document"都改成"报告",用这个方法几分钟就搞定了所有相关术语的替换。
有些内容不是静态文本,而是包含变量的动态字符串。比如字数统计提示"Words: {0}"。对于这类内容,语言包中是这样定义的:
javascript复制"Words: {0}": "字数:{0}",
"{0} words": "{0} 字"
在插件开发中,如果需要添加新的本地化字符串,记得保留这种变量占位符的格式。我曾经遇到过因为漏掉占位符导致数字显示异常的问题,排查了半天才发现是语言包格式不对。
TinyMCE的插件默认也会使用语言包中的翻译,但有些第三方插件可能需要单独处理。比如一个叫"awesome-plugin"的插件,它的按钮文字可能不在主语言包中。这时我们需要这样扩展语言包:
javascript复制tinymce.addI18n('zh_CN', {
"awesome-plugin.button": "炫酷功能",
// 主语言包的其它内容...
});
去年我在一个电商项目中使用图片编辑器插件时,就遇到了插件按钮没有汉化的问题。通过查看插件源码找到对应的key,很快就解决了这个问题。
语言包文件虽然不大,但在弱网环境下仍然可能影响加载速度。我常用的优化方案有:
这里有个实际案例:某医疗系统的后台在偏远地区使用时,编辑器加载很慢。我们把语言包从单独文件改为内联后,加载时间缩短了40%。
如果发现编辑器还是显示英文,首先检查:
我常用的调试方法是直接在浏览器地址栏输入语言包URL,看看能否正常访问。如果返回404,那肯定是路径问题;如果能访问但还是英文,就要检查语言包内容了。
有时候只有部分内容被翻译了,这通常是因为:
建议的解决方案是:
记得去年升级TinyMCE 5.x时,就遇到了表格插件新增功能没有翻译的情况。后来下载了最新版语言包就解决了。
中文引号、破折号等特殊字符在语言包中使用Unicode转义表示,比如\u201c表示左引号。如果看到显示的是转义字符本身而不是对应的符号,可能是编码问题。确保:
<meta charset="UTF-8">曾经有个客户反馈编辑器里所有引号都显示成\u201c这样的代码,最后发现是Nginx配置漏了charset设置,加上charset utf-8;就正常了。