gpt4 book ai didi

date - Play 2.0 日期格式

转载 作者:行者123 更新时间:2023-12-04 05:22:11 25 4
gpt4 key购买 nike

我正在尝试在 Play 中的 Scala 模板中格式化日期。到目前为止,我已经写了这个:

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

其中截止日期是我输出到网页的日期。但是,这使用 JVM 的语言环境,而不是用户选择的语言环境。

我的应用程序目前支持两种语言环境,挪威语(否)和英语(en)。这适用于消息,但不适用于 Date s。所以我尝试添加一个 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 版。

谢谢!

最佳答案

我尝试了 estmatic 的解决方案,但它没有正确区分相同语言的国家/地区变体,例如,如果我的浏览器的首选语言是“en_AU”和“en_US”,那么它只会使用“en”部分,这导致了美国风格的日期(月份在前)而不是澳大利亚风格的日期(日期在前,这是正确的和适当的)。

我的解决方案是创建一个辅助类,如下所示:

public class Formatter extends Controller {

private static final int DATE_STYLE = LONG;
private static final int TIME_STYLE = SHORT;

/**
* Formats the given Date as a date and time, using the locale of the current
* request's first accepted language.
*
* @param date the date to format (required)
* @return the formatted date
* @see play.mvc.Http.Request#acceptLanguages()
*/
public static String formatDateTime(final Date date) {
final Locale locale = getPreferredLocale();
return DateFormat.getDateTimeInstance(
DATE_STYLE, TIME_STYLE, locale).format(date);
}

private static Locale getPreferredLocale() {
final List<Lang> acceptedLanguages = request().acceptLanguages();
final Lang preferredLanguage = acceptedLanguages.isEmpty() ?
Lang.preferred(acceptedLanguages) : acceptedLanguages.get(0);
return new Locale(preferredLanguage.language(), preferredLanguage.country());
}
}

然后在我的 Scala 模板中,我所要做的就是使用(例如):
@import my.package.Formatter
...
Date = @Formatter.formatDateTime(someDate)

这对我来说似乎比在模板中有很多 Locale 构造逻辑更清晰。

关于date - Play 2.0 日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com