Globalization Pipeline でメッセージを翻訳してみよう

このエントリは、[Bluemix(SoftLayer) Advent Calendar 2016](http://qiita.com/advent-calendar/2016/bluemix) ８日目の記事です。

# 1. はじめに

みなさんがさまざまなプログラミング言語で「国際化プログラミング」のお作法にもとづいてコーディングするとき、必ず「メッセージをいろいろな言語に翻訳可能にするためプログラム本体から分離する」という処理をすると思います。この分離されたメッセージ・リソース・ファイルは、実行時のランタイムライブラリからロードされて画面に表示される、という流れになります。

さて、この「メッセージ・リソース・ファイル」をクラウドに置いたらどうなるでしょうか？さらに一歩進めて、Dropbox などのようにファイルの実体としてアクセス可能にするという方法ではなく、REST(ful) API として GET/POST/PUT/DELETE 等が可能なリソースとしてアクセスできるようにしたらどうなるでしょうか？ Bluemix で提供されている Globalization Pipeline サービスは、そんな「翻訳可能なリソースのREST API化」を具現化したものになります。

# 2. Globalization Pipeline サービスをデプロイしてみよう

Bluemix のメニューからカタログを選び、**globalization** と検索フィールドに入力すると、Globalization Pipeline のアイコンが見つかります。

<img width="364" alt="Globalization Pipeline ロゴ" src="https://qiita-image-store.s3.amazonaws.com/0/147483/d17d5a68-f441-02ff-f659-0451d46acaed.png">

料金等の情報は、[サービスの詳細](https://console.ng.bluemix.net/catalog/services/globalization-pipeline/) ページで確認してください。

Globalization Pipeline は単体のサービスとして使うことができますので、接続は **アンバインドのまま** で OK です。
**作成** ボタンをクリックしてサービスをデプロイします。

サービスを各自のスペースにデプロイすると、専用の **ダッシュボード** が提供されます。

<img width="1170" alt="Globalization Pipeline ダッシュボードの例" src="https://qiita-image-store.s3.amazonaws.com/0/147483/86ff5eab-9b2d-c18a-1508-7b600e209410.png">

# 3. バンドルを作成してメッセージリソースをアップロードしてみよう

ダッシュボード上から **バンドル** というメッセージ・リソースのグループを作成し、どの言語（翻訳元言語）からどの言語（翻訳先言語）へ翻訳するかを指定します。また、すでにソースコード・リポジトリに翻訳元言語のリソースが作成済みの場合は、それらを一括アップロードすることもできます。

ダッシュボードの **バンドル** タブから **新規バンドル** をクリックすると、新規バンドルの作成画面になります。ここで以下のような情報を指定した後、**保存** をクリックするとバンドルが作成されます。

| 項目 | 内容 |
|:----:|:-----|
|バンドルID| モジュールに相当する粒度のリソースの集合の識別名です。 |
|翻訳元言語|（例）英語 |
|リソース・ファイル|バンドル作成と同時に翻訳元言語のリソースをアップロードします。バンドル作成後にアップロードすることもできます。|
|ファイル形式| Java プロパティファイル (.properties) 、JSON (.json)、 AMD i18n require.js (.js) の３種から指定します。リソース・ファイルをアップロードすると自動で設定されます |
|翻訳先言語|（例）日本語 |

# 4. 機械翻訳エンジンについて

アップロードされたメッセージ・リソースは、Globalization Pipeline に組み込まれた機械翻訳エンジンを用いて、すぐに自動翻訳処理がなされます。翻訳元と翻訳先言語の組み合わせによって、機械翻訳エンジンはいくつか選択可能です。2016年12月の時点で日本語へ翻訳可能な機械翻訳エンジンは、組み込みの **IBM Basic MT** が提供されています。
Bluemix 上には、[**(Watson) Language Translator**](https://console.ng.bluemix.net/catalog/services/language-translator/) が提供されていますが、こちらの日本語対応はまだのようです。

また、英語から日本語だけでなく、日本語から英語への翻訳も期待したいところですが、こちらに関しても翻訳エンジンの対応次第、ということになります。

# 5. 翻訳済みリソースを取り込んでみよう

**バンドル** タブで表示されているバンドル一覧から、リソースをダウンロードするバンドルIDをクリックします。

<img width="1175" alt="バンドル一覧" src="https://qiita-image-store.s3.amazonaws.com/0/147483/94b17921-5d55-481f-6ba0-940fabdab587.png">

バンドル詳細ページでは、機械翻訳の翻訳状況を確認できます。日本語の翻訳済みリソースをダウンロードするには **操作** 欄の左から２番目にあるダウンロードアイコンをクリックします。ダウンロードする際には、ファイル形式を選択します。

<img width="1182" alt="バンドル詳細" src="https://qiita-image-store.s3.amazonaws.com/0/147483/b785e712-493a-fc9a-a6c5-d127b4aa74da.png">

ダウンロードされたファイルは、自動的に <バンドルID>\_<言語コード>.<拡張子> という名前で保存されます。（例：qiita-demo_ja.properties）


# 6. 翻訳を修正してみよう

バンドル詳細画面で言語名をクリックすると、翻訳されたリソースを確認することができます。

<img width="1197" alt="リソース詳細" src="https://qiita-image-store.s3.amazonaws.com/0/147483/dbba827d-1086-2488-2b8e-7b2f53d4d641.png">

**操作** 欄のエンピツのアイコンをクリックすると、翻訳を修正することができます。

<img width="671" alt="翻訳の変更" src="https://qiita-image-store.s3.amazonaws.com/0/147483/d4cd3567-417f-3f4c-36df-d54c0cb2550c.png">


# 7. さいごに

この記事では、Bluemix 上の Globalization Pipeline サービスとその基本的な使い方を紹介しました。
はじめにで述べた REST API によるアクセスについては、本記事の続編として投稿しようと思っています。内容として以下のものを予定しています。
- 複数の翻訳済みリソースのアップロード
- SDK を使った翻訳リソースへのアクセス
- REST API を使ったスクリプトからのアクセス
- エディター (Atom、Visual Studio Code) との統合