如何将语言环境设置为GWT DateBox

时间:2014-03-14 15:03:51

标签: java gwt

我有一个GWT DateBox实现:

DateTimeFormat dateFormat = DateTimeFormat.getLongDateTimeFormat();
dateBox.setFormat(new DateBox.DefaultFormat(dateFormat));

我想为日期设置不同的区域设置。例如 如果浏览器语言为法国,则日期应为:

  

2014年火星14

如果浏览器区域设置为英语

  

2014年3月14日

等等。

提前谢谢!

3 个答案:

答案 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)区域设置

的屏幕截图

enter image description here


在上面的代码中,日期按照区域设置进行格式化,但是仍然以英语显示月份,例如: 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格式化日期。