我正在对我的应用程序执行 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();
}
}
我在列表框 API 中没有找到任何方法来做到这一点
谢谢
您正在使用 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);
}
}
}
请确保在将更改处理程序添加到 localeBox 之前将其添加到代码中。
以下是 Showcase 2.4.0 示例中的完整设置:
- Showcase.gwt.xml 21-28 执行模块的区域设置(特别是它将可用的语言环境定义为"en"、"ar"、"fr"、"zh")
- ShowcaseShell.ui.xml 204-206 创建 ListBox 小部件。
- ShowcaseShell.java 113-114、190、322-364 将可用的区域设置填充到 ListBox 中,并添加一个 ChangeHandler。
我建议创建一个简单的新GWT项目(起初没有gwtp或任何特殊的东西),然后添加这些代码。然后,您可以尝试将设置迁移到整个项目。