我有一个GWT DateBox实现:
DateTimeFormat dateFormat = DateTimeFormat.getLongDateTimeFormat();
dateBox.setFormat(new DateBox.DefaultFormat(dateFormat));
我想为日期设置不同的区域设置。例如 如果浏览器语言为法国,则日期应为:
2014年火星14
如果浏览器区域设置为英语
2014年3月14日
等等。
提前谢谢!
答案 0 :(得分:4)
试试这个
DateTimeFormat dateFormat = DateTimeFormat.getFormat(LocaleInfo.getCurrentLocale().getDateTimeFormatInfo().dateFormatLong());
或者你可以这样做:
Map<String, DefaultDateTimeFormatInfo> formats = new HashMap<String, DefaultDateTimeFormatInfo>();
DefaultDateTimeFormatInfo formatDE = new DateTimeFormatInfoImpl_de();
DefaultDateTimeFormatInfo formatEN = new DateTimeFormatInfoImpl_en();
DefaultDateTimeFormatInfo formatFR = new DateTimeFormatInfoImpl_fr();
DefaultDateTimeFormatInfo formatES = new DateTimeFormatInfoImpl_es();
DefaultDateTimeFormatInfo formatZH = new DateTimeFormatInfoImpl_zh();
DefaultDateTimeFormatInfo formatRU = new DateTimeFormatInfoImpl_ru();
formats.put("de", formatDE);
formats.put("en", formatEN);
formats.put("fr", formatFR);
formats.put("es", formatES);
formats.put("zh", formatZH);
formats.put("ru", formatRU);
String language = getLanguage();
DefaultDateTimeFormatInfo format = formats.get(language);
DateTimeFormat dateFormat = null;
if (format == null) {
dateFormat = DateTimeFormat.getFormat(LocaleInfo.getCurrentLocale()
.getDateTimeFormatInfo().dateFormatLong());
} else {
dateFormat = DateTimeFormat.getFormat(format.dateFormatFull());
}
System.out.println(dateFormat.format(new Date()));
DateBox dateBox = new DateBox();
dateBox.setFormat(new DateBox.DefaultFormat(dateFormat));
RootPanel.get().add(dateBox);
使用JSNI
public static final native String getLanguage() /*-{
return navigator.language;
}-*/;
French(fr)
区域设置
在上面的代码中,日期按照区域设置进行格式化,但是仍然以英语显示月份,例如: 3月不会被法国火星取代。
要解决此问题,我们必须定义区域设置。
请在此处阅读setting locale language dynamically initially。
似乎有5种提供语言环境的方法:
1。)使用名为&#34; locale&#34;的查询参数。要使用此方法,您可以让您的 Web服务器从app.example.com发送重定向到 app.example.com/?locale=确定您网络上的区域设置 服务器(如果可能)或您在应用内进行重定向,例如在 您的onModuleLoad()使用Window.Location.assign(+)。您可以通过设置a来更改查询参数的名称 &#34; locale.queryparam&#34;。
2。)使用cookie。要使用它,您必须定义cookie名称 设置&#34; locale.cookie&#34;到I18N.gwt.xml中的任何值都没有默认cookie 名称已定义。
3。)使用元标记。如前所述,您可以包含gwt:属性 动态主页中的元标记。
4。)使用用户代理信息。要使用它,你必须激活它 通过设置&#34; locale.useragent&#34;到&#34; Y&#34;默认为禁用 I18N.gwt.xml。
5。)创建自己的属性提供程序并使用JavaScript来填充 &#34;区域设置&#34;物业价值自己。在这里你完全免费如何 获得价值。
GWT的默认搜索顺序是&#34;查询参数,cookie,meta,useragent&#34;但 如果您没有配置/激活它们,将跳过cookie和useragent。 您还可以通过设置&#34; locale.searchorder&#34;来修改搜索顺序。在 你的gwt.xml。
现在选择一个解决方案......
答案 1 :(得分:2)
没有&#34;浏览器语言&#34; - 你无法可靠地检测到它。解决方案是使用GWT internationalization。您可以为项目定义不同的区域设置。然后,用户可以为您的应用选择一种语言,并且您可以以用户期望的方式显示所有UI元素,包括日期。许多元素 - 日期,货币,数字 - 将正确显示&#34;正确&#34;没有任何代码更改。
答案 2 :(得分:0)
另一种解决方案是在HTML中添加一段javascript,用于检测浏览器的语言并设置GWT属性
<script>
var search = location.search;
if(search.indexOf("locale") == -1){
var lang = navigator.language!=null ? navigator.language : navigator.browserLanguage;
var lang = lang.replace("-", "_");
document.write("<meta name='gwt:property' content='locale="+lang +"'>");
}
</script>
在Java中,您检索本地浏览器
String currentLocalString = LocaleInfo.getCurrentLocale().getLocaleName();
使用模式here格式化日期。