a-blog cms のための「Google Translation API」連携拡張アプリになります。この拡張アプリを使用すると、 エントリー(記事)の多言語化を簡単に行うことができるようになります。
- php: 8.1 – 8.4 (8.5+ not tested yet)
- a-blog cms for Professional or Enterprise のみ(現状スタンダードライセンスでの利用はライセンス違反となります)
- a-blog cms: >= Ver. 3.2.11 (3.3+ not tested yet)
Google Translate for a-blog cms
- GGoogle Cloud Console にログイン
- 新規プロジェクトを作成
- プロジェクト ID(Project ID)をメモ
- 作成したプロジェクトを選択
- 「API とサービス」→「ライブラリ」
- Cloud Translation API を検索して 有効化
※ ここで課金が必要になる場合があります。GCP 側で 請求先アカウント(Billing) が未設定だと API 利用で弾かれることがあります(権限/有効化はできても実行時に失敗するケースがあるため、必要なら Billing も確認)。
- 「IAM と管理」→「サービスアカウント」
- サービスアカウントを作成
- 対象プロジェクトで、作成したサービスアカウントにロールを付与
- ロール: Cloud Translation API ユーザー を付与
- サービスアカウント詳細 →「鍵」タブ
- 「鍵を追加」→「新しい鍵を作成」→ JSON
- ダウンロードした JSON を サーバーに設置
- Web 公開ディレクトリ外に配置(例: /var/app/credentials/translate-sa.json)
- 権限は最小限(例: chmod 600、所有者を実行ユーザーに)
サイトを多言語化するにあたり、各言語をブログを切って設計します。
例:
日本語サイト
┗ 日本語ブログ
┗ 英語サイト
┗英語ブログ
-
Google Translate for a-blog cms から zipファイルをダウンロードし、解凍したディレクトリ(GoogleTranslate)を extension/plugins/ に設置する。
-
管理者で a-blog cms にログインし、 拡張アプリに移動し、「GoogleTranslate」をインストールします。
-
多言語管理するブログ全てで、「GoogleTranslate」拡張アプリを有効にします。
拡張アプリをインストールすると、拡張メニューに「Google Translate」が増えます。ベースとなる言語ブログのみで設定を行なっていきます。
| 設定項目 | 説明 |
|---|---|
| ベース言語 | 翻訳元となる言語を設定します |
| プロジェクトID | 事前準備で用意した プロジェクトID を設定します |
| サービスアカウントJSONパス | 事前準備で用紙したJSONのパスを絶対パスで設定します |
| カテゴリー作成 | 翻訳先の記事を作成するときに、カテゴリーも自動で複製するか設定します |
| ベース言語(このブログ)と関連づける他言語ブログを設定 | ベース言語のブログと翻訳先のブログの関連を設定します |
| 訳対象のフィールドを設定します | 翻訳対象のカスタムフィールド名を指定します |
| eidを指定するカスタムフィールドを設定します | eidを設定するようなフィールドを指定します |
| bidを指定するカスタムフィールドを設定します | bidを設定するようなフィールドを指定します |
| cidを指定するカスタムフィールドを設定します | cidを設定するようなフィールドを指定します |
参照: https://cloud.google.com/translate/attribution
Cloud Translation API を使用する際には、Googleへの帰属表示が必須になります。ロゴ画像をつかってリンクを表示するようにしてください。
詳細は 帰属表示の要件 を確認してください。
変更されていない Cloud Translation API の結果をウェブ上で公開し、検索できるようにする場合、 翻訳されるテキストを機械翻訳されたコンテンツとして指定する必要があります。
フォーマット
<テキストの翻訳先言語の言語コード>-x-mtfrom-<原文の言語の言語コード><div lang="en-x-mtfrom-ja">Hello World.</div>
or
<span lang="en-x-mtfrom-ja">Hello World.</span>ページ全体の場合、翻訳元のドキュメントをオンラインで入手できるときは、次のように、HTML ドキュメントの <head> に <link> 要素を指定し、
rel="" 属性を "alternate machine-translated-from" に、hreflang="" 属性を翻訳元の言語コードに、href="" を翻訳元のページに設定します。
<html lang="en-x-mtfrom-ja">
<head>
<link rel="alternate machine-translated-from" hreflang="ja" href="http://ja.example.com/hello.html">
</head>
<body>
...Translation API マークアップ を行うのに便利なグローバル変数とモジュールが用意されていますので用いましょう。
| 変数 | 説明 | 例 |
|---|---|---|
| %{TRANSLATION_LANG_BASE_CODE} | 翻訳元の言語コード | ja |
| %{TRANSLATION_LANG_CODE} | 現在いるページの言語コード | en, en-x-mtfrom-ja |
| %{TRANSLATED_BY_GOOGLE} | 機械翻訳されたページのみ「yes」を出力 | yes |
| %{TRANSLATION_ORIGIN_URL} | 翻訳元記事のURL | http://ja.example.com/hello.html |
%{TRANSLATION_LANG_CODE} 変数は、人力翻訳、機械翻訳を判断して、Translation API マークアップ にあった コードを出力します。
このグローバル変数を使って、Translation API マークアップ は次のようにかけます。
<html lang="%{TRANSLATION_LANG_CODE}">
<head>
<!-- BEGIN_MODULE GoogleTranslate_EntryList -->
<!-- BEGIN_IF [%{TRANSLATED_BY_GOOGLE}/eq/yes] -->
<link rel="alternate machine-translated-from" href="%{TRANSLATION_ORIGIN_URL}" hreflang="%{TRANSLATION_LANG_BASE_CODE}">
<!-- END_IF -->
<!-- BEGIN lang:loop -->
<!-- BEGIN_IF [{base_bid}/neq/{relation_bid}/_and_/%{BID}/neq/{relation_bid}] -->
<link rel="alternate" href="{url}" hreflang="{lang_code}">
<!-- END_IF -->
<!-- END lang:loop -->
<!-- END_MODULE GoogleTranslate_EntryList -->
</head>
<body>
...