Seasar 2.4.39 + Cubby 2.0.1 で動作確認しました。
Cubby で国際化対応を考えたい場合 MessagesBehaviour インターフェースを実装したクラスを用意すればよいようです。今回は ResourceBundle の取得以外はそのまま処理を利用したいので DefaultMessagesBehaviour を継承しました。
public class ExampleMessagesBehaviour extends DefaultMessagesBehaviour {
/**
* {@inheritDoc}
*/
@Override
public ResourceBundle getBundle(final Locale locale) {
Locale newLocale = getLocale(locale);
return super.getBundle(newLocale);
}
private Locale getLocale(Locale locale) {
// locale を取得するコード
// HttpSession session = ThreadContext.getRequest().getSession();
return locale;
}
}
DefaultMessagesBehaviour が定義されているところを継承したクラスに変更します。
<!-- messages behaviour -->
<component class="example.ExampleMessagesBehaviour">
<property name="baseName">"messages"</property>
</component>
これでアプリケーションにリクエストを要求するごとに、リソースを入れ替える処理のできあがりです。最後に messages_xx.properties を用意します。
あと getBundle が呼ばれる時点では Seasar から DI はされないので、もしコンポーネントを利用したい場合は SingletonS2Container から取得するなどしないといけないです。