Dojo custom build with NLS / localisation
Asked Answered
G

1

7

I have a problem implementing a cross domain custom build in Dojo. The situation is as follows: i have a pretty large application, with a good number of localisation bundles, so basicly the directory structures is like
core\ (my module)
nls\
fr\
en\
....
When building my module the result is a big core.js/core.xd.js file, which, bien sur, does not contain the localisations. In the localisation nls directories (en/fr/etc) i find after the build each bundle builded/minified, and a bigger file for each language, core_fr.js/core_en.fs, which contains only Dojo/Dijit related strings.

so my build script is

            layers: [
            {
    resourceName: "core",
            name: "../core/trusted.js",
            dependencies: [
                      "dojo.i18n",
                      //data
                      "dojox.data.JsonRestStore",
                      "dojox.data.XmlStore",
                      "dojox.rpc.Service",
                      "dojox.form.FileInput",
                       ...
                      "core.controller.Fusebox"                        
],
                  prefixes: [
                ["dijit","../dijit"],
            ["dojox","../dojox"],
                    ["core", "../core"]
                  ]

In the core.controller.Fusebox class i try to load 1 nls

dojo["requireLocalization"]("core", "FuseboxContent");

here it will die, however with

availableFlatLocales is undefined
[Break on this error] var locales = availableFlatLocales.split(",");\r\n

My config in the html file is :

// version build
  var djConfig = {
    baseUrl: 'https://..../',
    modulePaths: { 'core': 'core'},
    useXDomain: true,
    xdWaitSeconds: 10,
    parseOnLoad: true,
    afterOnLoad: true,
//  debugAtAllCosts: true,
    isDebug: true,
    locale: "fr"
  };

and then

<script type="text/javascript" src="http://xd.woopic.com/dojoroot/1.3.2-xd/dojo/dojo.xd.js.uncompressed.js"></script> 
<script type="text/javascript" src="https://..../core/trusted.js.uncompressed.js"></script>  

I used the uncompressed for debug, of course. The problem is that, on runtime, Dojo tries to load my bundles and can not find them, and i would like to embed them in my layer file, so no extra loads will be required. Can this be achieved? And while we're at it, are there any working sites/examples with cross domain localisations? UPDATE: i continued my analysis and the problem seems to lay in the fact that i am dynamicaly loading nls, so the build parser can not find the requireLocalization() calls. Therefore the project nls file contains only dojo/dijit related content. However, i added a few bundle loads in a dummy file, and the content of core/nls is still ignored by the builder.

Thanks for any info, i am pretty much at the end of my searches, there isn't much on the net on this subject.

Ghost answered 29/10, 2009 at 14:24 Comment(2)
I'm not an expert at xd issues, but I was curious to see the nls entries in modulePaths. They should not be necessary. Are you using them and does it make any difference if you eliminate them?Timpani
I removed them, no change, the localizations are still not loaded. I think they where there because of some legacy reasons ... but you were right are useleess. I updated the post accordingly.Ghost
S
5

I had a similar issue a few days ago. First of all, you can get around the error by setting the available locales as the 4th parameter of the requireLocalization call.

e.g.

dojo.requireLocalization("core", "FuseboxContent", null, "en,fr");

though you should not have to do that.

Did you try including the localization as follows?

dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."]
Selfpreservation answered 1/11, 2009 at 12:58 Comment(1)
Well, i do that because i dinamicly load the nls files, so in this way i don't get into builder's way. I pinned down the problem in the fact that the builder does not merge the bundles in the [modulename]_fr.xd.js file, where he merges the dojo/dijit localisations. So, in the xd phase, when he does preloadLocalisation at the end of the layer, my localisations are not loaded. I created a dummy file which requires all the localisations to see if in this way it will "see" them and build them, to no avail.Ghost

© 2022 - 2024 — McMap. All rights reserved.