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