2010-04-14 9 views
13

Ho un problema con le traduzioni di django.django internationalization and translations issue

Problema 1 - Ho aggiornato stringa nel django.po file, ma il cambiamento non viene visualizzato sulla pagina web.

Problema 2 - Ho creato il mio file locale con django-admin.py makemessages -l et, aggiunto la stringa di traduzione in un file, ma anch'essi non appaiono sulla pagina.

Non penso che questo sia un problema, perché le traduzioni dal file django.po appaiono sul sito web, sono solo le modifiche e le traduzioni dal mio file generato che non appaiono.

Edit: mio settings.py contiene questo:

gettext = lambda s: s 
LANGUAGE_CODE = 'et' 

LANGUAGES = (
      ('et', gettext('Estonian')), 
      ) 

i miei file di localizzazione sono in

/path/to/project/locale/et/LC_MESSAGES/ 

ei file sono

django.mo e django.po

il file a cui mi riferisco nel problema 1 è django own et transaltion, che io cambiato.

+0

Sei pronto per il documento su [i18n] (http://docs.djangoproject.com/en/1.1/topics/i18n/internationalization/#topics-i18n-internationalization)? Sto indovinando, ma abiliti il ​​tag i18n nei template? Sei sicuro che il tuo file .po sia nel percorso giusto? Puoi scrivere più informazioni? – diegueus9

+0

Ebbene si. i18n è abilitato nei template con {% load i18n%}. Poiché il file django.po è nel percorso corretto (problema 1) non penso sia il problema di abilitare o caricare i18n. Dato che, come ho detto, le traduzioni esistenti vengono caricate nel modello. Ma come faccio a sapere se i file locali del problema 2 sono nella posizione corretta? Sono nel posto dove sono stati generati da django-admin.py makemessages -l et –

+0

leggi questo: http://docs.djangoproject.com/en/1.1/topics/i18n/localization/#message-files il il percorso sarà: your_project/locale/et/LC_MESSAGES/django.po. – diegueus9

risposta

25

Bene, ho ottenuto questo stesso errore pochi istanti fa. Ho risolto il problema cancellando il tag "#, fuzzy" sulle stringhe di traduzione nei miei file django.po. Sembra che il testo tradotto non sia pubblicato se ha ottenuto questo tag, quindi assicurati di tradurre il testo e quindi di eliminare questa riga.

Ecco un esempio di un testo tradotto non server su un file po:

 #: course/models.py:13 
    #, fuzzy 
    msgid "code" 
    msgstr "código" 

Quindi, basta eliminare la bandiera e lasciare in questo modo:

 #: course/models.py:13 
    msgid "code" 
    msgstr "código" 

Spero che questo lavoro per tu. In bocca al lupo!

Riferimento: http://share-experiences.com/blog/what-fuzzy-means-python-django-gettext/

PD: So che hai questo problema qualche mese fa, ma lascio questa risposta causa che non abbiamo mai sentito, se hai questo problema risolto.

+4

ho anche tirato alcuni dei miei capelli a causa di quelle 'fuzzies' :) –

+1

Beh, questo non ha funzionato per me. Django sta lavorando in un modo misterioso al momento :( – shailenTJ

+0

Ugh! Ho appena passato mezz'ora a cercare di capirlo ed è stato dannatamente sfocato – 3cheesewheel

-2

Verificare l'impostazione USE_I18N. More info. Comunque, credo che per default è True ...

7

I file di traduzione (PO) vengono caricati in memoria una sola volta, le modifiche ai file PO non vengono raccolti da Django. Per caricare i nuovi file di traduzione è necessario riavviare Django (ad esempio, arrestare/avviare runserver, Apache o NGINX).

+0

Che devi riavviare il server django è anche la mia esperienza, ma è strano che non sia menzionato da nessuna parte nella documentazione – qff

12

Si è verificato un problema identico/simile con le traduzioni non visualizzate. Impostazione dei LOCALE_PATHS risolto il problema:

# settings.py 
USE_I18N = True 
USE_L10N = True 

LOCALE_PATHS = (
    '/path/to/djangoapp/locale', 
) 
+0

Hmm yeah django ha ricevuto 4 aggiornamenti importanti da quando ho postato la domanda. I percorsi locali sono in effetti una delle correzioni al problema delle traduzioni e sono stati aggiunti in django 1.4. –

+2

Ancora meglio raccomanderei 'os.path.join (BASE_DIR, 'locale'),'. ** Non ** usa percorsi relativi come se lavorassero in dev, potrebbero non funzionare dal vivo a seconda del server, ecc. L'ho imparato nel modo più duro. – Wtower

0

Assicurarsi di utilizzare ugettext_lazy e non ugettext

0

Se si utilizza gettext.translation per ottenere le traduzioni, i.e:

text_de = gettext.translation('django', locale_dir, ['de'], fallback=True).ugettext('Welcome to my site') 

... e la vostra traduzione funziona su server di sviluppo, ma non sulla produzione, si noti che locale_dir deve puntare alla directory locale. Potrebbe trovarsi altrove su uno dei sistemi. Abbiamo trascorso 2 ore trovandolo.

1

Un altro motivo per cui le traduzioni di Django non funzionano è la compilazione del file .po con una versione di Python diversa da quella utilizzata per eseguire l'applicazione. Assicurati di utilizzare la stessa versione.