2

Play の Scala テンプレートで日付をフォーマットしようとしています。これまでのところ、私はこれを書いています:

<p>@DateFormat.getInstance().format(deadline)</p>

締め切りは、Web ページに出力する日付です。ただし、これはユーザーが選択したロケールではなく、JVM のロケールを使用します。

私のアプリは現在、ノルウェー語 (no) と英語 (en) の 2 つのロケールをサポートしています。これはメッセージには適していますが、Dates には適していません。そのため、以下に示すように各リクエストを傍受するためにa を追加しようとしましたGlobalSettingsが、明らかに呼び出されませんでした:

import java.lang.reflect.Method;
import java.util.Locale;
import org.springframework.context.i18n.LocaleContext;
import org.springframework.context.i18n.LocaleContextHolder;
import play.GlobalSettings;
import play.i18n.Lang;
import play.mvc.Action;
import play.mvc.Http.Request; 

public class Global extends GlobalSettings {

    @SuppressWarnings("rawtypes")
    @Override
    public Action onRequest(final Request request, final Method actionMethod) {

        LocaleContextHolder.setLocaleContext(new LocaleContext() {
            public Locale getLocale() {
                Lang preferred = Lang.preferred(request.acceptLanguages());
                return preferred.toLocale();
            }
        });
        return super.onRequest(request, actionMethod);
    }
}

誰かがこの問題の解決策を持っていますか? Play の既知のバグですか? バージョン 2.0.4 を使用しています。

ありがとう!

4

2 に答える 2

1

DateFormat インスタンスを取得するときにロケールを指定する必要があります。それ以外の場合は、Play がブラウザから取得する代わりに、システムのデフォルト ロケールを使用します。

このようなものがうまくいくようです:

@DateFormat.getDateInstance(DateFormat.LONG, (implicitly[Lang]).toLocale).format(deadline)

そのimplicitly[Lang]ビットは、基本的Lang.preferred(request.acceptLanguages()に onRequest() メソッドで行っていたのと同じように呼び出しています。

于 2012-11-27T23:22:35.620 に答える