0

我正在对我的应用程序执行 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 中找到任何方法来做到这一点

谢谢

4

1 回答 1

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 之前将其添加到您的代码中。


这是 Showcase 2.4.0 示例中的完整设置:

我建议创建一个简单的新 GWT 项目(起初没有 gwtp 或任何特殊的东西),然后添加这些代码。然后您可以尝试将设置迁移到您的完整项目。

于 2012-05-16T14:39:15.587 回答