ترجمة النص باستخدام حزمة تعلُّم الآلة على Android

يمكنك استخدام "حزمة تعلّم الآلة" لترجمة النصوص من لغة إلى أخرى. يمكن لـ "حزمة تعلّم الآلة" الترجمة بين أكثر من 50 لغة.

للتجربة:

  • يمكنك تجربة نموذج التطبيق للاطّلاع على مثال على استخدام واجهة برمجة التطبيقات هذه.

قبل البدء

  1. في ملف build.gradle على مستوى المشروع، تأكَّد من تضمين مستودع Maven من Google في كل من القسمَين buildscript وallprojects.
  2. أضِف العناصر التابعة لمكتبات Android في "حزمة تعلّم الآلة" إلى ملف gradle على مستوى التطبيق في الوحدة، والذي يكون عادةً app/build.gradle:
    dependencies {
      // ...
    
      implementation 'com.google.mlkit:translate:17.0.3'
    }

ترجمة سلسلة نصية

لترجمة نص بين لغتَين:

  1. أنشئ كائن Translator واضبطه باستخدام اللغتَين المصدر والهدف:

    Kotlin

    // Create an English-German translator:
    val options = TranslatorOptions.Builder()
        .setSourceLanguage(TranslateLanguage.ENGLISH)
        .setTargetLanguage(TranslateLanguage.GERMAN)
        .build()
    val englishGermanTranslator = Translation.getClient(options)

    جافا

    // Create an English-German translator:
    TranslatorOptions options =
        new TranslatorOptions.Builder()
            .setSourceLanguage(TranslateLanguage.ENGLISH)
            .setTargetLanguage(TranslateLanguage.GERMAN)
            .build();
    final Translator englishGermanTranslator =
        Translation.getClient(options);

    إذا كنت لا تعرف لغة النص المُدخَل، يمكنك استخدام واجهة برمجة التطبيقات لتحديد اللغة التي تمنحك علامة لغة. بعد ذلك، يمكنك تحويل العلامة إلى TranslateLanguage باستخدام TranslateLanguage.fromLanguageTag().

    تجنَّب الاحتفاظ بعدد كبير جدًا من النماذج اللغوية على الجهاز في الوقت نفسه.

  2. تأكَّد من تنزيل نموذج الترجمة المطلوب على الجهاز. لا تتصل بـ translate() حتى تتأكد من توفّر الطراز.

    Kotlin

    var conditions = DownloadConditions.Builder()
        .requireWifi()
        .build()
    englishGermanTranslator.downloadModelIfNeeded(conditions)
        .addOnSuccessListener {
            // Model downloaded successfully. Okay to start translating.
            // (Set a flag, unhide the translation UI, etc.)
        }
        .addOnFailureListener { exception ->
            // Model couldn’t be downloaded or other internal error.
            // ...
        }

    جافا

    DownloadConditions conditions = new DownloadConditions.Builder()
        .requireWifi()
        .build();
    englishGermanTranslator.downloadModelIfNeeded(conditions)
        .addOnSuccessListener(
            new OnSuccessListener() {
              @Override
              public void onSuccess(Void v) {
                // Model downloaded successfully. Okay to start translating.
                // (Set a flag, unhide the translation UI, etc.)
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Model couldn’t be downloaded or other internal error.
                // ...
              }
            });

    يبلغ حجم النماذج اللغوية حوالي 30 ميغابايت، لذا لا تنزّلها بدون داعٍ، ولا تنزّلها إلا باستخدام شبكة Wi-Fi ما لم يحدّد المستخدم غير ذلك. يجب أيضًا حذف النماذج غير المطلوبة. يُرجى الاطّلاع على إدارة نماذج الترجمة بشكل صريح.

  3. بعد التأكّد من تنزيل النموذج، مرِّر سلسلة نصية باللغة المصدر إلى translate():

    Kotlin

    englishGermanTranslator.translate(text)
        .addOnSuccessListener { translatedText ->
            // Translation successful.
        }
        .addOnFailureListener { exception ->
             // Error.
             // ...
        }

    جافا

    englishGermanTranslator.translate(text)
        .addOnSuccessListener(
            new OnSuccessListener() {
              @Override
              public void onSuccess(@NonNull String translatedText) {
                // Translation successful.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Error.
                // ...
              }
            });

    يتم تمرير النص المترجَم باللغة المستهدَفة التي تم ضبطها إلى مستمع النجاح.

  4. تأكَّد من استدعاء الإجراء close() عندما لا يتم استخدام العنصر Translator بعد ذلك.

    إذا كنت تستخدم Translator في Fragment أو AppCompatActivity، يمكنك إجراء ذلك بسهولة من خلال استدعاء LifecycleOwner.getLifecycle() في Fragment أو AppCompatActivity، ثم استدعاء Lifecycle.addObserver. على سبيل المثال:

    Kotlin

    val options = ...
    val translator = Translation.getClient(options)
    getLifecycle().addObserver(translator)

    جافا

    TranslatorOptions options = ...
    Translator translator = Translation.getClient(options);
    getLifecycle().addObserver(translator);
    ... use translator ...

    يُرجى العِلم أنّ هذا يفترض أنّ الرمز البرمجي داخل فئة تنفّذ LifecycleOwner (مثل Fragment أو AppCompatActivity).

