LoginSignup
0
0

More than 3 years have passed since last update.

DjangoのテンプレートをAWS boto3を組み込んで翻訳

Posted at

各国の言語に対応したWebアプリが必要だったのでAWSのboto3を使ってタグを生成

メモとして活用します。
完成したら細かいところを記述したいと思います。
環境
djang == 2.1
boto3 == 1.0.0?
python == 3.6 ?

やりたいこと
クライアントが言語選択したらその言語で翻訳して表示

中身
boto3を組み込んだタグを作って
HTML内でタグに囲んだ部分を翻訳する。
⇓イメージ
{% translate %}ここ翻訳{% endtranslate %}
すでにDjangoには{% trans %}という翻訳用のタグがあるようだけど
自分でpoファイルやら何やらよりも
AWSの翻訳API使った方が一程度無料でクオリティ高いかな~と思ったので
まずはやってみる。

事前準備

・AWS登録
・pip install boto3

テンプレートタグについて

djangoはサーバサイドの言語だからHTMLを生成するような便利な機能が必要だったのでDTL(django template language)という便利機能が組み込まれました。
DTLには4つ種類があり、
1つは、変数=>{{ first_name }}
2つ目は、タグ=>{% block %}{% endblock %}
3つ目は、フィルター=>{{ value | filter }}
4つ目は、、、4つ目は、忘れた、とりあえず一時的メモなので後ほど

タグの生成

タグの作り方は、djangoのドキュメントでテンプレートエンジンの仕組みのところを通読すると
その後スムーズにできます。

タグの生成下準備
①アプリは直下に templatetags ファイル生成
②templatetags 内に init.pyを生成 <=これでテンプレートエンジンが探索してくれる
③templatetags 内に translate.py 生成 <=ファイル名は何でもオッケー

translate.py の中身(まだ途中)

from django import template
import boto3

register = template.Library()

REGION = 'ap-northeast-1'
SRC_LANG = 'ja'
TRG_LANG = 'en'

@register.filter(name="translate", is_safe=True, needs_autoescape=True)
def translate(value, autoescape=True):
    translate = boto3.client(service_name='translate', region_name=REGION,use_ssl=True)
    result = translate.translate_text(Text=value,
        SourceLanguageCode=SRC_LANG,
        TargetLanguageCode=TRG_LANG)
    return result.get('TranslatedText')

とりあえずこれはフィルターを生成してみました
HTMLファイルで
{{ '箱' |translate }}
とすると
Box
とブラウザで表示されます。
この'箱'部分に本文をいれれば翻訳されて返ってきますが
今回は{% translate %}ここ翻訳{% endtranslate %}が理想なので
お次はこのタグをつくります。フィルターは簡単そうだったので作ってみました。
これからタグつくるのでメモはここまででまた更新します。

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