Kay はソースからのメッセージ抽出・アプリケーションに新規言語を追加する方法・メッセージカタログの更新とコンパイル・javascript の gettext 実装を含む、殆んど完全な国際化機構を持っています。この機能は基本的に jinja2 の国際化機構をベースとしているので、下記でホストされている jinja2 のドキュメントを参照するのは良いアイデアと言えるでしょう:
http://jinja.pocoo.org/2/documentation/
Kay は自動的にブラウザの Accept-Language ヘッダを解析して、ユーザーが使用する言語を決めます。また使用する言語を選択するためのリンクを作成し、Accept-Language の設定を上書きする事もできます。
Python コード内では下記のようにしてメッセージをマークできます:
from kay.i18n import gettext as _
_('Hello')
テンプレート内では下記のようにします:
<p>{{ _('Hello') }}</p>
<p>{% trans %}Hello{% endtrans %}
myapp アプリケーションからメッセージを抽出し、カタログファイルの雛型を作成するには下記のようにします:
$ python manage.py extract_messages myapp
extract_messages サブコマンドはオプションの --domain パラメーターを受け付けます。この値は messages か jsmessages である必要があります。
翻訳したファイルをアップデートされた雛型に追従させるには下記のようにします:
$ python manage.py update_translations myapp -l ja
myapp アプリケーションの翻訳全てをコンパイルするには下記のようにします:
$ python manage.py compile_translations myapp
ユーザーの cookie に使用したい言語を設定するための関数があります。この機能を使うためには下記のように kay.i18n を INSTALLED_APPS に追加する必要があります。
INSTALLED_APPS = (
'kay.i18n',
)
jinja2 のコンテキストに create_lang_url 関数が自動でロードされていますので、下記のようにこれを使って明示的に言語を設定するリンクを作成する事ができます。
<a href="{{ create_lang_url(lang='en') }}">{{ _('English') }}</a>
<a href="{{ create_lang_url(lang='ja') }}">{{ _('Japanese') }}</a>
javascript で gettext を使用するためのハンドラーは下記のように定義します:
from kay.views.i18n import javascript_catalog
return Map([
Rule('/_i18n.js', endpoint='i18n_js',
defaults={'packages':('myapp','kay')}),
])
all_views = {
'i18n_js': javascript_catalog,
}