Djangoで国際化とローカライゼーションを実装する完全ガイド

この記事では、PythonのWebフレームワーク「Django」で国際化(Internationalization, 略してi18n)とローカライゼーション(Localization, 略してl10n)を実装する方法を詳しく解説します。具体的なコード例、その詳細な解説、および応用例を2つ以上含めています。

目次

Djangoでの国際化とローカライゼーションとは

国際化とは、アプリケーションが多言語に対応するように設計・実装するプロセスです。一方、ローカライゼーションとは、特定の言語や地域に合わせてアプリケーションを適応させるプロセスです。

基本設定

Djangoプロジェクトで国際化とローカライゼーションを有効にするには、まず基本的な設定を行う必要があります。

settings.pyの編集

settings.pyファイルに以下の設定を追加または編集してください。

# settings.py
from django.utils.translation import gettext_lazy as _

LANGUAGE_CODE = 'en-us'
LANGUAGES = [
    ('en', _('English')),
    ('ja', _('Japanese')),
]
LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]

LANGUAGE_CODEとLANGUAGESの違い

`LANGUAGE_CODE`はデフォルトの言語を設定するための変数です。一方で、`LANGUAGES`はサポートする言語をリストとして指定します。

メッセージの国際化

Djangoでは、`gettext`関数やその派生関数を使ってメッセージを国際化します。

gettext関数の使用例

以下は`gettext`関数を使用した例です。

# views.py
from django.utils.translation import gettext as _

def my_view(request):
    message = _("Welcome to my site.")
    return render(request, 'my_template.html', {'message': message})

gettext_lazyとの違い

`gettext_lazy`は、翻訳が必要なときまで翻訳を遅延させることができます。これはモデルフィールドの選択肢などで便利です。

テンプレートでの使用

Djangoのテンプレートでも国際化を容易に実装することができます。

テンプレートタグの使用

以下はテンプレート内で翻訳する例です。

{ % load i18n % }
< h1 >{ % trans "Welcome to my site." % }< /h1 >

応用例

Pluralization(複数形対応)

Djangoでは、単数形と複数形の両方に対応した翻訳が可能です。

from django.utils.translation import ngettext

def my_view(request, num):
    message = ngettext(
        'There is %(count)s item.',
        'There are %(count)s items.',
        num
    ) % {'count': num}
    return render(request, 'my_template.html', {'message': message})

Contextual markers(文脈マーカー)

同じ英語の単語でも、文脈によっては異なる翻訳が必要な場合があります。このような場合には`pgettext`関数を使用します。

# views.py
from django.utils.translation import pgettext

def my_view(request):
    message = pgettext("greeting", "Hello")
    return render(request, 'my_template.html', {'message': message})

まとめ

この記事では、Djangoでの国際化とローカライゼーションの基本的な実装方法について解説しました。基本設定からメッセージの国際化、そして応用例に至るまで、具体的なコード例とその解説を提供しました。この知識を活用して、多言語対応のウェブアプリケーションを作成してみてください。

コメント

コメントする

目次