Хобрук: Ваш путь к мастерству в программировании

Установка локалей в gwt.xml не работает

В моем 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>

Но каждый раз, когда я пытаюсь использовать локали, он возвращает мне английский язык по умолчанию.

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

ЕСЛИ ставлю Работает но только для немецкого без других!

Заранее спасибо!

15.03.2014

  • Что вы упомянули в gwt.xml? 16.03.2014
  • Он работает, как и ожидалось, вот мой вывод [default, de, de_AT, de_BE, de_CH, de_DE, de_LI, de_LU, fr, fr_BE, fr_CA, fr_CH, fr_FR, fr_LU, fr_MC, fr_SN] 16.03.2014
  • Любая ошибка, которую вы получаете при запуске приложения? 16.03.2014
  • Нет, у меня нет ошибок, но дата, которую я хотел бы напечатать, по умолчанию указана на английском языке, и я использую XML выше. Даже то, что я передаю локаль в качестве параметра в URL 16.03.2014

Ответы:


1

У меня возникла ошибка при запуске приложения из-за того, что ваш 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" /> 

Я разместил ответ в том же контексте.

Пожалуйста, взгляните на Как мне установить локаль на GWT DateBox

Скриншот для локали German(de):

введите здесь описание изображения

Скриншот для локали French(fr):

введите здесь описание изображения


Полный код:

Примечание: просто измените com.gwt.test.client.GWTTestProject его на фактическую точку входа в ваш файл gwt.xml.

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>
15.03.2014
  • Я видел твой пост вчера. Но это все еще не работает: каждый раз, когда моя дата в GWT Box находится на языке по умолчанию, если я не указал язык явно с помощью set-property, но это работает только для указанного свойства 16.03.2014
  • На снимке экрана показана немецкая локаль (de), а не французская. 16.03.2014
  • Извините, я проверил его с немецким, а также с французским языком. Моя ошибка. Позвольте мне изменить его. Позвольте мне сделать это для вас. Работаю над этим. Я вернусь, он все еще не работает, как ожидалось. Я не силен в языке. :) 16.03.2014
  • Это работает, если вы передадите locale=fr в URL-адресе в качестве строки запроса и обновите страницу. Я тестировал с локалью fr и de. Должен ли я поделиться полным кодом? 16.03.2014
  • Не могли бы вы поделиться полным кодом и правильно ли настроен мой файл gwt.xml? 16.03.2014
  • Готово, я добавил это в свой ответ. Пожалуйста, попробуйте прямо сейчас. Дайте мне знать в случае возникновения каких-либо проблем. 16.03.2014
  • Я пытаюсь сейчас. Минуточку, БОЛЬШОЕ СПАСИБО! У меня нет этих тегов в моем приложении ‹!-- Укажите пути для переводимого кода --› ‹source path='client' /› ‹source path='shared' /› Они мне нужны? 16.03.2014
  • Я получаю этот объект из MAP DefaultDateTimeFormatInfo formatFR = new DateTimeFormatInfoImpl_fr(); и когда я форматирую дату с ним, ситуация та же: по умолчанию язык - английский. ЗДЕСЬ я определяю формат - DefaultDateTimeFormatInfo format = formats.get(getLanguage()); где getLanguage() возвращает мне правильный язык, но все еще не работает..... 16.03.2014
  • Вы проверили это, передав locale=fr в URL-адресе в качестве строки запроса? Каковы языковые настройки вашего браузера? 16.03.2014
  • Я меняю языковые настройки на французский. Я правильно понимаю язык, но все же этот DateTimeFormatInfoImpl_fr() не форматирует дату французского языка 16.03.2014
  • давайте продолжим это обсуждение в чате 16.03.2014

  • 2

    Убедитесь, что вы установили языковой стандарт для своего приложения — либо в HTML, либо через параметр URL. Например, вы можете включить это в свой HTML:

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

    Также удалите эти строки:

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

    Я следую примерам, предлагаемым в руководстве по GWT, и у меня никогда не было проблем с локали.

    15.03.2014
  • ИТ снова тот же. GWT использует язык по умолчанию, который является английским, даже если я удалил эти две строки. 16.03.2014
  • Извини, мой друг, это снова то же самое. Я вижу только язык по умолчанию в Locales 16.03.2014
  • Как вы используете локаль? Как вы печатаете эту дату? 16.03.2014
  • dateBox.setFormat (новый DateBox.DefaultFormat (dateFormat)); dateBox.setValue (новая дата ()); Где dateBox - объект gwt DateBox 16.03.2014
  • dateBox.setFormat (формат даты); 16.03.2014

  • 3

    Во-первых, имейте в виду, что локаль i18n плохо работает под gwt: run-codeserver, поэтому вы должны протестировать ее после полной компиляции.

    И нет никакой причины для этих двух строк, просто удалите их, чтобы они заработали:

    <set-configuration-property name="locale.useragent"value="Y" />
    <set-property name="locale" value="de, fr" />
    
    08.10.2018
    Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..