2011-04-28 19 views
7

Tengo un sitio web que está escrito en holandés. Ahora tengo que proporcionar un segundo idioma para ese sitio web que es francés.Django: idioma predeterminado i18n

Rodeé todo el texto que se debe traducir con la función gettext, creé los archivos po y los compilé en archivos mo. También creé una vista que establece la sesión django_language con el código de idioma apropiado. Así que ahora la versión en francés está funcionando, pero no puedo volver a la versión holandesa.

Así que me preguntaba si también necesito crear un archivo po/mo para la versión holandesa. El texto que está pasando a gettext ya está en holandés. ¿Hay alguna manera de decir usar el 'texto predeterminado'?

Esta es la vista que utilizo para añadir el código de idioma a mi sesión:

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) 

En mis plantillas que utilizo las siguientes direcciones: cadenas de idioma

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

Creo que no se puede cambiar a la parte posterior holandesa no tiene nada que ver con los archivos de configuración regional, pero con la forma de cambiar el idioma (vista, middleware)? ¿Puedes darnos más detalles sobre eso? Y sobre su pregunta: no, no necesita proporcionar archivos de configuración regional para el idioma en el que escribió las cadenas traducibles. –

+0

Estoy usando el django.middleware.locale.LocaleMiddleware. Agregaré la vista que cambia la sesión a mi pregunta. – Pickels

Respuesta

13

predeterminados no se almacenan en po/mo archivos, van directamente en el código y las plantillas, parece que tiene este derecho.

Puede volver a ella, estableciendo la variable de sesión django_language de nuevo en holandés.

Asegurar, que tiene la configuración de establecer la manera correcta:

LANGUAGE_CODE = 'nl' #default language 

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

No se olvide, que usted no tiene que escribir código para cambiar entre los idiomas por su cuenta propia. Es mejor utilizar la vista especial Django (cita de django book):

para su conveniencia, Django incluye una vista, django.views.i18n.set_language, que establece la preferencia de idioma del usuario y redirige a la página anterior.

activar esta vista agregando la siguiente línea a tu URLconf:

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

Esto lo hizo funcionar para mí, muchas gracias. Me faltaba la parte URLconf. – DrKaoliN

2

esta pregunta y las respuestas podrían ser útiles - set language within a django view

No se olvide de utilizar translation.activate(lang_code), esto es realmente importante.

Puede usar la forma estándar de cambiar idiomas con el método de publicación o escribir su propio middleware y cambiarlo, por ejemplo, en la url.

Cheers, Ignas

1

Si utiliza {% url web-language 'nl-nl' %} como esto es 'nl-nl' en su args (args[0]), no en su kwargs. Para kwargs debe usar sintaxis como {% url web-language language='nl-nl' %}. Entonces tu vista debería funcionar. Es de esperar que su urlconf coincida con la forma en que la vista lo maneja.

+0

Gracias por atrapar ese error. – Pickels

Cuestiones relacionadas