我正在寻找有关如何在使用GWT时使我的hibernate验证消息国际化的一些帮助,以便它适用于客户端和服务器消息。
根据this question,我应该在我的类路径中放置一个ValidationMessages.properties文件,或者使用以下代码:
Validation
.byProvider(HibernateValidator.class)
.configure()
.messageInterpolator(
new ResourceBundleMessageInterpolator(
new PlatformResourceBundleLocator("com.mycompany.Messages")))
.buildValidatorFactory()
.getValidator();`
但是这个方法是否可以在客户端使用GWT代码?我该怎么做才能使它在客户端工作?
答案 0 :(得分:1)
如果您想使用GWT对消息进行国际化,请检查Static String Internationalization和Dynamic String Internationalization。
我使用GWT ConstantsWithLookup作为常量数据(例如按钮文本,文本标签) 。
我使用GWT Messages作为我的消息数据(例如警报,警告,确认,提示对话框)。
不要忘记在gwt.xml文件中添加配置,如下所示......
<extend-property name="locale" values="en"/>
<extend-property name="locale" values="ja"/>
<!-- set the fallback for locale default Japan -->
<set-property-fallback name="locale" value="ja"/>
........
我使用本地 en 表示英语, ja 表示日语。我创建了ListBox供用户根据自己的喜好选择Locale,并使用Cookie来维护用户权限。下面是我在cookie中保存语言环境的示例代码,以便在下次打开时进行国际化...
public static void initializeLocaleBox(final ListBox localeBox) {
String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName();
if (currentLocale.equals("default")) {
currentLocale = "ja";
}
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.addChangeHandler(new ChangeHandler() {
public void onChange(final ChangeEvent event) {
String localeName = localeBox.getValue(localeBox.getSelectedIndex());
Date now = new Date();
long sevenDays = now.getTime();
// seven days
sevenDays = sevenDays + (1000 * 60 * 60 * 24 * 7);
now.setTime(sevenDays);
Cookies.setCookie("locale", localeName, now);
UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", localeName);
Window.Location.replace(builder.buildString());
}
});
}
public static boolean isLocaleJapan() {
String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName();
return currentLocale != null && currentLocale.equals("ja") ? true : false;
}
public static boolean isLocaleEnglish() {
String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName();
return currentLocale != null && currentLocale.equals("en") ? true : false;
}
要将网址更改为本地化,我使用GWT进行了转换,如下所示..
public static final String getBaseUrl(final int codesvrPort) {
String locale = Cookies.getCookie("locale");
if (locale == null || locale.equals("")) {
locale = "en";
}
String baseUrl = GWT.getHostPageBaseURL() + GWT.getModuleName() + ".html";
if (GWT.getHostPageBaseURL().contains("localhost")
|| GWT.getHostPageBaseURL().contains("127.0.0.1")) {
return baseUrl + "?locale=" + locale + "&gwt.codesvr=127.0.0.1:" + codesvrPort;
}
return "";
}
Here是您的有用链接。我很抱歉链接太多了。有一些对你有用:)
来自this链接。
注意:后缀属性文件
如果您以前从未处理过国际化,那么您可能想知道为什么将_de后缀附加到德语属性文件中。后缀_de是德语(Deutsch)的标准语言标记。语言标记是指示文档或应用程序的语言环境的缩写。除了指定语言外,它们还可以包含指示区域设置区域的子标签。例如,加拿大法语区的语言标签是fr_CA。
在GWT中,属性文件指示具有语言代码后缀的语言环境(就像Java资源包一样)。例外是默认语言环境的属性文件。如果在运行时未显式设置语言环境,则使用不带语言代码后缀的属性文件。对于StockWatcher,您已使用注释指定了默认转换,而不是使用默认属性文件。