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