Python
 Computer >> コンピューター >  >> プログラミング >> Python

Djangoのモデルインスタンスに翻訳機能を追加する方法

この記事では、Djangoの任意のモデルインスタンスに対して翻訳データを追加する方法を解説します。ID、名前、引用文、セリフなどのデータを保存し、それを複数の言語で表示したいケースはよくあります。通常はデータベース周りで多くの実装が必要になりますが、今回はわずか数行の設定で同じ結果を実現する方法をご紹介します。

まずDjangoプロジェクトとアプリを作成し、urlsの設定やINSTALLED_APPSへのアプリ追加など、基本的なセットアップを行ってください。

今回の作業では、views.pyurls.py、HTMLファイルにはほとんど手を加えません。主に扱うのはsettings.pyadmin.pymodels.py、そして管理画面(admin URL)だけです。

手順1:django-klingonのインストール

まず、翻訳機能を提供するdjango-klingonパッケージをインストールします。

pip install django-klingon

続いてsettings.pyに以下を追記します。

INSTALLED_APPS += ['klingon']
KLINGON_DEFAULT_LANGUAGE = 'en'

ここでは、プロジェクトにklingonをアプリとして登録し、デフォルト言語を英語に設定しています。

手順2:翻訳可能なモデルを作成する

次に、以下のようなモデルを定義します。

from django.db import models
from klingon.models import Translatable

# Translatableをミックスインとして追加
class TeacherData(models.Model, Translatable):
    name = models.CharField(max_length=100)
    # シンプルなフィールド3つ
    ClassTeacherOF = models.CharField(max_length=100)
    Salary = models.CharField(max_length=100)
    a_simple_word = models.CharField(max_length=100)
    # 翻訳対象のフィールドを指定
    translatable_fields = ('a_simple_word',)

ここでのポイントはtranslatable_fieldsです。この属性で「どのフィールドを翻訳対象にするか」を指定します。実際の翻訳データは別テーブルに保存され、元のオブジェクトへの参照として紐付けられます。なお、タプルとして定義する際は末尾のカンマを忘れないように注意してください。

手順3:管理画面に翻訳機能を組み込む

admin.pyに以下のコードを追加します。

from django.contrib import admin
from .models import TeacherData
from klingon.admin import TranslationInline, create_translations

class TeacherAdmin(admin.ModelAdmin):

    inlines = [TranslationInline]
    actions = [create_translations]

admin.site.register(TeacherData, TeacherAdmin)

ここでは、作成したモデルを管理画面に登録するとともに、klingonが提供する翻訳用インライン(TranslationInline)と一括翻訳アクション(create_translations)を組み込んでいます。これにより、管理画面から直接各言語の翻訳を編集できるようになります。

これで設定はすべて完了です。次に動作を確認してみましょう。

出力結果の確認

Djangoシェルを起動し、新しく作成したオブジェクトに日本語の翻訳を追加してみます。

In [1]: from formhandlingapp.models import *
In [2]: data = TeacherData.objects.create(name="ama4", ClassTeacherOF="10", Salary="33322", a_simple_word="how are you")
In [3]: data.set_translation('jp', 'a_simple_word', 'お元気ですか')

これで翻訳オブジェクトが作成されました。もちろん、この処理はviews.pyからも実行できます。

ブラウザで https://127.0.0.1/admin/ にアクセスすると、管理画面上で翻訳データが登録・編集できていることを確認できます。

Djangoのモデルインスタンスに翻訳機能を追加する方法

まとめ

django-klingonを使えば、既存のモデルにほとんど変更を加えることなく、多言語対応の翻訳機能を追加できます。translatable_fieldsで対象フィールドを指定し、set_translation()メソッドや管理画面から翻訳を登録するだけで、言語ごとのコンテンツ表示が簡単に実現できます。多言語サイトを構築する際の選択肢の一つとして、ぜひ活用してみてください。

  1. Djangoのモデルインスタンスに翻訳機能を追加する方法

    この記事では、Djangoの任意のモデルインスタンスに対して翻訳データを追加する方法を解説します。ID、名前、引用文、セリフなどのデータを保存し、それを複数の言語で表示したいケースはよくあります。通常はデータベース周りで多くの実装が必要になりますが、今回はわずか数行の設定で同じ結果を実現する方法をご紹介します。まずDjangoプロジェクトとアプリを作成し、urlsの設定やINSTALLED_APPSへのアプリ追加など、基本的なセットアップを行ってください。今回の作業では、views.py、urls.py、HTMLファイルにはほとんど手を加えません。主に扱うのはsettings.py、admin

  2. DjangoモデルにJSONフィールドを追加する方法【django-jsonfield活用ガイド】

    この記事では、DjangoのモデルにJSONフィールドを追加する方法を解説します。JSONはキーと値のペアでデータを保存できるシンプルなフォーマットで、波括弧({})で記述されます。開発者向けサイトなどでは、柔軟な構造のデータを扱う場面が多く、そうしたケースでJSONフィールドは非常に役立ちます。事前準備まず、Djangoプロジェクトとアプリを作成しましょう。アプリをINSTALLED_APPSに追加し、URLの設定を行い、基本的なモデルを作成してHTMLファイル上にフォームを表示できるようにしておいてください。django-jsonfieldパッケージのインストール以下のコマンドでdjang