在gwt.xml中设置区域设置不起作用

时间:2014-03-15 21:10:44

标签: java gwt

在我的模块xml文件中,我有这个:

 <module rename-to="UIGenerator">
 <inherits name="com.google.gwt.http.HTTP" />
 <inherits name="com.google.gwt.xml.XML" />
 <inherits name="com.google.gwt.i18n.I18N" />
 <inherits name="com.google.gwt.i18n.CldrLocales" />
 <set-configuration-property name="locale.useragent"value="Y" />
 <extend-property name="locale" values="de" />
 <extend-property name="locale" values="fr" />
 <set-property name="locale" value="de, fr" />
 <set-property-fallback name="locale" value="de" />
 <entry-pointclass="mypackage.UIGeneratorEntryPoint" />
 </module>

但每次当我尝试使用locales时,它都会返回默认的英语。

   LocaleInfo.getAvailableLocaleNames(); this return Array of String with only one value   - default 

如果我设置它有效,但仅适用于没有其他人的德语!

提前谢谢!

3 个答案:

答案 0 :(得分:4)

我在运行应用程序时遇到错误,因为你的gwt.xml无效。

[Fatal Error] :13:53: Element type "set-configuration-property" must be followed by either attribute specifications, ">" or "/>".

value之前加一个空格,如下所示:

<set-configuration-property name="locale.useragent" value="Y" /> 

我在相同的背景下发布了一个答案。

请查看How do I set locale to GWT DateBox

German(de)区域设置的屏幕截图:

enter image description here

French(fr)区域设置的屏幕截图:

enter image description here


完整代码:

注意:只需使用gwt.xml文件中的实际入口点clas更改com.gwt.test.client.GWTTestProject

<强> gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.0//EN"
  "http://google-web-toolkit.googlecode.com/svn/tags/2.5.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='gwttestproject'>
    <!-- Inherit the core Web Toolkit stuff. -->
    <inherits name='com.google.gwt.user.User' />
    <inherits name="com.google.gwt.http.HTTP" />
    <inherits name="com.google.gwt.xml.XML" />
    <inherits name="com.google.gwt.i18n.CldrLocales" />

    <inherits name='com.google.gwt.user.theme.clean.Clean' />
    <inherits name="com.google.gwt.i18n.I18N" />

    <set-configuration-property name="locale.searchorder"
        value="cookie,queryparam" />
    <set-configuration-property name="locale.useragent"
        value="Y" />

    <extend-property name="locale" values="de" />
    <extend-property name="locale" values="fr" />
    <set-property name="locale" value="de, fr" />
    <set-property-fallback name="locale" value="de" />

    <!-- Specify the app entry point class. -->
    <entry-point class='com.gwt.test.client.GWTTestProject' />

    <!-- Specify the paths for translatable code -->
    <source path='client' />
    <source path='shared' />

</module>

入口点类

import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DefaultDateTimeFormatInfo;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.i18n.client.impl.cldr.DateTimeFormatInfoImpl_de;
import com.google.gwt.i18n.client.impl.cldr.DateTimeFormatInfoImpl_en;
import com.google.gwt.i18n.client.impl.cldr.DateTimeFormatInfoImpl_es;
import com.google.gwt.i18n.client.impl.cldr.DateTimeFormatInfoImpl_fr;
import com.google.gwt.i18n.client.impl.cldr.DateTimeFormatInfoImpl_ru;
import com.google.gwt.i18n.client.impl.cldr.DateTimeFormatInfoImpl_zh;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.datepicker.client.DateBox;

public class GWTTestProject implements EntryPoint {

public static final native String getLanguage() /*-{
    return navigator.language;
}-*/;

public void onModuleLoad() {
    System.out.println(Arrays.toString(LocaleInfo.getAvailableLocaleNames()));

    loacleDate();
}

public void loacleDate() {
    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);

    for (String key : formats.keySet()) {
        System.out.println(key + " - " + formats.get(key).dateFormat());
    }

    String language = getLanguage();

    DefaultDateTimeFormatInfo format = formats.get(language);
    DateTimeFormat dateFormat = null;
    if (format == null) {
        dateFormat = DateTimeFormat.getFormat(LocaleInfo.getCurrentLocale()
                .getDateTimeFormatInfo().dateFormatShort());
    } else {
        dateFormat = DateTimeFormat.getFormat(format.dateFormatFull());
    }

    System.out.println("Date formatted:" + dateFormat.format(new Date()));

    DateBox dateBox = new DateBox();
    dateBox.setFormat(new DateBox.DefaultFormat(dateFormat));
    RootPanel.get().add(dateBox);
}
}

<强> HTML

<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="GWTTestProject.css">
<title>Web Application Starter Project</title>
<script type="text/javascript" language="javascript"
    src="gwttestproject/gwttestproject.nocache.js"></script>
</head>
<body>

</body>
</html>

答案 1 :(得分:0)

确保为应用设置区域设置 - 以HTML格式或通过网址参数设置。例如,您可以将其包含在HTML中:

<meta name="gwt:property" content="locale=de">

另外,删除这些行:

<set-configuration-property name="locale.useragent"value="Y" />
<set-property name="locale" value="de, fr" />

我正在关注GWT guide中提供的示例,我从未遇到过语言环境问题。

答案 2 :(得分:-1)

首先请记住,在gwt: run-codeserver下,i18n语言环境不能很好地工作,因此必须在完全编译后进行测试。

这两条线没有理由,只需消除它们以使其起作用:

<set-configuration-property name="locale.useragent"value="Y" />
<set-property name="locale" value="de, fr" />