GWT I18N on the server side

前端 未结 2 1430
醉酒成梦
醉酒成梦 2020-12-30 08:09

What is the best way to implement GWT Server Side Internationalization?

  1. Use native Java properties files (not sure how to read and how to locate the right l

相关标签:
2条回答
  • 2020-12-30 08:39

    I found this solution and it looks very good

    gwt-i18n-server - Provides a simple support of gwt i18n feature on the server side

    The aim is to permit to the GWT developer to use their Constants and Messages interfaces on the server side (See internationzation). The implementation is based on java reflect api. It loads the properties files from the classpath (same folder than the interface). It supports Constants, ConstantsWithLookup, Messages (plural too). The licence is LGPL.

    Client current locale can be found this way:

    LocaleInfo.getCurrentLocale().getLocaleName()
    
    0 讨论(0)
  • 2020-12-30 08:44

    Following other threads here in SO, I came up with this solution that also considers the encoding used for the properties files (which can be troublesome as ResourceBundle uses by default "ISO-8859-1"):

    import java.io.UnsupportedEncodingException;
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    public class MyResourceBundle {
    
        // feature variables
        private ResourceBundle bundle;
        private String fileEncoding;
    
        public MyResourceBundle(Locale locale, String fileEncoding){
            this.bundle = ResourceBundle.getBundle("com.app.Bundle", locale);
            this.fileEncoding = fileEncoding;
        }
    
        public MyResourceBundle(Locale locale){
            this(locale, "UTF-8");
        }
    
        public String getString(String key){
            String value = bundle.getString(key); 
            try {
                return new String(value.getBytes("ISO-8859-1"), fileEncoding);
            } catch (UnsupportedEncodingException e) {
                return value;
            }
        }
    }
    

    The way to use this would be very similar than the regular ResourceBundle usage:

    private MyResourceBundle labels = new MyResourceBundle("es", "UTF-8");
    String label = labels.getString(key)
    

    Or you can use the alternate constructor which uses UTF-8 by default:

    private MyResourceBundle labels = new MyResourceBundle("es");
    
    0 讨论(0)
提交回复
热议问题