アプリケーションの性質により、ユーザーがログインしてから、ロケールを決めるのが遅すぎる場合があります。
  例えば、ユーザーがログインする前に、  前セッションで使用した同じロケールを使用させる場合があります。
  そのとき、ウェブアプリケーションでは、クッキーを使って行われます。ZKの場合は、リ  クエストインターセプターを登録し、インターセプターが呼ばれるときにクッキーを処理します。
リクエストインターセプターはZKローダーとZKアップデートエンジンによって処理されたリクエストをインターセプト(介入) します。
  それを使用するため、org.zkoss.zk.ui.util.RequestInterceptorインターフェースを実装しなければなりません。例えば、
public class MyLocaleProvider implements org.zkoss.zk.ui.util.RequestInterceptor {
    public void request(org.zkoss.zk.ui.Session sess,    
    Object request, Object response) {    
        final Cookie[] cookies = ((HttpServletRequest)request).getCookies();        
        if (cookies != null) {        
            for (int j = cookies.length; --j >= 0;) {            
                if (cookies[j].getName().equals("my.locale")) {                
                    //determine the locale                    
                    String val = cookies[j].getValue();                    
                    Locale locale = org.zkoss.util.Locales.getLocale(val);                    
                    sess.setAttribute(Attributes.PREFERRED_LOCALE, locale);                    
                    return;                    
                }                
            }            
        }        
    }    
}
有効にするために、以下のようにWEB-INF/zk.xmlの中にそれを登録しなければなりません。
  一度登録されると、ZKローダーまたはZKアップデートエンジンがリクエストを受け取るたびに、リクエストメソッドを呼び出します。
  設定について開発用リファレンス中のAppendix Bを参照してください。
<listener>
    <listener-class>MyLocaleProvider</listener-class>    
</listener>
【メモ】:インターセプターのインスタンスは登録されるときにインスタンス化されます。
  同一アプリケーション中のすべてのリクエストで共有されます。このため、同時に通信できる(つまり、thread-safe)ことを事前に確認しなければなりません。
【メモ】:request メソッドはかなり早い段階、リクエストパラメータが渡される前に、呼び出されます。
  このため、リクエストにロケールと文字列を適切にエンコードしない限り、このメソッドでそれらに通信することを推奨します。