taggit python django internationalization django-i18n

python - django taggit



¿Cómo mantener diferentes versiones de países del mismo idioma en Django? (3)

¿Puedo sugerirle que ponga un punto de interrupción en la clase LocaleMiddleware?

De esta forma, es posible que descubras una pista de qué cosa realmente te salió bien obtener el idioma correcto.

Sigan de acuerdo con el código fuente de la clase LocaleMiddleware y el modo en que Django descubre la preferencia de idioma , puede haber tantas cosas que puedan afectar el resultado.

Me gustaría tener algunas versiones diferentes del mismo idioma en Django, personalizadas para diferentes países (por ejemplo, locale/en , locale/en_CA , locale/en_US , etc.). Si no hay un idioma para un país específico, esperaría usar la versión de idioma por defecto ( locale/en )).

Luego, en el archivo de configuración de cada sitio, especifico LANGUAGE_CODE y LANGUAGES .

Por alguna razón, incluso si especifico las siguientes configuraciones, las traducciones de locale/en_US aún se usan:

LANGUAGE_CODE = ''en'' LANGUAGES = ( (''en'', ugettext(''English'')), )

Aunque claramente especifico que el código de idioma debe ser en (no en-us ).

¿Me estoy perdiendo de algo? Ya intenté encontrar la respuesta en varios lugares, incluida la documentación de Django.


Esta es una peculiaridad de Python (no específicamente de Django) y del módulo gettext.

El ticket 8626 se generó en el rastreador de problemas de Django en el momento del lanzamiento de la versión 1.0 y, después de algunas sugerencias y debates, los desarrolladores de Django consideraron que "no se solucionará".

Hay sugerencias en el hilo del ticket para usar ''en-en'' como el predeterminado. Mi memoria es un poco difícil, pero si recuerdo correctamente, este enfoque no funcionó bien con otras partes de mi herramienta i18n (por ejemplo, la biblioteca de pox). Me di por vencido y me conformé con usar en-US como predeterminado para el proyecto y enumerando las otras variantes (por ejemplo, en au) como alternativas.


Una solución al problema sería agregar el siguiente fragmento a su archivo settings.py .

import locale locale.locale_alias.pop(''en'', None)

Crédito especial para Venelin Stoykov que pudo investigar el comportamiento del módulo de locale Python.