0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

#GCP ( Google Cloud Platform ) の Google翻訳API で #MarkDown を翻訳するとスタイルが崩れてしまうので #ruby gem で一旦 #HTML 変換してから Markdown に逆変換する #shell コマンドの例

Last updated at Posted at 2019-04-11

Prepare

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

tmp/example.md


```
# あまがみヘッダー

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

## うずらの卵

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

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

~/.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

#!/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

チャットメンバー募集

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

Twitter

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?