如何在EntryPoint SmartGWT中检测浏览器语言

如何在EntryPoint SmartGWT中检测浏览器语言,gwt,internationalization,smartgwt,Gwt,Internationalization,Smartgwt,我正在用SmartGWT开发一个项目,我想让它国际化,但是如何知道我的入口点(onModuleLoad)中的浏览器语言呢? 我在服务器端使用Spring,在我的onModuleLoad中,我向我的服务发送一个RPC调用,该服务从属性文件收集数据,并用一个包含所有国际化密钥值的映射进行响应,因此在创建IU小部件时,我使用的映射类似于lables.get(“myLabel”)。 现在一切都正常了,我想检测浏览器的语言并使用它来查询正确的属性。 很抱歉,如果我的英语这么差我不确定这是否有帮助,但有一个

我正在用SmartGWT开发一个项目,我想让它国际化,但是如何知道我的入口点(onModuleLoad)中的浏览器语言呢? 我在服务器端使用Spring,在我的onModuleLoad中,我向我的服务发送一个RPC调用,该服务从属性文件收集数据,并用一个包含所有国际化密钥值的映射进行响应,因此在创建IU小部件时,我使用的映射类似于lables.get(“myLabel”)。 现在一切都正常了,我想检测浏览器的语言并使用它来查询正确的属性。
很抱歉,如果我的英语这么差

我不确定这是否有帮助,但有一个类似这样的问题,其中包括一些java代码,用于在java servlet中获取该语言

您还可以尝试向入口点添加JavaScript函数,如

var userLang = (navigator.language) ? navigator.language : navigator.userLanguage; 
alert ("The language is: " + userLang);

然后我以一个肮脏的解决方案结束,我按照Lt_Shade告诉我的那样创建了一个javascript函数,它将navigator.language放在了我的入口点中,然后由于Document对象,我在入口点中检索它,问题是当我使用IE或FireFox运行时,入口点在我的HTML页面之前运行,所以在我的Javascript函数之前,我没有找到我的navigator.language,所以我所做的是创建一个JSNI函数,在我的入口点内调用我的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="" />
....
我相信这不是最好的解决方案,但至少它是有效的 如果有人能帮我找到如何在入口点中访问httpRequest(它包含accept语言)或直接在入口点中访问navigator.language,那就更好了。
谢谢大家

如果我也能这么做那就太好了,但是在我的GWT入口点中,我没有(或者我不知道如何)访问请求的权限。你可以尝试在入口点中添加一个JavaScript函数,比如
var userLang=(navigator.language)?navigator.language:navigator.userLanguage;警报(“语言为:“+userLang”)是的,这是不正确的,但它是有效的,我添加了一个值为navigator.language的隐藏输入,然后我用Document.getElementById(“localelanguage”).getAttribute(“value”)在我的入口点中检索这个值。谢谢你的提示,效果不是很好,我对FireFox和IE10有一个问题,因为入口点是在HTML页面之前加载的。在我将navigator.language放入隐藏输入的值中的过程中,问题是firefox和IE的入口点在HTML页面之前加载,然后onload还没有执行,返回的值是一个空字符串。。。奇怪的是,Chrome似乎可以工作,我的入口点有正确的值……我已经尝试过了,但它总是返回默认值string@Slifer您是否尝试过
com.google.gwt.i18n.client.LocaleInfo.getCurrentLocale().getLocaleName()
?是的,我已经尝试过了,它总是返回“default”,即使我把标签和属性放在*.gwt.xmlhi中,我总是想把我的应用程序国际化,现在我想让我所有的小部件国际化,我在这里问了一个问题,请我需要你的帮助你找到“干净”的解决方案了吗?我还想知道如何在这里获得浏览器语言。。
....
<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");
    ....
}