【解决方案】在Vue、HTML项目中使用@spacechart/translate 插件实现在线实时翻译、自定义翻译


@SpaceChart/Translate


@SpaceChart/Translate 是一个可配置的翻译插件,适用于任何环境,让开发者不再需要注重插件本身;插件支持自定义翻译引擎,快速生成对应的AI翻译模型客户端插件


Repository

Browser Support

ChromeFirefoxSafariOperaEdgeIE
Latest ✔Latest ✔Latest ✔Latest ✔Latest ✔11 ×

Installing

Package manager

Using npm:

$ npm install @spacechart/translate

Using bower:

$ bower install @spacechart/translate

Using yarn:

$ yarn add @spacechart/translate

Using pnpm:

$ pnpm add @spacechart/translate

CDN

Using jsDelivr CDN (ES5 UMD browser module):

<script src="https://cdn.jsdelivr.net/npm/@spacechart/translate@1.0.1/dist/translate.min.js"></script>

Using unpkg CDN:

<script src="https://unpkg.com/@spacechart/translate@1.0.1/dist/translate.min.js"></script>

Create Your first translate project

Initialize Node.js project

node init -y

Install dependencies

npm install @spacechart/translate

Introducing dependencies

const { DeeplxTranslateEngine, TranslateEngineInstance } = require("@spacechart/translate");

const engine = new TranslateEngineInstance(
    new DeeplxTranslateEngine({
        //...
    })
);

engine
    .translate({
        text: "你好世界"
    })
    .then((res) => {
        console.log("---翻译结果", res.data);
    });

Translate engines

