HMS ML Kitのオフライン翻訳機能の実装入門

# AndroidアプリにHMSのオフライン翻訳機能を導入する方法

## AppGallery Connectの作業
1. AppGallery Connectに入って、[My projects]を選びます。
2. リストから対象アプリに切り替えます。
3. [Project settings] -> [Manage APIs]に入って、ML Kitを有効にします。（デフォルトではすでに有効になっているはずです）

こちらもご参照ください。

https://developer.huawei.com/consumer/en/doc/development/hiai-Guides/config-agc-0000001050990353

https://developer.huawei.com/consumer/en/doc/development/hiai-Guides/enable-service-0000001050038078

## HMS SDKの導入
1. agconnect-services.jsonをプロジェクト内に配置します。
2. プロジェクトのbuild.gradleにSDKを追加します。
3. モジュールのbuild.gradleにSDKを追加します。

オフライン翻訳機能のライブラリはこちらです。

```gradle:build.gradle
implementation 'com.huawei.hms:ml-computer-translate:3.0.0.300'
implementation 'com.huawei.hms:ml-computer-translate-model:3.0.0.300'
```

こちらもご参照ください。

https://developer.huawei.com/consumer/jp/doc/development/hiai-Guides/on-device-translate-sdk-0000001050038088

## AndroidManifest.xml
HMS ML Kitのオフライン翻訳機能の定義と辞書ダウンロードの設定をAndroidManifest.xmlに追加します。

```xml:AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx">
    ...
    <meta-data
        android:name="com.huawei.hms.ml.DEPENDENCY"
        android:value= "translate"/>
    <application
        ...
        android:usesCleartextTraffic="true"
        >
    ...


</manifest>
```

## オフライン翻訳の流れ
１. API Keyを設定します。

```kotlin
MLApplication.getInstance().apiKey = AGConnectServicesConfig.fromContext(applicationContext).getString("client/api_key")
```

２．MLLocalTranslatorを生成します。
日本：ja
英語：en

```kotlin
private var loaclTranslator: MLLocalTranslator? = null

MLTranslateLanguage.getLocalAllLanguages().addOnSuccessListener {
    if (it.contains(sourceLanguageCode) && it.contains(targetLanguageCode)) {
        loaclTranslator = MLTranslatorFactory.getInstance().getLocalTranslator(
            MLLocalTranslateSetting.Factory()
                .setSourceLangCode(sourceLanguageCode)
                .setTargetLangCode(targetLanguageCode)
                .create()
        )
    }
}.addOnFailureListener {
    it.printStackTrace()
}
```

３．辞書をダウンロードします。

```kotlin
loaclTranslator?.preparedModel(
    MLModelDownloadStrategy.Factory()
        .needWifi()
        .create(),
    MLModelDownloadListener { alreadyDownLength, totalLength ->
    }
)?.addOnSuccessListener {
}?.addOnFailureListener {
    it.printStackTrace()
}
```

４．翻訳します。

```kotlin
loaclTranslator?.asyncTranslate({翻訳対象のString})?.addOnSuccessListener {
    // it = 翻訳結果
}?.addOnFailureListener {
    it.printStackTrace()
}
```

５．リソースを解放します。

```kotlin
loaclTranslator?.stop()
```

実装は以上になります。

# GitHub
https://github.com/Rei2020GitHub/MyPublicProject/tree/master/ml/TranslationDemo

# 参考
* HMS：[https://developer.huawei.com/consumer/jp/](https://developer.huawei.com/consumer/jp/)
* HMS ML Kitの紹介：[https://developer.huawei.com/consumer/jp/hms/huawei-mlkit](https://developer.huawei.com/consumer/jp/hms/huawei-mlkit)
* HMS ML Kitのドキュメント：[https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/service-introduction-0000001050040017](https://developer.huawei.com/consumer/jp/doc/development/HMSCore-Guides/service-introduction-0000001050040017)
* HMS ML Kitのオフライン翻訳機能の概要：[https://developer.huawei.com/consumer/jp/doc/development/hiai-Guides/on-device-translation-0000001058271775](https://developer.huawei.com/consumer/jp/doc/development/hiai-Guides/on-device-translation-0000001058271775)
* Huawei Developers：[https://forums.developer.huawei.com/forumPortal/en/home](https://forums.developer.huawei.com/forumPortal/en/home)
* Facebook Huawei Developersグループ：[https://www.facebook.com/Huaweidevs/](https://www.facebook.com/Huaweidevs/)