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.
