2009-10-29 5 views
7

Ich habe ein Problem beim Implementieren eines domänenübergreifenden benutzerdefinierten Builds in Dojo. Die Situation ist wie folgt: Ich habe eine ziemlich große Anwendung haben, mit einer guten Anzahl von Lokalisierungsbündel, so basicly die Verzeichnisstrukturen ist wie
core \ (mein Modul)
nls \
fr \
de \
....
Beim Erstellen meines Moduls ist das Ergebnis eine große core.js/core.xd.js Datei, die, bien sur, die Lokalisierungen nicht enthält. In den locations nls-Verzeichnissen (en/fr/etc) finde ich nach dem Build jedes builded/minified-Paket und eine größere Datei für jede Sprache, core_fr.js/core_en.fs, die nur Dojo/Dijit-bezogene Strings enthält.Dojo benutzerdefinierte Build mit NLS/Lokalisierung

so mein Build-Skript ist

  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 der core.controller.Fusebox Klasse ich versuche 1 nls zu laden

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

hier wird es sterben jedoch mit

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

Meine Konfiguration in der HTML-Datei lautet:

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

und dann

<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> 

verwendete ich die unkomprimierte für Debug, natürlich. Das Problem ist, dass Dojo zur Laufzeit versucht, meine Bundles zu laden und sie nicht zu finden, und ich möchte sie in meine Layer-Datei einbetten, so dass keine zusätzlichen Ladevorgänge erforderlich sind. Kann dies erreicht werden? Und wenn wir schon dabei sind, gibt es irgendwelche Arbeitsorte/Beispiele mit domänenübergreifenden Lokalisierungen? UPDATE: Ich fuhr mit meiner Analyse fort und das Problem scheint darin zu liegen, dass ich nls dynamisch lade, so dass der Build Parser die requireLocalization() Aufrufe nicht finden kann. Daher enthält die Projektnls-Datei nur Dojo/Dijit-bezogenen Inhalt. Allerdings habe ich ein paar Paketladungen in eine Dummy-Datei eingefügt, und der Inhalt von core/nls wird vom Builder weiterhin ignoriert.

Danke für jede Info, ich bin ziemlich am Ende meiner Suche, es gibt nicht viel im Netz zu diesem Thema.

+0

Ich bin kein Experte für xd Probleme, aber ich war neugierig, die nls Einträge in modulePaths zu sehen. Sie sollten nicht notwendig sein. Benutzt du sie und macht es einen Unterschied, wenn du sie beseitigst? – peller

+0

Ich entfernte sie, keine Änderung, die Lokalisierungen sind immer noch nicht geladen. Ich denke, sie waren dort, weil sie aus alten Gründen entstanden sind ... aber du hattest recht. Ich habe den Beitrag entsprechend aktualisiert. – aciobanu

Antwort

5

Ich hatte ein ähnliches Problem vor ein paar Tagen. Zuallererst können Sie den Fehler umgehen, indem Sie die verfügbaren Locales als vierten Parameter des Aufrufs requireLocalization festlegen.

z.B.

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

obwohl Sie dies nicht tun sollten.

Haben Sie versucht, die Lokalisierung wie folgt einzuschließen?

dojo.requireLocalization("core", "FuseboxContent"); // and not dojo["require..."] 
+0

Nun, ich mache das, weil ich die nls-Dateien dynamisch lade, also komme ich auf diese Weise nicht in die Richtung des Builders. Ich habe das Problem in der Tatsache festgehalten, dass der Builder die Bündel in der Datei [modulename] _fr.xd.js nicht zusammenführt, wo er die Dojo/Dijit-Lokalisierung zusammenführt. In der xd-Phase werden meine Lokalisierungen nicht geladen, wenn er am Ende der Ebene eine preloadLocalization ausführt. Ich erstellte eine Dummy-Datei, die alle Lokalisierungen erfordert, um zu sehen, ob auf diese Weise es "sehen" und sie bauen wird, ohne Erfolg. – aciobanu