TinyMce 4 util.i18n.translate() 用法

TinyMce 4 util.i18n.translate() usage

我尝试了几个小时并使用(非常有用 API documentation :S)来为我的插件工作获取翻译。

tinymce.translate('Cut'); // returns Ausschneiden for de

到目前为止,还不错。

tinymce.translate('myplugin.test'); // returns myplugin.test

我检查了 tinymce.i18n.data 并且可以通过 inspector 看到它包含我用

添加的数据
tinymce.addI18n('de.myplugin', {
    "test": 'test label'
});

之前。

这可能有些愚蠢,但我想不通。

更新

我现在添加了我自己的功能来手动完成它,因为我不知道该怎么做:

plugin_translate = function(val) {
  return (eval('tinymce.i18n.data.' + tinymce.settings.language + '.' + val) != undefined)
  ? eval('tinymce.i18n.data.' + tinymce.settings.language + '.' + val)
  : val;
}

我的 plugin/langs/de.js 看起来像这样

tinymce.addI18n('de', { 'plugin': { "title" : 'Titel' }});

这看起来不对,但目前它可以工作,直到有人启发我。

使用 tinymce.addI18n(langCode, translationMap) or tinymce.util.I18n.add(langCode, translationMap).

注册翻译

第一个参数是语言代码,如 "en"、"en_US" 或 "de"。这应该与用于 language init property 的值相同。请注意,您不应在此处包含插件前缀。

第二个参数是翻译键到翻译对的映射。翻译可以采用位置参数,如 {0}{1}。您应该在您的密钥前加上您的插件名称以避免命名冲突。例如:

{
  "myplugin.test": "test label",
  "myplugin.greeting": "Hello {0}, you are welcome"
}

因此,将所有这些部分组合在一起,您可能会注册英语和德语翻译,例如:

tinymce.addI18n("en", {
    "myplugin.title": "My Plugin",
    "myplugin.greeting": "Hello {0}, you are welcome"
});
tinymce.addI18n("de", {
    "myplugin.title": "Mein Plugin",
    "myplugin.greeting": "Hallo {0}, du bist willkommen"
});

然后使用翻译调用 tinymce.translate(translationKey) 其中 returns 翻译的字符串。对于没有参数的字符串,您可以传递您在地图中使用的相同键。例如:

var title = tinymce.translate("myplugin.title");

如果您的翻译有参数,您必须将密钥封装在一个数组中。例如:

var name = getName(); // get the name from the user
var greeting = tinymce.translate(["myplugin.greeting", name]);

如果出于某种原因您需要覆盖翻译,您可以提供一个带有原始字符串的对象。例如:

var name = getName(); // get the name from the user
var key = name === "James" ? {"raw": "Go away!"} : ["myplugin.greeting", name];
var greeting = tinymce.translate(key);