[Python3.5.2] Microsoft Translator APIを試した記録 

# 概要

[PythonでMicrosoft Translator APIを使ってみる](http://shoya.io/blog/microsoft_translator/)で紹介されている内容をなぞってやってみた結果の記録です。
こちらの記事が書かれたのが2013年。少し手順が変わっているところもあるので、githubのREADMEを見るのが良いと思われます。

[githubリポジトリ](https://github.com/openlabs/Microsoft-Translator-Python-API)を見ると、だいぶ開発は止まっているようだけども、12/05時点で書いたコンソールで動作するお試しコードはPython3.5.2で動作した。

# 準備

## Pythonのモジュールのインストール

```
pip install microsofttranslator
```

## Azure Market Placeに登録

[Azure Market Place](https://datamarket.azure.com/developer/applications/)にアプリを登録します。
というより、翻訳サービスを使う際に使用するクライアントIDとシークレットキーを取得するといったほうがわかりやすいです。

![アプリケーションの登録.png](https://qiita-image-store.s3.amazonaws.com/0/111676/850ff213-3389-d3a4-6040-51d357529d26.png)


大事なのは、赤枠で囲んだ**クライアントID**と書いてあるところと、**顧客の秘密**と書いてある部分です。
顧客の秘密というと、意味が分かりにくいですが、この２つがPythonのプログラムで利用するものになります。


作成ボタンを押して登録を完了します。


## サンプル実装


```py3

# クライアントIDに書いた文字列
clientId = 'TestApp'
# 顧客の秘密に書かれていた文字列
clientSecret = '*********************************'

from microsofttranslator import Translator
translator = Translator(clientId, clientSecret)

# １つのテキスト
print(translator.translate(text='私はペンを持っています。私はりんごをもっています。', to_lang='en', from_lang='ja'))

# 一括で文字列を複数渡す
print(translator.translate_array(['私はペンをもっています。', '私はパイナップルをもっています。', 'あー'], to_lang='en', from_lang='ja'))
```

とすると、標準出力にこうでます。

```shell-session
I have a pen. I have a Apple.
[{'From': 'ja', 'TranslatedText': 'I have a pen.', 'TranslatedTextSentenceLengths': [13], 'OriginalTextSentenceLengths': [12]}, {'From': 'ja', 'TranslatedText': 'I have a pineapple.', 'TranslatedTextSentenceLengths': [19], 'OriginalTextSentenceLengths': [16]}, {'From': 'ja', 'TranslatedText': 'Oh', 'TranslatedTextSentenceLengths': [2], 'OriginalTextSentenceLengths': [2]}]

```

おおお、翻訳されました！


# その他

## 対応している言語

fromやtoで対応している言語は、translator.get_languages() とするとリストでとれるようです。

```py3
print(translator.get_languages())
```

```
['af', 'ar', 'bs-Latn', 'bg', 'ca', 'zh-CHS', 'zh-CHT', 'yue', 'hr', 'cs', 'da', 'nl', 'en', 'et', 'fj', 'fil', 'fi', 'fr', 'de', 'el', 'ht', 'he', 'hi', 'mww', 'hu', 'id', 'it', 'ja', 'sw', 'tlh', 'tlh-Qaak', 'ko', 'lv', 'lt', 'mg', 'ms', 'mt', 'yua', 'no', 'otq', 'fa', 'pl', 'pt', 'ro', 'ru', 'sm', 'sr-Cyrl', 'sr-Latn', 'sk', 'sl', 'es', 'sv', 'ty', 'th', 'to', 'tr', 'uk', 'ur', 'vi', 'cy']
``` 

zh_CNがあるかなーと思いきや、カルチャとしては、zn-CHS/zh-CHTを指定すると良いらしい。

| label | culture|
|:------|-------------------|
| 簡体字中国語レガシ | zh-CHS |
| 繁体字中国語レガシ | zh-CHT | 


説明としては、[こちら](https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%82%AB%E3%83%AB%E3%83%81%E3%83%A3)がわかりやすかった。以下、引用。

> 例外的に中国語のカルチャは5階層となる。
> ※ zh, zh-Hans, zh-CHS, zh-Hant, zh-CHTはニュートラルカルチャ
> 
> 既定カルチャ
> 　└zh　中国語
> 　　├zh-Hans　簡体字中国語
> 　　│└zh-CHS　簡体字中国語(古いカルチャ名)
> 　　│　├zh-CN　中国
> 　　│　└zh-SG　シンガポール
> 　　│
> 　　└zh-Hant　繁体字中国語
> 　　　└zh-CHT　繁体字中国語(古いカルチャ名)
> 　　　　├zh-HK　香港
> 　　　　├zh-MO　マカオ
> 　　　　└zh-TW　台湾


## おまけ

例えば、「見積登録」とか「在庫照会」といった販売管理のメニューみたいな単語を中国語にしたい、ということでやってみたら、こんな風になった。

```py3
print(translator.translate_array(['見積登録', '在庫照会'], to_lang='zh-CHS', from_lang='ja'))
```

```
[{'TranslatedText': '估计的注册', 'OriginalTextSentenceLengths': [4], 'From': 'ja', 'TranslatedTextSentenceLengths': [5]}, {'TranslatedText': '库存查询', 'OriginalTextSentenceLengths': [4], 'From': 'ja', 'TranslatedTextSentenceLengths': [4]}]
```

估计的注册とか、ネイティブな方からすると妥当なのかどうか全く判断できませんが、
jaやenの言語リソースは持っているんだけども、中国語がない!　自動生成できないの？　とかいうときの１つのアプローチにはなりそう。