Oh. After reverse engineering of GWT code server I have solved my issue. My 
mistake was that I omitted the extension from generated filed. Now I put 
'.json' at the end, use 'GWT.getModuleBaseForStaticFiles()' and voila, it 
works. Also the code server kindly adds necessary headers so the message 
"No 'Access-Control-Allow-Origin' header is present..." does not appear 
anymore.

Thank you very much for your help.

суббота, 12 декабря 2015 г., 1:09:30 UTC+3 пользователь Vitaly Litvak 
написал:
>
> 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 https://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to