2012-11-07 19 views
7

Tôi tiếp tục kết thúc bằng một danh mục trống trong JavaScript jsi18n của mình. Tôi đã thử tất cả các giải pháp trên StackOverflow bao gồm Empty catalog when internationalizing JavaScript code, nhưng danh mục vẫn còn trống.Danh mục dịch JavaScript rỗng của Django (i18n/jsi18n)

Thiết lập của tôi là thế này:

project_dir 
- locale 
    - nl (contains LC_MESSAGES with django.po and djangojs.po) 
- app1 
- app2 
- main_app 
    - settings.py 
    - urls.py 
    - wsgi.py 

Trong settings.py Tôi có

# Where to find locale 
LOCALE_PATHS = (
    os.path.join(SITE_ROOT, 'locale'), 
) 

SITE_ROOT là đường dẫn tuyệt đối đến thư mục dự án của tôi, vì vậy đây dịch để

Trong url. py Tôi có

# i18n 
js_info_dict = { 
    'domain': 'djangojs', 
    'packages': ('wrnpro',), 
} 

(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), 

như một phần của các url của tôi.

Nếu tôi chạy ứng dụng và gọi http://localhost:8000/jsi18n/ tôi nhận được

/* gettext library */ 
var catalog = new Array(); 
function pluralidx(count) { return (count == 1) ? 0 : 1; } 
… 

Cho đến nay tôi đã cố gắng mọi biến các thiết lập vv Tôi có thể tìm thấy, nhưng các cửa hàng vẫn trống.

Khi chạy make messagescompile messages chuỗi JavaScript của tôi nhận chuỗi văn bản được tìm thấy và dịch. Các tập tin django.po và .mo nằm trong thư mục locale.

Bất kỳ ai?

+0

Không có đề xuất nào có vẻ hoạt động. Tôi để nó một mình trong một tuần hoặc lâu hơn, cài đặt một số cập nhật cho hầu như mọi thứ, và khi tôi ngồi xuống vào một buổi sáng thứ Sáu để cuối cùng thoát khỏi vấn đề này, nó đã tự sửa. Hoàn toàn kinh ngạc khi thấy rằng các bản dịch JavaScript hiện đang hoạt động và chúng đã hoạt động kể từ đó. Tôi không biết điều gì đã kích hoạt điều này. Thư mục locale của tôi vẫn ở cấp dự án. – dyve

Trả lời

1

Đối với ngôn ngữ của người dùng hiện tại của bạn, bạn có bản dịch hoàn chỉnh nào không, hoặc bạn chỉ có sơ khai? Danh mục sẽ chỉ chứa các giá trị cho các chuỗi đã thực sự được dịch.

ví dụ, nếu bạn có điều này trong tập tin po tiếng Anh của bạn:

#: static/js/events.js:159 
msgid "Open side panel" 
msgstr "" 

Không có gì sẽ xuất hiện trong danh mục (nếu bạn đang truy cập nó bằng tiếng Anh). Nhưng nếu bạn có điều này:

#: static/js/events.js:159 
msgid "Open side panel" 
msgstr "Open side panel" 

Sau đó sẽ có.

+0

Tôi có bản dịch 100% trên cả danh mục django và djanojs, tôi dịch từ tiếng Anh sang tiếng Hà Lan (nl). – dyve

3

Tôi đã gặp vấn đề tương tự và khi tôi di chuyển thư mục miền địa phương từ thư mục dự án sang thư mục ứng dụng của tôi, nó có vẻ như cần phải chạy ở cấp ứng dụng. Tôi không nghĩ bạn sẽ cần LOCALE_PATHS trong tệp cài đặt của mình.

5

Đây là những gì đã kết thúc làm việc cho tôi:

js_info_dict = { 
    'domain': 'django', 
    'packages': None, 
} 

urlpatterns = [ 
    url(r'^jsi18n/$', javascript_catalog, js_info_dict, name='javascript-catalog'), 
    # ... 
] 

Vẫn không làm việc? Mẹo khắc phục sự cố:

Tôi không biết lý do tại sao tính năng này hoạt động, nhưng tôi có thể cho bạn biết cách tôi tìm ra cách làm cho nó hoạt động. Nếu bạn sử dụng cùng một kỹ thuật khắc phục sự cố, có thể bạn cũng sẽ tìm thấy một cách.Tôi sử dụng Python debugger, như thế này:

def javascript_catalog_pdb(*args, **kwargs): 
    import pdb 
    pdb.set_trace() 
    return javascript_catalog(*args, **kwargs) 

url_patterns = [ 
    url(r'^jsi18n/$', javascript_catalog_pdb, js_info_dict, name='javascript-catalog'), 
    ... 
] 

Sau đó, sử dụng PDB, tôi bước vào javascript_catalog, cho đến khi tôi đến dòng:

catalog, plural = get_javascript_catalog(locale, domain, packages) 

sau đó tôi đã thử nghiệm với các giá trị khác nhau cho domainpackages, phải có trong trình gỡ lỗi, cho đến khi tôi phát hiện ra các giá trị tôi cần.

Các vấn đề liên quan