Drupal Meetup 羽田 #17 セッション

Drupal実験室:コンテンツ自動翻訳

2019.02.08
アウトソーシングテクノロジー
森野 豊光

目的

経緯

ターゲット

前提条件

処理フロー案

  1. コンテンツ保存の延長で処理する?
  2. 翻訳対象が多い場合を考えるとバッチ処理にすべきか
  3. キュー(バックグラウンド)で処理させる

結論

今回は時間の都合もありコンテンツ保存の延長(hook_node_insert/update)で自動翻訳する

実装

translation function

function translation($text, $new_code = 'en') {
  // 翻訳処理
  // 今回はGoogle Cloud APIを採用
  // 参考:https://cloud.google.com/translate/docs/reference/libraries?hl=ja#client-libraries-install-php
  # Instantiates a client
  $translate = new TranslateClient([
    'keyFilePath' => [KEY_FILE_PATH],
    'projectId' => [PROJECT ID]
  ]);

  # Translates some text
  $translation = $translate->translate($text, [
    'target' => $new_code
  ]);

  return $translation['text'];
}

hook_node_insert

function mymodule_node_insert(EntityInterface $node) {
  // コンテンツ内容の翻訳
  $translated_title = translation($node->getTitle());
  $tranlated_body = ・・・

  (中略)

  // 翻訳言語の追加
  $node->addTranslation($new_lang_code, [
      'title' => $translated_title,
      'body' => $translated_body,
    ])->save();
}

hook_node_update

懸念事項

コンテンツを編集するケース 1. コンテンツの内容に追記する 1. コンテンツの内容を一部削除する 1. 誤字脱字の修正

など

これらすべての更新で毎回全量を翻訳する? →コンテンツ更新時の翻訳は実装しない

実演・・・の前に

結構あっさり実装できたので、仕様変更

実演

※実際のサイトでご覧ください

課題

質問など

萩原さまより