ueditor 动态设置多语言

程鸿煊
2023-12-01

i18n 在切换语言时,是不会刷新浏览器的

ueditor 为什么切换不了多语言

f = UE.Editor = function(a) {
        var d = this;
        d.uid = e++, EventBase.call(d), d.commands = {}, d.options = utils.extend(utils.clone(a || {}), UEDITOR_CONFIG,
            !0), d.shortcutkeys = {}, d.inputRules = [], d.outputRules = [], d.setOpt(f.defaultOptions(d)), d.loadServerConfig(),
          utils.isEmptyObject(UE.I18N) ? utils.loadFile(document, {
            src: d.options.langPath + d.options.lang + "/" + d.options.lang + ".js",
            tag: "script",
            type: "text/javascript",
            defer: "defer"
          }, function() {
            UE.plugin.load(d), c(d)
          }) : (d.options.lang = b(UE.I18N), UE.plugin.load(d), c(d)), UE.instants["ueditorInstant" + d.uid] = d
      };

原因在这里:

(d.options.lang = b(UE.I18N)

b方法是在 UE.I18N 中寻找,只要有语言就返回,也就是返回第一个

function b(a) {
      for (var b in a) return b
    }

而我们改变语言时 还是取的第一个

所以我们只要


import "@public/lib/UEditor/lang/zh-cn/zh-cn.js";
import "@public/lib/UEditor/lang/en/en.js";

if (Object.keys(UE.I18N).length > 1) {
      // 浅拷贝 UE.I18N 的属性 到 UE.I18N1
      UE.I18N1 = Object.assign({}, UE.I18N);
    }
    UE.I18N = {};
    // 重新赋值语言
    UE.I18N[this.config.lang] = UE.I18N1[this.config.lang];

即可

当然最优的方式是使用 ueditor的 utils.loadFile 不过等他加载完毕,又给合到了UE.I18N里面,到时候切换多语言还有问题

 类似资料: