Android Translate app: встроенный перевод Google Translate в приложениях на Android 6 Marshmallow

Google Translate используют более 500 миллионов человек каждый месяц, переводя более чем 100 миллиардов слов каждый день.

Начиная с прошлой недели, пользователи Android, на чьих устройствах установлено  Приложение Google Translate получат возможность перевода на 90 языков внутри некоторых из их любимых приложений на любом устройстве под управлением последней версии операционной системы Android (Android 6.0, Marshmallow).

TripAdvisor, пример перевода с португальского 

Создание WhatsApp сообщения на русском языке
Android приложения, которые используют встроенную в Android  функцию выделение текста , встроенный перевод будет уже  включен по умолчанию, поэтому никаких дополнительных шагов не нужно. Разработчикам, которые реализовали кастомное выделение текста для своих приложений, можно легко реализовать функцию встроенного перевода, выполнив следующие шаги:

Сканирование с помощью PackageManager всех пакетов, которые имеют фильтр интентов PROCESS_TEXT (например: com.google.android.apps.translate — если он установлен) и добавить их в качестве MenuItems в TextView выбора для вашего приложения

  1. Чтобы запросить PackageManager, сначала нужно  построить Intent с Action:
    private Intent createProcessTextIntent() {
        return new Intent()
                .setAction(Intent.ACTION_PROCESS_TEXT)
                .setType("text/plain");
    }
  2. Затем извлечь поддерживаемые Activity
    private List getSupportedActivities() {
        PackageManager packageManager =
    mTextView.getContext().getPackageManager();
        return
    packageManager.queryIntentActivities(createProcessTextIntent(),
    0);
    }
  3. Добавьте элемент для каждого найденного Activity, и присоедините Intent с Action
    public void onInitializeMenu(Menu menu) {
        // Start with a menu Item order value that is high enough
        // so that your "PROCESS_TEXT" menu items appear after the
        // standard selection menu items like Cut, Copy, Paste.
        int menuItemOrder = 100;
        for (ResolveInfo resolveInfo : getSupportedActivities()) {
            menu.add(Menu.NONE, Menu.NONE,
                    menuItemOrder++,
                    getLabel(resolveInfo))
                    
    .setIntent(createProcessTextIntentForResolveInfo(resolveInfo))
                    .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        }
    }

Метки для каждого элемента можно извлечь с:

resolveInfo.loadLabel(mPackageManager);

Intent для каждого элемента может быть создан повторно для фильтра интентов, определенного ранее и добавления недостающих данных:

private Intent createProcessTextIntentForResolveInfo(ResolveInfo info) {
    return createProcessTextIntent()
            .putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, !
mTextView.isTextEditable())
            .setClassName(info.activityInfo.packageName, 
info.activityInfo.name);
}

Добавление параметра перевода в меню выбора текста вашего приложения (если вы не используете поведение выделения текста в Android  по умолчанию ) делается просто и занимает всего несколько дополнительных строк кода. И помните, в процессе перевода, ваше приложение должно удерживать выделение текста, пока приложение Google Translate работает.

С этой новой функцией Android Translate app  пользователи смогут легко пользоваться переводом непосредственно в своих приложениях. Разработчики Android обещают добавить больше документации и примеров кода на эту функцию в ближайшие недели.

 Источник:  Barak Turovsky, Product Lead, Google Translate
Понравилась статья? Поделиться с друзьями:
Добавить комментарий