إدارة نماذج الترجمة بشكل صريح

عند استخدام واجهة برمجة التطبيقات للترجمة كما هو موضّح أعلاه، تعمل "حزمة تعلّم الآلة" تلقائيًا على تنزيل نماذج الترجمة الخاصة باللغة على الجهاز حسب الحاجة. يمكنك أيضًا إدارة نماذج الترجمة التي تريد إتاحتها على الجهاز بشكل صريح باستخدام واجهة برمجة التطبيقات لإدارة نماذج الترجمة في حزمة تعلّم الآلة. يمكن أن يكون ذلك مفيدًا إذا أردت تنزيل النماذج مسبقًا أو حذف النماذج غير الضرورية من الجهاز.

Kotlin

val modelManager = RemoteModelManager.getInstance()

// Get translation models stored on the device.
modelManager.getDownloadedModels(TranslateRemoteModel::class.java)
    .addOnSuccessListener { models ->
        // ...
    }
    .addOnFailureListener {
        // Error.
    }

// Delete the German model if it's on the device.
val germanModel = TranslateRemoteModel.Builder(TranslateLanguage.GERMAN).build()
modelManager.deleteDownloadedModel(germanModel)
    .addOnSuccessListener {
        // Model deleted.
    }
    .addOnFailureListener {
        // Error.
    }

// Download the French model.
val frenchModel = TranslateRemoteModel.Builder(TranslateLanguage.FRENCH).build()
val conditions = DownloadConditions.Builder()
    .requireWifi()
    .build()
modelManager.download(frenchModel, conditions)
    .addOnSuccessListener {
        // Model downloaded.
    }
    .addOnFailureListener {
        // Error.
    }

جافا

RemoteModelManager modelManager = RemoteModelManager.getInstance();

// Get translation models stored on the device.
modelManager.getDownloadedModels(TranslateRemoteModel.class)
    .addOnSuccessListener(new OnSuccessListener<Set>() {
        @Override
        public void onSuccess(Set models) {
            // ...
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // Error.
        }
    });

// Delete the German model if it's on the device.
TranslateRemoteModel germanModel =
        new TranslateRemoteModel.Builder(TranslateLanguage.GERMAN).build();
modelManager.deleteDownloadedModel(germanModel)
    .addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Void v) {
            // Model deleted.
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // Error.
        }
    });

// Download the French model.
TranslateRemoteModel frenchModel =
        new TranslateRemoteModel.Builder(TranslateLanguage.FRENCH).build();
DownloadConditions conditions = new DownloadConditions.Builder()
    .requireWifi()
    .build();
modelManager.download(frenchModel, conditions)
    .addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Void v) {
            // Model downloaded.
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            // Error.
        }
    });