Thanks for the reply. But unfortunately it does not work. In the web 
browser it shows:

XMLHttpRequest cannot load 
> http://192.168.10.4:9876/traccar/i18n/org/traccar/web/client/i18n/Messages/default.
>  
> No 'Access-Control-Allow-Origin' header is present on the requested 
> resource. Origin 'http://192.168.10.4:8888' is therefore not allowed access.


This is not that bad. However, on that URL there is nothing:

curl -v 
> http://192.168.10.4:9876/traccar/i18n/org/traccar/web/client/i18n/Messages/default
> * Hostname was NOT found in DNS cache
> *   Trying 192.168.10.4...
> * Connected to 192.168.10.4 (192.168.10.4) port 9876 (#0)
> > GET /traccar/i18n/org/traccar/web/client/i18n/Messages/default HTTP/1.1
> > User-Agent: curl/7.37.1
> > Host: 192.168.10.4:9876
> > Accept: */*
> >
> < HTTP/1.1 200 OK
> < Content-Length: 0
> * Server Jetty(8.y.z-SNAPSHOT) is not blacklisted
> < Server: Jetty(8.y.z-SNAPSHOT)
> <
> * Connection #0 to host 192.168.10.4 left intact


Maybe my approach to generate localized JSON objects for loading at runtime 
is wrong and I should stick with some kind of servlet. Just thought that 
for GWT this will be a blessed way. I don't know...

пятница, 11 декабря 2015 г., 22:17:42 UTC+3 пользователь Thomas Broyer 
написал:
>
> 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