2012-05-16 4 views
0

Я делаю i18n для своего приложения. Я сделал что-то, что показано в примере витрины. Я использую список для отображения разных локалей. Проблема заключается в том, что я переключаюсь из одной локали в другую локаль, язык меняется, но окно списка не отображается локаль, в которой я нахожусь, это показывает первый элемент списка каждый раз, как он перегрузочныйКак показать локаль, отображаемую браузером в gwt I18N?

вот код:

@Override 
    public void changeSwap() { 

    final String queryParam = LocaleInfo.getLocaleQueryParam(); 
    String locale=getView().getLocale().getValue(getView().getLocale().getSelectedIndex()); 
     Log.info("revealed locale is"+locale); 
    if (queryParam != null) { 
     UrlBuilder builder = Location.createUrlBuilder().setParameter(
      queryParam, locale); 
     Window.Location.replace(builder.buildString()); 
     } else { 
     // If we are using only cookies, just reload 
     Window.Location.reload(); 
     } 
    } 

я не нашел метод в ListBox api, чтобы сделать это

спасибо

+0

сообщение фрагмент кода, который воспроизводит проблему –

+0

@Override \t общественного недействительного changeSwap() { \t \t \t окончательной Строка queryParam = LocaleInfo.getLocaleQueryParam(); \t \t String localeFromView = getView(). GetLocale(). GetValue (getView(). GetLocale(). GetSelectedIndex()); \t \t Log.info («обнаруженный языковой стандарт» + localeFromView); \t if (queryParam! = Null) { UrlBuilder builder = Location.createUrlBuilder(). SetParameter ( queryParam, localeFromView); Window.Location.replace (builder.buildString()); } else { // Если мы используем только файлы cookie, просто перезагрузите Window.Location.reload(); } \t} – SKM

ответ

1

Вы используете часть кода из Showcase (ShowcaseShell.initializeLocaleBox()), но та часть, которая отвечает за выбор правильного значения в ListBox заключается в следующем:

String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName(); 
if (currentLocale.equals("default")) { 
    currentLocale = "en"; 
} 
String[] localeNames = LocaleInfo.getAvailableLocaleNames(); 
for (String localeName : localeNames) { 
    if (!localeName.equals("default")) { 
    String nativeName = LocaleInfo.getLocaleNativeDisplayName(localeName); 
    localeBox.addItem(nativeName, localeName); 
    if (localeName.equals(currentLocale)) { 
     localeBox.setSelectedIndex(localeBox.getItemCount() - 1); 
    } 
    } 
} 

Убедитесь, чтобы добавить его в свой код перед добавлением ChangeHandler в localeBox.


Вот полная установка в примере Витрина 2.4.0:

Я бы рекомендовал создать простой новый проект GWT (сначала без gwtp или ничего особенного) и просто добавить эти биты кода. Затем вы можете попытаться перенести установку в свой полный проект.

+0

на самом деле я использую gwtp и UiBinder я добавил две локали на мой ListBox как <г: значение элемента = «EN»> английский \t <г: значение элемента = «фр»> французский и в моем презентаторе я добавил логику, если добавить код, указанный здесь, он показывает все локали, которые r доступны в LocaleInfo, но когда я выбираю другую локаль, это изменение не происходит, есть какая-то вещь, которую я не вижу – SKM

+0

@ krrish: 1.) Вы не должны добавлять никаких '' вручную. Все локали, определенные в '.gwt.xml' (с использованием ) добавляются в поле в цикле 'for'. 2.) Затем ваш метод changeSwap() 'должен выполнять обработку изменений. Вам придется зарегистрировать его как-то как ChangeHandler, но в вашем вопросе, который вы написали, что изменение языка уже происходит, поэтому я предполагаю, что вы уже это делаете (надеюсь, вы не удалили этот код)? –

+0

1.если я удаляю '', список отображается без каких-либо значений в нем, а мой changeSwap() - это метод обработчика, который вызывается при событии onchange. – SKM

Смежные вопросы