GWT Dynamic Locale

后端 未结 3 992
清歌不尽
清歌不尽 2021-01-03 11:55

I want to set gwt-locale taking user chosen locale with the help of Spring LocaleContextHolder.

public static final String getCurre         


        
相关标签:
3条回答
  • 2021-01-03 12:18

    Use a dynamic host page where you inject the proper <meta name="gwt:property" content="locale=XXX">.

    Remember the GWT bootstrap sequence: once your onModuleLoad has been called, the choice of the permutation (which includes the locale) has already been made. You have to alter the bootstrap sequence so it chooses the proper permutation for the user. ?locale=XXX does this (because the locale property has a <property-provider> that reads the locale query-string parameter, among other things), as well as the <meta> above.

    See also https://code.google.com/p/google-web-toolkit-incubator/wiki/ServerSideLocaleSelection for some idea (BEWARE: deprecated project!)

    Finally, there are a few issues with your *.gwt.xml, starting with kh not being a valid locale.

    The workflow for internationalizing your app is as follows:

    1. list your locales:

      <extend-property name="locale" value="en" />
      <extend-property name="locale" value="fr" />
      
    2. remove the default locale by setting the locale property to the full list of supported locales:

      <set-property name="locale" value="en,fr" />
      
    3. set the fallback locale:

      <set-property-fallback name="locale" value="en" />
      

    Optionally, you can select how the locale is determined using the properties locale.queryparam, locale.cookie, locale.usemeta, locale.useragent, and locale.searchorder (see the I18N.gwt.xml for their default and accepted values).

    And finally, add code to select the locale (e.g. the dynamic <meta> above)

    0 讨论(0)
  • 2021-01-03 12:20

    The solution inspired by Thomas Broyer,

    X.gwt.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.3.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.3.0/distro-source/core/src/gwt-module.dtd">
    <module rename-to="x">
        <inherits name="com.google.gwt.user.User"/>
        <inherits name="com.google.gwt.i18n.I18N" />
        <inherits name="com.google.gwt.http.HTTP" />
        <inherits name="com.google.gwt.json.JSON"/>
    
        <inherits name="com.google.gwt.uibinder.UiBinder" />
        <inherits name="com.google.gwt.inject.Inject" />
        <inherits name="com.gwtplatform.mvp.Mvp" />
        <inherits name="gwtquery.plugins.droppable.Droppable"/>
    
        <source path="client" />
        <source path="shared" />
    
        <define-configuration-property name="gin.ginjector" is-multi-valued="false"/>
        <set-configuration-property name="gin.ginjector" value="com.prayagupd.client.mvp.XGInjector"/>
        <set-configuration-property name="UiBinder.useSafeHtmlTemplates" value="true" /> 
    
        <extend-property name="locale" values="kh" />
        <extend-property name="locale" values="en" />
        <set-property-fallback name="locale" value="kh"/>
    
        <entry-point class="com.prayagupd.client.XEntryPoint"/>
    
    </module>
    

    And , home.jsp

    <c:if test="${isgwt}">
    <meta name="gwt:property" content="locale=${locale}">
    <script type="text/javascript" language="javascript" src="upd/upd.nocache.js"></script>
    </c:if>
    

    locale being passed from Spring Controller

    {
        //...
        modelMap.put("locale", locale);
        return "home";
    }
    
    0 讨论(0)
  • 2021-01-03 12:34

    Thomas Broyer's answer is correct, except one thing. You don't mandatory need to use "dynamic host page", meta tag can be defined dynamically on the client side:

    <script type="text/javascript">
        $.ajax("rest/service/default-locale").done(function(data) {
            if (data) {           
                var metaLocale = $("<meta name='gwt:property' content='locale=" + data + "'>");
                $("head").append(metaLocale);
            }
            var jsLink = $("<script src='myapp.nocache.js'>");
            $("head").append(jsLink);
        });
    </script>
    

    This way any additional modifications can be done on the client side before GWT app starts.

    0 讨论(0)
提交回复
热议问题