我正在使用 SmartGWT 开发一个项目,我想让它国际化,但是如何在我的 EntryPoint (onModuleLoad) 中了解浏览器的语言?我在服务器端使用 Spring,在我的 onModuleLoad 中,我正在向我的服务发送一个 RPC 调用,该调用从属性文件中收集数据并使用包含我所有用于国际化的键值的 Map 进行响应,因此在创建 IU 小部件时我'正在使用我的地图,就像这样 labels.get("myLabel")。现在一切工作正常,我想检测浏览器的语言并将其用于查询正确的属性。对不起,如果我的英语这么差
3 回答
然后我以一个肮脏的解决方案结束,我创建了一个 Lt_Shade 告诉我的 javascript 函数,它放置了 navigator.language,然后由于 Document 对象,我在我的 EntryPoint 中检索它,问题是当我使用 IE 或 FireFox 运行时, EntryPoint 在我的 HTML 页面之前运行,所以在我的 Javascript 函数之前运行并且我没有找到我的 navigator.language,所以我所做的是创建一个 JSNI 函数,它在我的 EntryPoint 中调用我的 javascript 对象(从 java:gwt 代码调用 Javascript 函数)所以我强调并坚持通话,然后我确定我的 navigator.language 已加载并且我可以检索它。
在我的 HTML 页面中
....
<script language="javascript">
function loadLocaleLanguage(){
document.getElementById("localeLanguage").setAttribute("value",(navigator.language).substring(0,2); // I don't need Country code
}
</script>
...
<input type="hidden" id="localeLanguage" value="" />
....
在我的入口点
public static native void getLocaleLanguage() /*-{
$wnd.loadLocaleLanguage();
}-*/;
public void onModuleLoad(){
// I call my javascript function to ensure that the input have my localeLanguage
getLocaleLanguage();
// now I'm retreiving it using DOM thanks to Document object
String localeLanguage = Document.get().getElementById("localeLanguage").getAttribute("value");
....
}
我确定这不是最好的解决方案,但至少它可以工作,如果有人可以帮助我找到如何在 EntryPoint 中访问 httpRequest(它包含接受语言)或直接访问 EntryPoint 中的 navigator.language,它'会更好。多谢你们
com.google.gwt.i18n.client.LocaleInfo#getCurrentLocale()
我不确定这是否有帮助,但有一个像这样的问题,其中包括一些用于在 Java servlet 中获取语言的 Java 代码。
您也可以尝试在您的 EntryPoint 中添加一个 JavaScript 函数,例如
var userLang = (navigator.language) ? navigator.language : navigator.userLanguage;
alert ("The language is: " + userLang);