【问题标题】:How to detect the browsers language in the EntryPoint SmartGWT如何在 EntryPoint SmartGWT 中检测浏览器语言
【发布时间】:2013-08-23 11:10:59
【问题描述】:

我正在使用 SmartGWT 开发一个项目,我想让它国际化,但是如何在我的 EntryPoint (onModuleLoad) 中了解浏览器的语言? 我在服务器端使用 Spring,在我的 onModuleLoad 中,我正在向我的服务发送一个 RPC 调用,该调用从属性文件中收集数据并使用包含我所有用于国际化的键值的 Map 进行响应,因此在创建 IU 小部件时我我正在使用我的地图,就像这样 labels.get("myLabel")。 现在一切工作正常,我想检测浏览器的语言并将其用于查询正确的属性。 对不起,如果我的英语太糟糕了

【问题讨论】:

    标签: gwt internationalization smartgwt


    【解决方案1】:
    com.google.gwt.i18n.client.LocaleInfo#getCurrentLocale()
    

    【讨论】:

    • 我已经尝试过了,但总是返回“默认”作为字符串
    • @Slifer 你试过com.google.gwt.i18n.client.LocaleInfo.getCurrentLocale().getLocaleName()吗?
    • 是的,我已经尝试过了,它总是返回“默认”,即使我将标签 放入 *.gwt.xml
    【解决方案2】:

    然后我以一个肮脏的解决方案结束,我创建了一个 Lt_Shade 告诉我的 javascript 函数,它放置了 navigator.language,然后由于 Document 对象,我在我的 EntryPoint 中检索它,问题是当我使用 IE 运行时或FireFox,EntryPoint 在我的 HTML 页面之前运行,所以在我的 Javascript 函数之前并且我没有找到我的 navigator.language,所以我所做的是创建一个 JSNI 函数,它在我的 EntryPoint 中调用我的 javascript 对象(从 java 调用 Javascript 函数:gwt代码)所以我强调并坚持调用,然后我确定我的 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,那就更好了。 谢谢大家

    【讨论】:

    • 大家好,我一直致力于国际化我的应用程序,现在我想让我所有的小部件国际化,我在这里问了一个问题,stackoverflow.com/questions/18586500 请我需要你的帮助
    • 你有没有找到一个“干净”的解决方案?我也想知道如何在这里获得浏览器语言..
    【解决方案3】:

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

    Automatically selecting country and language for user in Java Servlet

    您也可以尝试在 EntryPoint 中添加一个 JavaScript 函数,例如

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

    【讨论】:

    • 如果我能做同样的事情就好了,但是在我的 GWT 入口点中,我没有(或者我不知道如何)访问请求。
    • 您可以尝试在您的 EntryPoint 中添加一个 JavaScript 函数,例如 var userLang = (navigator.language) ? navigator.language : navigator.userLanguage; alert ("The language is: " + userLang);
    • 是的,它不正确,但它的工作原理,我添加了一个隐藏输入,其值为 navigator.language,然后我在我的 EntryPoint 中使用 Document.getElementById("localeLangauge") 检索此值。获取属性(“值”)。谢谢提示
    • euuh,这不是很好,我在使用 FireFox 和 IE10 时遇到了问题,因为 EntryPoint 是在 HTML 页面之前加载的。在 中,我将 navigator.language 放入隐藏输入的值中,问题是使用 firefox 和 IE,entryPoint 在 HTML 页面之前加载,然后 onload 尚未执行,并且返回的值是一个空字符串...奇怪的是 Chrome 似乎可以工作,而我的 EntryPoint 具有正确的值...
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多