TurboGearsアプリのロケール設定

TurboGearsのメモ。

Mariciは一応英語と日本語の表示に対応している。(一部英語のみの箇所もあったり混乱があるので整備中)

TurboGearsはデフォルトでブラウザの言語設定を判別してくれるのだけど、ユーザ設定などでロケールをユーザごとに制御したい場合もある。
これには二通りの方法が用意されている。まずセッションを使う方法。

from turbogears import i18n

...

i18n.set_session_locale(locale_name)

これは一行で済んで簡単。だけどこれだとmod_pythonを使っていたりアプリケーションサーバが複数でセッションデータが分散している時はうまくいかない。
そこでもう一つの方法。

configのi18n.get_localeに関数を渡しておくと、ロケールの取得にその関数が使われる。デフォルトはturbogears.i18n.utils._get_localeになっている。
たとえば以下のような感じで、ユーザレコードに入れておいたロケール名を使ってアクセスごとに再設定できる。

from turbogears import identity, i18n, config

def get_locale():
    if identity.not_anonymous() and identity.current.user.locale:
        return identity.current.user.locale
    else:
        return i18n.utils._get_locale()

config.update({'i18n.get_locale' : get_locale})

使えるロケールをテーブル化するなどはお好みで。ロケールがセットされればそれに応じたメッセージカタログが使われるので、_()関数でマークされた文字列などは適切な言語に置き換えられる。
メッセージカタログの整備は普通に"tg-admin i18n"コマンドを使えばいい。

(2007/10/15追記:タイトルを変えました)