2011-04-28 1 views
7

Ho un sito Web che è scritto in olandese. Ora devo fornire una seconda lingua per quel sito web che è francese.Django: lingua predefinita i18n

Così ho circondato tutto il testo che deve essere tradotto con la funzione gettext, creato i file po e compilato quelli per mo file. Ho anche creato una vista che imposta la sessione django_language sul codice lingua appropriato. Quindi ora la versione francese sta funzionando, ma non posso tornare alla versione olandese.

Quindi mi stavo chiedendo devo creare anche un file po/mo per la versione olandese? Il testo che è passato a gettext è già in olandese. C'è un modo per dire usa il 'testo predefinito'?

Questa è la vista che uso per aggiungere il codice della lingua per la mia sessione:

class LanguagePickerView(RedirectView): 
    url = '/' 

    def get(self,request,*args, **kwargs): 
     request.session['django_language'] = self.kwargs.get('language') 
     return super(LanguagePickerView, self).get(request, args, kwargs) 

Nei miei modelli che uso i seguenti URL: stringhe lingua

<a href='{% url web-language 'nl-nl' %}'>NL</a> 
<a href='{% url web-language 'fr' %}'>fr</a> 
+0

Penso che non è possibile passare al dutch back non ha nulla a che fare con i file locali, ma con il modo in cui si cambia la lingua (vista, middleware)? Puoi dare qualche dettaglio in merito? E sulla tua domanda: no, non è necessario fornire i file locali per la lingua in cui hai scritto le stringhe traducibili. –

+0

Sto usando il django.middleware.locale.LocaleMiddleware. Aggiungerò la vista che cambia la sessione alla mia domanda. – Pickels

risposta

13

predefinite non vengono memorizzati in po/mo, vanno direttamente nel codice e nei template - sembra che tu abbia questo diritto.

È possibile tornare ad esso, impostando la variabile di sessione django_language di nuovo in olandese.

garantire, di avere le impostazioni impostate nel modo giusto:

LANGUAGE_CODE = 'nl' #default language 

LANGUAGES = (
    ('nl', _('Dutch')), 
    ('fr', _('French')), 
) 

Non dimenticate, che non c'è bisogno di scrivere il codice per passare da una lingua da voi stessi. Meglio usare la vista speciale di Django (citazione da django book):

Per comodità, Django ha una vista, django.views.i18n.set_language, che imposta la preferenza della lingua di un utente e reindirizza alla pagina precedente.

Attivare questo punto di vista aggiungendo la seguente riga al URLconf:

(r'^i18n/', include('django.conf.urls.i18n')), 
+0

Questo ha funzionato per me, grazie mille. Mi mancava la parte URLconf. – DrKaoliN

2

questa domanda e le risposte potrebbero essere utili - set language within a django view

Non dimenticare di usare translation.activate(lang_code), questo è veramente importante.

È possibile utilizzare il metodo standard per modificare le lingue con il metodo post o scrivere il proprio middleware e modificarlo, ad esempio, nell'URL.

Cheers, Ignas

1

Se si utilizza {% url web-language 'nl-nl' %} come questo 'nl-nl' è nel vostro args (args[0]), non nel vostro kwargs. Per kwargs si dovrebbe usare la sintassi come {% url web-language language='nl-nl' %}. Quindi la tua vista dovrebbe funzionare. Spero che il tuo urlconf corrisponda al modo in cui la vista si sta occupando di esso.

+0

Grazie per aver catturato quell'errore. – Pickels