2009-10-29 10 views
7

Tôi gặp sự cố khi triển khai xây dựng tùy chỉnh tên miền chéo trong Dojo. Tình hình là như sau: tôi có một ứng dụng khá lớn, với một số lượng tốt của gói nội địa hóa, vì vậy, về cơ bản cấu trúc thư mục giống như
lõi \ (mô-đun của tôi)
nls \
fr \
en \
....
Khi xây dựng mô-đun, kết quả là tệp core.js/core.xd.js lớn, trong đó, bien sur, không chứa các bản địa hoá. Trong các thư mục bản địa hóa nls (en/fr/etc) tôi tìm thấy sau khi xây dựng mỗi gói được xây dựng/rút gọn và một tệp lớn hơn cho mỗi ngôn ngữ, core_fr.js/core_en.fs, chỉ chứa các chuỗi liên quan Dojo/Dijit.Xây dựng tùy chỉnh Dojo với NLS/bản địa hóa

để xây dựng kịch bản của tôi là

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

Trong lớp core.controller.Fusebox tôi cố gắng để tải 1 nls

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

đây nó sẽ chết, tuy nhiên với

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

Cấu hình của tôi trong tệp html là:

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

và sau đó

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

tôi đã sử dụng không nén cho debug, tất nhiên. Vấn đề là, khi chạy, Dojo cố gắng tải các gói của tôi và không thể tìm thấy chúng, và tôi muốn nhúng chúng vào tệp lớp của tôi, vì vậy không cần tải thêm. Điều này có thể đạt được không? Và trong khi chúng tôi đang ở đó, có bất kỳ trang web/ví dụ hoạt động nào với các bản địa hóa miền chéo không? CẬP NHẬT: tôi tiếp tục phân tích của tôi và vấn đề dường như nằm trong thực tế là tôi đang tải động học nls, do đó, trình phân tích cú pháp xây dựng không thể tìm thấy các cuộc gọi requireLocalization(). Do đó, tệp nls của dự án chỉ chứa nội dung liên quan dojo/dijit. Tuy nhiên, tôi đã thêm một vài gói tải trong một tệp giả và nội dung của lõi/nls vẫn bị bỏ qua bởi trình tạo.

Cảm ơn bạn đã biết bất kỳ thông tin nào, tôi thấy khá nhiều vào cuối các tìm kiếm của mình, không có nhiều thứ trên mạng về chủ đề này.

+0

Tôi không phải là chuyên gia về các vấn đề xd, nhưng tôi đã tò mò muốn xem các mục nhập nls trong mô-đun. Họ không cần thiết. Bạn đang sử dụng chúng và nó có tạo nên sự khác biệt nào nếu bạn loại bỏ chúng? – peller

+0

Tôi đã xóa chúng, không thay đổi, bản địa hóa vẫn chưa được tải. Tôi nghĩ rằng họ ở đó vì một số lý do di sản ... nhưng bạn đã đúng là nữ quyền. Tôi đã cập nhật bài đăng cho phù hợp. – aciobanu

Trả lời

5

Tôi đã gặp sự cố tương tự cách đây vài ngày. Trước hết, bạn có thể khắc phục lỗi bằng cách đặt các ngôn ngữ có sẵn làm tham số thứ 4 của cuộc gọi requireLocalization.

ví dụ:

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

mặc dù bạn không cần phải làm điều đó.

Bạn đã thử bao gồm bản địa hóa như sau?

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

Vâng, tôi làm điều đó bởi vì tôi dinamicly tải các tập tin nls, vì vậy theo cách này tôi không nhận được vào cách xây dựng. Tôi đã ghim xuống vấn đề trong thực tế là người xây dựng không hợp nhất các gói trong tệp [modulename] _fr.xd.js, nơi anh ấy hợp nhất các bản địa dojo/dijit. Vì vậy, trong giai đoạn xd, khi anh ta thực hiện preloadLocalisation ở cuối lớp, bản địa hóa của tôi không được nạp. Tôi đã tạo một tệp giả, yêu cầu tất cả các bản địa hoá để xem liệu theo cách này, nó sẽ "nhìn thấy" chúng và xây dựng chúng, không có kết quả. – aciobanu