Собственная сборка Dojo с NLS / локализацией - PullRequest
7 голосов
/ 29 октября 2009

У меня проблема с реализацией междоменной пользовательской сборки в Dojo. Ситуация следующая: у меня довольно большое приложение с большим количеством пакетов локализации, поэтому в основном структура каталогов похожа на
ядро \ (мой модуль)
NLS \
фр \
ан \
....
При сборке моего модуля получается большой файл core.js / core.xd.js, который, bien sur, не содержит локализаций. В каталогах nls для локализации (en / fr / etc) я нахожу после сборки каждый пакет, собранный / уменьшенный, и файл большего размера для каждого языка, core_fr.js / core_en.fs, который содержит только строки, связанные с Dojo / Dijit.

так что мой скрипт сборки

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

В классе core.controller.Fusebox я пытаюсь загрузить 1 nls

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

здесь он умрет, однако с

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

Моя конфигурация в html-файле:

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

, а затем

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

Я использовал несжатый для отладки, конечно. Проблема в том, что во время выполнения Dojo пытается загрузить мои пакеты и не может их найти, и я хотел бы встроить их в файл слоя, поэтому никаких дополнительных загрузок не потребуется. Можно ли этого достичь? И пока мы здесь, есть ли рабочие сайты / примеры с междоменной локализацией? ОБНОВЛЕНИЕ: я продолжил свой анализ, и проблема, похоже, заключается в том, что я динамически загружаю nls, поэтому анализатор сборки не может найти вызовы requireLocalization (). Поэтому файл проекта nls содержит только содержимое, связанное с dojo / dijit. Тем не менее, я добавил несколько загрузок пакетов в фиктивный файл, и сборщик по-прежнему игнорирует содержимое core / nls.

Спасибо за любую информацию, я почти закончил поиски, в сети не так много информации по этому вопросу.

1 Ответ

5 голосов
/ 01 ноября 2009

У меня была похожая проблема несколько дней назад. Прежде всего, вы можете обойти ошибку, установив доступные локали как 4-й параметр вызова requireLocalization.

, например

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

хотя вы не должны этого делать.

Вы пробовали включить локализацию следующим образом?

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