🖥

#GCP ( Google Cloud Platform ) の Google翻訳API で #MarkDown を翻訳するとスタイルが崩れ

2019/04/11に公開

Prepare

  • sudo gem install reverse_markdown
  • sudo gem install redcarpet
  • install gcloud
  • setting Google Translate API on GCP

tmp/example.md

<pre>

# あまがみヘッダー

*そうだ京都行かない。*

## うずらの卵

- 神風パラダイス
- おおむね大丈夫です

print('孫氏や老師の楽園')
print('一寸先はホタテ')

</pre>

# ~/.secret/google-service-credential.json

your GCP service account file json

# get-token.sh

GOOGLE_APPLICATION_CREDENTIALS=~/.secret/google-service-credential.json gcloud auth


# translate.sh

#!/usr/bin/env bash

basedir=$(dirname "$0")

TOKEN=("basedir"/get-token.sh)
"$basedir"/translate.py |
jq --raw-output '.data.translations[].translatedText'


# translate.py

Google Translate API では resouce として html 形式を指定することが出来る (デフォルトはこちら)

[Method: translate  |  Cloud Translation API  |  Google Cloud](https://cloud.google.com/translate/docs/reference/rest/v2/translate)

```py
#!/usr/bin/env python3

# -*- coding: utf-8 -*-

import os, sys, requests, json, fileinput, re

#resource_message = ''
#for text in sys.stdin.readlines():
#  resource_message += re.sub(r'\\n', "\n", text)

resource_message = sys.stdin.read()

from_language = os.environ.get('FROM') if os.environ.get('FROM') else 'ja'
to_language = os.environ.get('TO') if os.environ.get('TO') else 'en'
translate_format = os.environ.get('FORMAT') if os.environ.get('FORMAT') else 'text'

data = {
  'q': resource_message,
  'source': from_language,
  'target': to_language,
  'format': translate_format
}

url = 'https://translation.googleapis.com/language/translate/v2'
token = os.environ['TOKEN']

headers = {
 'Authorization': 'Bearer {}'.format(token),
 'Content-Type': 'application/json',
}

res = requests.post(url, headers=headers, json=data)

print(json.dumps(res.json()))
  

exe

  • テキストは翻訳され、コードは翻訳されていないのが分かる
  • PHP / Github スタイルのバッククォート複数個での コードブロック記法が、半角スペース4個でのベーシック記法に崩れてしまっているが、良い ruby gem や python module などが見つからなかったのでとりあえず放置
$ redcarpet --parse=fenced_code_blocks ./tmp/example.md | FORMAT=html ./translate.sh | reverse_markdown

ただしGoogle翻訳時にコードブロック内の改行が崩れてしまうようなので、独自対応する必要があるかもしれない

# Amagami header 

_Yes I can not go to Kyoto._

## Quail egg 

- Kamikaze Paradise 
- Mostly okay 

     print('孫氏や老師の楽園') print('一寸先はホタテ') 


Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1178

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-04-11

Discussion