开发者可以通过实现 ITranslateEngine 接口创建自定义翻译引擎,也可以使用内置的翻译引擎,比如Deeplx(DeeplxTranslateEngine

Deeplx

实现类:DeeplxTranslateEngine

const { DeeplxTranslateEngine, DeeplxLanguage } = require("@spacechart/translate");

const enine = new DeeplxTranslateEngine({
    //....
});

//发送请求
engine
    .translate({
        //....
    })
    .then((res) => {
        consoe.log("-----翻译结果", res);
    });

Custom Engine

接口类:ITranslateEngine

export class MyTranslateEngine implements ITranslateEngine {
    //单个翻译请求
    singleTranslate(options: TranslateConfigOption): Promise<TranslateResponseOption> {
        //....
    }

    //批量翻译请求
    branchTranslate(options: TranslateConfigOption[]): Promise<TranslateResponseOption[]> {
        //....
    }

    //单个或多个请求
    translate(
        options: TranslateConfigOption | TranslateConfigOption[]
    ): Promise<TranslateResponseOption> | Promise<TranslateResponseOption[]> {
        //....
    }
}

const enine = new MyTranslateEngine();

enine.translate({
    //...
});

TranslateEngineInstance Class

除了使用对应的翻译引擎类外,插件还提供了TranslateEngineInstance类,它同样继承了ITranslateEngine接口,TranslateEngineInstance 通过多态的特点,让开发者可以随意的更换引擎,而不用更改已编写的代码(如下)

const { DeeplxTranslateEngine, TranslateEngineInstance } = require("@spacechart/translate");

const enine = new TranslateEngineInstance(
    new DeeplxTranslateEngine({
        //..
    })
    //更换引擎,下面的translate无需更换
    // new MyTranslateEngine({
    //    //..
    // })
);

enine
    .translate({
        //....
    })
    .then((res) => {
        consoe.log("-----翻译结果", res);
    });

Extention Plugins

Vue Plugin

Vue 插件通过TranslateVuePlugin类创建使用,支持v-not-translate指令排除需要翻译的文本(如下)

Options

属性类 VuePluginDefaultConfigOption

字段是否必填类型描述
engineITranslateEngine翻译引擎
elstring需要翻译的顶级节点
globalboolean是否全局注入$t全局插件变量 ,默认false
Methods
方法名描述
install(app: any, options: VuePluginDefaultConfigOption)Vue.directive注册指令时使用
create(options: VuePluginDefaultConfigOption) 创建 VuePlugin 插件使用
Example
1. main.js
import Vue from "vue";
import App from "./App.vue";

import { DeeplxTranslateEngine, TranslateVuePlugin } from "@spacechart/translate";

Vue.config.productionTip = false;
Vue.use(TranslateVuePlugin, {
    //翻译引擎
    engine: new DeeplxTranslateEngine({
        url: "/translate",
        authorization: "xx xx"
    }),
    //需要翻译的节点
    el: "#app"
});

new Vue({
    render: (h) => h(App)
}).$mount("#app");
2. App.vue
<template>
    <div id="app">
        <img alt="Vue logo" src="./assets/logo.png" />

        <HelloWorld msg="Welcome to Your Vue.js App" />
        <div class="div">
            你好 yes
            <div class="div" v-not-translate>How are you?</div>
        </div>
    </div>
</template>

<script>
    import HelloWorld from "./components/HelloWorld.vue";

    export default {
        name: "App",
        components: {
            HelloWorld
        },
        data() {
            return {};
        },
        mounted() {
            setTimeout(() => {
                this.$t.translate({
                    src: "EN",
                    target: "ZH",
                    languageMap: [
                        {
                            src: "EN",
                            target: "ZH",
                            srcText: "你好",
                            targetText: "Hello"
                        }
                    ]
                });
            });
        }
    };
</script>

HTML Plugin

HTML 插件通过TranslateHTMLPlugin类创建使用,支持not-translate属性排除需要翻译的文本(如下)

Options

属性类:HtmlPluginDefaultConfigOption

字段是否必填类型描述
engineITranslateEngine翻译引擎
elstring需要翻译的顶级节点
Methods
方法名描述
create(options: HtmlPluginDefaultConfigOption)创建 HtmlPlugin 插件使用
Example
index.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <script src="../../dist//translate.js"></script>
    </head>
    <body>
        <div id="app">你好</div>
        <script>
            const { TranslateHTMLPlugin, DeeplxTranslateEngine } = translate;
            const plugin = TranslateHTMLPlugin.create({
                engine: new DeeplxTranslateEngine({
                    url: "/translate",
                    authorization: "xx xx"
                }),
                el: "#app"
            });

            plugin.translate({
                src: "ZH",
                target: "EN"
            });
        </script>
    </body>
</html>
  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 `@wangeditor/editor-for-vue` 插件使用自定义插件重写 `deleteBackward` API,您可以按照以下步骤进行操作: 1. 首先,创建一个自定义插件,可以命名为 `customDeletePlugin.js`。 2. 在插件,引入 `Editor` 对象并重写 `deleteBackward` API。您可以使用 `editor.cmd.do()` 方法执行删除操作。例如: ```javascript import Editor from "@wangeditor/editor"; const customDeletePlugin = (editor) => { editor.config.customDeletePlugin = true; // 标记该插件已加载 // 重写 deleteBackward API editor.deleteBackward = function () { // 在这里实现自定义的删除逻辑 // ... // 使用 editor.cmd.do() 方法执行删除操作 editor.cmd.do("delete"); }; }; export default customDeletePlugin; ``` 3. 在使用 `@wangeditor/editor-for-vue` 时,加载并启用自定义插件: ```vue <template> <wangeditor ref="editor"></wangeditor> </template> <script> import Editor from "@wangeditor/editor"; import customDeletePlugin from "@/plugins/customDeletePlugin.js"; export default { mounted() { const editor = new Editor(this.$refs.editor); // 加载自定义插件 editor.use(customDeletePlugin); // 启用编辑器 editor.create(); }, }; </script> ``` 通过以上步骤,您就可以在 `@wangeditor/editor-for-vue` 插件使用自定义插件重写 `deleteBackward` API,并实现您所需的删除逻辑。 请注意,以上代码仅为示例,您需要根据实际情况进行相应的修改和适配。希望能帮到您!如果有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Space Chars

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值