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追記:タイトルを変えました)