在我的应用程序(GWT(EXT_GWT)+ Spring)中,我需要设置用户(登录后)他的母语,而不是获取参数。例如:用户填写他的登录信息并通过登录表单传递,然后以准备工作的形式重定向(此表单必须使用本机用户语言。我从db获取的区域设置)。我的语言文件是在.properties文件中编写的,并在module.gwt.xml config。
中枚举所以问题是 - 我如何设置语言?也许有会话或邮政参数?但我不明白GWT在加载页面之前如何选择所需的语言环境。在加载页面之前在gwt设置区域设置的一些方法?
谢谢!
答案 0 :(得分:5)
我认为,在收到来自db的用户区域设置信息后,您应该将其重定向到url,例如(如果他来自俄罗斯):
http://www.example.org/myapp.html?locale=ru
例如,您可以保存应用程序已在会话中本地化的boolen标志并执行以下步骤:
LocaleInfo.getCurrentLocale().getLocaleName();
GWT.getModuleBaseURL()
?locale=locale_value
Window.Location.replace(newUrl)
例如localizeApp方法可能如下所示:
void localizeApp(User user) {
if (!localized) {
String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName();
if (!locale.equals(user.getLocale)) {
String url = GWT.getModuleBaseURL();
String newUrl = url + "?locale="+currentLocale;
localized = true; //and save to session here
Window.Location.replace(newUrl);
}
}
}
您可以在此处Internationalizing a GWT Application和Internationalizing a GWT Application找到更多关于GWT本地化的信息 想想它会对你有所帮助!
答案 1 :(得分:4)
使用内置国际化并按预期使用它,如果不重新加载页面,则无法执行此操作。内置的i18n仅依赖于加载与所选语言环境相对应的已编译排列。这意味着您不能只添加元标记,不能只是翻转设置,而且您将无法从内置的LocalInfo类中读取。
我认为有两种选择。首先,让重装更便宜,所以你可以使用GWT自带的i18n。要执行此操作,请通过创建新应用程序或使用拆分点从登录中分离应用程序的其余部分,以便加载尽可能少的代码。编译文件应该是缓存,因此它不应该影响下载时间,只影响启动应用程序所需的时间。
第二个选项,遵循不重新加载的约束:不要使用内置的I18n,而是根据运行时数据找到另一种方法来拉入字符串(与通常的编译时方法相反)。