# 快速开始

本篇内容在不借助任何 IDE 的情况下编写一个十分简单的翻译插件,你可以在任何平台上操作,下面操作截图均以 MT 管理器为例。

# 创建基础安装包

新建一个空文件夹并进入,再创建文件 manifest.json、文件夹 assetssrc

编辑 manifest.json 文件并填入以下内容,然后保存:

{
  // MT插件系统SDK版本
  // 高版本插件无法安装在低版本插件系统中
  // 目前均填2
  pluginSdkVersion: 2,
  // 插件ID,插件的唯一标识,类似于packageName
  // 只能由字母、数字、下划线和点组成
  pluginID: "bin.mt.plugin.demo",
  // 插件版本号,低版本插件无法覆盖安装高版本插件
  versionCode: 1,

  // 插件版本名称
  versionName: "v1.0",

  // 插件名称
  name: "插件Demo",

  // 插件描述
  description: "这里是插件描述",

  // 对外接口,接口类型会自动判断
  interfaces: []
}

将以上三个文件(夹)以 zip 格式压缩,并改后缀为 .mtp

这样我们就完成了一个最简单的插件,你可以安装它,只是这个插件没有任何功能。

# 实现翻译接口

进入 src 文件夹,创建文件 CaseTranslationEngine.java

编辑该文件并填入以下代码,然后保存:

import android.support.annotation.NonNull;

import java.util.Arrays;
import java.util.List;

import bin.mt.plugin.api.translation.BaseTranslationEngine;

public class CaseTranslationEngine extends BaseTranslationEngine {

    public CaseTranslationEngine() {
        super(new ConfigurationBuilder()
                // 关闭「跳过已翻译词条」
                .setForceNotToSkipTranslated(true)
                .build());
    }

    /**
     * 翻译引擎名称
     */
    @NonNull
    @Override
    public String name() {
        return "大小写转换";
    }

    /**
     * 源语言代码列表
     */
    @NonNull
    @Override
    public List<String> loadSourceLanguages() {
        return Arrays.asList("src");
    }

    /**
     * 目标语言代码列表
     */
    @NonNull
    @Override
    public List<String> loadTargetLanguages(String sourceLanguage) {
        return Arrays.asList("upper", "lower");
    }

    /**
     * 将语言代码转为可视化名称
     * ps: 可能有些人会问为什么这么麻烦,不能直接把可视化名称写在上面吗?
     * 其实这么做主要是考虑到多国语言支持,将语言名称统一在这边处理,这
     * 边不多做演示,具体可以看文档后面关于本地化文本LocalString的介绍。
     */
    @NonNull
    @Override
    public String getLanguageDisplayName(String language) {
        switch (language) {
            case "src":
                return "原文";
            case "upper":
                return "大写";
            case "lower":
                return "小写";
        }
        return "???";
    }

    /**
     * MT在翻译每一个词条时都会调用一次这个方法
     *
     * @param text           待翻译内容
     * @param sourceLanguage 源语言代码
     * @param targetLanguage 目标语言代码
     * @return 翻译结果
     */
    @NonNull
    @Override
    public String translate(String text, String sourceLanguage, String targetLanguage) {
        if (targetLanguage.equals("upper"))
            return text.toUpperCase(); // 转为大写
        else
            return text.toLowerCase(); // 转为小写
    }
}

通过以上代码我们已经实现了一个简单的大小写转换翻译引擎,具体说明请看代码注释。

接着我们还需要在 manifest.json 文件中注册该接口,如下图所示:

因为源码中没有设置包名,所以接口名称填CaseTranslationEngine,如果设置了包名,例如aa.bb,则需要填aa.bb.CaseTranslationEngine

编辑完成后,重新压缩文件生成插件安装包,然后安装插件。

安装插件之后,进入插件管理界面,点击我们刚刚安装的插件,选择测试翻译接口功能。

最后测试大小写转换功能。

下载成品插件