In 
https://github.com/vitalidze/traccar-web/blob/12ceb111e20bb79aa9e046b9b9db5aae5aa84ffd/src/main/java/org/traccar/web/i18n/client/StringTranslator.java#L51
 
you need to use GWT.getModuleBaseForStaticFiles() instead of 
GWT.getModuleBaseURL().
http://www.gwtproject.org/javadoc/latest/com/google/gwt/core/client/GWT.html#getModuleBaseForStaticFiles()

On Friday, December 11, 2015 at 4:37:39 PM UTC+1, Vitaly Litvak wrote:
>
> Hi
>
> I am trying to reduce the compilation time of my GWT app. There are about 
> 160 permutations done for now and the reason is big number of 
> languages/locales supported. The main idea is to get rid of the static 
> compilation and replace it with dynamic loading of localized data. I have 
> almost succeeded, but now I am facing the problem with linker, which does 
> not expose public artifacts when I run project from IntelliJ Idea. I will 
> give more details and then point where the problem is now. 
>
> I already have the `Messages` interface and multiple `.properties` files 
> with defined translations and also I am using GXT library, which also uses 
> 'static' internationalization. Thus the only way I can imagine myself is to 
> replace the Localizable generator with my own implementation. I have 
> defined it in a separate module:
>
> <generate-with class="org.traccar.web.i18n.rebind.LocalizableGenerator">
>     <when-type-assignable class="com.google.gwt.i18n.shared.Localizable" />
> </generate-with>
>
>
> Then in generator I simply produce a single implementation, which will use 
> another class to load the strings from module's resources available under 
> {module.base.url}/i18n/path/to/package/ClassName/{locale}, for example 
> MyModule/i18n/com/google/gwt/i18n/client/constants/NumberConstantsImpl/ru
>
>
> I intend to store the localized strings as JSON object, which will be 
> generated by the 'generator' as well. Here is the code of my 
> 'LocalizableGenerator':
>
>
> JsonFactory jsonFactory = new JsonFactory();
> for (GwtLocale locale : localeParams.allLocales) {
>     AbstractResource.ResourceList resourceList = null;
>     try {
>         resourceList = ResourceFactory.getBundle(logger, targetClass, locale,
>                 assignableToConstants, context);
>         OutputStream os = context.tryCreateResource(logger, resource + "/" + 
> locale.toString());
>         if (os != null) {
>             JsonGenerator jg = jsonFactory.createGenerator(os, 
> JsonEncoding.UTF8);
>             jg.writeStartObject();
>             for (String key : resourceList.keySet()) {
>                 AbstractResource.ResourceEntry entry = 
> resourceList.getEntry(key);
>                 Collection<String> forms = entry.getForms();
>                 if (forms.isEmpty()) {
>                     jg.writeStringField(key, resourceList.getString(key));
>                 } else {
>                     jg.writeObjectFieldStart(key);
>                     jg.writeStringField("null", resourceList.getString(key));
>                     for (String form : forms) {
>                         jg.writeStringField(form, entry.getForm(form));
>                     }
>                     jg.writeEndObject();
>                 }
>             }
>             jg.writeEndObject();
>             jg.flush();
>             GeneratedResource generatedResource = 
> context.commitResource(logger, os);
>             context.commitArtifact(logger, generatedResource);
>         }
>     } catch (MissingResourceException e) {
>         throw error(logger,
>                 "Localization failed; there must be at least one resource 
> accessible through"
>                         + " the classpath in package '" + 
> targetClass.getPackage().getName()
>                         + "' whose base name is '"
>                         + ResourceFactory.getResourceName(targetClass) + "'");
>     } catch (IllegalArgumentException e) {
>         // A bad key can generate an illegal argument exception.
>         throw error(logger, e.getMessage());
>     } catch (IOException e) {
>         throw error(logger, e);
>     }
> }
>
>
> The generation works just fine. I can see produced files in a temporary 
> folder. Looks like they are included in the .war file as well when I produce 
> it with maven. However, they are not visible when I run my application in SDM 
> from IntelliJ Idea.
>
>
> Full source code is available on github: 
> https://github.com/vitalidze/traccar-web/tree/dynamic_i18n
>
>
> Commit with above changes: 
> https://github.com/vitalidze/traccar-web/commit/12ceb111e20bb79aa9e046b9b9db5aae5aa84ffd
>
>
> Any help appreciated.
>
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to