2012-11-07 15 views
7

Continuo a finire con un catalogo vuoto nel mio jsi18n JavaScript. Ho provato tutte le soluzioni su StackOverflow incluso Empty catalog when internationalizing JavaScript code, ma il catalogo è ancora vuoto.Django traduzione JavaScript catalogo vuoto (i18n/jsi18n)

La mia configurazione è questa:

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

In settings.py devo

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

SITE_ROOT è il percorso assoluto al mio progetto dir, quindi questo si traduce in

negli URL. py I have

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

e

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

come parte del mio url.

Se eseguo l'applicazione e chiamo http://localhost:8000/jsi18n/ ottengo

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

Finora ho provato ogni variazione di impostazioni ecc che ho trovato, ma il catalogo rimane vuota.

Quando si esegue make messages e compile messages, le stringhe di testo JavaScript vengono trovate e tradotte. I file django.po e .mo si trovano nella directory locale.

Chiunque?

+0

Nessuno dei suggerimenti sembrava funzionare. L'ho lasciato da solo per una settimana circa, ho installato diversi aggiornamenti su quasi tutto, e quando mi sono seduto il venerdì mattina per liberarmi definitivamente di questo problema, si è risolto da solo. Completamente sbalordito, ho visto che le traduzioni JavaScript ora stavano funzionando e da allora hanno funzionato. Non ho idea di cosa lo abbia scatenato. La mia directory locale è ancora a livello di progetto. – dyve

risposta

1

Per la lingua del tuo attuale utente, hai delle traduzioni completate o hai solo degli stub? Il catalogo conterrà solo i valori per le stringhe che sono state effettivamente tradotte.

cioè, se si dispone di questo nel tuo inglese file po:

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

Niente apparirà nel catalogo (se si sta accedendo in inglese). Ma se avete questo:

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

Poi ci sarà.

+0

Ho una traduzione al 100% su entrambi i cataloghi django e djanojs, traduco dall'inglese (en) all'olandese (nl). – dyve

3

Ho avuto lo stesso problema e quando ho spostato la mia directory locale dalla mia cartella di progetto alla mia cartella di app ha funzionato, quindi sembra che i makemessages debbano essere eseguiti a livello di app. Non penso che avrai bisogno di LOCALE_PATHS nel tuo file delle impostazioni.

5

Questo è quello che ha finito per lavorare per me:

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

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

Non funziona ancora? Suggerimenti per la risoluzione dei problemi:

Non so in modo particolare perché funzioni, ma posso dirvi come ho scoperto come farlo funzionare. Se usi la stessa tecnica di risoluzione dei problemi, forse troverai anche un modo.Ho usato Python debugger, come questo:

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'), 
    ... 
] 

Quindi, utilizzando PDB, ho fatto un passo in javascript_catalog, fino a quando ho avuto modo di linea:

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

ho poi sperimentato con valori diversi per domain e packages, a destra lì nel debugger, fino a quando ho scoperto i valori di cui avevo bisogno.